@netwin/angular-datetime-picker 18.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +225 -0
- package/assets/style/picker.min.css +1 -0
- package/esm2022/lib/date-time/adapter/date-time-adapter.class.mjs +121 -0
- package/esm2022/lib/date-time/adapter/date-time-format.class.mjs +7 -0
- package/esm2022/lib/date-time/adapter/native-date-time-adapter.class.mjs +261 -0
- package/esm2022/lib/date-time/adapter/native-date-time-format.class.mjs +10 -0
- package/esm2022/lib/date-time/adapter/native-date-time.module.mjs +39 -0
- package/esm2022/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-adapter.class.mjs +235 -0
- package/esm2022/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-format.class.mjs +10 -0
- package/esm2022/lib/date-time/calendar-body.component.mjs +147 -0
- package/esm2022/lib/date-time/calendar-month-view.component.mjs +451 -0
- package/esm2022/lib/date-time/calendar-multi-year-view.component.mjs +361 -0
- package/esm2022/lib/date-time/calendar-year-view.component.mjs +371 -0
- package/esm2022/lib/date-time/calendar.component.mjs +383 -0
- package/esm2022/lib/date-time/date-time-inline.component.mjs +296 -0
- package/esm2022/lib/date-time/date-time-picker-container.component.mjs +420 -0
- package/esm2022/lib/date-time/date-time-picker-input.directive.mjs +638 -0
- package/esm2022/lib/date-time/date-time-picker-intl.service.mjs +62 -0
- package/esm2022/lib/date-time/date-time-picker-trigger.directive.mjs +69 -0
- package/esm2022/lib/date-time/date-time-picker.animations.mjs +21 -0
- package/esm2022/lib/date-time/date-time-picker.component.mjs +580 -0
- package/esm2022/lib/date-time/date-time.class.mjs +180 -0
- package/esm2022/lib/date-time/date-time.module.mjs +91 -0
- package/esm2022/lib/date-time/numberedFixLen.pipe.mjs +28 -0
- package/esm2022/lib/date-time/options-provider.mjs +34 -0
- package/esm2022/lib/date-time/timer-box.component.mjs +135 -0
- package/esm2022/lib/date-time/timer.component.mjs +292 -0
- package/esm2022/lib/dialog/dialog-config.class.mjs +56 -0
- package/esm2022/lib/dialog/dialog-container.component.mjs +230 -0
- package/esm2022/lib/dialog/dialog-ref.class.mjs +123 -0
- package/esm2022/lib/dialog/dialog.module.mjs +34 -0
- package/esm2022/lib/dialog/dialog.service.mjs +245 -0
- package/esm2022/lib/utils/array.utils.mjs +12 -0
- package/esm2022/lib/utils/constants.mjs +55 -0
- package/esm2022/lib/utils/date.utils.mjs +49 -0
- package/esm2022/lib/utils/index.mjs +5 -0
- package/esm2022/lib/utils/object.utils.mjs +26 -0
- package/esm2022/netwin-angular-datetime-picker.mjs +5 -0
- package/esm2022/public_api.mjs +25 -0
- package/fesm2022/netwin-angular-datetime-picker.mjs +5913 -0
- package/fesm2022/netwin-angular-datetime-picker.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/date-time/adapter/date-time-adapter.class.d.ts +193 -0
- package/lib/date-time/adapter/date-time-format.class.d.ts +15 -0
- package/lib/date-time/adapter/native-date-time-adapter.class.d.ts +69 -0
- package/lib/date-time/adapter/native-date-time-format.class.d.ts +5 -0
- package/lib/date-time/adapter/native-date-time.module.d.ts +12 -0
- package/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-adapter.class.d.ts +64 -0
- package/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-format.class.d.ts +5 -0
- package/lib/date-time/calendar-body.component.d.ts +80 -0
- package/lib/date-time/calendar-month-view.component.d.ts +144 -0
- package/lib/date-time/calendar-multi-year-view.component.d.ts +111 -0
- package/lib/date-time/calendar-year-view.component.d.ts +123 -0
- package/lib/date-time/calendar.component.d.ts +155 -0
- package/lib/date-time/date-time-inline.component.d.ts +105 -0
- package/lib/date-time/date-time-picker-container.component.d.ts +130 -0
- package/lib/date-time/date-time-picker-input.directive.d.ts +167 -0
- package/lib/date-time/date-time-picker-intl.service.d.ts +51 -0
- package/lib/date-time/date-time-picker-trigger.directive.d.ts +24 -0
- package/lib/date-time/date-time-picker.animations.d.ts +8 -0
- package/lib/date-time/date-time-picker.component.d.ts +177 -0
- package/lib/date-time/date-time.class.d.ts +106 -0
- package/lib/date-time/date-time.module.d.ts +23 -0
- package/lib/date-time/numberedFixLen.pipe.d.ts +10 -0
- package/lib/date-time/options-provider.d.ts +23 -0
- package/lib/date-time/timer-box.component.d.ts +46 -0
- package/lib/date-time/timer.component.d.ts +132 -0
- package/lib/dialog/dialog-config.class.d.ts +169 -0
- package/lib/dialog/dialog-container.component.d.ts +59 -0
- package/lib/dialog/dialog-ref.class.d.ts +51 -0
- package/lib/dialog/dialog.module.d.ts +11 -0
- package/lib/dialog/dialog.service.d.ts +76 -0
- package/lib/utils/array.utils.d.ts +5 -0
- package/lib/utils/constants.d.ts +19 -0
- package/lib/utils/date.utils.d.ts +12 -0
- package/lib/utils/index.d.ts +4 -0
- package/lib/utils/object.utils.d.ts +11 -0
- package/package.json +51 -0
- package/public_api.d.ts +24 -0
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* date-time-inline.component
|
|
3
|
+
*/
|
|
4
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Inject, Input, Optional, Output, ViewChild } from '@angular/core';
|
|
5
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
6
|
+
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
7
|
+
import { OwlDateTime } from './date-time.class';
|
|
8
|
+
import { OWL_DATE_TIME_FORMATS } from './adapter/date-time-format.class';
|
|
9
|
+
import { OwlDateTimeContainerComponent } from './date-time-picker-container.component';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "./adapter/date-time-adapter.class";
|
|
12
|
+
import * as i2 from "./date-time-picker-container.component";
|
|
13
|
+
export const OWL_DATETIME_VALUE_ACCESSOR = {
|
|
14
|
+
provide: NG_VALUE_ACCESSOR,
|
|
15
|
+
useExisting: forwardRef(() => OwlDateTimeInlineComponent),
|
|
16
|
+
multi: true
|
|
17
|
+
};
|
|
18
|
+
export class OwlDateTimeInlineComponent extends OwlDateTime {
|
|
19
|
+
get pickerType() {
|
|
20
|
+
return this._pickerType;
|
|
21
|
+
}
|
|
22
|
+
set pickerType(val) {
|
|
23
|
+
if (val !== this._pickerType) {
|
|
24
|
+
this._pickerType = val;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
get disabled() {
|
|
28
|
+
return !!this._disabled;
|
|
29
|
+
}
|
|
30
|
+
set disabled(value) {
|
|
31
|
+
this._disabled = coerceBooleanProperty(value);
|
|
32
|
+
}
|
|
33
|
+
get selectMode() {
|
|
34
|
+
return this._selectMode;
|
|
35
|
+
}
|
|
36
|
+
set selectMode(mode) {
|
|
37
|
+
if (mode !== 'single' &&
|
|
38
|
+
mode !== 'range' &&
|
|
39
|
+
mode !== 'rangeFrom' &&
|
|
40
|
+
mode !== 'rangeTo') {
|
|
41
|
+
throw Error('OwlDateTime Error: invalid selectMode value!');
|
|
42
|
+
}
|
|
43
|
+
this._selectMode = mode;
|
|
44
|
+
}
|
|
45
|
+
get startAt() {
|
|
46
|
+
if (this._startAt) {
|
|
47
|
+
return this._startAt;
|
|
48
|
+
}
|
|
49
|
+
if (this.selectMode === 'single') {
|
|
50
|
+
return this.value || null;
|
|
51
|
+
}
|
|
52
|
+
else if (this.selectMode === 'range' ||
|
|
53
|
+
this.selectMode === 'rangeFrom') {
|
|
54
|
+
return this.values[0] || null;
|
|
55
|
+
}
|
|
56
|
+
else if (this.selectMode === 'rangeTo') {
|
|
57
|
+
return this.values[1] || null;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
set startAt(date) {
|
|
64
|
+
this._startAt = this.getValidDate(this.dateTimeAdapter.deserialize(date));
|
|
65
|
+
}
|
|
66
|
+
get endAt() {
|
|
67
|
+
if (this._endAt) {
|
|
68
|
+
return this._endAt;
|
|
69
|
+
}
|
|
70
|
+
if (this.selectMode === 'single') {
|
|
71
|
+
return this.value || null;
|
|
72
|
+
}
|
|
73
|
+
else if (this.selectMode === 'range' ||
|
|
74
|
+
this.selectMode === 'rangeFrom') {
|
|
75
|
+
return this.values[1] || null;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
set endAt(date) {
|
|
82
|
+
this._endAt = this.getValidDate(this.dateTimeAdapter.deserialize(date));
|
|
83
|
+
}
|
|
84
|
+
get dateTimeFilter() {
|
|
85
|
+
return this._dateTimeFilter;
|
|
86
|
+
}
|
|
87
|
+
set dateTimeFilter(filter) {
|
|
88
|
+
this._dateTimeFilter = filter;
|
|
89
|
+
}
|
|
90
|
+
get minDateTime() {
|
|
91
|
+
return this._min || null;
|
|
92
|
+
}
|
|
93
|
+
set minDateTime(value) {
|
|
94
|
+
this._min = this.getValidDate(this.dateTimeAdapter.deserialize(value));
|
|
95
|
+
this.changeDetector.markForCheck();
|
|
96
|
+
}
|
|
97
|
+
get maxDateTime() {
|
|
98
|
+
return this._max || null;
|
|
99
|
+
}
|
|
100
|
+
set maxDateTime(value) {
|
|
101
|
+
this._max = this.getValidDate(this.dateTimeAdapter.deserialize(value));
|
|
102
|
+
this.changeDetector.markForCheck();
|
|
103
|
+
}
|
|
104
|
+
get value() {
|
|
105
|
+
return this._value;
|
|
106
|
+
}
|
|
107
|
+
set value(value) {
|
|
108
|
+
value = this.dateTimeAdapter.deserialize(value);
|
|
109
|
+
value = this.getValidDate(value);
|
|
110
|
+
this._value = value;
|
|
111
|
+
this.selected = value;
|
|
112
|
+
}
|
|
113
|
+
get values() {
|
|
114
|
+
return this._values;
|
|
115
|
+
}
|
|
116
|
+
set values(values) {
|
|
117
|
+
if (values && values.length > 0) {
|
|
118
|
+
values = values.map(v => {
|
|
119
|
+
v = this.dateTimeAdapter.deserialize(v);
|
|
120
|
+
v = this.getValidDate(v);
|
|
121
|
+
return v ? this.dateTimeAdapter.clone(v) : null;
|
|
122
|
+
});
|
|
123
|
+
this._values = [...values];
|
|
124
|
+
this.selecteds = [...values];
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
this._values = [];
|
|
128
|
+
this.selecteds = [];
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
get selected() {
|
|
132
|
+
return this._selected;
|
|
133
|
+
}
|
|
134
|
+
set selected(value) {
|
|
135
|
+
this._selected = value;
|
|
136
|
+
this.changeDetector.markForCheck();
|
|
137
|
+
}
|
|
138
|
+
get selecteds() {
|
|
139
|
+
return this._selecteds;
|
|
140
|
+
}
|
|
141
|
+
set selecteds(values) {
|
|
142
|
+
this._selecteds = values;
|
|
143
|
+
this.changeDetector.markForCheck();
|
|
144
|
+
}
|
|
145
|
+
get opened() {
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
get pickerMode() {
|
|
149
|
+
return 'inline';
|
|
150
|
+
}
|
|
151
|
+
get isInSingleMode() {
|
|
152
|
+
return this._selectMode === 'single';
|
|
153
|
+
}
|
|
154
|
+
get isInRangeMode() {
|
|
155
|
+
return (this._selectMode === 'range' ||
|
|
156
|
+
this._selectMode === 'rangeFrom' ||
|
|
157
|
+
this._selectMode === 'rangeTo');
|
|
158
|
+
}
|
|
159
|
+
get owlDTInlineClass() {
|
|
160
|
+
return true;
|
|
161
|
+
}
|
|
162
|
+
constructor(changeDetector, dateTimeAdapter, dateTimeFormats) {
|
|
163
|
+
super(dateTimeAdapter, dateTimeFormats);
|
|
164
|
+
this.changeDetector = changeDetector;
|
|
165
|
+
this.dateTimeAdapter = dateTimeAdapter;
|
|
166
|
+
this.dateTimeFormats = dateTimeFormats;
|
|
167
|
+
/**
|
|
168
|
+
* Set the type of the dateTime picker
|
|
169
|
+
* 'both' -- show both calendar and timer
|
|
170
|
+
* 'calendar' -- show only calendar
|
|
171
|
+
* 'timer' -- show only timer
|
|
172
|
+
*/
|
|
173
|
+
this._pickerType = 'both';
|
|
174
|
+
this._disabled = false;
|
|
175
|
+
this._selectMode = 'single';
|
|
176
|
+
this._values = [];
|
|
177
|
+
/**
|
|
178
|
+
* Emits selected year in multi-year view
|
|
179
|
+
* This doesn't imply a change on the selected date.
|
|
180
|
+
* */
|
|
181
|
+
this.yearSelected = new EventEmitter();
|
|
182
|
+
/**
|
|
183
|
+
* Emits selected month in year view
|
|
184
|
+
* This doesn't imply a change on the selected date.
|
|
185
|
+
* */
|
|
186
|
+
this.monthSelected = new EventEmitter();
|
|
187
|
+
/**
|
|
188
|
+
* Emits selected date
|
|
189
|
+
* */
|
|
190
|
+
this.dateSelected = new EventEmitter();
|
|
191
|
+
this._selecteds = [];
|
|
192
|
+
this.onModelChange = () => { };
|
|
193
|
+
this.onModelTouched = () => { };
|
|
194
|
+
}
|
|
195
|
+
ngOnInit() {
|
|
196
|
+
this.container.picker = this;
|
|
197
|
+
}
|
|
198
|
+
writeValue(value) {
|
|
199
|
+
if (this.isInSingleMode) {
|
|
200
|
+
this.value = value;
|
|
201
|
+
this.container.pickerMoment = value;
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
this.values = value;
|
|
205
|
+
this.container.pickerMoment = this._values[this.container.activeSelectedIndex];
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
registerOnChange(fn) {
|
|
209
|
+
this.onModelChange = fn;
|
|
210
|
+
}
|
|
211
|
+
registerOnTouched(fn) {
|
|
212
|
+
this.onModelTouched = fn;
|
|
213
|
+
}
|
|
214
|
+
setDisabledState(isDisabled) {
|
|
215
|
+
this.disabled = isDisabled;
|
|
216
|
+
}
|
|
217
|
+
select(date) {
|
|
218
|
+
if (this.disabled) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
if (Array.isArray(date)) {
|
|
222
|
+
this.values = [...date];
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
this.value = date;
|
|
226
|
+
}
|
|
227
|
+
this.onModelChange(date);
|
|
228
|
+
this.onModelTouched();
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Emits the selected year in multi-year view
|
|
232
|
+
* */
|
|
233
|
+
selectYear(normalizedYear) {
|
|
234
|
+
this.yearSelected.emit(normalizedYear);
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Emits selected month in year view
|
|
238
|
+
* */
|
|
239
|
+
selectMonth(normalizedMonth) {
|
|
240
|
+
this.monthSelected.emit(normalizedMonth);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Emits the selected date
|
|
244
|
+
* */
|
|
245
|
+
selectDate(normalizedDate) {
|
|
246
|
+
this.dateSelected.emit(normalizedDate);
|
|
247
|
+
}
|
|
248
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: OwlDateTimeInlineComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.DateTimeAdapter, optional: true }, { token: OWL_DATE_TIME_FORMATS, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
249
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.3", type: OwlDateTimeInlineComponent, selector: "owl-date-time-inline", inputs: { pickerType: "pickerType", disabled: "disabled", selectMode: "selectMode", startAt: "startAt", endAt: "endAt", dateTimeFilter: ["owlDateTimeFilter", "dateTimeFilter"], minDateTime: ["min", "minDateTime"], maxDateTime: ["max", "maxDateTime"], value: "value", values: "values" }, outputs: { yearSelected: "yearSelected", monthSelected: "monthSelected", dateSelected: "dateSelected" }, host: { properties: { "class.owl-dt-inline": "owlDTInlineClass" } }, providers: [OWL_DATETIME_VALUE_ACCESSOR], viewQueries: [{ propertyName: "container", first: true, predicate: OwlDateTimeContainerComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<owl-date-time-container></owl-date-time-container>", styles: [""], dependencies: [{ kind: "component", type: i2.OwlDateTimeContainerComponent, selector: "owl-date-time-container", exportAs: ["owlDateTimeContainer"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
250
|
+
}
|
|
251
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: OwlDateTimeInlineComponent, decorators: [{
|
|
252
|
+
type: Component,
|
|
253
|
+
args: [{ selector: 'owl-date-time-inline', host: {
|
|
254
|
+
'[class.owl-dt-inline]': 'owlDTInlineClass'
|
|
255
|
+
}, changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, providers: [OWL_DATETIME_VALUE_ACCESSOR], template: "<owl-date-time-container></owl-date-time-container>" }]
|
|
256
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.DateTimeAdapter, decorators: [{
|
|
257
|
+
type: Optional
|
|
258
|
+
}] }, { type: undefined, decorators: [{
|
|
259
|
+
type: Optional
|
|
260
|
+
}, {
|
|
261
|
+
type: Inject,
|
|
262
|
+
args: [OWL_DATE_TIME_FORMATS]
|
|
263
|
+
}] }], propDecorators: { container: [{
|
|
264
|
+
type: ViewChild,
|
|
265
|
+
args: [OwlDateTimeContainerComponent, { static: true }]
|
|
266
|
+
}], pickerType: [{
|
|
267
|
+
type: Input
|
|
268
|
+
}], disabled: [{
|
|
269
|
+
type: Input
|
|
270
|
+
}], selectMode: [{
|
|
271
|
+
type: Input
|
|
272
|
+
}], startAt: [{
|
|
273
|
+
type: Input
|
|
274
|
+
}], endAt: [{
|
|
275
|
+
type: Input
|
|
276
|
+
}], dateTimeFilter: [{
|
|
277
|
+
type: Input,
|
|
278
|
+
args: ['owlDateTimeFilter']
|
|
279
|
+
}], minDateTime: [{
|
|
280
|
+
type: Input,
|
|
281
|
+
args: ['min']
|
|
282
|
+
}], maxDateTime: [{
|
|
283
|
+
type: Input,
|
|
284
|
+
args: ['max']
|
|
285
|
+
}], value: [{
|
|
286
|
+
type: Input
|
|
287
|
+
}], values: [{
|
|
288
|
+
type: Input
|
|
289
|
+
}], yearSelected: [{
|
|
290
|
+
type: Output
|
|
291
|
+
}], monthSelected: [{
|
|
292
|
+
type: Output
|
|
293
|
+
}], dateSelected: [{
|
|
294
|
+
type: Output
|
|
295
|
+
}] } });
|
|
296
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLWlubGluZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9waWNrZXIvc3JjL2xpYi9kYXRlLXRpbWUvZGF0ZS10aW1lLWlubGluZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9waWNrZXIvc3JjL2xpYi9kYXRlLXRpbWUvZGF0ZS10aW1lLWlubGluZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFDSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUFFLFlBQVksRUFDdkIsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFDSCxXQUFXLEVBSWQsTUFBTSxtQkFBbUIsQ0FBQztBQUUzQixPQUFPLEVBQ0gscUJBQXFCLEVBRXhCLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7QUFFdkYsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQVE7SUFDNUMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDBCQUEwQixDQUFDO0lBQ3pELEtBQUssRUFBRSxJQUFJO0NBQ2QsQ0FBQztBQWFGLE1BQU0sT0FBTywwQkFBOEIsU0FBUSxXQUFjO0lBWTdELElBQ0ksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsR0FBZTtRQUMxQixJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7UUFDM0IsQ0FBQztJQUNMLENBQUM7SUFHRCxJQUNJLFFBQVE7UUFDUixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxLQUFjO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUdELElBQ0ksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsSUFBZ0I7UUFDM0IsSUFDSSxJQUFJLEtBQUssUUFBUTtZQUNqQixJQUFJLEtBQUssT0FBTztZQUNoQixJQUFJLEtBQUssV0FBVztZQUNwQixJQUFJLEtBQUssU0FBUyxFQUNwQixDQUFDO1lBQ0MsTUFBTSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUlELElBQ0ksT0FBTztRQUNQLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN6QixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7UUFDOUIsQ0FBQzthQUFNLElBQ0gsSUFBSSxDQUFDLFVBQVUsS0FBSyxPQUFPO1lBQzNCLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUNqQyxDQUFDO1lBQ0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztRQUNsQyxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7UUFDbEMsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLElBQWM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FDekMsQ0FBQztJQUNOLENBQUM7SUFJRCxJQUNJLEtBQUs7UUFDTCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN2QixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7UUFDOUIsQ0FBQzthQUFNLElBQ0gsSUFBSSxDQUFDLFVBQVUsS0FBSyxPQUFPO1lBQzNCLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUNqQyxDQUFDO1lBQ0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztRQUNsQyxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsSUFBYztRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUN6QyxDQUFDO0lBQ04sQ0FBQztJQUdELElBQ0ksY0FBYztRQUNkLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxjQUFjLENBQUMsTUFBbUM7UUFDbEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUtELElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQ0ksV0FBVyxDQUFDLEtBQWU7UUFDM0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBS0QsSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFDSSxXQUFXLENBQUMsS0FBZTtRQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFHRCxJQUNJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLEtBQWU7UUFDckIsS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFHRCxJQUNJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLE1BQVc7UUFDbEIsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5QixNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDcEIsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDcEQsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUNqQyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLENBQUM7SUFDTCxDQUFDO0lBdUJELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsS0FBZTtRQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFHRCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksU0FBUyxDQUFDLE1BQVc7UUFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNWLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDZCxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssUUFBUSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDYixPQUFPLENBQ0gsSUFBSSxDQUFDLFdBQVcsS0FBSyxPQUFPO1lBQzVCLElBQUksQ0FBQyxXQUFXLEtBQUssV0FBVztZQUNoQyxJQUFJLENBQUMsV0FBVyxLQUFLLFNBQVMsQ0FDakMsQ0FBQztJQUNOLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNoQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBS0QsWUFDYyxjQUFpQyxFQUNyQixlQUFtQyxFQUcvQyxlQUFtQztRQUU3QyxLQUFLLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBTjlCLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNyQixvQkFBZSxHQUFmLGVBQWUsQ0FBb0I7UUFHL0Msb0JBQWUsR0FBZixlQUFlLENBQW9CO1FBblBqRDs7Ozs7V0FLRztRQUNLLGdCQUFXLEdBQWUsTUFBTSxDQUFDO1FBWWpDLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFVbEIsZ0JBQVcsR0FBZSxRQUFRLENBQUM7UUEwSG5DLFlBQU8sR0FBUSxFQUFFLENBQUM7UUFxQjFCOzs7YUFHSztRQUVMLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUssQ0FBQztRQUVyQzs7O2FBR0s7UUFFTCxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFLLENBQUM7UUFFdEM7O2FBRUs7UUFFTCxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFLLENBQUM7UUFZN0IsZUFBVSxHQUFRLEVBQUUsQ0FBQztRQWtDckIsa0JBQWEsR0FBYSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDcEMsbUJBQWMsR0FBYSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFVN0MsQ0FBQztJQUVNLFFBQVE7UUFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDakMsQ0FBQztJQUVNLFVBQVUsQ0FBQyxLQUFVO1FBQ3hCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUN4QyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQ3JDLENBQUM7UUFDTixDQUFDO0lBQ0wsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEVBQU87UUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVNLGlCQUFpQixDQUFDLEVBQU87UUFDNUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVNLGdCQUFnQixDQUFDLFVBQW1CO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFTSxNQUFNLENBQUMsSUFBYTtRQUN2QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7U0FFSztJQUNFLFVBQVUsQ0FBQyxjQUFpQjtRQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7O1NBRUs7SUFDRSxXQUFXLENBQUMsZUFBa0I7UUFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOztTQUVLO0lBQ0csVUFBVSxDQUFDLGNBQWlCO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7OEdBMVRRLDBCQUEwQixrR0F1UHZCLHFCQUFxQjtrR0F2UHhCLDBCQUEwQiw0ZkFGeEIsQ0FBQywyQkFBMkIsQ0FBQyxxRUFJN0IsNkJBQTZCLHFGQ2xENUMscURBQW1EOzsyRkRnRHRDLDBCQUEwQjtrQkFYdEMsU0FBUzsrQkFDSSxzQkFBc0IsUUFHMUI7d0JBQ0YsdUJBQXVCLEVBQUUsa0JBQWtCO3FCQUM5QyxtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSx1QkFDMUIsS0FBSyxhQUNmLENBQUMsMkJBQTJCLENBQUM7OzBCQXVQbkMsUUFBUTs7MEJBQ1IsUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyxxQkFBcUI7eUNBcFBqQyxTQUFTO3NCQURSLFNBQVM7dUJBQUMsNkJBQTZCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVd0RCxVQUFVO3NCQURiLEtBQUs7Z0JBYUYsUUFBUTtzQkFEWCxLQUFLO2dCQVdGLFVBQVU7c0JBRGIsS0FBSztnQkFxQkYsT0FBTztzQkFEVixLQUFLO2dCQTZCRixLQUFLO3NCQURSLEtBQUs7Z0JBMEJGLGNBQWM7c0JBRGpCLEtBQUs7dUJBQUMsbUJBQW1CO2dCQWlCdEIsV0FBVztzQkFEZCxLQUFLO3VCQUFDLEtBQUs7Z0JBY1IsV0FBVztzQkFEZCxLQUFLO3VCQUFDLEtBQUs7Z0JBUVIsS0FBSztzQkFEUixLQUFLO2dCQWNGLE1BQU07c0JBRFQsS0FBSztnQkF5Qk4sWUFBWTtzQkFEWCxNQUFNO2dCQVFQLGFBQWE7c0JBRFosTUFBTTtnQkFPUCxZQUFZO3NCQURYLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGRhdGUtdGltZS1pbmxpbmUuY29tcG9uZW50XG4gKi9cblxuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICAgIE93bERhdGVUaW1lLFxuICAgIFBpY2tlck1vZGUsXG4gICAgUGlja2VyVHlwZSxcbiAgICBTZWxlY3RNb2RlXG59IGZyb20gJy4vZGF0ZS10aW1lLmNsYXNzJztcbmltcG9ydCB7IERhdGVUaW1lQWRhcHRlciB9IGZyb20gJy4vYWRhcHRlci9kYXRlLXRpbWUtYWRhcHRlci5jbGFzcyc7XG5pbXBvcnQge1xuICAgIE9XTF9EQVRFX1RJTUVfRk9STUFUUyxcbiAgICBPd2xEYXRlVGltZUZvcm1hdHNcbn0gZnJvbSAnLi9hZGFwdGVyL2RhdGUtdGltZS1mb3JtYXQuY2xhc3MnO1xuaW1wb3J0IHsgT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGUtdGltZS1waWNrZXItY29udGFpbmVyLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjb25zdCBPV0xfREFURVRJTUVfVkFMVUVfQUNDRVNTT1I6IGFueSA9IHtcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBPd2xEYXRlVGltZUlubGluZUNvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWVcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnb3dsLWRhdGUtdGltZS1pbmxpbmUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXRpbWUtaW5saW5lLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9kYXRlLXRpbWUtaW5saW5lLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaG9zdDoge1xuICAgICAgICAnW2NsYXNzLm93bC1kdC1pbmxpbmVdJzogJ293bERUSW5saW5lQ2xhc3MnXG4gICAgfSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgICBwcm92aWRlcnM6IFtPV0xfREFURVRJTUVfVkFMVUVfQUNDRVNTT1JdXG59KVxuZXhwb3J0IGNsYXNzIE93bERhdGVUaW1lSW5saW5lQ29tcG9uZW50PFQ+IGV4dGVuZHMgT3dsRGF0ZVRpbWU8VD5cbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIEBWaWV3Q2hpbGQoT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgY29udGFpbmVyOiBPd2xEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudDxUPjtcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgdHlwZSBvZiB0aGUgZGF0ZVRpbWUgcGlja2VyXG4gICAgICogICAgICAnYm90aCcgLS0gc2hvdyBib3RoIGNhbGVuZGFyIGFuZCB0aW1lclxuICAgICAqICAgICAgJ2NhbGVuZGFyJyAtLSBzaG93IG9ubHkgY2FsZW5kYXJcbiAgICAgKiAgICAgICd0aW1lcicgLS0gc2hvdyBvbmx5IHRpbWVyXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcGlja2VyVHlwZTogUGlja2VyVHlwZSA9ICdib3RoJztcbiAgICBASW5wdXQoKVxuICAgIGdldCBwaWNrZXJUeXBlKCk6IFBpY2tlclR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGlja2VyVHlwZTtcbiAgICB9XG5cbiAgICBzZXQgcGlja2VyVHlwZSh2YWw6IFBpY2tlclR5cGUpIHtcbiAgICAgICAgaWYgKHZhbCAhPT0gdGhpcy5fcGlja2VyVHlwZSkge1xuICAgICAgICAgICAgdGhpcy5fcGlja2VyVHlwZSA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2Rpc2FibGVkO1xuICAgIH1cblxuICAgIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2VsZWN0TW9kZTogU2VsZWN0TW9kZSA9ICdzaW5nbGUnO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHNlbGVjdE1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RNb2RlO1xuICAgIH1cblxuICAgIHNldCBzZWxlY3RNb2RlKG1vZGU6IFNlbGVjdE1vZGUpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbW9kZSAhPT0gJ3NpbmdsZScgJiZcbiAgICAgICAgICAgIG1vZGUgIT09ICdyYW5nZScgJiZcbiAgICAgICAgICAgIG1vZGUgIT09ICdyYW5nZUZyb20nICYmXG4gICAgICAgICAgICBtb2RlICE9PSAncmFuZ2VUbydcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignT3dsRGF0ZVRpbWUgRXJyb3I6IGludmFsaWQgc2VsZWN0TW9kZSB2YWx1ZSEnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NlbGVjdE1vZGUgPSBtb2RlO1xuICAgIH1cblxuICAgIC8qKiBUaGUgZGF0ZSB0byBvcGVuIHRoZSBjYWxlbmRhciB0byBpbml0aWFsbHkuICovXG4gICAgcHJpdmF0ZSBfc3RhcnRBdDogVCB8IG51bGw7XG4gICAgQElucHV0KClcbiAgICBnZXQgc3RhcnRBdCgpOiBUIHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLl9zdGFydEF0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRBdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdE1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSB8fCBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2UnIHx8XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZUZyb20nXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzBdIHx8IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2VUbycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1sxXSB8fCBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXQgc3RhcnRBdChkYXRlOiBUIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9zdGFydEF0ID0gdGhpcy5nZXRWYWxpZERhdGUoXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZShkYXRlKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBUaGUgZGF0ZSB0byBvcGVuIGZvciByYW5nZSBjYWxlbmRhci4gKi9cbiAgICBwcml2YXRlIF9lbmRBdDogVCB8IG51bGw7XG4gICAgQElucHV0KClcbiAgICBnZXQgZW5kQXQoKTogVCB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5fZW5kQXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbmRBdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdE1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSB8fCBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2UnIHx8XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZUZyb20nXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzFdIHx8IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldCBlbmRBdChkYXRlOiBUIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9lbmRBdCA9IHRoaXMuZ2V0VmFsaWREYXRlKFxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUoZGF0ZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9kYXRlVGltZUZpbHRlcjogKGRhdGU6IFQgfCBudWxsKSA9PiBib29sZWFuO1xuICAgIEBJbnB1dCgnb3dsRGF0ZVRpbWVGaWx0ZXInKVxuICAgIGdldCBkYXRlVGltZUZpbHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lRmlsdGVyO1xuICAgIH1cblxuICAgIHNldCBkYXRlVGltZUZpbHRlcihmaWx0ZXI6IChkYXRlOiBUIHwgbnVsbCkgPT4gYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kYXRlVGltZUZpbHRlciA9IGZpbHRlcjtcbiAgICB9XG5cbiAgICAvKiogVGhlIG1pbmltdW0gdmFsaWQgZGF0ZS4gKi9cbiAgICBwcml2YXRlIF9taW46IFQgfCBudWxsO1xuXG4gICAgZ2V0IG1pbkRhdGVUaW1lKCk6IFQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbiB8fCBudWxsO1xuICAgIH1cblxuICAgIEBJbnB1dCgnbWluJylcbiAgICBzZXQgbWluRGF0ZVRpbWUodmFsdWU6IFQgfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX21pbiA9IHRoaXMuZ2V0VmFsaWREYXRlKHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBtYXhpbXVtIHZhbGlkIGRhdGUuICovXG4gICAgcHJpdmF0ZSBfbWF4OiBUIHwgbnVsbDtcblxuICAgIGdldCBtYXhEYXRlVGltZSgpOiBUIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXggfHwgbnVsbDtcbiAgICB9XG5cbiAgICBASW5wdXQoJ21heCcpXG4gICAgc2V0IG1heERhdGVUaW1lKHZhbHVlOiBUIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9tYXggPSB0aGlzLmdldFZhbGlkRGF0ZSh0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ZhbHVlOiBUIHwgbnVsbDtcbiAgICBASW5wdXQoKVxuICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cblxuICAgIHNldCB2YWx1ZSh2YWx1ZTogVCB8IG51bGwpIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSk7XG4gICAgICAgIHZhbHVlID0gdGhpcy5nZXRWYWxpZERhdGUodmFsdWUpO1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdmFsdWVzOiBUW10gPSBbXTtcbiAgICBASW5wdXQoKVxuICAgIGdldCB2YWx1ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZXM7XG4gICAgfVxuXG4gICAgc2V0IHZhbHVlcyh2YWx1ZXM6IFRbXSkge1xuICAgICAgICBpZiAodmFsdWVzICYmIHZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMubWFwKHYgPT4ge1xuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2KTtcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5nZXRWYWxpZERhdGUodik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHYgPyB0aGlzLmRhdGVUaW1lQWRhcHRlci5jbG9uZSh2KSA6IG51bGw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlcyA9IFsuLi52YWx1ZXNdO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZHMgPSBbLi4udmFsdWVzXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZHMgPSBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXRzIHNlbGVjdGVkIHllYXIgaW4gbXVsdGkteWVhciB2aWV3XG4gICAgICogVGhpcyBkb2Vzbid0IGltcGx5IGEgY2hhbmdlIG9uIHRoZSBzZWxlY3RlZCBkYXRlLlxuICAgICAqICovXG4gICAgQE91dHB1dCgpXG4gICAgeWVhclNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgc2VsZWN0ZWQgbW9udGggaW4geWVhciB2aWV3XG4gICAgICogVGhpcyBkb2Vzbid0IGltcGx5IGEgY2hhbmdlIG9uIHRoZSBzZWxlY3RlZCBkYXRlLlxuICAgICAqICovXG4gICAgQE91dHB1dCgpXG4gICAgbW9udGhTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIHNlbGVjdGVkIGRhdGVcbiAgICAgKiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGRhdGVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcblxuICAgIHByaXZhdGUgX3NlbGVjdGVkOiBUIHwgbnVsbDtcbiAgICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcbiAgICB9XG5cbiAgICBzZXQgc2VsZWN0ZWQodmFsdWU6IFQgfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRzOiBUW10gPSBbXTtcbiAgICBnZXQgc2VsZWN0ZWRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRzO1xuICAgIH1cblxuICAgIHNldCBzZWxlY3RlZHModmFsdWVzOiBUW10pIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRzID0gdmFsdWVzO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGdldCBvcGVuZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGdldCBwaWNrZXJNb2RlKCk6IFBpY2tlck1vZGUge1xuICAgICAgICByZXR1cm4gJ2lubGluZSc7XG4gICAgfVxuXG4gICAgZ2V0IGlzSW5TaW5nbGVNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0TW9kZSA9PT0gJ3NpbmdsZSc7XG4gICAgfVxuXG4gICAgZ2V0IGlzSW5SYW5nZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RNb2RlID09PSAncmFuZ2UnIHx8XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RNb2RlID09PSAncmFuZ2VGcm9tJyB8fFxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0TW9kZSA9PT0gJ3JhbmdlVG8nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0IG93bERUSW5saW5lQ2xhc3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25Nb2RlbENoYW5nZTogRnVuY3Rpb24gPSAoKSA9PiB7IH07XG4gICAgcHJpdmF0ZSBvbk1vZGVsVG91Y2hlZDogRnVuY3Rpb24gPSAoKSA9PiB7IH07XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIGRhdGVUaW1lQWRhcHRlcjogRGF0ZVRpbWVBZGFwdGVyPFQ+LFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBASW5qZWN0KE9XTF9EQVRFX1RJTUVfRk9STUFUUylcbiAgICAgICAgcHJvdGVjdGVkIGRhdGVUaW1lRm9ybWF0czogT3dsRGF0ZVRpbWVGb3JtYXRzXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGRhdGVUaW1lQWRhcHRlciwgZGF0ZVRpbWVGb3JtYXRzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyLnBpY2tlciA9IHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0luU2luZ2xlTW9kZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXIucGlja2VyTW9tZW50ID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcyA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXIucGlja2VyTW9tZW50ID0gdGhpcy5fdmFsdWVzW1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFjdGl2ZVNlbGVjdGVkSW5kZXhcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Nb2RlbENoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Nb2RlbFRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWxlY3QoZGF0ZTogVFtdIHwgVCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0ZSkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzID0gWy4uLmRhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKGRhdGUpO1xuICAgICAgICB0aGlzLm9uTW9kZWxUb3VjaGVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1pdHMgdGhlIHNlbGVjdGVkIHllYXIgaW4gbXVsdGkteWVhciB2aWV3XG4gICAgICogKi9cbiAgICBwdWJsaWMgc2VsZWN0WWVhcihub3JtYWxpemVkWWVhcjogVCk6IHZvaWQge1xuICAgICAgICB0aGlzLnllYXJTZWxlY3RlZC5lbWl0KG5vcm1hbGl6ZWRZZWFyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBzZWxlY3RlZCBtb250aCBpbiB5ZWFyIHZpZXdcbiAgICAgKiAqL1xuICAgIHB1YmxpYyBzZWxlY3RNb250aChub3JtYWxpemVkTW9udGg6IFQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb250aFNlbGVjdGVkLmVtaXQobm9ybWFsaXplZE1vbnRoKTtcbiAgICB9XG4gICAgXG4gICAgLyoqXG4gICAgICogRW1pdHMgdGhlIHNlbGVjdGVkIGRhdGVcbiAgICAgKiAqL1xuICAgICBwdWJsaWMgc2VsZWN0RGF0ZShub3JtYWxpemVkRGF0ZTogVCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGVTZWxlY3RlZC5lbWl0KG5vcm1hbGl6ZWREYXRlKTtcbiAgICB9XG59XG4iLCI8b3dsLWRhdGUtdGltZS1jb250YWluZXI+PC9vd2wtZGF0ZS10aW1lLWNvbnRhaW5lcj4iXX0=
|