@dereekb/dbx-form 11.1.8 → 12.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/calendar/lib/calendar.module.d.ts +1 -14
- package/calendar/lib/calendar.schedule.selection.cell.component.d.ts +8 -5
- package/calendar/lib/calendar.schedule.selection.component.d.ts +13 -10
- package/calendar/lib/calendar.schedule.selection.d.ts +6 -6
- package/calendar/lib/calendar.schedule.selection.days.component.d.ts +1 -1
- package/calendar/lib/calendar.schedule.selection.days.form.component.d.ts +1 -1
- package/calendar/lib/calendar.schedule.selection.dialog.button.component.d.ts +4 -4
- package/calendar/lib/calendar.schedule.selection.dialog.component.d.ts +5 -5
- package/calendar/lib/calendar.schedule.selection.popover.button.component.d.ts +4 -2
- package/calendar/lib/calendar.schedule.selection.popover.component.d.ts +1 -1
- package/calendar/lib/calendar.schedule.selection.popover.content.component.d.ts +1 -1
- package/calendar/lib/calendar.schedule.selection.range.component.d.ts +19 -17
- package/calendar/lib/calendar.schedule.selection.store.d.ts +2 -2
- package/calendar/lib/calendar.schedule.selection.store.provide.d.ts +1 -1
- package/calendar/lib/calendar.schedule.selection.toggle.button.component.d.ts +8 -12
- package/calendar/lib/field/schedule/calendar.schedule.field.component.d.ts +22 -22
- package/calendar/lib/field/schedule/calendar.schedule.module.d.ts +2 -10
- package/esm2022/calendar/lib/calendar.module.mjs +19 -101
- package/esm2022/calendar/lib/calendar.schedule.selection.cell.component.mjs +27 -28
- package/esm2022/calendar/lib/calendar.schedule.selection.component.mjs +38 -55
- package/esm2022/calendar/lib/calendar.schedule.selection.days.component.mjs +17 -13
- package/esm2022/calendar/lib/calendar.schedule.selection.days.form.component.mjs +11 -12
- package/esm2022/calendar/lib/calendar.schedule.selection.dialog.button.component.mjs +18 -21
- package/esm2022/calendar/lib/calendar.schedule.selection.dialog.component.mjs +12 -9
- package/esm2022/calendar/lib/calendar.schedule.selection.mjs +3 -2
- package/esm2022/calendar/lib/calendar.schedule.selection.popover.button.component.mjs +22 -18
- package/esm2022/calendar/lib/calendar.schedule.selection.popover.component.mjs +12 -9
- package/esm2022/calendar/lib/calendar.schedule.selection.popover.content.component.mjs +13 -10
- package/esm2022/calendar/lib/calendar.schedule.selection.range.component.mjs +52 -70
- package/esm2022/calendar/lib/calendar.schedule.selection.store.mjs +5 -5
- package/esm2022/calendar/lib/calendar.schedule.selection.store.provide.mjs +9 -8
- package/esm2022/calendar/lib/calendar.schedule.selection.toggle.button.component.mjs +48 -50
- package/esm2022/calendar/lib/field/schedule/calendar.schedule.field.component.mjs +17 -14
- package/esm2022/calendar/lib/field/schedule/calendar.schedule.module.mjs +8 -40
- package/esm2022/lib/form/action/form.action.directive.mjs +58 -55
- package/esm2022/lib/form/action/form.action.module.mjs +9 -9
- package/esm2022/lib/form/action/transition/form.action.transition.module.mjs +9 -8
- package/esm2022/lib/form/action/transition/form.action.transition.safety.directive.mjs +14 -11
- package/esm2022/lib/form/form.mjs +1 -1
- package/esm2022/lib/form/form.module.mjs +4 -4
- package/esm2022/lib/form/io/form.changes.directive.mjs +11 -16
- package/esm2022/lib/form/io/form.input.directive.mjs +24 -38
- package/esm2022/lib/form/io/form.io.module.mjs +15 -9
- package/esm2022/lib/form/io/form.loading.directive.mjs +22 -42
- package/esm2022/lib/form.module.mjs +4 -4
- package/esm2022/lib/form.providers.mjs +32 -0
- package/esm2022/lib/formly/field/checklist/checklist.field.mjs +5 -5
- package/esm2022/lib/formly/field/checklist/checklist.item.field.component.mjs +51 -47
- package/esm2022/lib/formly/field/checklist/checklist.item.field.content.default.component.mjs +41 -29
- package/esm2022/lib/formly/field/checklist/checklist.item.field.mjs +3 -3
- package/esm2022/lib/formly/field/checklist/checklist.item.field.module.mjs +8 -45
- package/esm2022/lib/formly/field/checklist/checklist.item.mjs +1 -1
- package/esm2022/lib/formly/field/component/component.field.component.mjs +11 -8
- package/esm2022/lib/formly/field/component/component.field.module.mjs +8 -14
- package/esm2022/lib/formly/field/field.mjs +1 -1
- package/esm2022/lib/formly/field/form.field.module.mjs +4 -4
- package/esm2022/lib/formly/field/selection/list/list.field.component.mjs +17 -14
- package/esm2022/lib/formly/field/selection/list/list.field.module.mjs +8 -58
- package/esm2022/lib/formly/field/selection/pickable/pickable.chip.field.component.mjs +17 -13
- package/esm2022/lib/formly/field/selection/pickable/pickable.field.directive.mjs +16 -16
- package/esm2022/lib/formly/field/selection/pickable/pickable.field.module.mjs +8 -68
- package/esm2022/lib/formly/field/selection/pickable/pickable.list.field.component.mjs +71 -54
- package/esm2022/lib/formly/field/selection/pickable/pickable.util.mjs +2 -2
- package/esm2022/lib/formly/field/selection/searchable/searchable.chip.field.component.mjs +21 -16
- package/esm2022/lib/formly/field/selection/searchable/searchable.field.autocomplete.item.component.mjs +51 -49
- package/esm2022/lib/formly/field/selection/searchable/searchable.field.directive.mjs +35 -27
- package/esm2022/lib/formly/field/selection/searchable/searchable.field.mjs +1 -1
- package/esm2022/lib/formly/field/selection/searchable/searchable.field.module.mjs +8 -65
- package/esm2022/lib/formly/field/selection/searchable/searchable.mjs +1 -1
- package/esm2022/lib/formly/field/selection/searchable/searchable.text.field.component.mjs +48 -30
- package/esm2022/lib/formly/field/selection/searchable/text.chip.field.mjs +2 -2
- package/esm2022/lib/formly/field/selection/selection.field.mjs +1 -1
- package/esm2022/lib/formly/field/selection/selection.mjs +1 -1
- package/esm2022/lib/formly/field/selection/selection.module.mjs +4 -4
- package/esm2022/lib/formly/field/selection/sourceselect/sourceselect.field.component.mjs +20 -21
- package/esm2022/lib/formly/field/selection/sourceselect/sourceselect.field.module.mjs +6 -73
- package/esm2022/lib/formly/field/selection/sourceselect/sourceselect.mjs +1 -1
- package/esm2022/lib/formly/field/texteditor/texteditor.field.component.mjs +37 -22
- package/esm2022/lib/formly/field/texteditor/texteditor.field.mjs +2 -2
- package/esm2022/lib/formly/field/texteditor/texteditor.field.module.mjs +8 -33
- package/esm2022/lib/formly/field/value/array/array.field.component.mjs +72 -50
- package/esm2022/lib/formly/field/value/array/array.field.module.mjs +8 -44
- package/esm2022/lib/formly/field/value/boolean/boolean.field.mjs +2 -2
- package/esm2022/lib/formly/field/value/boolean/boolean.field.module.mjs +4 -4
- package/esm2022/lib/formly/field/value/date/date.field.module.mjs +5 -9
- package/esm2022/lib/formly/field/value/date/date.value.mjs +1 -1
- package/esm2022/lib/formly/field/value/date/datetime.field.component.mjs +8 -8
- package/esm2022/lib/formly/field/value/date/datetime.field.service.mjs +4 -4
- package/esm2022/lib/formly/field/value/date/datetime.mjs +1 -1
- package/esm2022/lib/formly/field/value/date/fixeddaterange.field.component.mjs +8 -8
- package/esm2022/lib/formly/field/value/number/number.field.mjs +1 -1
- package/esm2022/lib/formly/field/value/number/number.field.module.mjs +4 -4
- package/esm2022/lib/formly/field/value/phone/phone.field.component.mjs +4 -4
- package/esm2022/lib/formly/field/value/phone/phone.field.module.mjs +4 -4
- package/esm2022/lib/formly/field/value/text/text.address.field.mjs +1 -1
- package/esm2022/lib/formly/field/value/text/text.field.mjs +1 -1
- package/esm2022/lib/formly/field/value/text/text.field.module.mjs +4 -4
- package/esm2022/lib/formly/field/value/value.module.mjs +4 -4
- package/esm2022/lib/formly/field/wrapper/autotouch.wrapper.component.mjs +9 -7
- package/esm2022/lib/formly/field/wrapper/expand.wrapper.component.mjs +19 -24
- package/esm2022/lib/formly/field/wrapper/expand.wrapper.delegate.mjs +7 -4
- package/esm2022/lib/formly/field/wrapper/flex.wrapper.component.mjs +11 -8
- package/esm2022/lib/formly/field/wrapper/form.wrapper.module.mjs +8 -39
- package/esm2022/lib/formly/field/wrapper/index.mjs +2 -1
- package/esm2022/lib/formly/field/wrapper/info.wrapper.component.mjs +19 -16
- package/esm2022/lib/formly/field/wrapper/section.wrapper.component.mjs +11 -7
- package/esm2022/lib/formly/field/wrapper/style.wrapper.component.mjs +16 -11
- package/esm2022/lib/formly/field/wrapper/subsection.wrapper.component.mjs +11 -8
- package/esm2022/lib/formly/field/wrapper/toggle.wrapper.component.mjs +21 -17
- package/esm2022/lib/formly/field/wrapper/working.wrapper.component.mjs +11 -8
- package/esm2022/lib/formly/field/wrapper/wrapper.mjs +1 -1
- package/esm2022/lib/formly/form/form.form.module.mjs +4 -4
- package/esm2022/lib/formly/form/search.form.component.mjs +4 -4
- package/esm2022/lib/formly/formly.component.template.mjs +29 -0
- package/esm2022/lib/formly/formly.context.directive.mjs +6 -5
- package/esm2022/lib/formly/formly.context.mjs +12 -8
- package/esm2022/lib/formly/formly.directive.mjs +29 -44
- package/esm2022/lib/formly/formly.form.component.mjs +24 -18
- package/esm2022/lib/formly/formly.module.mjs +10 -14
- package/esm2022/lib/formly/index.mjs +2 -1
- package/esm2022/lib/formly/template/login.mjs +1 -1
- package/esm2022/lib/formly/template/timezone.mjs +1 -1
- package/esm2022/lib/index.mjs +2 -1
- package/esm2022/lib/layout/form.layout.module.mjs +4 -4
- package/esm2022/lib/layout/form.spacer.component.mjs +3 -3
- package/esm2022/lib/validator/available.mjs +1 -1
- package/esm2022/lib/validator/boolean.mjs +1 -1
- package/esm2022/lib/validator/field.mjs +2 -2
- package/esm2022/lib/validator/number.mjs +1 -1
- package/esm2022/lib/validator/phone.mjs +1 -1
- package/esm2022/mapbox/lib/field/latlng/latlng.field.component.mjs +65 -47
- package/esm2022/mapbox/lib/field/latlng/latlng.field.marker.component.mjs +13 -10
- package/esm2022/mapbox/lib/field/latlng/latlng.module.mjs +10 -43
- package/esm2022/mapbox/lib/field/zoom/zoom.field.component.mjs +32 -26
- package/esm2022/mapbox/lib/field/zoom/zoom.module.mjs +8 -36
- package/esm2022/mapbox/lib/mapbox.module.mjs +4 -4
- package/fesm2022/dereekb-dbx-form-calendar.mjs +340 -457
- package/fesm2022/dereekb-dbx-form-calendar.mjs.map +1 -1
- package/fesm2022/dereekb-dbx-form-mapbox.mjs +114 -141
- package/fesm2022/dereekb-dbx-form-mapbox.mjs.map +1 -1
- package/fesm2022/dereekb-dbx-form.mjs +935 -1106
- package/fesm2022/dereekb-dbx-form.mjs.map +1 -1
- package/lib/extension/calendar/_calendar.scss +3 -3
- package/lib/form/_form.scss +3 -3
- package/lib/form/action/form.action.directive.d.ts +35 -16
- package/lib/form/action/form.action.module.d.ts +4 -3
- package/lib/form/action/transition/form.action.transition.module.d.ts +4 -2
- package/lib/form/action/transition/form.action.transition.safety.directive.d.ts +4 -2
- package/lib/form/io/form.changes.directive.d.ts +3 -4
- package/lib/form/io/form.input.directive.d.ts +7 -10
- package/lib/form/io/form.io.module.d.ts +8 -2
- package/lib/form/io/form.loading.directive.d.ts +10 -11
- package/lib/form.providers.d.ts +8 -0
- package/lib/formly/_formly.scss +3 -3
- package/lib/formly/field/checklist/_checklist.scss +3 -3
- package/lib/formly/field/checklist/checklist.field.d.ts +7 -7
- package/lib/formly/field/checklist/checklist.item.d.ts +7 -9
- package/lib/formly/field/checklist/checklist.item.field.component.d.ts +19 -18
- package/lib/formly/field/checklist/checklist.item.field.content.default.component.d.ts +5 -5
- package/lib/formly/field/checklist/checklist.item.field.d.ts +1 -1
- package/lib/formly/field/checklist/checklist.item.field.module.d.ts +3 -11
- package/lib/formly/field/component/_component.scss +3 -3
- package/lib/formly/field/component/component.field.component.d.ts +1 -1
- package/lib/formly/field/component/component.field.module.d.ts +2 -4
- package/lib/formly/field/field.d.ts +8 -5
- package/lib/formly/field/selection/list/_list.scss +3 -3
- package/lib/formly/field/selection/list/list.field.component.d.ts +7 -5
- package/lib/formly/field/selection/list/list.field.module.d.ts +2 -12
- package/lib/formly/field/selection/pickable/_pickable.scss +3 -3
- package/lib/formly/field/selection/pickable/pickable.chip.field.component.d.ts +1 -1
- package/lib/formly/field/selection/pickable/pickable.field.directive.d.ts +25 -23
- package/lib/formly/field/selection/pickable/pickable.field.module.d.ts +2 -13
- package/lib/formly/field/selection/pickable/pickable.list.field.component.d.ts +15 -14
- package/lib/formly/field/selection/searchable/_searchable.scss +3 -3
- package/lib/formly/field/selection/searchable/searchable.chip.field.component.d.ts +4 -4
- package/lib/formly/field/selection/searchable/searchable.d.ts +3 -3
- package/lib/formly/field/selection/searchable/searchable.field.autocomplete.item.component.d.ts +8 -12
- package/lib/formly/field/selection/searchable/searchable.field.directive.d.ts +30 -25
- package/lib/formly/field/selection/searchable/searchable.field.module.d.ts +2 -13
- package/lib/formly/field/selection/searchable/searchable.text.field.component.d.ts +6 -8
- package/lib/formly/field/selection/selection.d.ts +5 -5
- package/lib/formly/field/selection/sourceselect/_sourceselect.scss +3 -3
- package/lib/formly/field/selection/sourceselect/sourceselect.d.ts +1 -1
- package/lib/formly/field/selection/sourceselect/sourceselect.field.component.d.ts +5 -3
- package/lib/formly/field/selection/sourceselect/sourceselect.field.module.d.ts +2 -17
- package/lib/formly/field/texteditor/_texteditor.scss +9 -9
- package/lib/formly/field/texteditor/texteditor.field.component.d.ts +5 -4
- package/lib/formly/field/texteditor/texteditor.field.module.d.ts +2 -8
- package/lib/formly/field/value/array/_array.scss +5 -5
- package/lib/formly/field/value/array/array.field.component.d.ts +16 -18
- package/lib/formly/field/value/array/array.field.d.ts +8 -5
- package/lib/formly/field/value/array/array.field.module.d.ts +2 -10
- package/lib/formly/field/value/boolean/_boolean.scss +3 -3
- package/lib/formly/field/value/date/_date.scss +5 -5
- package/lib/formly/field/value/date/date.field.module.d.ts +8 -9
- package/lib/formly/field/value/date/datetime.field.service.d.ts +1 -1
- package/lib/formly/field/value/date/fixeddaterange.field.component.d.ts +13 -13
- package/lib/formly/field/value/number/_number.scss +2 -2
- package/lib/formly/field/value/phone/_phone.scss +6 -6
- package/lib/formly/field/value/phone/phone.field.component.d.ts +6 -5
- package/lib/formly/field/value/text/_text.scss +3 -3
- package/lib/formly/field/wrapper/_wrapper.scss +3 -3
- package/lib/formly/field/wrapper/autotouch.wrapper.component.d.ts +1 -1
- package/lib/formly/field/wrapper/expand.wrapper.component.d.ts +1 -1
- package/lib/formly/field/wrapper/expand.wrapper.delegate.d.ts +2 -0
- package/lib/formly/field/wrapper/flex.wrapper.component.d.ts +4 -4
- package/lib/formly/field/wrapper/form.wrapper.module.d.ts +2 -8
- package/lib/formly/field/wrapper/index.d.ts +1 -0
- package/lib/formly/field/wrapper/info.wrapper.component.d.ts +2 -2
- package/lib/formly/field/wrapper/section.wrapper.component.d.ts +1 -1
- package/lib/formly/field/wrapper/style.wrapper.component.d.ts +5 -3
- package/lib/formly/field/wrapper/subsection.wrapper.component.d.ts +1 -1
- package/lib/formly/field/wrapper/toggle.wrapper.component.d.ts +2 -1
- package/lib/formly/field/wrapper/working.wrapper.component.d.ts +2 -2
- package/lib/formly/form/_form.scss +3 -3
- package/lib/formly/formly.component.template.d.ts +19 -0
- package/lib/formly/formly.context.d.ts +11 -7
- package/lib/formly/formly.context.directive.d.ts +2 -2
- package/lib/formly/formly.directive.d.ts +10 -10
- package/lib/formly/formly.form.component.d.ts +18 -13
- package/lib/formly/formly.module.d.ts +1 -1
- package/lib/formly/index.d.ts +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/layout/_layout.scss +3 -3
- package/lib/style/_all-typography.scss +1 -1
- package/lib/style/_theming.scss +1 -1
- package/mapbox/lib/field/latlng/latlng.field.component.d.ts +25 -23
- package/mapbox/lib/field/latlng/latlng.field.marker.component.d.ts +2 -1
- package/mapbox/lib/field/latlng/latlng.module.d.ts +2 -11
- package/mapbox/lib/field/zoom/zoom.field.component.d.ts +13 -13
- package/mapbox/lib/field/zoom/zoom.module.d.ts +3 -10
- package/package.json +10 -11
- package/mapbox/esm2022/dereekb-dbx-form-mapbox.mjs +0 -5
- package/mapbox/esm2022/index.mjs +0 -3
- package/mapbox/esm2022/lib/field/index.mjs +0 -3
- package/mapbox/esm2022/lib/field/latlng/index.mjs +0 -5
- package/mapbox/esm2022/lib/field/latlng/latlng.field.component.mjs +0 -244
- package/mapbox/esm2022/lib/field/latlng/latlng.field.marker.component.mjs +0 -31
- package/mapbox/esm2022/lib/field/latlng/latlng.field.mjs +0 -35
- package/mapbox/esm2022/lib/field/latlng/latlng.module.mjs +0 -59
- package/mapbox/esm2022/lib/field/zoom/index.mjs +0 -4
- package/mapbox/esm2022/lib/field/zoom/zoom.field.component.mjs +0 -140
- package/mapbox/esm2022/lib/field/zoom/zoom.field.mjs +0 -23
- package/mapbox/esm2022/lib/field/zoom/zoom.module.mjs +0 -57
- package/mapbox/esm2022/lib/mapbox.module.mjs +0 -16
- package/mapbox/fesm2022/dereekb-dbx-form-mapbox.mjs +0 -566
- package/mapbox/fesm2022/dereekb-dbx-form-mapbox.mjs.map +0 -1
- package/mapbox/package.json +0 -21
|
@@ -5,7 +5,7 @@ import { ChangeDetectorRef, Component, inject } from '@angular/core';
|
|
|
5
5
|
import { FormControl, Validators } from '@angular/forms';
|
|
6
6
|
import { FieldType } from '@ngx-formly/material';
|
|
7
7
|
import { addMinutes, startOfDay, addDays } from 'date-fns';
|
|
8
|
-
import { asObservableFromGetter, filterMaybe, skipFirstMaybe, SubscriptionObject, switchMapMaybeDefault,
|
|
8
|
+
import { asObservableFromGetter, filterMaybe, skipFirstMaybe, SubscriptionObject, switchMapMaybeDefault, switchMapFilterMaybe } from '@dereekb/rxjs';
|
|
9
9
|
import { dateTimePreset } from './datetime';
|
|
10
10
|
import { DbxDateTimeFieldMenuPresetsService } from './datetime.field.service';
|
|
11
11
|
import { DbxDateTimeValueMode, dbxDateTimeInputValueParseFactory, dbxDateTimeIsSameDateTimeFieldValue, dbxDateTimeOutputValueFactory } from './date.value';
|
|
@@ -186,7 +186,7 @@ export class DbxDateTimeFieldComponent extends FieldType {
|
|
|
186
186
|
return DbxDateTimeFieldTimeMode.NONE;
|
|
187
187
|
}
|
|
188
188
|
else {
|
|
189
|
-
return this.timeOnly ? DbxDateTimeFieldTimeMode.REQUIRED : this.dateTimeField.timeMode ?? DbxDateTimeFieldTimeMode.REQUIRED;
|
|
189
|
+
return this.timeOnly ? DbxDateTimeFieldTimeMode.REQUIRED : (this.dateTimeField.timeMode ?? DbxDateTimeFieldTimeMode.REQUIRED);
|
|
190
190
|
}
|
|
191
191
|
}
|
|
192
192
|
get isDateRequired() {
|
|
@@ -296,7 +296,7 @@ export class DbxDateTimeFieldComponent extends FieldType {
|
|
|
296
296
|
}
|
|
297
297
|
return result;
|
|
298
298
|
}), distinctUntilChanged(isSameDateHoursAndMinutes), shareReplay(1));
|
|
299
|
-
dateTimePickerConfig$ = combineLatest([this._config.pipe(
|
|
299
|
+
dateTimePickerConfig$ = combineLatest([this._config.pipe(switchMapFilterMaybe()), this.syncConfigBeforeValue$, this.syncConfigAfterValue$]).pipe(map(([x, dateInputMin, dateInputMax]) => {
|
|
300
300
|
let result = x;
|
|
301
301
|
if (dateInputMin != null || dateInputMax != null) {
|
|
302
302
|
const { min: limitMin, max: limitMax } = x?.limits ?? {};
|
|
@@ -356,7 +356,7 @@ export class DbxDateTimeFieldComponent extends FieldType {
|
|
|
356
356
|
});
|
|
357
357
|
}), shareReplay(1));
|
|
358
358
|
hasEmptyDisplayValue$ = this.displayValue$.pipe(map((x) => !x), distinctUntilChanged(), shareReplay(1));
|
|
359
|
-
presets$ = this._presets.pipe(
|
|
359
|
+
presets$ = this._presets.pipe(switchMapFilterMaybe(), map((x) => x.map(dateTimePreset)), shareReplay(1));
|
|
360
360
|
showClearButton$ = this.hasEmptyDisplayValue$.pipe(map((x) => Boolean(this.showClearButton && !x)), distinctUntilChanged(), shareReplay(1));
|
|
361
361
|
canAutofillDateWithOnlyAvailableDate$ = this.dateMinAndMaxIsSameDay$;
|
|
362
362
|
showDateInput$ = this.dateMinAndMaxIsSameDay$.pipe(map((dateMinAndMaxIsSameDay) => {
|
|
@@ -660,11 +660,11 @@ export class DbxDateTimeFieldComponent extends FieldType {
|
|
|
660
660
|
clearValue() {
|
|
661
661
|
this._cleared.next();
|
|
662
662
|
}
|
|
663
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
664
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DbxDateTimeFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class=\"dbx-datetime-field\" fxLayout=\"row wrap\" fxLayout.xs=\"column wrap\" fxLayoutGap=\"6px grid\" fxLayoutAlign=\"space-evenly stretch\">\n <!-- Date -->\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"dateOnly ? '100' : '50'\" *ngIf=\"showDateInput$ | async\">\n <ng-container *ngTemplateOutlet=\"dateInputTemplate\"></ng-container>\n </div>\n <!-- Time -->\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"(showDateInput$ | async) ? '50' : '100'\">\n <ng-container *ngIf=\"showTimeInput$ | async\">\n <ng-container *ngTemplateOutlet=\"timeMenuAndInputTemplate\"></ng-container>\n </ng-container>\n <div *ngIf=\"showAddTime$ | async\" class=\"add-time-button-wrapper\">\n <button mat-button class=\"mat-datepicker-button-highlight dbx-button-spacer add-time-button\" ngClass.lt-sm=\"add-time-button-full\" (click)=\"addTime()\">\n <mat-icon>timer</mat-icon>\n Add Time\n </button>\n </div>\n </div>\n <!-- Date Hint -->\n <ng-container [ngSwitch]=\"hasError$ | async\">\n <ng-container *ngSwitchCase=\"false\">\n <div *ngIf=\"!hideDateHint\" class=\"dbx-datetime-row dbx-datetime-hint-row\" fxFlex=\"100\">\n <div class=\"dbx-hint\">\n <ng-container [ngSwitch]=\"hasEmptyDisplayValue$ | async\">\n <ng-container *ngSwitchCase=\"true\">\n <span class=\"dbx-small\">No date/time set</span>\n </ng-container>\n <ng-container *ngSwitchCase=\"false\">\n <ng-container [ngSwitch]=\"fullDay$ | async\">\n <small *ngSwitchCase=\"true\">\n <b class=\"dbx-ok\">{{ allDayLabel }}</b>\n {{ displayValue$ | async | date: 'fullDate' }} {{ timezoneAbbreviation$ | async }} ({{ displayValue$ | async | dateDistance }})\n </small>\n <small *ngSwitchCase=\"false\">\n <ng-container *ngIf=\"displayValue$ | async\">\n <b class=\"dbx-ok\">{{ atTimeLabel }}</b>\n {{ displayValue$ | async | date: 'medium' }} {{ timezoneAbbreviation$ | async }} ({{ displayValue$ | async | timeDistance }})\n </ng-container>\n </small>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"true\">\n <mat-error *ngIf=\"currentErrorMessage$ | async\">{{ currentErrorMessage$ | async }}</mat-error>\n </ng-container>\n </ng-container>\n</div>\n\n<!-- Date Input Template -->\n<ng-template #dateInputTemplate>\n <mat-form-field class=\"dbx-datetime-row-field\">\n <mat-label>{{ dateLabel }}</mat-label>\n <input #dateInput matInput [disabled]=\"disabled\" [required]=\"isDateRequired\" [min]=\"dateInputMin$ | async\" [max]=\"dateInputMax$ | async\" [matDatepicker]=\"picker\" [matDatepickerFilter]=\"(pickerFilter$ | async) || defaultPickerFilter\" (dateChange)=\"datePicked($event)\" [value]=\"dateValue$ | async\" (keydown)=\"keydownOnDateInput($event)\" />\n <mat-datepicker #picker></mat-datepicker>\n <button matPrefix class=\"dbx-datetime-row-button\" *ngIf=\"!hideDatePicker\" mat-icon-button (click)=\"picker.open()\" [disabled]=\"disabled\">\n <mat-icon>calendar_today</mat-icon>\n </button>\n <button matSuffix *ngIf=\"showClearButton$ | async\" class=\"dbx-datetime-clear-button\" mat-icon-button aria-label=\"clears the date and time menu\" [disabled]=\"disabled\" (click)=\"clearValue()\">\n <mat-icon>clear</mat-icon>\n </button>\n <span matTextSuffix *ngIf=\"!(showTimeInput$ | async)\">\n <ng-container *ngTemplateOutlet=\"timezoneSuffixTemplate\"></ng-container>\n </span>\n </mat-form-field>\n</ng-template>\n\n<!-- Time Menu/Input Template -->\n<ng-template #timeMenuAndInputTemplate>\n <mat-menu #timemenu=\"matMenu\">\n <ng-container *ngIf=\"timeMode === 'optional'\">\n <button mat-menu-item (click)=\"removeTime()\">\n <span>Remove Time</span>\n </button>\n <mat-divider></mat-divider>\n </ng-container>\n <ng-container *ngFor=\"let preset of presets$ | async\">\n <button mat-menu-item (click)=\"selectPreset(preset)\">{{ preset.label | getValue }}</button>\n </ng-container>\n </mat-menu>\n <mat-form-field class=\"dbx-datetime-row-field\">\n <mat-label>{{ timeLabel }}</mat-label>\n <input #timeInput [errorStateMatcher]=\"timeErrorStateMatcher\" matInput [required]=\"isTimeRequired\" [formControl]=\"timeInputCtrl\" (focus)=\"focusTime()\" (focusout)=\"focusOutTime()\" (keydown)=\"keydownOnTimeInput($event)\" />\n <button matPrefix class=\"dbx-datetime-row-button\" mat-icon-button [matMenuTriggerFor]=\"timemenu\" aria-label=\"opens the time menu\" [disabled]=\"disabled\">\n <mat-icon>timer</mat-icon>\n </button>\n <span matTextSuffix>\n <ng-container *ngTemplateOutlet=\"timezoneSuffixTemplate\"></ng-container>\n </span>\n <mat-error *ngIf=\"timeInputCtrl.hasError('pattern')\">The input time is not recognizable.</mat-error>\n </mat-form-field>\n</ng-template>\n\n<!-- Timezone Suffix -->\n<ng-template #timezoneSuffixTemplate>\n <span *ngIf=\"showTimezone\" class=\"dbx-datetime-timezone dbx-faint\">{{ timezoneAbbreviation$ | async }}</span>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i7.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i8.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i10.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i10.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i10.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i10.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i11.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "pipe", type: i12.DateDistancePipe, name: "dateDistance" }, { kind: "pipe", type: i12.TimeDistancePipe, name: "timeDistance" }, { kind: "pipe", type: i12.GetValuePipe, name: "getValue" }] });
|
|
663
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxDateTimeFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
664
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DbxDateTimeFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class=\"dbx-datetime-field\" fxLayout=\"row wrap\" fxLayout.xs=\"column wrap\" fxLayoutGap=\"6px grid\" fxLayoutAlign=\"space-evenly stretch\">\n <!-- Date -->\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"dateOnly ? '100' : '50'\" *ngIf=\"showDateInput$ | async\">\n <ng-container *ngTemplateOutlet=\"dateInputTemplate\"></ng-container>\n </div>\n <!-- Time -->\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"(showDateInput$ | async) ? '50' : '100'\">\n <ng-container *ngIf=\"showTimeInput$ | async\">\n <ng-container *ngTemplateOutlet=\"timeMenuAndInputTemplate\"></ng-container>\n </ng-container>\n <div *ngIf=\"showAddTime$ | async\" class=\"add-time-button-wrapper\">\n <button mat-button class=\"mat-datepicker-button-highlight dbx-button-spacer add-time-button\" ngClass.lt-sm=\"add-time-button-full\" (click)=\"addTime()\">\n <mat-icon>timer</mat-icon>\n Add Time\n </button>\n </div>\n </div>\n <!-- Date Hint -->\n <ng-container [ngSwitch]=\"hasError$ | async\">\n <ng-container *ngSwitchCase=\"false\">\n <div *ngIf=\"!hideDateHint\" class=\"dbx-datetime-row dbx-datetime-hint-row\" fxFlex=\"100\">\n <div class=\"dbx-hint\">\n <ng-container [ngSwitch]=\"hasEmptyDisplayValue$ | async\">\n <ng-container *ngSwitchCase=\"true\">\n <span class=\"dbx-small\">No date/time set</span>\n </ng-container>\n <ng-container *ngSwitchCase=\"false\">\n <ng-container [ngSwitch]=\"fullDay$ | async\">\n <small *ngSwitchCase=\"true\">\n <b class=\"dbx-ok\">{{ allDayLabel }}</b>\n {{ displayValue$ | async | date: 'fullDate' }} {{ timezoneAbbreviation$ | async }} ({{ displayValue$ | async | dateDistance }})\n </small>\n <small *ngSwitchCase=\"false\">\n <ng-container *ngIf=\"displayValue$ | async\">\n <b class=\"dbx-ok\">{{ atTimeLabel }}</b>\n {{ displayValue$ | async | date: 'medium' }} {{ timezoneAbbreviation$ | async }} ({{ displayValue$ | async | timeDistance }})\n </ng-container>\n </small>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"true\">\n <mat-error *ngIf=\"currentErrorMessage$ | async\">{{ currentErrorMessage$ | async }}</mat-error>\n </ng-container>\n </ng-container>\n</div>\n\n<!-- Date Input Template -->\n<ng-template #dateInputTemplate>\n <mat-form-field class=\"dbx-datetime-row-field\">\n <mat-label>{{ dateLabel }}</mat-label>\n <input #dateInput matInput [disabled]=\"disabled\" [required]=\"isDateRequired\" [min]=\"dateInputMin$ | async\" [max]=\"dateInputMax$ | async\" [matDatepicker]=\"picker\" [matDatepickerFilter]=\"(pickerFilter$ | async) || defaultPickerFilter\" (dateChange)=\"datePicked($event)\" [value]=\"dateValue$ | async\" (keydown)=\"keydownOnDateInput($event)\" />\n <mat-datepicker #picker></mat-datepicker>\n <button matPrefix class=\"dbx-datetime-row-button\" *ngIf=\"!hideDatePicker\" mat-icon-button (click)=\"picker.open()\" [disabled]=\"disabled\">\n <mat-icon>calendar_today</mat-icon>\n </button>\n <button matSuffix *ngIf=\"showClearButton$ | async\" class=\"dbx-datetime-clear-button\" mat-icon-button aria-label=\"clears the date and time menu\" [disabled]=\"disabled\" (click)=\"clearValue()\">\n <mat-icon>clear</mat-icon>\n </button>\n <span matTextSuffix *ngIf=\"!(showTimeInput$ | async)\">\n <ng-container *ngTemplateOutlet=\"timezoneSuffixTemplate\"></ng-container>\n </span>\n </mat-form-field>\n</ng-template>\n\n<!-- Time Menu/Input Template -->\n<ng-template #timeMenuAndInputTemplate>\n <mat-menu #timemenu=\"matMenu\">\n <ng-container *ngIf=\"timeMode === 'optional'\">\n <button mat-menu-item (click)=\"removeTime()\">\n <span>Remove Time</span>\n </button>\n <mat-divider></mat-divider>\n </ng-container>\n <ng-container *ngFor=\"let preset of presets$ | async\">\n <button mat-menu-item (click)=\"selectPreset(preset)\">{{ preset.label | getValue }}</button>\n </ng-container>\n </mat-menu>\n <mat-form-field class=\"dbx-datetime-row-field\">\n <mat-label>{{ timeLabel }}</mat-label>\n <input #timeInput [errorStateMatcher]=\"timeErrorStateMatcher\" matInput [required]=\"isTimeRequired\" [formControl]=\"timeInputCtrl\" (focus)=\"focusTime()\" (focusout)=\"focusOutTime()\" (keydown)=\"keydownOnTimeInput($event)\" />\n <button matPrefix class=\"dbx-datetime-row-button\" mat-icon-button [matMenuTriggerFor]=\"timemenu\" aria-label=\"opens the time menu\" [disabled]=\"disabled\">\n <mat-icon>timer</mat-icon>\n </button>\n <span matTextSuffix>\n <ng-container *ngTemplateOutlet=\"timezoneSuffixTemplate\"></ng-container>\n </span>\n <mat-error *ngIf=\"timeInputCtrl.hasError('pattern')\">The input time is not recognizable.</mat-error>\n </mat-form-field>\n</ng-template>\n\n<!-- Timezone Suffix -->\n<ng-template #timezoneSuffixTemplate>\n <span *ngIf=\"showTimezone\" class=\"dbx-datetime-timezone dbx-faint\">{{ timezoneAbbreviation$ | async }}</span>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i7.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i7.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i8.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i10.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i10.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i10.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i10.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i11.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "pipe", type: i12.DateDistancePipe, name: "dateDistance" }, { kind: "pipe", type: i12.TimeDistancePipe, name: "timeDistance" }, { kind: "pipe", type: i12.GetValuePipe, name: "getValue" }] });
|
|
665
665
|
}
|
|
666
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
666
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxDateTimeFieldComponent, decorators: [{
|
|
667
667
|
type: Component,
|
|
668
668
|
args: [{ template: "<div class=\"dbx-datetime-field\" fxLayout=\"row wrap\" fxLayout.xs=\"column wrap\" fxLayoutGap=\"6px grid\" fxLayoutAlign=\"space-evenly stretch\">\n <!-- Date -->\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"dateOnly ? '100' : '50'\" *ngIf=\"showDateInput$ | async\">\n <ng-container *ngTemplateOutlet=\"dateInputTemplate\"></ng-container>\n </div>\n <!-- Time -->\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"(showDateInput$ | async) ? '50' : '100'\">\n <ng-container *ngIf=\"showTimeInput$ | async\">\n <ng-container *ngTemplateOutlet=\"timeMenuAndInputTemplate\"></ng-container>\n </ng-container>\n <div *ngIf=\"showAddTime$ | async\" class=\"add-time-button-wrapper\">\n <button mat-button class=\"mat-datepicker-button-highlight dbx-button-spacer add-time-button\" ngClass.lt-sm=\"add-time-button-full\" (click)=\"addTime()\">\n <mat-icon>timer</mat-icon>\n Add Time\n </button>\n </div>\n </div>\n <!-- Date Hint -->\n <ng-container [ngSwitch]=\"hasError$ | async\">\n <ng-container *ngSwitchCase=\"false\">\n <div *ngIf=\"!hideDateHint\" class=\"dbx-datetime-row dbx-datetime-hint-row\" fxFlex=\"100\">\n <div class=\"dbx-hint\">\n <ng-container [ngSwitch]=\"hasEmptyDisplayValue$ | async\">\n <ng-container *ngSwitchCase=\"true\">\n <span class=\"dbx-small\">No date/time set</span>\n </ng-container>\n <ng-container *ngSwitchCase=\"false\">\n <ng-container [ngSwitch]=\"fullDay$ | async\">\n <small *ngSwitchCase=\"true\">\n <b class=\"dbx-ok\">{{ allDayLabel }}</b>\n {{ displayValue$ | async | date: 'fullDate' }} {{ timezoneAbbreviation$ | async }} ({{ displayValue$ | async | dateDistance }})\n </small>\n <small *ngSwitchCase=\"false\">\n <ng-container *ngIf=\"displayValue$ | async\">\n <b class=\"dbx-ok\">{{ atTimeLabel }}</b>\n {{ displayValue$ | async | date: 'medium' }} {{ timezoneAbbreviation$ | async }} ({{ displayValue$ | async | timeDistance }})\n </ng-container>\n </small>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"true\">\n <mat-error *ngIf=\"currentErrorMessage$ | async\">{{ currentErrorMessage$ | async }}</mat-error>\n </ng-container>\n </ng-container>\n</div>\n\n<!-- Date Input Template -->\n<ng-template #dateInputTemplate>\n <mat-form-field class=\"dbx-datetime-row-field\">\n <mat-label>{{ dateLabel }}</mat-label>\n <input #dateInput matInput [disabled]=\"disabled\" [required]=\"isDateRequired\" [min]=\"dateInputMin$ | async\" [max]=\"dateInputMax$ | async\" [matDatepicker]=\"picker\" [matDatepickerFilter]=\"(pickerFilter$ | async) || defaultPickerFilter\" (dateChange)=\"datePicked($event)\" [value]=\"dateValue$ | async\" (keydown)=\"keydownOnDateInput($event)\" />\n <mat-datepicker #picker></mat-datepicker>\n <button matPrefix class=\"dbx-datetime-row-button\" *ngIf=\"!hideDatePicker\" mat-icon-button (click)=\"picker.open()\" [disabled]=\"disabled\">\n <mat-icon>calendar_today</mat-icon>\n </button>\n <button matSuffix *ngIf=\"showClearButton$ | async\" class=\"dbx-datetime-clear-button\" mat-icon-button aria-label=\"clears the date and time menu\" [disabled]=\"disabled\" (click)=\"clearValue()\">\n <mat-icon>clear</mat-icon>\n </button>\n <span matTextSuffix *ngIf=\"!(showTimeInput$ | async)\">\n <ng-container *ngTemplateOutlet=\"timezoneSuffixTemplate\"></ng-container>\n </span>\n </mat-form-field>\n</ng-template>\n\n<!-- Time Menu/Input Template -->\n<ng-template #timeMenuAndInputTemplate>\n <mat-menu #timemenu=\"matMenu\">\n <ng-container *ngIf=\"timeMode === 'optional'\">\n <button mat-menu-item (click)=\"removeTime()\">\n <span>Remove Time</span>\n </button>\n <mat-divider></mat-divider>\n </ng-container>\n <ng-container *ngFor=\"let preset of presets$ | async\">\n <button mat-menu-item (click)=\"selectPreset(preset)\">{{ preset.label | getValue }}</button>\n </ng-container>\n </mat-menu>\n <mat-form-field class=\"dbx-datetime-row-field\">\n <mat-label>{{ timeLabel }}</mat-label>\n <input #timeInput [errorStateMatcher]=\"timeErrorStateMatcher\" matInput [required]=\"isTimeRequired\" [formControl]=\"timeInputCtrl\" (focus)=\"focusTime()\" (focusout)=\"focusOutTime()\" (keydown)=\"keydownOnTimeInput($event)\" />\n <button matPrefix class=\"dbx-datetime-row-button\" mat-icon-button [matMenuTriggerFor]=\"timemenu\" aria-label=\"opens the time menu\" [disabled]=\"disabled\">\n <mat-icon>timer</mat-icon>\n </button>\n <span matTextSuffix>\n <ng-container *ngTemplateOutlet=\"timezoneSuffixTemplate\"></ng-container>\n </span>\n <mat-error *ngIf=\"timeInputCtrl.hasError('pattern')\">The input time is not recognizable.</mat-error>\n </mat-form-field>\n</ng-template>\n\n<!-- Timezone Suffix -->\n<ng-template #timezoneSuffixTemplate>\n <span *ngIf=\"showTimezone\" class=\"dbx-datetime-timezone dbx-faint\">{{ timezoneAbbreviation$ | async }}</span>\n</ng-template>\n" }]
|
|
669
669
|
}] });
|
|
670
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vc3JjL2xpYi9mb3JtbHkvZmllbGQvdmFsdWUvZGF0ZS9kYXRldGltZS5maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL2Zvcm1seS9maWVsZC92YWx1ZS9kYXRlL2RhdGV0aW1lLmZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBa0YsT0FBTyxFQUFFLHNCQUFzQixFQUF5Ryx1QkFBdUIsRUFBb0IsbUJBQW1CLEVBQXFELE1BQU0sZUFBZSxDQUFDO0FBQzFXLE9BQU8sRUFBRSxtQkFBbUIsRUFBd0Isc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQUUseUJBQXlCLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLHlCQUF5QixFQUFFLHVCQUF1QixFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBaUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5WixPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQWMsYUFBYSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZPLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVB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QUFXLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1NBQzlCO0lBQ0gsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQWdCO1FBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDakQsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QixDQUFDO3dHQTEyQlUseUJBQXlCOzRGQUF6Qix5QkFBeUIsMkVDN090QywwdUtBa0dBOzs0RkQySWEseUJBQXlCO2tCQUhyQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBNYXliZSwgdHlwZSBSZWFkYWJsZVRpbWVTdHJpbmcsIHR5cGUgQXJyYXlPclZhbHVlLCB0eXBlIElTTzg2MDFEYXRlU3RyaW5nLCBhc0FycmF5LCBmaWx0ZXJNYXliZUFycmF5VmFsdWVzLCB0eXBlIERlY2lzaW9uRnVuY3Rpb24sIHR5cGUgTWlsbGlzZWNvbmRzLCB0eXBlIFRpbWV6b25lU3RyaW5nLCB0eXBlIExvZ2ljYWxEYXRlLCB0eXBlIERhdGVPckRheVN0cmluZywgaXNJU084NjAxRGF5U3RyaW5nU3RhcnQsIHR5cGUgTWFwRnVuY3Rpb24sIG1hcElkZW50aXR5RnVuY3Rpb24sIE1pbnV0ZU9mRGF5LCBVbml4RGF0ZVRpbWVOdW1iZXIsIElTTzg2MDFEYXlTdHJpbmcgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IGRhdGVGcm9tTG9naWNhbERhdGUsIERhdGVUaW1lTWludXRlQ29uZmlnLCBEYXRlVGltZU1pbnV0ZUluc3RhbmNlLCBndWVzc0N1cnJlbnRUaW1lem9uZSwgcmVhZGFibGVUaW1lU3RyaW5nVG9EYXRlLCB0b0xvY2FsUmVhZGFibGVUaW1lU3RyaW5nLCB1dGNEYXlGb3JEYXRlLCBzYWZlVG9Kc0RhdGUsIGZpbmRNaW5EYXRlLCBmaW5kTWF4RGF0ZSwgaXNTYW1lRGF0ZUhvdXJzQW5kTWludXRlcywgZ2V0VGltZXpvbmVBYmJyZXZpYXRpb24sIGlzU2FtZURhdGVEYXksIGRhdGVUaW1lem9uZVV0Y05vcm1hbCwgRGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2UsIHRvSnNEYXlEYXRlLCBpc1NhbWVEYXRlLCBkYXRlVGltZU1pbnV0ZVdob2xlRGF5RGVjaXNpb25GdW5jdGlvbiB9IGZyb20gJ0BkZXJlZWtiL2RhdGUnO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCBzaGFyZVJlcGxheSwgbWFwLCBzdGFydFdpdGgsIHRhcCwgZmlyc3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBkZWJvdW5jZVRpbWUsIHRocm90dGxlVGltZSwgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBjb21iaW5lTGF0ZXN0LCBTdWJqZWN0LCBtZXJnZSwgaW50ZXJ2YWwsIG9mLCBjb21iaW5lTGF0ZXN0V2l0aCwgZmlsdGVyLCBza2lwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBWYWxpZGF0b3JzLCBGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tICdAbmd4LWZvcm1seS9tYXRlcmlhbCc7XG5pbXBvcnQgeyBGaWVsZFR5cGVDb25maWcsIEZvcm1seUZpZWxkUHJvcHMgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBhZGRNaW51dGVzLCBzdGFydE9mRGF5LCBhZGREYXlzIH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgYXNPYnNlcnZhYmxlRnJvbUdldHRlciwgZmlsdGVyTWF5YmUsIE9ic2VydmFibGVPclZhbHVlR2V0dGVyLCBza2lwRmlyc3RNYXliZSwgU3Vic2NyaXB0aW9uT2JqZWN0LCBzd2l0Y2hNYXBNYXliZURlZmF1bHQsIHN3aXRjaE1hcE1heWJlT2JzIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBEYXRlVGltZVByZXNldCwgRGF0ZVRpbWVQcmVzZXRDb25maWd1cmF0aW9uLCBkYXRlVGltZVByZXNldCB9IGZyb20gJy4vZGF0ZXRpbWUnO1xuaW1wb3J0IHsgRGJ4RGF0ZVRpbWVGaWVsZE1lbnVQcmVzZXRzU2VydmljZSB9IGZyb20gJy4vZGF0ZXRpbWUuZmllbGQuc2VydmljZSc7XG5pbXBvcnQgeyBEYnhEYXRlVGltZVZhbHVlTW9kZSwgZGJ4RGF0ZVRpbWVJbnB1dFZhbHVlUGFyc2VGYWN0b3J5LCBkYnhEYXRlVGltZUlzU2FtZURhdGVUaW1lRmllbGRWYWx1ZSwgZGJ4RGF0ZVRpbWVPdXRwdXRWYWx1ZUZhY3RvcnkgfSBmcm9tICcuL2RhdGUudmFsdWUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2xQYXRoLCBzdHJlYW1WYWx1ZUZyb21Db250cm9sIH0gZnJvbSAnLi4vLi4vLi4vLi4vZm9ybS9mb3JtLmFuZ3VsYXIudXRpbCc7XG5pbXBvcnQgeyB0b2dnbGVEaXNhYmxlRm9ybUNvbnRyb2wgfSBmcm9tICcuLi8uLi8uLi8uLi9mb3JtL2Zvcm0nO1xuaW1wb3J0IHsgRXJyb3JTdGF0ZU1hdGNoZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcblxuZXhwb3J0IGVudW0gRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlIHtcbiAgLyoqXG4gICAqIFRpbWUgaXMgcmVxdWlyZWQuXG4gICAqL1xuICBSRVFVSVJFRCA9ICdyZXF1aXJlZCcsXG4gIC8qKlxuICAgKiBUaW1lIGlzIG9wdGlvbmFsLlxuICAgKi9cbiAgT1BUSU9OQUwgPSAnb3B0aW9uYWwnLFxuICAvKipcbiAgICogVGltZSBpcyBwZXJtZW5hbnRseSBvZmYuXG4gICAqL1xuICBOT05FID0gJ25vbmUnXG59XG5cbmV4cG9ydCB0eXBlIERieERhdGVUaW1lUGlja2VyQ29uZmlndXJhdGlvbiA9IE9taXQ8RGF0ZVRpbWVNaW51dGVDb25maWcsICdkYXRlJz47XG5cbmV4cG9ydCB0eXBlIERieERhdGVUaW1lRmllbGRTeW5jVHlwZSA9ICdiZWZvcmUnIHwgJ2FmdGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBEYnhEYXRlVGltZUZpZWxkU3luY0ZpZWxkIHtcbiAgLyoqXG4gICAqIEZpZWxkIGtleS9wYXRoIHRvIHN5bmMgd2l0aC9hZ2FpbnN0LlxuICAgKi9cbiAgcmVhZG9ubHkgc3luY1dpdGg6IHN0cmluZztcbiAgLyoqXG4gICAqIEhvdyB0byBzeW5jIGFnYWluc3QgdGhlIG90aGVyIGZpZWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3luY1R5cGU6IERieERhdGVUaW1lRmllbGRTeW5jVHlwZTtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgdGltZSBkYXRlIGZpZWxkIHRoYXQgaGFzIGEgcmVmZXJlbmNlIGFuZCBvcHRpb25hbCBtYXAgZnVuY3Rpb24gdG8gbWFwIHRoZSB2YWx1ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYnhEYXRlVGltZUZpZWxkVGltZURhdGVDb25maWc8SSA9IHVua25vd24+IHtcbiAgcmVhZG9ubHkgcGF0aDogRm9ybUNvbnRyb2xQYXRoO1xuICByZWFkb25seSBtYXBWYWx1ZT86IE1hcEZ1bmN0aW9uPEksIE1heWJlPERhdGVPckRheVN0cmluZz4+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEYnhEYXRlVGltZUZpZWxkVGltZURhdGVDb25maWcoaW5wdXQ6IHVua25vd24pOiBpbnB1dCBpcyBEYnhEYXRlVGltZUZpZWxkVGltZURhdGVDb25maWcge1xuICByZXR1cm4gaW5wdXQgIT0gbnVsbCAmJiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmIHR5cGVvZiAoaW5wdXQgYXMgRGJ4RGF0ZVRpbWVGaWVsZFRpbWVEYXRlQ29uZmlnKS5wYXRoID09PSAnc3RyaW5nJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhEYXRlVGltZUZpZWxkUHJvcHMgZXh0ZW5kcyBGb3JtbHlGaWVsZFByb3BzIHtcbiAgLyoqXG4gICAqIEN1c3RvbSBkYXRlIGxhYmVsLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byBEYXRlXG4gICAqL1xuICByZWFkb25seSBkYXRlTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSB0aW1lIGxhYmVsLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byBUaW1lXG4gICAqL1xuICByZWFkb25seSB0aW1lTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExhYmVsIHRvIHVzZSBmb3IgdGhlIGRhdGUgaGludCBmb3IgXCJBbGwgRGF5XCIuIERlZmF1bHRzIHRvIFwiQWxsIERheVwiLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxsRGF5TGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExhYmVsIHRvIHVzZSBmb3IgdGhlIGRhdGUgaGludCBmb3IgXCJBdFwiLiBEZWZhdWx0cyB0byBcIkF0XCIuXG4gICAqL1xuICByZWFkb25seSBhdFRpbWVMYWJlbD86IHN0cmluZztcblxuICAvKipcbiAgICogVmFsdWUgbW9kZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gREFURVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWVNb2RlPzogRGJ4RGF0ZVRpbWVWYWx1ZU1vZGU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRoZSBkYXRlIGlzIGhpZGRlbiwgYW5kIGF1dG9tYXRpY2FsbHkgdXNlcyB0b2RheS9pbnB1dCBkYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZU9ubHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPbmx5IGFwcGxpY2FibGUgd2hlbiB0aW1lT25seSBpcyBmYWxzZS5cbiAgICpcbiAgICogV2hldGhlciBvciBub3QgdG8gYWx3YXlzIHNob3cgdGhlIGRhdGUgaW5wdXQgZXZlbiB3aGVuIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgZGF0ZSB0aGF0IGNhbiBiZSBzZWxlY3RlZC5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGFsd2F5c1Nob3dEYXRlSW5wdXQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBhdXRvZmlsbCB0aGUgZGF0ZSB3aGVuIHRpbWUgaXMgcGlja2VkLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICovXG4gIHJlYWRvbmx5IGF1dG9maWxsRGF0ZVdoZW5UaW1lSXNQaWNrZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgdGltZSBjYW4gYmUgYWRkZWQvcmVtb3ZlZCBvcHRpb25hbGx5LlxuICAgKlxuICAgKiBUaGlzIGlzIGlnbm9yZWQgaWYgdGltZU9ubHkgaXMgc3BlY2lmaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZU1vZGU/OiBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGU7XG5cbiAgLyoqXG4gICAqIE90aGVyIGZvcm0gY29udHJvbCBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIHdoZXRoZXIgb3Igbm90IGl0IGlzIGEgZnVsbCBkYXkuXG4gICAqXG4gICAqIFRoaXMgZmllbGQgaXMgb25seSB1c2VkIGlmIHRpbWUgaXMgb3B0aW9uYWwuXG4gICAqXG4gICAqIFdoZW4gdGltZSBpcyBvZmYsIHRoZSBmaWVsZCBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGZ1bGxEYXlGaWVsZE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHBhc3MgdGhlIGRhdGUgdmFsdWUgYXMgYSBVVEMgZGF0ZSwgb3IgYSBkYXRlIGluIHRoZSBjdXJyZW50IHRpbWV6b25lLlxuICAgKi9cbiAgcmVhZG9ubHkgZnVsbERheUluVVRDPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3Qgb3QgaGlkZSB0aGUgZGF0ZSBoaW50IGluZm8gY29udGVudC5cbiAgICpcbiAgICogRmFsc2UgYnkgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgaGlkZURhdGVIaW50PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gaGlkZSB0aGUgZGF0ZS9jYWxlbmRhciBwaWNrZXIuXG4gICAqL1xuICByZWFkb25seSBoaWRlRGF0ZVBpY2tlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBwaWNrZXIgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcGlja2VyQ29uZmlnPzogT2JzZXJ2YWJsZU9yVmFsdWVHZXR0ZXI8RGJ4RGF0ZVRpbWVQaWNrZXJDb25maWd1cmF0aW9uPjtcblxuICAvKipcbiAgICogVXNlZCBmb3Igc3luY2luZyB3aXRoIG9uZSBvciBtb3JlIGZpZWxkcyB3aXRoIGEgRGF0ZSB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGdldFN5bmNGaWVsZHNPYnM/OiAoKSA9PiBPYnNlcnZhYmxlPEFycmF5T3JWYWx1ZTxEYnhEYXRlVGltZUZpZWxkU3luY0ZpZWxkPj47XG5cbiAgLyoqXG4gICAqIChPcHRpb25hbCkgVGhlIGlucHV0IHRpbWV6b25lIHRvIGRlZmF1bHQgdG8uXG4gICAqXG4gICAqIElnbm9yZWQgaWYgZnVsbERheUluVVRDIGlzIHRydWUuXG4gICAqL1xuICByZWFkb25seSB0aW1lem9uZT86IE1heWJlPE9ic2VydmFibGVPclZhbHVlR2V0dGVyPE1heWJlPFRpbWV6b25lU3RyaW5nPj4+O1xuXG4gIC8qKlxuICAgKiAoT3B0aW9uYWwpIFRoZSBkYXRlIHRvIGFwcGx5IHRoZSB0aW1lIHRvLlxuICAgKlxuICAgKiBUaGUgdGltZXpvbmUgYWJicnZpYXRpb24gd2lsbCBhbHNvIHVzZSB0aGlzIGRhdGUgd2hlbiB1c2luZyB0aGUgdGltZS1vbmx5IG1vZGUuXG4gICAqL1xuICByZWFkb25seSB0aW1lRGF0ZT86IE1heWJlPE9ic2VydmFibGVPclZhbHVlR2V0dGVyPE1heWJlPERieERhdGVUaW1lRmllbGRUaW1lRGF0ZUNvbmZpZyB8IEZvcm1Db250cm9sUGF0aCB8IERhdGVPckRheVN0cmluZz4+PjtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gZGlzcGxheSB0aGUgdGltZXpvbmUuIFRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3dUaW1lem9uZT86IE1heWJlPGJvb2xlYW4+O1xuXG4gIC8qKlxuICAgKiBDdXN0b20gcHJlc2V0cyB0byBzaG93IGluIHRoZSBkcm9wZG93bi5cbiAgICovXG4gIHJlYWRvbmx5IHByZXNldHM/OiBPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxEYXRlVGltZVByZXNldENvbmZpZ3VyYXRpb25bXT47XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lIGluIG1zIHRvIHByZXZlbnQgb3V0cHV0IGZyb20gZ29pbmcgb3V0IHdoZW4gdGhlIGlucHV0IHZhbHVlIGNoYW5nZXMuXG4gICAqL1xuICByZWFkb25seSBpbnB1dE91dHB1dERlYm91bmNlVGltZT86IE1pbGxpc2Vjb25kcztcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gZGlzcGxheSB0aGUgY2xlYXIgZGF0ZSBidXR0b24uIFRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3dDbGVhckJ1dHRvbj86IE1heWJlPGJvb2xlYW4+O1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIG1pbnV0ZXMgdG8gYWRkL3N1YnRyYWN0IHdoZW4gdXNpbmcgdGhlIGFycm93IGtleXMuXG4gICAqL1xuICByZWFkb25seSBtaW51dGVTdGVwPzogTWF5YmU8bnVtYmVyPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhEYXRlVGltZUZpZWxkU3luY1BhcnNlZEZpZWxkIGV4dGVuZHMgUGljazxEYnhEYXRlVGltZUZpZWxkU3luY0ZpZWxkLCAnc3luY1R5cGUnPiB7XG4gIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDxNYXliZTxEYXRlIHwgSVNPODYwMURhdGVTdHJpbmc+Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN5bmNDb25maWdWYWx1ZU9icyhwYXJzZUNvbmZpZ3NPYnM6IE9ic2VydmFibGU8RGJ4RGF0ZVRpbWVGaWVsZFN5bmNQYXJzZWRGaWVsZFtdPiwgdHlwZTogRGJ4RGF0ZVRpbWVGaWVsZFN5bmNUeXBlKTogT2JzZXJ2YWJsZTxEYXRlIHwgbnVsbD4ge1xuICByZXR1cm4gcGFyc2VDb25maWdzT2JzLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICBjb25zdCBjb25maWcgPSB4LmZpbmQoKHkpID0+IHkuc3luY1R5cGUgPT09IHR5cGUpO1xuICAgICAgbGV0IHJlc3VsdDogT2JzZXJ2YWJsZTxEYXRlIHwgbnVsbD47XG5cbiAgICAgIGlmIChjb25maWcpIHtcbiAgICAgICAgY29uc3QgeyBjb250cm9sIH0gPSBjb25maWc7XG4gICAgICAgIHJlc3VsdCA9IGNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoKGNvbnRyb2wudmFsdWUpLFxuICAgICAgICAgIG1hcCgoeCkgPT4gc2FmZVRvSnNEYXRlKHgpID8/IG51bGwpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBvZihudWxsKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG59XG5cbmNvbnN0IFRJTUVfT1VUUFVUX1RIUk9UVExFX1RJTUU6IE1pbGxpc2Vjb25kcyA9IDEwO1xuXG4vKipcbiAqIEVycm9yIGNvZGUgdXNlZCB3aGVuIHRoZSBzZWxlY3RlZCBkYXRlIGlzIG5vdCBpbiB0aGUgc2NoZWR1bGUuXG4gKi9cbmV4cG9ydCBjb25zdCBEQlhfREFURV9USU1FX0ZJRUxEX0RBVEVfTk9UX0lOX1NDSEVEVUxFX0VSUk9SID0gJ2RhdGVUaW1lRmllbGREYXRlTm90SW5TY2hlZHVsZSc7XG5cbi8qKlxuICogRXJyb3IgY29kZSB1c2VkIHdoZW4gdGhlIHNlbGVjdGVkIHRpbWUvdGltZSBpbnB1dCBpcyBub3QgaW4gdGhlIGxpbWl0ZWQgcmFuZ2UuXG4gKi9cbmV4cG9ydCBjb25zdCBEQlhfREFURV9USU1FX0ZJRUxEX1RJTUVfTk9UX0lOX1JBTkdFX0VSUk9SID0gJ2RhdGVUaW1lRmllbGRUaW1lTm90SW5SYW5nZSc7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJ2RhdGV0aW1lLmZpZWxkLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEYnhEYXRlVGltZUZpZWxkQ29tcG9uZW50IGV4dGVuZHMgRmllbGRUeXBlPEZpZWxkVHlwZUNvbmZpZzxEYnhEYXRlVGltZUZpZWxkUHJvcHM+PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBjZFJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGJ4RGF0ZVRpbWVGaWVsZENvbmZpZ1NlcnZpY2UgPSBpbmplY3QoRGJ4RGF0ZVRpbWVGaWVsZE1lbnVQcmVzZXRzU2VydmljZSk7XG5cbiAgcHJpdmF0ZSBfc3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIF92YWx1ZVN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSBfYXV0b0ZpbGxEYXRlU3luYyA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcblxuICBwcml2YXRlIF9jb25maWcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPE9ic2VydmFibGU8RGJ4RGF0ZVRpbWVQaWNrZXJDb25maWd1cmF0aW9uPj4+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGxhdGVzdENvbmZpZyQgPSB0aGlzLl9jb25maWcucGlwZShzd2l0Y2hNYXBNYXliZURlZmF1bHQoKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHByaXZhdGUgX3N5bmNDb25maWdPYnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPE9ic2VydmFibGU8QXJyYXlPclZhbHVlPERieERhdGVUaW1lRmllbGRTeW5jRmllbGQ+Pj4+KHVuZGVmaW5lZCk7XG5cbiAgcHJpdmF0ZSBfZGVmYXVsdFRpbWV6b25lID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxPYnNlcnZhYmxlPE1heWJlPFRpbWV6b25lU3RyaW5nPj4+Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIF90aW1lRGF0ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8T2JzZXJ2YWJsZTxNYXliZTxEYnhEYXRlVGltZUZpZWxkVGltZURhdGVDb25maWcgfCBGb3JtQ29udHJvbFBhdGggfCBEYXRlT3JEYXlTdHJpbmc+Pj4+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgX3ByZXNldHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE9ic2VydmFibGU8RGF0ZVRpbWVQcmVzZXRDb25maWd1cmF0aW9uW10+PihvZihbXSkpO1xuXG4gIHByaXZhdGUgX2Z1bGxEYXlJbnB1dEN0cmw/OiBGb3JtQ29udHJvbDtcbiAgcHJpdmF0ZSBfZnVsbERheUNvbnRyb2xPYnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPEFic3RyYWN0Q29udHJvbDxib29sZWFuPj4+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGZ1bGxEYXlDb250cm9sJCA9IHRoaXMuX2Z1bGxEYXlDb250cm9sT2JzLnBpcGUoZmlsdGVyTWF5YmUoKSk7XG5cbiAgcHJpdmF0ZSBfb2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBwcml2YXRlIF9mb3JtQ29udHJvbE9icyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8QWJzdHJhY3RDb250cm9sPE1heWJlPERhdGU+Pj4+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGZvcm1Db250cm9sJCA9IHRoaXMuX2Zvcm1Db250cm9sT2JzLnBpcGUoZmlsdGVyTWF5YmUoKSk7XG5cbiAgcHJpdmF0ZSBfY2xlYXJlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgX3VwZGF0ZVRpbWUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgX3Jlc3luY1RpbWVJbnB1dFN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSBfcmVzeW5jVGltZUlucHV0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICByZWFkb25seSB0aW1lRXJyb3JTdGF0ZU1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyID0ge1xuICAgIGlzRXJyb3JTdGF0ZTogKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwsIGZvcm0pID0+IHtcbiAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgIHJldHVybiAoY29udHJvbC5pbnZhbGlkICYmIChjb250cm9sLmRpcnR5IHx8IGNvbnRyb2wudG91Y2hlZCkpIHx8IHRoaXMuZXJyb3JTdGF0ZU1hdGNoZXIuaXNFcnJvclN0YXRlKHRoaXMuZm9ybUNvbnRyb2wsIGZvcm0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZWFkb25seSByZXN5bmNUaW1lSW5wdXQkID0gdGhpcy5fcmVzeW5jVGltZUlucHV0LnBpcGUoZGVib3VuY2VUaW1lKDIwMCksIHNoYXJlUmVwbGF5KDEpKTtcblxuICBwcml2YXRlIF9jb25maWdVcGRhdGVUaW1lU3luYyA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoXG4gICAgdGhpcy5sYXRlc3RDb25maWckLnBpcGUoc2tpcCgxKSkuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICB0aGlzLl91cGRhdGVUaW1lLm5leHQoKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IHRpbWV6b25lJDogT2JzZXJ2YWJsZTxNYXliZTxUaW1lem9uZVN0cmluZz4+ID0gdGhpcy5fZGVmYXVsdFRpbWV6b25lLnBpcGUoc3dpdGNoTWFwTWF5YmVEZWZhdWx0KCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnBpcGUoXG4gICAgbWFwKChkZWZhdWx0VGltZXpvbmUpID0+IHtcbiAgICAgIHJldHVybiBkZWZhdWx0VGltZXpvbmUgPz8gZ3Vlc3NDdXJyZW50VGltZXpvbmUoKTtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgdGltZXpvbmVJbnN0YW5jZSQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2U+PiA9IHRoaXMudGltZXpvbmUkLnBpcGUoXG4gICAgbWFwKCh0aW1lem9uZSkgPT4gKHRpbWV6b25lID8gZGF0ZVRpbWV6b25lVXRjTm9ybWFsKHsgdGltZXpvbmUgfSkgOiB1bmRlZmluZWQpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHRpbWVEYXRlJDogT2JzZXJ2YWJsZTxNYXliZTxEYXRlPj4gPSB0aGlzLl90aW1lRGF0ZS5waXBlKFxuICAgIHN3aXRjaE1hcE1heWJlRGVmYXVsdCgpLFxuICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgbGV0IG9iczogT2JzZXJ2YWJsZTxNYXliZTxEYXRlPj47XG5cbiAgICAgIGlmICh4KSB7XG4gICAgICAgIC8vIGlmIHRoZSBzdHJpbmcgaXMgbm90IGEgZGF0ZSBzdHJpbmcsIHRoZW4gdHJlYXQgaXQgYXMgYSBwYXRoXG4gICAgICAgIGlmICgodHlwZW9mIHggPT09ICdzdHJpbmcnICYmICFpc0lTTzg2MDFEYXlTdHJpbmdTdGFydCh4KSkgfHwgaXNEYnhEYXRlVGltZUZpZWxkVGltZURhdGVDb25maWcoeCkpIHtcbiAgICAgICAgICBjb25zdCB7IHBhdGgsIG1hcFZhbHVlIH06IERieERhdGVUaW1lRmllbGRUaW1lRGF0ZUNvbmZpZyA9IHR5cGVvZiB4ID09PSAnc3RyaW5nJyA/IHsgcGF0aDogeCB9IDogeDtcbiAgICAgICAgICBvYnMgPVxuICAgICAgICAgICAgc3RyZWFtVmFsdWVGcm9tQ29udHJvbDxEYXRlT3JEYXlTdHJpbmc+KHRoaXMuZm9ybSwgcGF0aCk/LnBpcGUoXG4gICAgICAgICAgICAgIG1hcChtYXBWYWx1ZSA/PyBtYXBJZGVudGl0eUZ1bmN0aW9uKCkpLFxuICAgICAgICAgICAgICBtYXAoKHgpID0+ICh4ID8gdG9Kc0RheURhdGUoeCkgOiB1bmRlZmluZWQpKVxuICAgICAgICAgICAgKSA/PyBvZih1bmRlZmluZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9icyA9IG9mKHRvSnNEYXlEYXRlKHgpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JzID0gb2YodW5kZWZpbmVkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9icztcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlRGF5KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHZhbHVlSW5TeXN0ZW1UaW1lem9uZSQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZT4+ID0gdGhpcy5mb3JtQ29udHJvbCQucGlwZShcbiAgICBtYXAoKGNvbnRyb2wpID0+IGNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoPE1heWJlPERhdGUgfCBJU084NjAxRGF5U3RyaW5nIHwgTWludXRlT2ZEYXkgfCBVbml4RGF0ZVRpbWVOdW1iZXI+Pihjb250cm9sLnZhbHVlKSwgc2hhcmVSZXBsYXkoMSkpKSxcbiAgICBjb21iaW5lTGF0ZXN0V2l0aCh0aGlzLnRpbWV6b25lSW5zdGFuY2UkKSxcbiAgICBzd2l0Y2hNYXAoKFt4LCB0aW1lem9uZUluc3RhbmNlXSkgPT4ge1xuICAgICAgcmV0dXJuIHgucGlwZShtYXAoZGJ4RGF0ZVRpbWVJbnB1dFZhbHVlUGFyc2VGYWN0b3J5KHRoaXMudmFsdWVNb2RlLCB0aW1lem9uZUluc3RhbmNlKSkpO1xuICAgIH0pLFxuICAgIHRocm90dGxlVGltZSgyMCwgdW5kZWZpbmVkLCB7IGxlYWRpbmc6IHRydWUsIHRyYWlsaW5nOiB0cnVlIH0pLCAvLyB0aHJvdHRsZSBpbmNvbWluZyB2YWx1ZXMgYW5kIHRpbWV6b25lIGNoYW5nZXNcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlSG91cnNBbmRNaW51dGVzKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHJlZnJlc2hJbnRlcmFsJCA9IGludGVydmFsKDEwICogMTAwMCk7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gdHJpZ2dlci9kaXNwbGF5IHZpc3VhbCB1cGRhdGVzIChzcGVjaWZpY2FsbHkgb24gdGltZURpc3RhbmNlLCBldGMuKS5cbiAgICovXG4gIHJlYWRvbmx5IGRpc3BsYXlWYWx1ZSQgPSB0aGlzLnJlZnJlc2hJbnRlcmFsJC5waXBlKFxuICAgIC8vIGV2ZXJ5IDEwIHNlY29uZHMsIHJlZnJlc2ggdy9pbnRlcnZhbFxuICAgIHN0YXJ0V2l0aCgwKSxcbiAgICBtYXAoKCkgPT4gbmV3IERhdGUoKS5nZXRNaW51dGVzKCkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgdGFwKCgpID0+IHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCkpLFxuICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnZhbHVlSW5TeXN0ZW1UaW1lem9uZSQpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgdGltZVN0cmluZyQ6IE9ic2VydmFibGU8UmVhZGFibGVUaW1lU3RyaW5nIHwgJyc+ID0gdGhpcy52YWx1ZUluU3lzdGVtVGltZXpvbmUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiAoeCA/IHRvTG9jYWxSZWFkYWJsZVRpbWVTdHJpbmcoeCkgOiAnJykpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkYXRlSW5wdXRDdHJsID0gbmV3IEZvcm1Db250cm9sPE1heWJlPERhdGU+PihudWxsLCB7XG4gICAgdmFsaWRhdG9yczogW11cbiAgfSk7XG5cbiAgcmVhZG9ubHkgdGltZUlucHV0Q3RybCA9IG5ldyBGb3JtQ29udHJvbDxNYXliZTxSZWFkYWJsZVRpbWVTdHJpbmc+PihudWxsLCB7XG4gICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucGF0dGVybigvXihub3cpJHxeKFswLTldfCgwWzAtOV0pfCgxWzAtOV0pfCgyWzAtM10pKSg6KT8oWzAtNV1bMC05XSk/KFxccyk/KFthcEFQXVtNbV0pPyhcXFxccykqJC8pXVxuICB9KTtcblxuICBnZXQgZGF0ZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0ZUxhYmVsID8/ICdEYXRlJztcbiAgfVxuXG4gIGdldCB0aW1lTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy50aW1lTGFiZWwgPz8gJ1RpbWUnO1xuICB9XG5cbiAgZ2V0IGFsbERheUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuYWxsRGF5TGFiZWwgPz8gJ0FsbCBEYXknO1xuICB9XG5cbiAgZ2V0IGF0VGltZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuYXRUaW1lTGFiZWwgPz8gJ0F0JztcbiAgfVxuXG4gIGdldCBkYXRlT25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50aW1lTW9kZSA9PT0gRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlLk5PTkU7XG4gIH1cblxuICBnZXQgZGF0ZVRpbWVGaWVsZCgpOiBEYnhEYXRlVGltZUZpZWxkUHJvcHMge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzO1xuICB9XG5cbiAgZ2V0IHRpbWVPbmx5KCk6IE1heWJlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB0aW1lVmFsdWVzT25seSA9IHRoaXMudmFsdWVNb2RlID09PSBEYnhEYXRlVGltZVZhbHVlTW9kZS5NSU5VVEVfT0ZfREFZO1xuXG4gICAgaWYgKHRpbWVWYWx1ZXNPbmx5KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZVRpbWVGaWVsZC50aW1lT25seTtcbiAgICB9XG4gIH1cblxuICBnZXQgYWx3YXlzU2hvd0RhdGVJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5hbHdheXNTaG93RGF0ZUlucHV0ID8/IHRydWU7XG4gIH1cblxuICBnZXQgYXV0b2ZpbGxEYXRlV2hlblRpbWVJc1BpY2tlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5hdXRvZmlsbERhdGVXaGVuVGltZUlzUGlja2VkID8/IHRoaXMuYWx3YXlzU2hvd0RhdGVJbnB1dCA9PT0gZmFsc2U7XG4gIH1cblxuICBnZXQgc2hvd0RhdGVJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudGltZU9ubHk7XG4gIH1cblxuICBnZXQgdmFsdWVNb2RlKCk6IERieERhdGVUaW1lVmFsdWVNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy52YWx1ZU1vZGUgPz8gRGJ4RGF0ZVRpbWVWYWx1ZU1vZGUuREFURTtcbiAgfVxuXG4gIGdldCB0aW1lTW9kZSgpOiBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUge1xuICAgIGNvbnN0IGRhdGVWYWx1ZXNPbmx5ID0gdGhpcy52YWx1ZU1vZGUgPT09IERieERhdGVUaW1lVmFsdWVNb2RlLkRBWV9TVFJJTkc7XG5cbiAgICBpZiAoZGF0ZVZhbHVlc09ubHkpIHtcbiAgICAgIHJldHVybiBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUuTk9ORTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudGltZU9ubHkgPyBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUuUkVRVUlSRUQgOiB0aGlzLmRhdGVUaW1lRmllbGQudGltZU1vZGUgPz8gRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlLlJFUVVJUkVEO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc0RhdGVSZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5yZXF1aXJlZCA/PyBmYWxzZTtcbiAgfVxuXG4gIGdldCBpc1RpbWVSZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0RhdGVSZXF1aXJlZCAmJiB0aGlzLnRpbWVNb2RlID09PSBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUuUkVRVUlSRUQ7XG4gIH1cblxuICBnZXQgZGVzY3JpcHRpb24oKTogTWF5YmU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMuZGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgaGlkZURhdGVIaW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLmhpZGVEYXRlSGludCA/PyBmYWxzZTtcbiAgfVxuXG4gIGdldCBoaWRlRGF0ZVBpY2tlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5oaWRlRGF0ZVBpY2tlciA/PyBmYWxzZTtcbiAgfVxuXG4gIGdldCB0aW1lem9uZSgpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy50aW1lem9uZTtcbiAgfVxuXG4gIGdldCB0aW1lRGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy50aW1lRGF0ZTtcbiAgfVxuXG4gIGdldCBzaG93VGltZXpvbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMuc2hvd1RpbWV6b25lID8/IHRydWU7XG4gIH1cblxuICBnZXQgcHJlc2V0cygpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5wcmVzZXRzO1xuICB9XG5cbiAgZ2V0IHNob3dDbGVhckJ1dHRvbigpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5zaG93Q2xlYXJCdXR0b247XG4gIH1cblxuICBnZXQgbWludXRlU3RlcCgpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5taW51dGVTdGVwID8/IHRoaXMuZmllbGQucHJvcHMuc3RlcCA/PyA1O1xuICB9XG5cbiAgcmVhZG9ubHkgZnVsbERheSQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmZ1bGxEYXlDb250cm9sJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoY29udHJvbCkgPT4gY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgoY29udHJvbC52YWx1ZSkpKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgc2hvd1RpbWVJbnB1dCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmZ1bGxEYXkkLnBpcGUobWFwKCh4KSA9PiAheCAmJiB0aGlzLnRpbWVNb2RlICE9PSBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUuTk9ORSkpO1xuXG4gIHJlYWRvbmx5IHNob3dBZGRUaW1lJCA9IHRoaXMuc2hvd1RpbWVJbnB1dCQucGlwZShcbiAgICBtYXAoKHgpID0+ICF4ICYmIHRoaXMudGltZU1vZGUgPT09IERieERhdGVUaW1lRmllbGRUaW1lTW9kZS5PUFRJT05BTCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50RGF0ZSQgPSB0aGlzLmRhdGVJbnB1dEN0cmwudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMuZGF0ZUlucHV0Q3RybC52YWx1ZSksIHNoYXJlUmVwbGF5KDEpKTtcbiAgcmVhZG9ubHkgZGF0ZSQgPSB0aGlzLmN1cnJlbnREYXRlJC5waXBlKGZpbHRlck1heWJlKCksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSB0aW1lem9uZUFiYnJldmlhdGlvbiQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmN1cnJlbnREYXRlJCwgdGhpcy50aW1lem9uZSQsIHRoaXMudGltZURhdGUkXSkucGlwZShcbiAgICBtYXAoKFtkYXRlLCB0aW1lem9uZSwgdGltZURhdGVdKSA9PiBnZXRUaW1lem9uZUFiYnJldmlhdGlvbih0aW1lem9uZSwgdGltZURhdGUgPz8gZGF0ZSA/PyBuZXcgRGF0ZSgpKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGVWYWx1ZSQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZT4+ID0gbWVyZ2UodGhpcy5kYXRlJCwgdGhpcy52YWx1ZUluU3lzdGVtVGltZXpvbmUkLnBpcGUoc2tpcEZpcnN0TWF5YmUoKSkpLnBpcGUoXG4gICAgbWFwKCh4OiBNYXliZTxEYXRlPikgPT4gKHggPyBzdGFydE9mRGF5KHgpIDogbnVsbCkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkPE1heWJlPERhdGU+Pihpc1NhbWVEYXRlRGF5KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHRpbWVJbnB1dCQ6IE9ic2VydmFibGU8UmVhZGFibGVUaW1lU3RyaW5nPiA9IHRoaXMuX3VwZGF0ZVRpbWUucGlwZShcbiAgICBkZWJvdW5jZVRpbWUoNSksXG4gICAgbWFwKCgpID0+IHRoaXMudGltZUlucHV0Q3RybC52YWx1ZSB8fCAnJyksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICApO1xuXG4gIHJlYWRvbmx5IHN5bmNDb25maWdPYnMkID0gdGhpcy5fc3luY0NvbmZpZ09icy5waXBlKHN3aXRjaE1hcE1heWJlRGVmYXVsdCgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgcGFyc2VkU3luY0NvbmZpZ3MkOiBPYnNlcnZhYmxlPERieERhdGVUaW1lRmllbGRTeW5jUGFyc2VkRmllbGRbXT4gPSB0aGlzLnN5bmNDb25maWdPYnMkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB7XG4gICAgICBsZXQgcGFyc2VkOiBEYnhEYXRlVGltZUZpZWxkU3luY1BhcnNlZEZpZWxkW107XG5cbiAgICAgIGlmICh4KSB7XG4gICAgICAgIHBhcnNlZCA9IGZpbHRlck1heWJlQXJyYXlWYWx1ZXMoXG4gICAgICAgICAgYXNBcnJheSh4KS5tYXAoKHkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KHkuc3luY1dpdGgpO1xuXG4gICAgICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wsXG4gICAgICAgICAgICAgICAgLi4ueVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkID0gW107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzeW5jQ29uZmlnQmVmb3JlVmFsdWUkOiBPYnNlcnZhYmxlPERhdGUgfCBudWxsPiA9IHN5bmNDb25maWdWYWx1ZU9icyh0aGlzLnBhcnNlZFN5bmNDb25maWdzJCwgJ2JlZm9yZScpO1xuICByZWFkb25seSBzeW5jQ29uZmlnQWZ0ZXJWYWx1ZSQ6IE9ic2VydmFibGU8RGF0ZSB8IG51bGw+ID0gc3luY0NvbmZpZ1ZhbHVlT2JzKHRoaXMucGFyc2VkU3luY0NvbmZpZ3MkLCAnYWZ0ZXInKTtcblxuICByZWFkb25seSBpc1RpbWVDbGVhcmVkJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuY3VycmVudERhdGUkLCB0aGlzLl90aW1lRGF0ZS5waXBlKHN0YXJ0V2l0aChudWxsKSldKS5waXBlKFxuICAgIHN3aXRjaE1hcCgoW2RhdGUsIHRpbWVdKSA9PiB7XG4gICAgICBjb25zdCBpc1RpbWVDbGVhcmVkID0gQm9vbGVhbighZGF0ZSAmJiAhdGltZSk7XG4gICAgICByZXR1cm4gdGhpcy5fY2xlYXJlZC5waXBlKFxuICAgICAgICBtYXAoKCkgPT4gdHJ1ZSksXG4gICAgICAgIHN0YXJ0V2l0aChpc1RpbWVDbGVhcmVkKVxuICAgICAgKTtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcmF3RGF0ZVRpbWUkOiBPYnNlcnZhYmxlPE1heWJlPERhdGU+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX2NvbmZpZy5waXBlKFxuICAgICAgZmlyc3QoKSxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiAodGhpcy50aW1lT25seSA/IG9mKG51bGwpIDogdGhpcy5kYXRlVmFsdWUkKSlcbiAgICApLFxuICAgIHRoaXMudGltZUlucHV0JC5waXBlKHN0YXJ0V2l0aChudWxsKSksXG4gICAgdGhpcy5mdWxsRGF5JCxcbiAgICB0aGlzLnRpbWVEYXRlJCxcbiAgICB0aGlzLmlzVGltZUNsZWFyZWQkXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbZGF0ZSwgdGltZVN0cmluZywgZnVsbERheSwgdGltZURhdGUsIGlzVGltZUNsZWFyZWRdKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0OiBNYXliZTxEYXRlPjtcblxuICAgICAgaWYgKCFpc1RpbWVDbGVhcmVkKSB7XG4gICAgICAgIGlmICghZGF0ZSB8fCB0aGlzLnRpbWVPbmx5KSB7XG4gICAgICAgICAgZGF0ZSA9IHRpbWVEYXRlID8/IG5ldyBEYXRlKCk7IC8vIHVzZSB0aGUgdGltZSBkYXRlLCBvciBkZWZhdWx0IHRvIHRoZSBjdXJyZW50IGRheVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICBpZiAoZnVsbERheSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVGaWVsZC5mdWxsRGF5SW5VVEMpIHtcbiAgICAgICAgICAgICAgcmVzdWx0ID0gdXRjRGF5Rm9yRGF0ZShkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IHN0YXJ0T2ZEYXkoZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0aW1lU3RyaW5nKSB7XG4gICAgICAgICAgICByZXN1bHQgPVxuICAgICAgICAgICAgICByZWFkYWJsZVRpbWVTdHJpbmdUb0RhdGUodGltZVN0cmluZywge1xuICAgICAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICAgICAgdXNlU3lzdGVtVGltZXpvbmU6IHRydWVcbiAgICAgICAgICAgICAgfSkgPz8gZGF0ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnRpbWVPbmx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy50aW1lTW9kZSAhPT0gRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlLlJFUVVJUkVEKSB7XG4gICAgICAgICAgICAgIC8vIG9ubHkgYXV0b2ZpbGwgdGhlIGRhdGUgaWYgdGhlIHRpbWUgaXMgbWFya2VkIGFzIHJlcXVpcmVkIChhbmQgdGhlIHRpbWUgc3RyaW5nIGlzIGVtcHR5KVxuICAgICAgICAgICAgICByZXN1bHQgPSBkYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVIb3Vyc0FuZE1pbnV0ZXMpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZGF0ZVRpbWVQaWNrZXJDb25maWckOiBPYnNlcnZhYmxlPE1heWJlPERieERhdGVUaW1lUGlja2VyQ29uZmlndXJhdGlvbj4+ID0gY29tYmluZUxhdGVzdChbdGhpcy5fY29uZmlnLnBpcGUoc3dpdGNoTWFwTWF5YmVPYnMoKSksIHRoaXMuc3luY0NvbmZpZ0JlZm9yZVZhbHVlJCwgdGhpcy5zeW5jQ29uZmlnQWZ0ZXJWYWx1ZSRdKS5waXBlKFxuICAgIG1hcCgoW3gsIGRhdGVJbnB1dE1pbiwgZGF0ZUlucHV0TWF4XSkgPT4ge1xuICAgICAgbGV0IHJlc3VsdDogTWF5YmU8RGJ4RGF0ZVRpbWVQaWNrZXJDb25maWd1cmF0aW9uPiA9IHg7XG5cbiAgICAgIGlmIChkYXRlSW5wdXRNaW4gIT0gbnVsbCB8fCBkYXRlSW5wdXRNYXggIT0gbnVsbCkge1xuICAgICAgICBjb25zdCB7IG1pbjogbGltaXRNaW4sIG1heDogbGltaXRNYXggfSA9IHg/LmxpbWl0cyA/PyB7fTtcbiAgICAgICAgY29uc3QgbWluID0gZmluZE1pbkRhdGUoW2RhdGVJbnB1dE1pbiwgZGF0ZUZyb21Mb2dpY2FsRGF0ZShsaW1pdE1pbildKTtcbiAgICAgICAgY29uc3QgbWF4ID0gZmluZE1heERhdGUoW2RhdGVJbnB1dE1heCwgZGF0ZUZyb21Mb2dpY2FsRGF0ZShsaW1pdE1heCldKTtcblxuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgLi4ueCxcbiAgICAgICAgICBsaW1pdHM6IHtcbiAgICAgICAgICAgIC4uLng/LmxpbWl0cyxcbiAgICAgICAgICAgIG1pbixcbiAgICAgICAgICAgIG1heFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZGF0ZUlucHV0TWluJDogT2JzZXJ2YWJsZTxEYXRlIHwgbnVsbD4gPSB0aGlzLmRhdGVUaW1lUGlja2VyQ29uZmlnJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gKHg/LmxpbWl0cz8ubWluID8/IG51bGwpIGFzIERhdGUgfCBudWxsKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxEYXRlIHwgbnVsbD4oaXNTYW1lRGF0ZSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkYXRlSW5wdXRNYXgkOiBPYnNlcnZhYmxlPERhdGUgfCBudWxsPiA9IHRoaXMuZGF0ZVRpbWVQaWNrZXJDb25maWckLnBpcGUoXG4gICAgbWFwKCh4KSA9PiAoeD8ubGltaXRzPy5tYXggPz8gbnVsbCkgYXMgRGF0ZSB8IG51bGwpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkPERhdGUgfCBudWxsPihpc1NhbWVEYXRlKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGVyZSBpcyBhIGxpbWl0ZWQgbWluL21heCBkYXRlIHJhbmdlIGFwcGxpZWQvYXZhaWxhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgaGFzUmVzdHJpY3RlZERhdGVSYW5nZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmRhdGVJbnB1dE1pbiQsIHRoaXMuZGF0ZUlucHV0TWF4JF0pLnBpcGUoXG4gICAgbWFwKChbYSwgYl0pID0+IEJvb2xlYW4oYSB8fCBiKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGVNaW5BbmRNYXhJc1NhbWVEYXkkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gY29tYmluZUxhdGVzdChbdGhpcy5kYXRlSW5wdXRNaW4kLCB0aGlzLmRhdGVJbnB1dE1heCRdKS5waXBlKFxuICAgIG1hcCgoW2EsIGJdKSA9PiBCb29sZWFuKGEgJiYgYikgJiYgaXNTYW1lRGF0ZURheShhLCBiKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHBpY2tlckZpbHRlciQ6IE9ic2VydmFibGU8RGVjaXNpb25GdW5jdGlvbjxEYXRlIHwgbnVsbD4+ID0gdGhpcy5kYXRlVGltZVBpY2tlckNvbmZpZyQucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIG1hcCgoeCkgPT4ge1xuICAgICAgaWYgKHgpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gZGF0ZVRpbWVNaW51dGVXaG9sZURheURlY2lzaW9uRnVuY3Rpb24oeCwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gKHg6IERhdGUgfCBudWxsKSA9PiAoeCAhPSBudWxsID8gZmlsdGVyKHgpIDogdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKCkgPT4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRlZmF1bHRQaWNrZXJGaWx0ZXI6IERlY2lzaW9uRnVuY3Rpb248RGF0ZSB8IG51bGw+ID0gKCkgPT4gdHJ1ZTtcblxuICByZWFkb25seSB0aW1lT3V0cHV0JDogT2JzZXJ2YWJsZTxNYXliZTxEYXRlPj4gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnJhd0RhdGVUaW1lJCwgdGhpcy5fb2Zmc2V0LCB0aGlzLmRhdGVUaW1lUGlja2VyQ29uZmlnJF0pLnBpcGUoXG4gICAgdGhyb3R0bGVUaW1lKFRJTUVfT1VUUFVUX1RIUk9UVExFX1RJTUUsIHVuZGVmaW5lZCwgeyBsZWFkaW5nOiBmYWxzZSwgdHJhaWxpbmc6IHRydWUgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGN1cnJlbnQsIG5leHQpID0+IGN1cnJlbnRbMF0gPT09IG5leHRbMF0gJiYgbmV4dFsxXSA9PT0gMCAmJiBjdXJyZW50WzJdID09PSBuZXh0WzJdKSxcbiAgICB0YXAoKFssIHN0ZXBzT2Zmc2V0XSkgPT4gKHN0ZXBzT2Zmc2V0ID8gdGhpcy5fb2Zmc2V0Lm5leHQoMCkgOiAwKSksXG4gICAgbWFwKChbZGF0ZSwgc3RlcHNPZmZzZXQsIGNvbmZpZ10pID0+IHtcbiAgICAgIGlmIChkYXRlICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRGF0ZVRpbWVNaW51dGVJbnN0YW5jZSh7XG4gICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgcm91bmREb3duVG9NaW51dGU6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gb25seSBjbGFtcCB3aGVuIHRoZSBzdGVwcyBvZmZzZXQgaXMgc2V0XG4gICAgICAgIGlmIChzdGVwc09mZnNldCkge1xuICAgICAgICAgIGRhdGUgPSBpbnN0YW5jZS5jbGFtcChkYXRlKTtcblxuICAgICAgICAgIGNvbnN0IG1pbnV0ZXMgPSBzdGVwc09mZnNldCAqIHRoaXMubWludXRlU3RlcDtcblxuICAgICAgICAgIGlmIChtaW51dGVzICE9IDApIHtcbiAgICAgICAgICAgIGRhdGUgPSBhZGRNaW51dGVzKGRhdGUsIG1pbnV0ZXMpO1xuICAgICAgICAgICAgZGF0ZSA9IGluc3RhbmNlLmNsYW1wKGRhdGUpOyAvLyBjbGFtcCB0aGUgZGF0ZSBhZ2FpblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlSG91cnNBbmRNaW51dGVzKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGVUaW1lUGlja2VySW5zdGFuY2UkID0gdGhpcy5kYXRlVGltZVBpY2tlckNvbmZpZyQucGlwZShcbiAgICBtYXAoKGNvbmZpZykgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlVGltZU1pbnV0ZUluc3RhbmNlKHtcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICByb3VuZERvd25Ub01pbnV0ZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBoYXNFbXB0eURpc3BsYXlWYWx1ZSQgPSB0aGlzLmRpc3BsYXlWYWx1ZSQucGlwZShcbiAgICBtYXAoKHgpID0+ICF4KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcHJlc2V0cyQ6IE9ic2VydmFibGU8RGF0ZVRpbWVQcmVzZXRbXT4gPSB0aGlzLl9wcmVzZXRzLnBpcGUoXG4gICAgc3dpdGNoTWFwTWF5YmVPYnMoKSxcbiAgICBtYXAoKHg6IERhdGVUaW1lUHJlc2V0Q29uZmlndXJhdGlvbltdKSA9PiB4Lm1hcChkYXRlVGltZVByZXNldCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgc2hvd0NsZWFyQnV0dG9uJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuaGFzRW1wdHlEaXNwbGF5VmFsdWUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiBCb29sZWFuKHRoaXMuc2hvd0NsZWFyQnV0dG9uICYmICF4KSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGNhbkF1dG9maWxsRGF0ZVdpdGhPbmx5QXZhaWxhYmxlRGF0ZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmRhdGVNaW5BbmRNYXhJc1NhbWVEYXkkO1xuXG4gIHJlYWRvbmx5IHNob3dEYXRlSW5wdXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5kYXRlTWluQW5kTWF4SXNTYW1lRGF5JC5waXBlKFxuICAgIG1hcCgoZGF0ZU1pbkFuZE1heElzU2FtZURheSkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuc2hvd0RhdGVJbnB1dCAmJiAodGhpcy5hbHdheXNTaG93RGF0ZUlucHV0IHx8ICFkYXRlTWluQW5kTWF4SXNTYW1lRGF5KTtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY3VycmVudEVycm9yTWVzc2FnZSQgPSB0aGlzLmZvcm1Db250cm9sJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoZm9ybUNvbnRyb2wpID0+XG4gICAgICBmb3JtQ29udHJvbC5zdGF0dXNDaGFuZ2VzLnBpcGUoXG4gICAgICAgIGZpbHRlcigoeCkgPT4geCA9PT0gJ0lOVkFMSUQnIHx8IHggPT09ICdWQUxJRCcpLFxuICAgICAgICBtYXAoKHgpID0+IHtcbiAgICAgICAgICBsZXQgY3VycmVudEVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgaWYgKHggPT09ICdJTlZBTElEJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgICAgICAgY3VycmVudEVycm9yTWVzc2FnZSA9ICdEYXRlIGlzIHJlcXVpcmVkJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtQ29udHJvbC5oYXNFcnJvcihEQlhfREFURV9USU1FX0ZJRUxEX0RBVEVfTk9UX0lOX1NDSEVEVUxFX0VSUk9SKSkge1xuICAgICAgICAgICAgICBjdXJyZW50RXJyb3JNZXNzYWdlID0gJ0RhdGUgZG9lcyBub3QgZmFsbCBvbiBhbiBhdmFpbGFibGUgZGF0ZXMgaW4gc2NoZWR1bGUuJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtQ29udHJvbC5oYXNFcnJvcihEQlhfREFURV9USU1FX0ZJRUxEX1RJTUVfTk9UX0lOX1JBTkdFX0VSUk9SKSkge1xuICAgICAgICAgICAgICBjdXJyZW50RXJyb3JNZXNzYWdlID0gJ1RpbWUgaXMgbm90IHZhbGlkIGZvciB0aGUgZ2l2ZW4gZGF0ZS4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY3VycmVudEVycm9yTWVzc2FnZSA9ICdUaGUgZ2l2ZW4gZGF0ZSBhbmQgdGltZSBpcyBpbnZhbGlkLic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnRFcnJvck1lc3NhZ2U7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKSxcbiAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGhhc0Vycm9yJCA9IHRoaXMuY3VycmVudEVycm9yTWVzc2FnZSQucGlwZShcbiAgICBtYXAoKHgpID0+IEJvb2xlYW4oeCkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9mb3JtQ29udHJvbE9icy5uZXh0KHRoaXMuZm9ybUNvbnRyb2wpO1xuXG4gICAgY29uc3QgaW5wdXRQaWNrZXJDb25maWcgPSB0aGlzLmRhdGVUaW1lRmllbGQucGlja2VyQ29uZmlnO1xuICAgIHRoaXMuX2NvbmZpZy5uZXh0KGlucHV0UGlja2VyQ29uZmlnID8gYXNPYnNlcnZhYmxlRnJvbUdldHRlcihpbnB1dFBpY2tlckNvbmZpZykgOiBvZih7fSkpO1xuICAgIHRoaXMuX3N5bmNDb25maWdPYnMubmV4dCh0aGlzLmRhdGVUaW1lRmllbGQuZ2V0U3luY0ZpZWxkc09icz8uKCkpO1xuXG4gICAgdGhpcy5fc3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRoaXMudGltZXpvbmVJbnN0YW5jZSQucGlwZShtYXAoKHRpbWV6b25lSW5zdGFuY2UpID0+IGRieERhdGVUaW1lT3V0cHV0VmFsdWVGYWN0b3J5KHRoaXMudmFsdWVNb2RlLCB0aW1lem9uZUluc3RhbmNlKSkpKSxcbiAgICAgICAgdGhyb3R0bGVUaW1lKFRJTUVfT1VUUFVUX1RIUk9UVExFX1RJTUUsIHVuZGVmaW5lZCwgeyBsZWFkaW5nOiBmYWxzZSwgdHJhaWxpbmc6IHRydWUgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoW2N1cnJlbnRWYWx1ZSwgdmFsdWVGYWN0b3J5XSkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLnRpbWVPdXRwdXQkLnBpcGUoXG4gICAgICAgICAgICB0aHJvdHRsZVRpbWUoVElNRV9PVVRQVVRfVEhST1RUTEVfVElNRSAqIDIsIHVuZGVmaW5lZCwgeyBsZWFkaW5nOiBmYWxzZSwgdHJhaWxpbmc6IHRydWUgfSksXG4gICAgICAgICAgICBza2lwRmlyc3RNYXliZSgpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZUhvdXJzQW5kTWludXRlcyksXG4gICAgICAgICAgICBtYXAoKHgpID0+IHZhbHVlRmFjdG9yeSh4KSksXG4gICAgICAgICAgICBmaWx0ZXIoKHgpID0+ICFkYnhEYXRlVGltZUlzU2FtZURhdGVUaW1lRmllbGRWYWx1ZSh4LCBjdXJyZW50VmFsdWUpKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIH0pO1xuXG4gICAgbGV0IGhhc1NldE1pZG5pZ2h0RnJvbUlucHV0ID0gZmFsc2U7XG5cbiAgICAvKlxuICAgIHRoaXMuX3ZhbHVlU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMudGltZVN0cmluZyQuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICB0aGlzLnNldFRpbWUoeCk7XG4gICAgfSk7XG4gICAgKi9cblxuICAgIGlmICh0aGlzLmF1dG9maWxsRGF0ZVdoZW5UaW1lSXNQaWNrZWQpIHtcbiAgICAgIHRoaXMuX2F1dG9GaWxsRGF0ZVN5bmMuc3Vic2NyaXB0aW9uID0gdGhpcy5jYW5BdXRvZmlsbERhdGVXaXRoT25seUF2YWlsYWJsZURhdGUkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoY2FuQXV0b2ZpbGwpID0+IHtcbiAgICAgICAgICAgIGlmIChjYW5BdXRvZmlsbCkge1xuICAgICAgICAgICAgICAvLyB3aGVuIHRoZSB0aW1lIHVwZGF0ZXMgdGhlIGZpcnN0IHRpbWUsIHNldCB0aGUgY3VycmVudCBtaW4gZGF0ZVxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlVGltZS5waXBlKFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoeCkgPT4gdGhpcy5kYXRlSW5wdXRNaW4kKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJNYXliZSgpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7IC8vIGRvbid0IHNob3cgYW55dGhpbmdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKGF1dG9EYXRlKSA9PiB7XG4gICAgICAgICAgaWYgKGF1dG9EYXRlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZUlucHV0Q3RybC5zZXRWYWx1ZShhdXRvRGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZVN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLnZhbHVlSW5TeXN0ZW1UaW1lem9uZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHgpID0+ICh4ID8gaXNTYW1lRGF0ZSh4LCBzdGFydE9mRGF5KHgpKSA6IGZhbHNlKSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHN3aXRjaE1hcCgoaXNJbnB1dFZhbHVlQXRNaWRuaWdodCkgPT4ge1xuICAgICAgICAgIGhhc1NldE1pZG5pZ2h0RnJvbUlucHV0ID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudGltZVN0cmluZyQucGlwZShcbiAgICAgICAgICAgIC8vIHNraXAoMSksXG4gICAgICAgICAgICBtYXAoKHRpbWVTdHJpbmcpID0+IFt0aW1lU3RyaW5nLCBpc0lucHV0VmFsdWVBdE1pZG5pZ2h0XSBhcyBbc3RyaW5nLCBib29sZWFuXSlcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoW3gsIGlzSW5wdXRWYWx1ZUF0TWlkbmlnaHRdKSA9PiB7XG4gICAgICAgIC8vIFNraXAgZXZlbnRzIHdoZXJlIHRoZSB0aW1lSW5wdXQgdmFsdWUgaXMgY2xlYXJlZCwgdW5sZXNzIHRoZSBpbnB1dCB2YWx1ZSBpcyBhdCBtaWRuaWdodCBhbmQgd2UndmUgYWxyZWFkeSBwcm9jZXNzZWQgaXQgYmVpbmcgYXQgbWlkbmlnaHRcbiAgICAgICAgaWYgKCF0aGlzLnRpbWVJbnB1dEN0cmwudmFsdWUgJiYgeCA9PT0gJzEyOjAwQU0nICYmICghaXNJbnB1dFZhbHVlQXRNaWRuaWdodCB8fCAoaXNJbnB1dFZhbHVlQXRNaWRuaWdodCAmJiBoYXNTZXRNaWRuaWdodEZyb21JbnB1dCkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSBoYXMgc2V0IGZsYWdcbiAgICAgICAgaWYgKHggPT09ICcxMjowMEFNJyAmJiBpc0lucHV0VmFsdWVBdE1pZG5pZ2h0KSB7XG4gICAgICAgICAgaGFzU2V0TWlkbmlnaHRGcm9tSW5wdXQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRUaW1lKHgpO1xuICAgICAgfSk7XG5cbiAgICAvLyBTZXQgZGVmYXVsdCB0aW1lem9uZSBpZiBwcm92aWRlZC5cbiAgICBpZiAodGhpcy50aW1lem9uZSAmJiAhdGhpcy5kYXRlVGltZUZpZWxkLmZ1bGxEYXlJblVUQykge1xuICAgICAgdGhpcy5fZGVmYXVsdFRpbWV6b25lLm5leHQoYXNPYnNlcnZhYmxlRnJvbUdldHRlcih0aGlzLnRpbWV6b25lKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGltZURhdGUubmV4dChhc09ic2VydmFibGVGcm9tR2V0dGVyKHRoaXMudGltZURhdGUpKTtcblxuICAgIC8vIFdhdGNoIGZvciBkaXNhYmxlZCBjaGFuZ2VzIHNvIHdlIGNhbiBwcm9wb2dhdGUgdGhlbSBwcm9wZXJseS5cbiAgICB0aGlzLmZvcm1Db250cm9sLnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZSgoaXNEaXNhYmxlZCkgPT4ge1xuICAgICAgdG9nZ2xlRGlzYWJsZUZvcm1Db250cm9sKHRoaXMuZGF0ZUlucHV0Q3RybCwgaXNEaXNhYmxlZCk7XG4gICAgICB0b2dnbGVEaXNhYmxlRm9ybUNvbnRyb2wodGhpcy50aW1lSW5wdXRDdHJsLCBpc0Rpc2FibGVkKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGlzRnVsbERheUZpZWxkID0gdGhpcy5kYXRlVGltZUZpZWxkLmZ1bGxEYXlGaWVsZE5hbWU7XG4gICAgbGV0IGZ1bGxEYXlGaWVsZEN0cmw6IE1heWJlPEFic3RyYWN0Q29udHJvbD47XG5cbiAgICBpZiAoaXNGdWxsRGF5RmllbGQpIHtcbiAgICAgIGZ1bGxEYXlGaWVsZEN0cmwgPSB0aGlzLmZvcm0uZ2V0KGlzRnVsbERheUZpZWxkKTtcbiAgICB9XG5cbiAgICBpZiAoIWZ1bGxEYXlGaWVsZEN0cmwpIHtcbiAgICAgIGNvbnN0IGlzRnVsbERheSA9IHRoaXMudGltZU1vZGUgPT09IERieERhdGVUaW1lRmllbGRUaW1lTW9kZS5OT05FO1xuICAgICAgdGhpcy5fZnVsbERheUlucHV0Q3RybCA9IG5ldyBGb3JtQ29udHJvbChpc0Z1bGxEYXkpO1xuXG4gICAgICAvLyBTZXQgdGhlIGNvbnRyb2wgaW4gdGhlIGZvcm0gdG9vIGlmIHRoZSBuYW1lIGlzIGRlZmluZWQuXG4gICAgICBpZiAoaXNGdWxsRGF5RmllbGQpIHtcbiAgICAgICAgKHRoaXMuZm9ybSBhcyBGb3JtR3JvdXApLmFkZENvbnRyb2woaXNGdWxsRGF5RmllbGQsIHRoaXMuX2Z1bGxEYXlJbnB1dEN0cmwpO1xuICAgICAgfVxuXG4gICAgICBmdWxsRGF5RmllbGRDdHJsID0gdGhpcy5fZnVsbERheUlucHV0Q3RybDtcbiAgICB9XG5cbiAgICB0aGlzLl9mdWxsRGF5Q29udHJvbE9icy5uZXh0KGZ1bGxEYXlGaWVsZEN0cmwpO1xuXG4gICAgc3dpdGNoICh0aGlzLnRpbWVNb2RlKSB7XG4gICAgICBjYXNlIERieERhdGVUaW1lRmllbGRUaW1lTW9kZS5PUFRJT05BTDpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERieERhdGVUaW1lRmllbGRUaW1lTW9kZS5OT05FOlxuICAgICAgICB0aGlzLnJlbW92ZVRpbWUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERieERhdGVUaW1lRmllbGRUaW1lTW9kZS5SRVFVSVJFRDpcbiAgICAgICAgdGhpcy5hZGRUaW1lKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByZXNldHMgIT0gbnVsbCkge1xuICAgICAgdGhpcy5fcHJlc2V0cy5uZXh0KGFzT2JzZXJ2YWJsZUZyb21HZXR0ZXIodGhpcy5wcmVzZXRzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3ByZXNldHMubmV4dCh0aGlzLmRieERhdGVUaW1lRmllbGRDb25maWdTZXJ2aWNlLmNvbmZpZ3VyYXRpb25zJCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVzeW5jVGltZUlucHV0U3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMucmVzeW5jVGltZUlucHV0JC5waXBlKHN3aXRjaE1hcCgoeCkgPT4gY29tYmluZUxhdGVzdChbdGhpcy5jdXJyZW50RGF0ZSQsIHRoaXMudGltZVN0cmluZyRdKS5waXBlKGZpcnN0KCkpKSkuc3Vic2NyaWJlKChbY3VycmVudERhdGUsIHRpbWVTdHJpbmddKSA9PiB7XG4gICAgICAvLyBvbmx5IHJlc3luYyB3aGVuIHRoZSBjdXJyZW50IGRhdGUgaXMgc2V0LCBvdGhlcndpc2UgZG8gbm90IGNoYW5nZSB0aGUgdGltZSBzdHJpbmcuXG4gICAgICAvLyBUaGlzIGhlbHBzIGluIGNhc2VzIHdoZXJlIHRoZSB1c2VyIHBpY2tzIGEgdGltZSBmaXJzdCBhbmQgd2UgZG9uJ3Qgd2FudCBpdCB0byBiZSBjbGVhcmVkLlxuICAgICAgaWYgKGN1cnJlbnREYXRlICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy50aW1lSW5wdXRDdHJsLnNldFZhbHVlKHRpbWVTdHJpbmcsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGFkZCB2YWxpZGF0b3JzL2Vycm9ycyBmb3IgdGhlIGZvcm1cbiAgICB0aGlzLmZvcm1Db250cm9sLmFkZEFzeW5jVmFsaWRhdG9ycyhbXG4gICAgICAoeCkgPT4ge1xuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSB4LnZhbHVlIGFzIE1heWJlPERhdGU+O1xuICAgICAgICBsZXQgb2JzOiBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnM+O1xuXG4gICAgICAgIGlmIChmb3JtVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIG9icyA9IGNvbWJpbmVMYXRlc3QoW3RoaXMudGltZXpvbmVJbnN0YW5jZSQsIHRoaXMuZGF0ZVRpbWVQaWNrZXJJbnN0YW5jZSRdKS5waXBlKFxuICAgICAgICAgICAgbWFwKChbdGltZXpvbmVJbnN0YW5jZSwgeF0pID0+IHtcbiAgICAgICAgICAgICAgLy8gdGhlIGZvcm0gdmFsdWUgaXMgZ29pbmcgdG8gYmUgaW4gdGhlIG91dHB1dCBmb3JtLCBzbyB3ZSBuZWVkIHRvIHBhcnNlIGl0IGJhY2sgdG8gdGhlIFwiaW5wdXRcIiBkYXRlIGJlZm9yZSBldmFsdWF0aW5nIGl0XG4gICAgICAgICAgICAgIGNvbnN0IGZvcm1WYWx1ZUluU3lzdGVtVGltZXpvbmUgPSBkYnhEYXRlVGltZUlucHV0VmFsdWVQYXJzZUZhY3RvcnkodGhpcy52YWx1ZU1vZGUsIHRpbWV6b25lSW5zdGFuY2UpKGZvcm1WYWx1ZSk7XG5cbiAgICAgICAgICAgICAgbGV0IGVycm9yczogVmFsaWRhdGlvbkVycm9ycyA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnRpbWVJbnB1dEN0cmwuZXJyb3JzXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgaWYgKGZvcm1WYWx1ZUluU3lzdGVtVGltZXpvbmUpIHtcbiAgICAgICAgICAgICAgICBpZiAoeC5kYXRlSXNJblNjaGVkdWxlKGZvcm1WYWx1ZUluU3lzdGVtVGltZXpvbmUpKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoIXguaXNJblZhbGlkUmFuZ2UoZm9ybVZhbHVlSW5TeXN0ZW1UaW1lem9uZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0ge1xuICAgICAgICAgICAgICAgICAgICAgIFtEQlhfREFURV9USU1FX0ZJRUxEX1RJTUVfTk9UX0lOX1JBTkdFX0VSUk9SXTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIFtEQlhfREFURV9USU1FX0ZJRUxEX0RBVEVfTk9UX0lOX1NDSEVEVUxFX0VSUk9SXTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBmaXJzdCgpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvYnMgPSBvZih7fSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JzO1xuICAgICAgfVxuICAgIF0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB0aGlzLl9zdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX3ZhbHVlU3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9jb25maWcuY29tcGxldGUoKTtcbiAgICB0aGlzLl9jb25maWdVcGRhdGVUaW1lU3luYy5kZXN0cm95KCk7XG4gICAgdGhpcy5fZGVmYXVsdFRpbWV6b25lLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fcmVzeW5jVGltZUlucHV0U3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9hdXRvRmlsbERhdGVTeW5jLmRlc3Ryb3koKTtcbiAgICB0aGlzLl90aW1lRGF0ZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3ByZXNldHMuY29tcGxldGUoKTtcbiAgICB0aGlzLl9mdWxsRGF5Q29udHJvbE9icy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX29mZnNldC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2Zvcm1Db250cm9sT2JzLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fdXBkYXRlVGltZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2NsZWFyZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLl9yZXN5bmNUaW1lSW5wdXQuY29tcGxldGUoKTtcbiAgICB0aGlzLl9zeW5jQ29uZmlnT2JzLmNvbXBsZXRlKCk7XG4gIH1cblxuICBzZWxlY3RQcmVzZXQocHJlc2V0OiBEYXRlVGltZVByZXNldCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gcHJlc2V0LnZhbHVlKCk7XG5cbiAgICBpZiAodmFsdWUubG9naWNhbERhdGUpIHtcbiAgICAgIHRoaXMuc2V0TG9naWNhbFRpbWUodmFsdWUubG9naWNhbERhdGUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUudGltZVN0cmluZykge1xuICAgICAgdGhpcy5zZXRUaW1lKHZhbHVlLnRpbWVTdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIGRhdGVQaWNrZWQoZXZlbnQ6IE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50PERhdGU+KTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IGV2ZW50LnZhbHVlO1xuXG4gICAgaWYgKGRhdGUpIHtcbiAgICAgIHRoaXMuc2V0RGF0ZUlucHV0VmFsdWUoZGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgc2V0TG9naWNhbFRpbWUodGltZTogTG9naWNhbERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlID0gZGF0ZUZyb21Mb2dpY2FsRGF0ZSh0aW1lKTtcblxuICAgIGlmIChkYXRlKSB7XG4gICAgICB0aGlzLnNldFRpbWVGcm9tRGF0ZShkYXRlKTtcbiAgICB9XG4gIH1cblxuICBzZXREYXRlSW5wdXRWYWx1ZShkYXRlOiBEYXRlKSB7XG4gICAgdGhpcy5kYXRlSW5wdXRDdHJsLnNldFZhbHVlKGRhdGUpO1xuICAgIHRoaXMuX3VwZGF0ZVRpbWUubmV4dCgpO1xuICB9XG5cbiAgc2V0VGltZUZyb21EYXRlKHRpbWVEYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgdGltZVN0cmluZyA9IHRvTG9jYWxSZWFkYWJsZVRpbWVTdHJpbmcodGltZURhdGUpO1xuICAgIHRoaXMuc2V0VGltZSh0aW1lU3RyaW5nKTtcbiAgfVxuXG4gIHNldFRpbWUodGltZTogUmVhZGFibGVUaW1lU3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGltZUlucHV0Q3RybC52YWx1ZSAhPT0gdGltZSkge1xuICAgICAgdGhpcy50aW1lSW5wdXRDdHJsLnNldFZhbHVlKHRpbWUpO1xuICAgICAgdGhpcy5fb2Zmc2V0Lm5leHQoMCk7XG4gICAgICB0aGlzLl91cGRhdGVUaW1lLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBrZXlkb3duT25EYXRlSW5wdXQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBsZXQgZGlyZWN0aW9uID0gMDtcblxuICAgIHN3aXRjaCAoZXZlbnQua2V5Py50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdhcnJvd3VwJzpcbiAgICAgICAgZGlyZWN0aW9uID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhcnJvd2Rvd24nOlxuICAgICAgICBkaXJlY3Rpb24gPSAtMTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbGV0IG9mZnNldCA9IDE7XG5cbiAgICBpZiAoZXZlbnQuY3RybEtleSAmJiBldmVudC5zaGlmdEtleSkge1xuICAgICAgb2Zmc2V0ID0gMzY1O1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgb2Zmc2V0ID0gMzA7XG4gICAgfSBlbHNlIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgb2Zmc2V0ID0gNztcbiAgICB9XG5cbiAgICBpZiAoZGlyZWN0aW9uICE9PSAwKSB7XG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLmRhdGUkLCB0aGlzLmRhdGVUaW1lUGlja2VyQ29uZmlnJF0pXG4gICAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKFtkYXRlLCBjb25maWddKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IHN0YXJ0T2ZEYXkoYWRkRGF5cyhkYXRlLCBvZmZzZXQgKiBkaXJlY3Rpb24pKTtcbiAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBEYXRlVGltZU1pbnV0ZUluc3RhbmNlKHtcbiAgICAgICAgICAgIGRhdGU6IG5ld0RhdGUsXG4gICAgICAgICAgICAuLi5jb25maWdcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IG5leHREYXRlID0gaW5zdGFuY2UuaXNJblNjaGVkdWxlKG5ld0RhdGUpID8gbmV3RGF0ZSA6IGluc3RhbmNlLmZpbmROZXh0QXZhaWxhYmxlRGF5SW5TY2hlZHVsZShuZXdEYXRlLCBkaXJlY3Rpb24gPT09IDEgPyAnZnV0dXJlJyA6ICdwYXN0Jyk7XG5cbiAgICAgICAgICBpZiAobmV4dERhdGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRlSW5wdXRWYWx1ZShpbnN0YW5jZS5jbGFtcFRvTGltaXQobmV4dERhdGUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGtleWRvd25PblRpbWVJbnB1dChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGxldCBkaXJlY3Rpb24gPSAwO1xuXG4gICAgc3dpdGNoIChldmVudC5rZXk/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgJ2Fycm93dXAnOlxuICAgICAgICBkaXJlY3Rpb24gPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fycm93ZG93bic6XG4gICAgICAgIGRpcmVjdGlvbiA9IC0xO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBsZXQgb2Zmc2V0ID0gMTtcblxuICAgIGlmIChldmVudC5hbHRLZXkgJiYgZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIG9mZnNldCA9IDMwMDtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgb2Zmc2V0ID0gNjA7XG4gICAgfSBlbHNlIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgb2Zmc2V0ID0gNTtcbiAgICB9XG5cbiAgICBpZiAoZGlyZWN0aW9uICE9PSAwKSB7XG4gICAgICB0aGlzLl9vZmZzZXQubmV4dCh0aGlzLl9vZmZzZXQudmFsdWUgKyBvZmZzZXQgKiBkaXJlY3Rpb24pO1xuICAgICAgdGhpcy5fdXBkYXRlVGltZS5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNUaW1lKCk6IHZvaWQge1xuICAgIC8vIGRvIG5vdGhpbmdcbiAgfVxuXG4gIGZvY3VzT3V0VGltZSgpOiB2b2lkIHtcbiAgICAvLyBvbmx5IHJlZnJlc2ggd2hlbiB0aGVyZSBpcyBub3QgYSBwYXR0ZXJuIGVycm9yXG4gICAgaWYgKCF0aGlzLnRpbWVJbnB1dEN0cmwuaGFzRXJyb3IoJ3BhdHRlcm4nKSkge1xuICAgICAgdGhpcy5fdXBkYXRlVGltZS5uZXh0KCk7XG4gICAgICB0aGlzLl9yZXN5bmNUaW1lSW5wdXQubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIGFkZFRpbWUoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRGdWxsRGF5KGZhbHNlKTtcbiAgfVxuXG4gIHJlbW92ZVRpbWUoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRGdWxsRGF5KHRydWUpO1xuICB9XG5cbiAgc2V0RnVsbERheShmdWxsRGF5OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5mdWxsRGF5Q29udHJvbCQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgIHguc2V0VmFsdWUoZnVsbERheSk7XG4gICAgfSk7XG4gIH1cblxuICBjbGVhclZhbHVlKCk6IHZvaWQge1xuICAgIHRoaXMuX2NsZWFyZWQubmV4dCgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGJ4LWRhdGV0aW1lLWZpZWxkXCIgZnhMYXlvdXQ9XCJyb3cgd3JhcFwiIGZ4TGF5b3V0LnhzPVwiY29sdW1uIHdyYXBcIiBmeExheW91dEdhcD1cIjZweCBncmlkXCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWV2ZW5seSBzdHJldGNoXCI+XG4gIDwhLS0gRGF0ZSAtLT5cbiAgPGRpdiBjbGFzcz1cImRieC1kYXRldGltZS1yb3dcIiBmeEZsZXgubHQtc209XCIxMDBcIiBbZnhGbGV4XT1cImRhdGVPbmx5ID8gJzEwMCcgOiAnNTAnXCIgKm5nSWY9XCJzaG93RGF0ZUlucHV0JCB8IGFzeW5jXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRhdGVJbnB1dFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuICA8IS0tIFRpbWUgLS0+XG4gIDxkaXYgY2xhc3M9XCJkYngtZGF0ZXRpbWUtcm93XCIgZnhGbGV4Lmx0LXNtPVwiMTAwXCIgW2Z4RmxleF09XCIoc2hvd0RhdGVJbnB1dCQgfCBhc3luYykgPyAnNTAnIDogJzEwMCdcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1RpbWVJbnB1dCQgfCBhc3luY1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRpbWVNZW51QW5kSW5wdXRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxkaXYgKm5nSWY9XCJzaG93QWRkVGltZSQgfCBhc3luY1wiIGNsYXNzPVwiYWRkLXRpbWUtYnV0dG9uLXdyYXBwZXJcIj5cbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cIm1hdC1kYXRlcGlja2VyLWJ1dHRvbi1oaWdobGlnaHQgZGJ4LWJ1dHRvbi1zcGFjZXIgYWRkLXRpbWUtYnV0dG9uXCIgbmdDbGFzcy5sdC1zbT1cImFkZC10aW1lLWJ1dHRvbi1mdWxsXCIgKGNsaWNrKT1cImFkZFRpbWUoKVwiPlxuICAgICAgICA8bWF0LWljb24+dGltZXI8L21hdC1pY29uPlxuICAgICAgICBBZGQgVGltZVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIERhdGUgSGludCAtLT5cbiAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiaGFzRXJyb3IkIHwgYXN5bmNcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJmYWxzZVwiPlxuICAgICAgPGRpdiAqbmdJZj1cIiFoaWRlRGF0ZUhpbnRcIiBjbGFzcz1cImRieC1kYXRldGltZS1yb3cgZGJ4LWRhdGV0aW1lLWhpbnQtcm93XCIgZnhGbGV4PVwiMTAwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYngtaGludFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImhhc0VtcHR5RGlzcGxheVZhbHVlJCB8IGFzeW5jXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJ0cnVlXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGJ4LXNtYWxsXCI+Tm8gZGF0ZS90aW1lIHNldDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZnVsbERheSQgfCBhc3luY1wiPlxuICAgICAgICAgICAgICAgIDxzbWFsbCAqbmdTd2l0Y2hDYXNlPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgPGIgY2xhc3M9XCJkYngtb2tcIj57eyBhbGxEYXlMYWJlbCB9fTwvYj5cbiAgICAgICAgICAgICAgICAgIHt7IGRpc3BsYXlWYWx1ZSQgfCBhc3luYyB8IGRhdGU6ICdmdWxsRGF0ZScgfX0ge3sgdGltZXpvbmVBYmJyZXZpYXRpb24kIHwgYXN5bmMgfX0gKHt7IGRpc3BsYXlWYWx1ZSQgfCBhc3luYyB8IGRhdGVEaXN0YW5jZSB9fSlcbiAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDxzbWFsbCAqbmdTd2l0Y2hDYXNlPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkaXNwbGF5VmFsdWUkIHwgYXN5bmNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGIgY2xhc3M9XCJkYngtb2tcIj57eyBhdFRpbWVMYWJlbCB9fTwvYj5cbiAgICAgICAgICAgICAgICAgICAge3sgZGlzcGxheVZhbHVlJCB8IGFzeW5jIHwgZGF0ZTogJ21lZGl1bScgfX0ge3sgdGltZXpvbmVBYmJyZXZpYXRpb24kIHwgYXN5bmMgfX0gKHt7IGRpc3BsYXlWYWx1ZSQgfCBhc3luYyB8IHRpbWVEaXN0YW5jZSB9fSlcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwidHJ1ZVwiPlxuICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImN1cnJlbnRFcnJvck1lc3NhZ2UkIHwgYXN5bmNcIj57eyBjdXJyZW50RXJyb3JNZXNzYWdlJCB8IGFzeW5jIH19PC9tYXQtZXJyb3I+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjwhLS0gRGF0ZSBJbnB1dCBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjZGF0ZUlucHV0VGVtcGxhdGU+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImRieC1kYXRldGltZS1yb3ctZmllbGRcIj5cbiAgICA8bWF0LWxhYmVsPnt7IGRhdGVMYWJlbCB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCAjZGF0ZUlucHV0IG1hdElucHV0IFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtyZXF1aXJlZF09XCJpc0RhdGVSZXF1aXJlZFwiIFttaW5dPVwiZGF0ZUlucHV0TWluJCB8IGFzeW5jXCIgW21heF09XCJkYXRlSW5wdXRNYXgkIHwgYXN5bmNcIiBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCIocGlja2VyRmlsdGVyJCB8IGFzeW5jKSB8fCBkZWZhdWx0UGlja2VyRmlsdGVyXCIgKGRhdGVDaGFuZ2UpPVwiZGF0ZVBpY2tlZCgkZXZlbnQpXCIgW3ZhbHVlXT1cImRhdGVWYWx1ZSQgfCBhc3luY1wiIChrZXlkb3duKT1cImtleWRvd25PbkRhdGVJbnB1dCgkZXZlbnQpXCIgLz5cbiAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlcj48L21hdC1kYXRlcGlja2VyPlxuICAgIDxidXR0b24gbWF0UHJlZml4IGNsYXNzPVwiZGJ4LWRhdGV0aW1lLXJvdy1idXR0b25cIiAqbmdJZj1cIiFoaWRlRGF0ZVBpY2tlclwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwicGlja2VyLm9wZW4oKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgPG1hdC1pY29uPmNhbGVuZGFyX3RvZGF5PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdFN1ZmZpeCAqbmdJZj1cInNob3dDbGVhckJ1dHRvbiQgfCBhc3luY1wiIGNsYXNzPVwiZGJ4LWRhdGV0aW1lLWNsZWFyLWJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiY2xlYXJzIHRoZSBkYXRlIGFuZCB0aW1lIG1lbnVcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAoY2xpY2spPVwiY2xlYXJWYWx1ZSgpXCI+XG4gICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAgIDxzcGFuIG1hdFRleHRTdWZmaXggKm5nSWY9XCIhKHNob3dUaW1lSW5wdXQkIHwgYXN5bmMpXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGltZXpvbmVTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvc3Bhbj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gVGltZSBNZW51L0lucHV0IFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICN0aW1lTWVudUFuZElucHV0VGVtcGxhdGU+XG4gIDxtYXQtbWVudSAjdGltZW1lbnU9XCJtYXRNZW51XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRpbWVNb2RlID09PSAnb3B0aW9uYWwnXCI+XG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInJlbW92ZVRpbWUoKVwiPlxuICAgICAgICA8c3Bhbj5SZW1vdmUgVGltZTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcHJlc2V0IG9mIHByZXNldHMkIHwgYXN5bmNcIj5cbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwic2VsZWN0UHJlc2V0KHByZXNldClcIj57eyBwcmVzZXQubGFiZWwgfCBnZXRWYWx1ZSB9fTwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L21hdC1tZW51PlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJkYngtZGF0ZXRpbWUtcm93LWZpZWxkXCI+XG4gICAgPG1hdC1sYWJlbD57eyB0aW1lTGFiZWwgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgI3RpbWVJbnB1dCBbZXJyb3JTdGF0ZU1hdGNoZXJdPVwidGltZUVycm9yU3RhdGVNYXRjaGVyXCIgbWF0SW5wdXQgW3JlcXVpcmVkXT1cImlzVGltZVJlcXVpcmVkXCIgW2Zvcm1Db250cm9sXT1cInRpbWVJbnB1dEN0cmxcIiAoZm9jdXMpPVwiZm9jdXNUaW1lKClcIiAoZm9jdXNvdXQpPVwiZm9jdXNPdXRUaW1lKClcIiAoa2V5ZG93bik9XCJrZXlkb3duT25UaW1lSW5wdXQoJGV2ZW50KVwiIC8+XG4gICAgPGJ1dHRvbiBtYXRQcmVmaXggY2xhc3M9XCJkYngtZGF0ZXRpbWUtcm93LWJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwidGltZW1lbnVcIiBhcmlhLWxhYmVsPVwib3BlbnMgdGhlIHRpbWUgbWVudVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgPG1hdC1pY29uPnRpbWVyPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8c3BhbiBtYXRUZXh0U3VmZml4PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRpbWV6b25lU3VmZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L3NwYW4+XG4gICAgPG1hdC1lcnJvciAqbmdJZj1cInRpbWVJbnB1dEN0cmwuaGFzRXJyb3IoJ3BhdHRlcm4nKVwiPlRoZSBpbnB1dCB0aW1lIGlzIG5vdCByZWNvZ25pemFibGUuPC9tYXQtZXJyb3I+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFRpbWV6b25lIFN1ZmZpeCAtLT5cbjxuZy10ZW1wbGF0ZSAjdGltZXpvbmVTdWZmaXhUZW1wbGF0ZT5cbiAgPHNwYW4gKm5nSWY9XCJzaG93VGltZXpvbmVcIiBjbGFzcz1cImRieC1kYXRldGltZS10aW1lem9uZSBkYngtZmFpbnRcIj57eyB0aW1lem9uZUFiYnJldmlhdGlvbiQgfCBhc3luYyB9fTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
670
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vc3JjL2xpYi9mb3JtbHkvZmllbGQvdmFsdWUvZGF0ZS9kYXRldGltZS5maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL2Zvcm1seS9maWVsZC92YWx1ZS9kYXRlL2RhdGV0aW1lLmZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBa0YsT0FBTyxFQUFFLHNCQUFzQixFQUF5Ryx1QkFBdUIsRUFBb0IsbUJBQW1CLEVBQXFELE1BQU0sZUFBZSxDQUFDO0FBQzFXLE9BQU8sRUFBRSxtQkFBbUIsRUFBd0Isc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQUUseUJBQXlCLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLHlCQUF5QixFQUFFLHVCQUF1QixFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBaUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5WixPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQWMsYUFBYSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZPLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQW1CLFdBQVcsRUFBRSxVQUFVLEVBQStCLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxFQUEyQixjQUFjLEVBQUUsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUssT0FBTyxFQUErQyxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDekYsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGlDQUFpQyxFQUFFLG1DQUFtQyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNKLE9BQU8sRUFBbUIsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM3RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFHakUsTUFBTSxDQUFOLElBQVksd0JBYVg7QUFiRCxXQUFZLHdCQUF3QjtJQUNsQzs7T0FFRztJQUNILGlEQUFxQixDQUFBO0lBQ3JCOztPQUVHO0lBQ0gsaURBQXFCLENBQUE7SUFDckI7O09BRUc7SUFDSCx5Q0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQWJXLHdCQUF3QixLQUF4Qix3QkFBd0IsUUFhbkM7QUF5QkQsTUFBTSxVQUFVLGdDQUFnQyxDQUFDLEtBQWM7SUFDN0QsT0FBTyxLQUFLLElBQUksSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFRLEtBQXdDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQztBQUMxSCxDQUFDO0FBOElELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxlQUE4RCxFQUFFLElBQThCO0lBQy9ILE9BQU8sZUFBZSxDQUFDLElBQUksQ0FDekIsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDZCxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ2xELElBQUksTUFBK0IsQ0FBQztRQUVwQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQztZQUMzQixNQUFNLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ2hDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQ3hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUNwQyxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUMsRUFDRixvQkFBb0IsRUFBRSxFQUN0QixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLHlCQUF5QixHQUFpQixFQUFFLENBQUM7QUFFbkQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSw4Q0FBOEMsR0FBRyxnQ0FBZ0MsQ0FBQztBQUUvRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJDQUEyQyxHQUFHLDZCQUE2QixDQUFDO0FBS3pGLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxTQUFpRDtJQUM3RSxLQUFLLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDbEMsNkJBQTZCLEdBQUcsTUFBTSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7SUFFcEYsSUFBSSxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztJQUNoQyxTQUFTLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO0lBQ3JDLGlCQUFpQixHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztJQUU3QyxPQUFPLEdBQUcsSUFBSSxlQUFlLENBQW9ELFNBQVMsQ0FBQyxDQUFDO0lBQzNGLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLG9CQUFvQixFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFcEcsY0FBYyxHQUFHLElBQUksZUFBZSxDQUE2RCxTQUFTLENBQUMsQ0FBQztJQUU1RyxnQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBMkMsU0FBUyxDQUFDLENBQUM7SUFDNUYsU0FBUyxHQUFHLElBQUksZUFBZSxDQUErRixTQUFTLENBQUMsQ0FBQztJQUN6SSxRQUFRLEdBQUcsSUFBSSxlQUFlLENBQTRDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRWxGLGlCQUFpQixDQUFlO0lBQ2hDLGtCQUFrQixHQUFHLElBQUksZUFBZSxDQUFrQyxTQUFTLENBQUMsQ0FBQztJQUNwRixlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBRS9ELE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUN6QyxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQXNDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JGLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBRXpELFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBQy9CLFdBQVcsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRWxDLG1CQUFtQixHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztJQUMvQyxnQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRXRDLHFCQUFxQixHQUFzQjtRQUNsRCxZQUFZLEVBQUUsQ0FBQyxPQUErQixFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3RELElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoSSxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQztLQUNGLENBQUM7SUFFTyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVsRixxQkFBcUIsR0FBRyxJQUFJLGtCQUFrQixDQUNwRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUMvQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFFTyxTQUFTLEdBQXNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0SSxHQUFHLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRTtRQUN0QixPQUFPLGVBQWUsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO0lBQ25ELENBQUMsQ0FBQyxFQUNGLG9CQUFvQixFQUFFLEVBQ3RCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO0lBRU8saUJBQWlCLEdBQXFELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUNoRyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQy9FLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO0lBRU8sU0FBUyxHQUE0QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDL0QscUJBQXFCLEVBQUUsRUFDdkIsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDZCxJQUFJLEdBQTRCLENBQUM7UUFFakMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNOLDhEQUE4RDtZQUM5RCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxnQ0FBZ0MsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNsRyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFtQyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25HLEdBQUc7b0JBQ0Qsc0JBQXNCLENBQWtCLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUM1RCxHQUFHLENBQUMsUUFBUSxJQUFJLG1CQUFtQixFQUFFLENBQUMsRUFDdEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUM3QyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sR0FBRyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQixDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RCLENBQUM7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsQ0FBQyxFQUNGLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxFQUNuQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUVPLHNCQUFzQixHQUE0QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDL0UsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQW9FLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN4SixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFDekMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxFQUFFO1FBQ2xDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsaUNBQWlDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRixDQUFDLENBQUMsRUFDRixZQUFZLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsZ0RBQWdEO0lBQ2hILG9CQUFvQixDQUFDLHlCQUF5QixDQUFDLEVBQy9DLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO0lBRU8sZUFBZSxHQUFHLFFBQVEsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFFL0M7O09BRUc7SUFDTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJO0lBQ2hELHVDQUF1QztJQUN2QyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQ1osR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsRUFDbEMsb0JBQW9CLEVBQUUsRUFDdEIsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsRUFDcEMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUM1QyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUVPLFdBQVcsR0FBd0MsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FDMUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ25ELG9CQUFvQixFQUFFLEVBQ3RCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO0lBRU8sYUFBYSxHQUFHLElBQUksV0FBVyxDQUFjLElBQUksRUFBRTtRQUMxRCxVQUFVLEVBQUUsRUFBRTtLQUNmLENBQUMsQ0FBQztJQUVNLGFBQWEsR0FBRyxJQUFJLFdBQVcsQ0FBNEIsSUFBSSxFQUFFO1FBQ3hFLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsdUZBQXVGLENBQUMsQ0FBQztLQUMxSCxDQUFDLENBQUM7SUFFSCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksU0FBUyxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLHdCQUF3QixDQUFDLElBQUksQ0FBQztJQUN6RCxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsS0FBSyxvQkFBb0IsQ0FBQyxhQUFhLENBQUM7UUFFN0UsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUM7SUFDaEQsQ0FBQztJQUVELElBQUksNEJBQTRCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEtBQUssS0FBSyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDO0lBQ2pFLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxLQUFLLG9CQUFvQixDQUFDLFVBQVUsQ0FBQztRQUUxRSxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLE9BQU8sd0JBQXdCLENBQUMsSUFBSSxDQUFDO1FBQ3ZDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLElBQUksd0JBQXdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEksQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyx3QkFBd0IsQ0FBQyxRQUFRLENBQUM7SUFDcEYsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUM7SUFDaEQsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGNBQWMsSUFBSSxLQUFLLENBQUM7SUFDbEQsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFUSxRQUFRLEdBQXdCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUNoRSxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUMzRSxvQkFBb0IsRUFBRSxFQUN0QixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUVPLGNBQWMsR0FBd0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFNUgsWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUM5QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssd0JBQXdCLENBQUMsUUFBUSxDQUFDLEVBQ3JFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO0lBRU8sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFOUQscUJBQXFCLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDdEcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsRUFDdEcsb0JBQW9CLEVBQUUsRUFDdEIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7SUFFTyxVQUFVLEdBQTRCLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDdkgsR0FBRyxDQUFDLENBQUMsQ0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUNuRCxvQkFBb0IsQ0FBYyxhQUFhLENBQUMsRUFDaEQsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7SUFFTyxVQUFVLEdBQW1DLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUN6RSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2YsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxFQUN6QyxvQkFBb0IsRUFBRSxDQUN2QixDQUFDO0lBRU8sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFbkYsa0JBQWtCLEdBQWtELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUNuRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUNSLElBQUksTUFBeUMsQ0FBQztRQUU5QyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ04sTUFBTSxHQUFHLHNCQUFzQixDQUM3QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ25CLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFMUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDWixPQUFPO3dCQUNMLE9BQU87d0JBQ1AsR0FBRyxDQUFDO3FCQUNMLENBQUM7Z0JBQ0osQ0FBQztxQkFBTSxDQUFDO29CQUNOLE9BQU8sU0FBUyxDQUFDO2dCQUNuQixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNkLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUMsRUFDRixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUVPLHNCQUFzQixHQUE0QixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDeEcscUJBQXFCLEdBQTRCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUV0RyxjQUFjLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNyRyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO1FBQ3pCLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ3ZCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFDZixTQUFTLENBQUMsYUFBYSxDQUFDLENBQ3pCLENBQUM7SUFDSixDQUFDLENBQUMsRUFDRixvQkFBb0IsRUFBRSxFQUN0QixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUVPLFlBQVksR0FBNEIsYUFBYSxDQUFDO1FBQzdELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNmLEtBQUssRUFBRSxFQUNQLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQzlEO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxRQUFRO1FBQ2IsSUFBSSxDQUFDLFNBQVM7UUFDZCxJQUFJLENBQUMsY0FBYztLQUNwQixDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxFQUFFLEVBQUU7UUFDM0QsSUFBSSxNQUFtQixDQUFDO1FBRXhCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxHQUFHLFFBQVEsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsbURBQW1EO1lBQ3BGLENBQUM7WUFFRCxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ1osSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO3dCQUNwQyxNQUFNLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMvQixDQUFDO3lCQUFNLENBQUM7d0JBQ04sTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDNUIsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLElBQUksVUFBVSxFQUFFLENBQUM7b0JBQ3RCLE1BQU07d0JBQ0osd0JBQXdCLENBQUMsVUFBVSxFQUFFOzRCQUNuQyxJQUFJOzRCQUNKLGlCQUFpQixFQUFFLElBQUk7eUJBQ3hCLENBQUMsSUFBSSxJQUFJLENBQUM7Z0JBQ2YsQ0FBQztxQkFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUMxQixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssd0JBQXdCLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ3hELDBGQUEwRjt3QkFDMUYsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDaEIsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUMsRUFDRixvQkFBb0IsQ0FBQyx5QkFBeUIsQ0FBQyxFQUMvQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUVPLHFCQUFxQixHQUFzRCxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMxTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRTtRQUN0QyxJQUFJLE1BQU0sR0FBMEMsQ0FBQyxDQUFDO1FBRXRELElBQUksWUFBWSxJQUFJLElBQUksSUFBSSxZQUFZLElBQUksSUFBSSxFQUFFLENBQUM7WUFDakQsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDO1lBQ3pELE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxDQUFDLFlBQVksRUFBRSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkUsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLENBQUMsWUFBWSxFQUFFLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV2RSxNQUFNLEdBQUc7Z0JBQ1AsR0FBRyxDQUFDO2dCQUNKLE1BQU0sRUFBRTtvQkFDTixHQUFHLENBQUMsRUFBRSxNQUFNO29CQUNaLEdBQUc7b0JBQ0gsR0FBRztpQkFDSjthQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyxDQUFDLEVBQ0Ysb0JBQW9CLEVBQUUsRUFDdEIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7SUFFTyxhQUFhLEdBQTRCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQy9FLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQWdCLENBQUMsRUFDbkQsb0JBQW9CLENBQWMsVUFBVSxDQUFDLEVBQzdDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO0lBRU8sYUFBYSxHQUE0QixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUMvRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksSUFBSSxDQUFnQixDQUFDLEVBQ25ELG9CQUFvQixDQUFjLFVBQVUsQ0FBQyxFQUM3QyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUVGOztPQUVHO0lBQ00sdUJBQXVCLEdBQXdCLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNsSCxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNoQyxvQkFBb0IsRUFBRSxFQUN0QixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUVPLHVCQUF1QixHQUF3QixhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDbEgsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUN2RCxvQkFBb0IsRUFBRSxFQUN0QixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUVPLGFBQWEsR0FBOEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FDakcsb0JBQW9CLEVBQUUsRUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDUixJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ04sTUFBTSxNQUFNLEdBQUcsc0NBQXNDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sQ0FBQyxDQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDLENBQUMsRUFDRixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUVPLG1CQUFtQixHQUFrQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFFaEUsV0FBVyxHQUE0QixhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQy9ILFlBQVksQ0FBQyx5QkFBeUIsRUFBRSxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUN0RixvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNsRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtRQUNsQyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNqQixNQUFNLFFBQVEsR0FBRyxJQUFJLHNCQUFzQixDQUFDO2dCQUMxQyxJQUFJO2dCQUNKLEdBQUcsTUFBTTtnQkFDVCxpQkFBaUIsRUFBRSxJQUFJO2FBQ3hCLENBQUMsQ0FBQztZQUVILDBDQUEwQztZQUMxQyxJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNoQixJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFNUIsTUFBTSxPQUFPLEdBQUcsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBRTlDLElBQUksT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNqQixJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDakMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyx1QkFBdUI7Z0JBQ3RELENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDLEVBQ0Ysb0JBQW9CLENBQUMseUJBQXlCLENBQUMsRUFDL0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7SUFFTyx1QkFBdUIsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUNoRSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUNiLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQztZQUNoQyxHQUFHLE1BQU07WUFDVCxpQkFBaUIsRUFBRSxJQUFJO1NBQ3hCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO0lBRU8scUJBQXFCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3RELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDZCxvQkFBb0IsRUFBRSxFQUN0QixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUVPLFFBQVEsR0FBaUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2xFLG9CQUFvQixFQUFFLEVBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQWdDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsRUFDaEUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7SUFFTyxnQkFBZ0IsR0FBd0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FDOUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQy9DLG9CQUFvQixFQUFFLEVBQ3RCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO0lBRU8scUNBQXFDLEdBQXdCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztJQUUxRixjQUFjLEdBQXdCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQzlFLEdBQUcsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLEVBQUU7UUFDN0IsT0FBTyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNyRixDQUFDLENBQUMsRUFDRixvQkFBb0IsRUFBRSxFQUN0QixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUVPLG9CQUFvQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNwRCxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUN4QixXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDNUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxPQUFPLENBQUMsRUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDUixJQUFJLG1CQUF1QyxDQUFDO1FBRTVDLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDMUMsbUJBQW1CLEdBQUcsa0JBQWtCLENBQUM7WUFDM0MsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLDhDQUE4QyxDQUFDLEVBQUUsQ0FBQztnQkFDckYsbUJBQW1CLEdBQUcsdURBQXVELENBQUM7WUFDaEYsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLDJDQUEyQyxDQUFDLEVBQUUsQ0FBQztnQkFDbEYsbUJBQW1CLEdBQUcsdUNBQXVDLENBQUM7WUFDaEUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLG1CQUFtQixHQUFHLHFDQUFxQyxDQUFDO1lBQzlELENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxtQkFBbUIsQ0FBQztJQUM3QixDQUFDLENBQUMsQ0FDSCxDQUNGLEVBQ0QsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUNwQixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUVPLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUNqRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN0QixvQkFBb0IsRUFBRSxFQUN0QixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUVGLFFBQVE7UUFDTixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFNUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQztRQUMxRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVsRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsc0JBQXNCO2FBQ2pELElBQUksQ0FDSCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzFJLFlBQVksQ0FBQyx5QkFBeUIsRUFBRSxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUN0RixTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFO1lBQ3pDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQzFCLFlBQVksQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFDMUYsY0FBYyxFQUFFLEVBQ2hCLG9CQUFvQixDQUFDLHlCQUF5QixDQUFDLEVBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzNCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FDckUsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSx1QkFBdUIsR0FBRyxLQUFLLENBQUM7UUFFcEM7Ozs7VUFJRTtRQUVGLElBQUksSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMscUNBQXFDO2lCQUM3RSxJQUFJLENBQ0gsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ3hCLElBQUksV0FBVyxFQUFFLENBQUM7b0JBQ2hCLGlFQUFpRTtvQkFDakUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDMUIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDcEMsV0FBVyxFQUFFLENBQ2QsQ0FBQztnQkFDSixDQUFDO3FCQUFNLENBQUM7b0JBQ04sT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxzQkFBc0I7Z0JBQ3pDLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FDSDtpQkFDQSxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDdEIsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHNCQUFzQjthQUN0RCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDdEQsb0JBQW9CLEVBQUUsRUFDdEIsU0FBUyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsRUFBRTtZQUNuQyx1QkFBdUIsR0FBRyxLQUFLLENBQUM7WUFDaEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7WUFDMUIsV0FBVztZQUNYLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsc0JBQXNCLENBQXNCLENBQUMsQ0FDL0UsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsc0JBQXNCLENBQUMsRUFBRSxFQUFFO1lBQ3pDLDJJQUEySTtZQUMzSSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsc0JBQXNCLElBQUksQ0FBQyxzQkFBc0IsSUFBSSx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDckksT0FBTztZQUNULENBQUM7WUFFRCwwQkFBMEI7WUFDMUIsSUFBSSxDQUFDLEtBQUssU0FBUyxJQUFJLHNCQUFzQixFQUFFLENBQUM7Z0JBQzlDLHVCQUF1QixHQUFHLElBQUksQ0FBQztZQUNqQyxDQUFDO1lBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztRQUVMLG9DQUFvQztRQUNwQyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRTNELGdFQUFnRTtRQUNoRSxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDdkQsd0JBQXdCLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN6RCx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQztRQUMzRCxJQUFJLGdCQUF3QyxDQUFDO1FBRTdDLElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLEtBQUssd0JBQXdCLENBQUMsSUFBSSxDQUFDO1lBQ2xFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUVwRCwwREFBMEQ7WUFDMUQsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLElBQWtCLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUM5RSxDQUFDO1lBRUQsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQzVDLENBQUM7UUFFRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFL0MsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEIsS0FBSyx3QkFBd0IsQ0FBQyxRQUFRO2dCQUNwQyxNQUFNO1lBQ1IsS0FBSyx3QkFBd0IsQ0FBQyxJQUFJO2dCQUNoQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2xCLE1BQU07WUFDUixLQUFLLHdCQUF3QixDQUFDLFFBQVE7Z0JBQ3BDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDZixNQUFNO1FBQ1YsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMzRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBRUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRTtZQUMvTCxxRkFBcUY7WUFDckYsNEZBQTRGO1lBQzVGLElBQUksV0FBVyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNoRSxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQztZQUNsQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNKLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFvQixDQUFDO2dCQUN6QyxJQUFJLEdBQWlDLENBQUM7Z0JBRXRDLElBQUksU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO29CQUN0QixHQUFHLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUM5RSxHQUFHLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7d0JBQzVCLHlIQUF5SDt3QkFDekgsTUFBTSx5QkFBeUIsR0FBRyxpQ0FBaUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7d0JBRWpILElBQUksTUFBTSxHQUFxQjs0QkFDN0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU07eUJBQzdCLENBQUM7d0JBRUYsSUFBSSx5QkFBeUIsRUFBRSxDQUFDOzRCQUM5QixJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLENBQUM7Z0NBQ2xELElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLHlCQUF5QixDQUFDLEVBQUUsQ0FBQztvQ0FDakQsTUFBTSxHQUFHO3dDQUNQLENBQUMsMkNBQTJDLENBQUMsRUFBRSxJQUFJO3FDQUNwRCxDQUFDO2dDQUNKLENBQUM7NEJBQ0gsQ0FBQztpQ0FBTSxDQUFDO2dDQUNOLE1BQU0sR0FBRztvQ0FDUCxDQUFDLDhDQUE4QyxDQUFDLEVBQUUsSUFBSTtpQ0FDdkQsQ0FBQzs0QkFDSixDQUFDO3dCQUNILENBQUM7d0JBRUQsT0FBTyxNQUFNLENBQUM7b0JBQ2hCLENBQUMsQ0FBQyxFQUNGLEtBQUssRUFBRSxDQUNSLENBQUM7Z0JBQ0osQ0FBQztxQkFBTSxDQUFDO29CQUNOLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2YsQ0FBQztnQkFFRCxPQUFPLEdBQUcsQ0FBQztZQUNiLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVEsV0FBVztRQUNsQixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQXNCO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUU3QixJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6QyxDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsS0FBb0M7UUFDN0MsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUV6QixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQWlCO1FBQzlCLE1BQU0sSUFBSSxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXZDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBVTtRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxlQUFlLENBQUMsUUFBYztRQUM1QixNQUFNLFVBQVUsR0FBRyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBd0I7UUFDOUIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBb0I7UUFDckMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBRWxCLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLEtBQUssU0FBUztnQkFDWixTQUFTLEdBQUcsQ0FBQyxDQUFDO2dCQUNkLE1BQU07WUFDUixLQUFLLFdBQVc7Z0JBQ2QsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNmLE1BQU07UUFDVixDQUFDO1FBRUQsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWYsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ2YsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDZCxDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUIsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNiLENBQUM7UUFFRCxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwQixhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2lCQUNwRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQ2IsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtnQkFDNUIsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlELE1BQU0sUUFBUSxHQUFHLElBQUksc0JBQXNCLENBQUM7b0JBQzFDLElBQUksRUFBRSxPQUFPO29CQUNiLEdBQUcsTUFBTTtpQkFDVixDQUFDLENBQUM7Z0JBRUgsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsOEJBQThCLENBQUMsT0FBTyxFQUFFLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBRWxKLElBQUksUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDO29CQUNyQixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUMxRCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQW9CO1FBQ3JDLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztRQUVsQixRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUNqQyxLQUFLLFNBQVM7Z0JBQ1osU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFDZCxNQUFNO1lBQ1IsS0FBSyxXQUFXO2dCQUNkLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDZixNQUFNO1FBQ1YsQ0FBQztRQUVELElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUVmLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUNmLENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4QixNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2QsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzFCLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDYixDQUFDO1FBRUQsSUFBSSxTQUFTLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTO1FBQ1AsYUFBYTtJQUNmLENBQUM7SUFFRCxZQUFZO1FBQ1YsaURBQWlEO1FBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBZ0I7UUFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNqRCxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7d0dBMTJCVSx5QkFBeUI7NEZBQXpCLHlCQUF5QiwyRUM3T3RDLDB1S0FrR0E7OzRGRDJJYSx5QkFBeUI7a0JBSHJDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIE1heWJlLCB0eXBlIFJlYWRhYmxlVGltZVN0cmluZywgdHlwZSBBcnJheU9yVmFsdWUsIHR5cGUgSVNPODYwMURhdGVTdHJpbmcsIGFzQXJyYXksIGZpbHRlck1heWJlQXJyYXlWYWx1ZXMsIHR5cGUgRGVjaXNpb25GdW5jdGlvbiwgdHlwZSBNaWxsaXNlY29uZHMsIHR5cGUgVGltZXpvbmVTdHJpbmcsIHR5cGUgTG9naWNhbERhdGUsIHR5cGUgRGF0ZU9yRGF5U3RyaW5nLCBpc0lTTzg2MDFEYXlTdHJpbmdTdGFydCwgdHlwZSBNYXBGdW5jdGlvbiwgbWFwSWRlbnRpdHlGdW5jdGlvbiwgTWludXRlT2ZEYXksIFVuaXhEYXRlVGltZU51bWJlciwgSVNPODYwMURheVN0cmluZyB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgZGF0ZUZyb21Mb2dpY2FsRGF0ZSwgRGF0ZVRpbWVNaW51dGVDb25maWcsIERhdGVUaW1lTWludXRlSW5zdGFuY2UsIGd1ZXNzQ3VycmVudFRpbWV6b25lLCByZWFkYWJsZVRpbWVTdHJpbmdUb0RhdGUsIHRvTG9jYWxSZWFkYWJsZVRpbWVTdHJpbmcsIHV0Y0RheUZvckRhdGUsIHNhZmVUb0pzRGF0ZSwgZmluZE1pbkRhdGUsIGZpbmRNYXhEYXRlLCBpc1NhbWVEYXRlSG91cnNBbmRNaW51dGVzLCBnZXRUaW1lem9uZUFiYnJldmlhdGlvbiwgaXNTYW1lRGF0ZURheSwgZGF0ZVRpbWV6b25lVXRjTm9ybWFsLCBEYXRlVGltZXpvbmVVdGNOb3JtYWxJbnN0YW5jZSwgdG9Kc0RheURhdGUsIGlzU2FtZURhdGUsIGRhdGVUaW1lTWludXRlV2hvbGVEYXlEZWNpc2lvbkZ1bmN0aW9uIH0gZnJvbSAnQGRlcmVla2IvZGF0ZSc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHNoYXJlUmVwbGF5LCBtYXAsIHN0YXJ0V2l0aCwgdGFwLCBmaXJzdCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGRlYm91bmNlVGltZSwgdGhyb3R0bGVUaW1lLCBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QsIFN1YmplY3QsIG1lcmdlLCBpbnRlcnZhbCwgb2YsIGNvbWJpbmVMYXRlc3RXaXRoLCBmaWx0ZXIsIHNraXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMsIEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZpZWxkVHlwZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L21hdGVyaWFsJztcbmltcG9ydCB7IEZpZWxkVHlwZUNvbmZpZywgRm9ybWx5RmllbGRQcm9wcyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IGFkZE1pbnV0ZXMsIHN0YXJ0T2ZEYXksIGFkZERheXMgfSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgeyBhc09ic2VydmFibGVGcm9tR2V0dGVyLCBmaWx0ZXJNYXliZSwgT2JzZXJ2YWJsZU9yVmFsdWVHZXR0ZXIsIHNraXBGaXJzdE1heWJlLCBTdWJzY3JpcHRpb25PYmplY3QsIHN3aXRjaE1hcE1heWJlRGVmYXVsdCwgc3dpdGNoTWFwRmlsdGVyTWF5YmUgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IERhdGVUaW1lUHJlc2V0LCBEYXRlVGltZVByZXNldENvbmZpZ3VyYXRpb24sIGRhdGVUaW1lUHJlc2V0IH0gZnJvbSAnLi9kYXRldGltZSc7XG5pbXBvcnQgeyBEYnhEYXRlVGltZUZpZWxkTWVudVByZXNldHNTZXJ2aWNlIH0gZnJvbSAnLi9kYXRldGltZS5maWVsZC5zZXJ2aWNlJztcbmltcG9ydCB7IERieERhdGVUaW1lVmFsdWVNb2RlLCBkYnhEYXRlVGltZUlucHV0VmFsdWVQYXJzZUZhY3RvcnksIGRieERhdGVUaW1lSXNTYW1lRGF0ZVRpbWVGaWVsZFZhbHVlLCBkYnhEYXRlVGltZU91dHB1dFZhbHVlRmFjdG9yeSB9IGZyb20gJy4vZGF0ZS52YWx1ZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbFBhdGgsIHN0cmVhbVZhbHVlRnJvbUNvbnRyb2wgfSBmcm9tICcuLi8uLi8uLi8uLi9mb3JtL2Zvcm0uYW5ndWxhci51dGlsJztcbmltcG9ydCB7IHRvZ2dsZURpc2FibGVGb3JtQ29udHJvbCB9IGZyb20gJy4uLy4uLy4uLy4uL2Zvcm0vZm9ybSc7XG5pbXBvcnQgeyBFcnJvclN0YXRlTWF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuXG5leHBvcnQgZW51bSBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUge1xuICAvKipcbiAgICogVGltZSBpcyByZXF1aXJlZC5cbiAgICovXG4gIFJFUVVJUkVEID0gJ3JlcXVpcmVkJyxcbiAgLyoqXG4gICAqIFRpbWUgaXMgb3B0aW9uYWwuXG4gICAqL1xuICBPUFRJT05BTCA9ICdvcHRpb25hbCcsXG4gIC8qKlxuICAgKiBUaW1lIGlzIHBlcm1lbmFudGx5IG9mZi5cbiAgICovXG4gIE5PTkUgPSAnbm9uZSdcbn1cblxuZXhwb3J0IHR5cGUgRGJ4RGF0ZVRpbWVQaWNrZXJDb25maWd1cmF0aW9uID0gT21pdDxEYXRlVGltZU1pbnV0ZUNvbmZpZywgJ2RhdGUnPjtcblxuZXhwb3J0IHR5cGUgRGJ4RGF0ZVRpbWVGaWVsZFN5bmNUeXBlID0gJ2JlZm9yZScgfCAnYWZ0ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIERieERhdGVUaW1lRmllbGRTeW5jRmllbGQge1xuICAvKipcbiAgICogRmllbGQga2V5L3BhdGggdG8gc3luYyB3aXRoL2FnYWluc3QuXG4gICAqL1xuICByZWFkb25seSBzeW5jV2l0aDogc3RyaW5nO1xuICAvKipcbiAgICogSG93IHRvIHN5bmMgYWdhaW5zdCB0aGUgb3RoZXIgZmllbGQuXG4gICAqL1xuICByZWFkb25seSBzeW5jVHlwZTogRGJ4RGF0ZVRpbWVGaWVsZFN5bmNUeXBlO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSB0aW1lIGRhdGUgZmllbGQgdGhhdCBoYXMgYSByZWZlcmVuY2UgYW5kIG9wdGlvbmFsIG1hcCBmdW5jdGlvbiB0byBtYXAgdGhlIHZhbHVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERieERhdGVUaW1lRmllbGRUaW1lRGF0ZUNvbmZpZzxJID0gdW5rbm93bj4ge1xuICByZWFkb25seSBwYXRoOiBGb3JtQ29udHJvbFBhdGg7XG4gIHJlYWRvbmx5IG1hcFZhbHVlPzogTWFwRnVuY3Rpb248SSwgTWF5YmU8RGF0ZU9yRGF5U3RyaW5nPj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RieERhdGVUaW1lRmllbGRUaW1lRGF0ZUNvbmZpZyhpbnB1dDogdW5rbm93bik6IGlucHV0IGlzIERieERhdGVUaW1lRmllbGRUaW1lRGF0ZUNvbmZpZyB7XG4gIHJldHVybiBpbnB1dCAhPSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIChpbnB1dCBhcyBEYnhEYXRlVGltZUZpZWxkVGltZURhdGVDb25maWcpLnBhdGggPT09ICdzdHJpbmcnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERieERhdGVUaW1lRmllbGRQcm9wcyBleHRlbmRzIEZvcm1seUZpZWxkUHJvcHMge1xuICAvKipcbiAgICogQ3VzdG9tIGRhdGUgbGFiZWwuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIERhdGVcbiAgICovXG4gIHJlYWRvbmx5IGRhdGVMYWJlbD86IHN0cmluZztcblxuICAvKipcbiAgICogQ3VzdG9tIHRpbWUgbGFiZWwuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIFRpbWVcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVMYWJlbD86IHN0cmluZztcblxuICAvKipcbiAgICogTGFiZWwgdG8gdXNlIGZvciB0aGUgZGF0ZSBoaW50IGZvciBcIkFsbCBEYXlcIi4gRGVmYXVsdHMgdG8gXCJBbGwgRGF5XCIuXG4gICAqL1xuICByZWFkb25seSBhbGxEYXlMYWJlbD86IHN0cmluZztcblxuICAvKipcbiAgICogTGFiZWwgdG8gdXNlIGZvciB0aGUgZGF0ZSBoaW50IGZvciBcIkF0XCIuIERlZmF1bHRzIHRvIFwiQXRcIi5cbiAgICovXG4gIHJlYWRvbmx5IGF0VGltZUxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWYWx1ZSBtb2RlLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byBEQVRFXG4gICAqL1xuICByZWFkb25seSB2YWx1ZU1vZGU/OiBEYnhEYXRlVGltZVZhbHVlTW9kZTtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhlIGRhdGUgaXMgaGlkZGVuLCBhbmQgYXV0b21hdGljYWxseSB1c2VzIHRvZGF5L2lucHV0IGRhdGUuXG4gICAqL1xuICByZWFkb25seSB0aW1lT25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9ubHkgYXBwbGljYWJsZSB3aGVuIHRpbWVPbmx5IGlzIGZhbHNlLlxuICAgKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBhbHdheXMgc2hvdyB0aGUgZGF0ZSBpbnB1dCBldmVuIHdoZW4gdGhlcmUgaXMgb25seSBhIHNpbmdsZSBkYXRlIHRoYXQgY2FuIGJlIHNlbGVjdGVkLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgYWx3YXlzU2hvd0RhdGVJbnB1dD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIGF1dG9maWxsIHRoZSBkYXRlIHdoZW4gdGltZSBpcyBwaWNrZWQuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0b2ZpbGxEYXRlV2hlblRpbWVJc1BpY2tlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRoZSB0aW1lIGNhbiBiZSBhZGRlZC9yZW1vdmVkIG9wdGlvbmFsbHkuXG4gICAqXG4gICAqIFRoaXMgaXMgaWdub3JlZCBpZiB0aW1lT25seSBpcyBzcGVjaWZpZWQuXG4gICAqL1xuICByZWFkb25seSB0aW1lTW9kZT86IERieERhdGVUaW1lRmllbGRUaW1lTW9kZTtcblxuICAvKipcbiAgICogT3RoZXIgZm9ybSBjb250cm9sIGZvciBlbmFibGluZy9kaXNhYmxpbmcgd2hldGhlciBvciBub3QgaXQgaXMgYSBmdWxsIGRheS5cbiAgICpcbiAgICogVGhpcyBmaWVsZCBpcyBvbmx5IHVzZWQgaWYgdGltZSBpcyBvcHRpb25hbC5cbiAgICpcbiAgICogV2hlbiB0aW1lIGlzIG9mZiwgdGhlIGZpZWxkIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgZnVsbERheUZpZWxkTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gcGFzcyB0aGUgZGF0ZSB2YWx1ZSBhcyBhIFVUQyBkYXRlLCBvciBhIGRhdGUgaW4gdGhlIGN1cnJlbnQgdGltZXpvbmUuXG4gICAqL1xuICByZWFkb25seSBmdWxsRGF5SW5VVEM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCBvdCBoaWRlIHRoZSBkYXRlIGhpbnQgaW5mbyBjb250ZW50LlxuICAgKlxuICAgKiBGYWxzZSBieSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBoaWRlRGF0ZUhpbnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBoaWRlIHRoZSBkYXRlL2NhbGVuZGFyIHBpY2tlci5cbiAgICovXG4gIHJlYWRvbmx5IGhpZGVEYXRlUGlja2VyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3VzdG9tIHBpY2tlciBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBwaWNrZXJDb25maWc/OiBPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxEYnhEYXRlVGltZVBpY2tlckNvbmZpZ3VyYXRpb24+O1xuXG4gIC8qKlxuICAgKiBVc2VkIGZvciBzeW5jaW5nIHdpdGggb25lIG9yIG1vcmUgZmllbGRzIHdpdGggYSBEYXRlIHZhbHVlLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2V0U3luY0ZpZWxkc09icz86ICgpID0+IE9ic2VydmFibGU8QXJyYXlPclZhbHVlPERieERhdGVUaW1lRmllbGRTeW5jRmllbGQ+PjtcblxuICAvKipcbiAgICogKE9wdGlvbmFsKSBUaGUgaW5wdXQgdGltZXpvbmUgdG8gZGVmYXVsdCB0by5cbiAgICpcbiAgICogSWdub3JlZCBpZiBmdWxsRGF5SW5VVEMgaXMgdHJ1ZS5cbiAgICovXG4gIHJlYWRvbmx5IHRpbWV6b25lPzogTWF5YmU8T2JzZXJ2YWJsZU9yVmFsdWVHZXR0ZXI8TWF5YmU8VGltZXpvbmVTdHJpbmc+Pj47XG5cbiAgLyoqXG4gICAqIChPcHRpb25hbCkgVGhlIGRhdGUgdG8gYXBwbHkgdGhlIHRpbWUgdG8uXG4gICAqXG4gICAqIFRoZSB0aW1lem9uZSBhYmJydmlhdGlvbiB3aWxsIGFsc28gdXNlIHRoaXMgZGF0ZSB3aGVuIHVzaW5nIHRoZSB0aW1lLW9ubHkgbW9kZS5cbiAgICovXG4gIHJlYWRvbmx5IHRpbWVEYXRlPzogTWF5YmU8T2JzZXJ2YWJsZU9yVmFsdWVHZXR0ZXI8TWF5YmU8RGJ4RGF0ZVRpbWVGaWVsZFRpbWVEYXRlQ29uZmlnIHwgRm9ybUNvbnRyb2xQYXRoIHwgRGF0ZU9yRGF5U3RyaW5nPj4+O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBkaXNwbGF5IHRoZSB0aW1lem9uZS4gVHJ1ZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvd1RpbWV6b25lPzogTWF5YmU8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBwcmVzZXRzIHRvIHNob3cgaW4gdGhlIGRyb3Bkb3duLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlc2V0cz86IE9ic2VydmFibGVPclZhbHVlR2V0dGVyPERhdGVUaW1lUHJlc2V0Q29uZmlndXJhdGlvbltdPjtcblxuICAvKipcbiAgICogVGhlIHRpbWUgaW4gbXMgdG8gcHJldmVudCBvdXRwdXQgZnJvbSBnb2luZyBvdXQgd2hlbiB0aGUgaW5wdXQgdmFsdWUgY2hhbmdlcy5cbiAgICovXG4gIHJlYWRvbmx5IGlucHV0T3V0cHV0RGVib3VuY2VUaW1lPzogTWlsbGlzZWNvbmRzO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBkaXNwbGF5IHRoZSBjbGVhciBkYXRlIGJ1dHRvbi4gVHJ1ZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvd0NsZWFyQnV0dG9uPzogTWF5YmU8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgbWludXRlcyB0byBhZGQvc3VidHJhY3Qgd2hlbiB1c2luZyB0aGUgYXJyb3cga2V5cy5cbiAgICovXG4gIHJlYWRvbmx5IG1pbnV0ZVN0ZXA/OiBNYXliZTxudW1iZXI+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERieERhdGVUaW1lRmllbGRTeW5jUGFyc2VkRmllbGQgZXh0ZW5kcyBQaWNrPERieERhdGVUaW1lRmllbGRTeW5jRmllbGQsICdzeW5jVHlwZSc+IHtcbiAgY29udHJvbDogQWJzdHJhY3RDb250cm9sPE1heWJlPERhdGUgfCBJU084NjAxRGF0ZVN0cmluZz4+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3luY0NvbmZpZ1ZhbHVlT2JzKHBhcnNlQ29uZmlnc09iczogT2JzZXJ2YWJsZTxEYnhEYXRlVGltZUZpZWxkU3luY1BhcnNlZEZpZWxkW10+LCB0eXBlOiBEYnhEYXRlVGltZUZpZWxkU3luY1R5cGUpOiBPYnNlcnZhYmxlPERhdGUgfCBudWxsPiB7XG4gIHJldHVybiBwYXJzZUNvbmZpZ3NPYnMucGlwZShcbiAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHguZmluZCgoeSkgPT4geS5zeW5jVHlwZSA9PT0gdHlwZSk7XG4gICAgICBsZXQgcmVzdWx0OiBPYnNlcnZhYmxlPERhdGUgfCBudWxsPjtcblxuICAgICAgaWYgKGNvbmZpZykge1xuICAgICAgICBjb25zdCB7IGNvbnRyb2wgfSA9IGNvbmZpZztcbiAgICAgICAgcmVzdWx0ID0gY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICBzdGFydFdpdGgoY29udHJvbC52YWx1ZSksXG4gICAgICAgICAgbWFwKCh4KSA9PiBzYWZlVG9Kc0RhdGUoeCkgPz8gbnVsbClcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IG9mKG51bGwpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcbn1cblxuY29uc3QgVElNRV9PVVRQVVRfVEhST1RUTEVfVElNRTogTWlsbGlzZWNvbmRzID0gMTA7XG5cbi8qKlxuICogRXJyb3IgY29kZSB1c2VkIHdoZW4gdGhlIHNlbGVjdGVkIGRhdGUgaXMgbm90IGluIHRoZSBzY2hlZHVsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IERCWF9EQVRFX1RJTUVfRklFTERfREFURV9OT1RfSU5fU0NIRURVTEVfRVJST1IgPSAnZGF0ZVRpbWVGaWVsZERhdGVOb3RJblNjaGVkdWxlJztcblxuLyoqXG4gKiBFcnJvciBjb2RlIHVzZWQgd2hlbiB0aGUgc2VsZWN0ZWQgdGltZS90aW1lIGlucHV0IGlzIG5vdCBpbiB0aGUgbGltaXRlZCByYW5nZS5cbiAqL1xuZXhwb3J0IGNvbnN0IERCWF9EQVRFX1RJTUVfRklFTERfVElNRV9OT1RfSU5fUkFOR0VfRVJST1IgPSAnZGF0ZVRpbWVGaWVsZFRpbWVOb3RJblJhbmdlJztcblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnZGF0ZXRpbWUuZmllbGQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERieERhdGVUaW1lRmllbGRDb21wb25lbnQgZXh0ZW5kcyBGaWVsZFR5cGU8RmllbGRUeXBlQ29uZmlnPERieERhdGVUaW1lRmllbGRQcm9wcz4+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IGNkUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkYnhEYXRlVGltZUZpZWxkQ29uZmlnU2VydmljZSA9IGluamVjdChEYnhEYXRlVGltZUZpZWxkTWVudVByZXNldHNTZXJ2aWNlKTtcblxuICBwcml2YXRlIF9zdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX3ZhbHVlU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIF9hdXRvRmlsbERhdGVTeW5jID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuXG4gIHByaXZhdGUgX2NvbmZpZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8T2JzZXJ2YWJsZTxEYnhEYXRlVGltZVBpY2tlckNvbmZpZ3VyYXRpb24+Pj4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgbGF0ZXN0Q29uZmlnJCA9IHRoaXMuX2NvbmZpZy5waXBlKHN3aXRjaE1hcE1heWJlRGVmYXVsdCgpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcHJpdmF0ZSBfc3luY0NvbmZpZ09icyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8T2JzZXJ2YWJsZTxBcnJheU9yVmFsdWU8RGJ4RGF0ZVRpbWVGaWVsZFN5bmNGaWVsZD4+Pj4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIF9kZWZhdWx0VGltZXpvbmUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPE9ic2VydmFibGU8TWF5YmU8VGltZXpvbmVTdHJpbmc+Pj4+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgX3RpbWVEYXRlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxPYnNlcnZhYmxlPE1heWJlPERieERhdGVUaW1lRmllbGRUaW1lRGF0ZUNvbmZpZyB8IEZvcm1Db250cm9sUGF0aCB8IERhdGVPckRheVN0cmluZz4+Pj4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBfcHJlc2V0cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8T2JzZXJ2YWJsZTxEYXRlVGltZVByZXNldENvbmZpZ3VyYXRpb25bXT4+KG9mKFtdKSk7XG5cbiAgcHJpdmF0ZSBfZnVsbERheUlucHV0Q3RybD86IEZvcm1Db250cm9sO1xuICBwcml2YXRlIF9mdWxsRGF5Q29udHJvbE9icyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8QWJzdHJhY3RDb250cm9sPGJvb2xlYW4+Pj4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgZnVsbERheUNvbnRyb2wkID0gdGhpcy5fZnVsbERheUNvbnRyb2xPYnMucGlwZShmaWx0ZXJNYXliZSgpKTtcblxuICBwcml2YXRlIF9vZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIHByaXZhdGUgX2Zvcm1Db250cm9sT2JzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxBYnN0cmFjdENvbnRyb2w8TWF5YmU8RGF0ZT4+Pj4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgZm9ybUNvbnRyb2wkID0gdGhpcy5fZm9ybUNvbnRyb2xPYnMucGlwZShmaWx0ZXJNYXliZSgpKTtcblxuICBwcml2YXRlIF9jbGVhcmVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfdXBkYXRlVGltZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBfcmVzeW5jVGltZUlucHV0U3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIF9yZXN5bmNUaW1lSW5wdXQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHJlYWRvbmx5IHRpbWVFcnJvclN0YXRlTWF0Y2hlcjogRXJyb3JTdGF0ZU1hdGNoZXIgPSB7XG4gICAgaXNFcnJvclN0YXRlOiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgbnVsbCwgZm9ybSkgPT4ge1xuICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgcmV0dXJuIChjb250cm9sLmludmFsaWQgJiYgKGNvbnRyb2wuZGlydHkgfHwgY29udHJvbC50b3VjaGVkKSkgfHwgdGhpcy5lcnJvclN0YXRlTWF0Y2hlci5pc0Vycm9yU3RhdGUodGhpcy5mb3JtQ29udHJvbCwgZm9ybSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJlYWRvbmx5IHJlc3luY1RpbWVJbnB1dCQgPSB0aGlzLl9yZXN5bmNUaW1lSW5wdXQucGlwZShkZWJvdW5jZVRpbWUoMjAwKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHByaXZhdGUgX2NvbmZpZ1VwZGF0ZVRpbWVTeW5jID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdChcbiAgICB0aGlzLmxhdGVzdENvbmZpZyQucGlwZShza2lwKDEpKS5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgIHRoaXMuX3VwZGF0ZVRpbWUubmV4dCgpO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgdGltZXpvbmUkOiBPYnNlcnZhYmxlPE1heWJlPFRpbWV6b25lU3RyaW5nPj4gPSB0aGlzLl9kZWZhdWx0VGltZXpvbmUucGlwZShzd2l0Y2hNYXBNYXliZURlZmF1bHQoKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSkucGlwZShcbiAgICBtYXAoKGRlZmF1bHRUaW1lem9uZSkgPT4ge1xuICAgICAgcmV0dXJuIGRlZmF1bHRUaW1lem9uZSA/PyBndWVzc0N1cnJlbnRUaW1lem9uZSgpO1xuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB0aW1lem9uZUluc3RhbmNlJDogT2JzZXJ2YWJsZTxNYXliZTxEYXRlVGltZXpvbmVVdGNOb3JtYWxJbnN0YW5jZT4+ID0gdGhpcy50aW1lem9uZSQucGlwZShcbiAgICBtYXAoKHRpbWV6b25lKSA9PiAodGltZXpvbmUgPyBkYXRlVGltZXpvbmVVdGNOb3JtYWwoeyB0aW1lem9uZSB9KSA6IHVuZGVmaW5lZCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgdGltZURhdGUkOiBPYnNlcnZhYmxlPE1heWJlPERhdGU+PiA9IHRoaXMuX3RpbWVEYXRlLnBpcGUoXG4gICAgc3dpdGNoTWFwTWF5YmVEZWZhdWx0KCksXG4gICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICBsZXQgb2JzOiBPYnNlcnZhYmxlPE1heWJlPERhdGU+PjtcblxuICAgICAgaWYgKHgpIHtcbiAgICAgICAgLy8gaWYgdGhlIHN0cmluZyBpcyBub3QgYSBkYXRlIHN0cmluZywgdGhlbiB0cmVhdCBpdCBhcyBhIHBhdGhcbiAgICAgICAgaWYgKCh0eXBlb2YgeCA9PT0gJ3N0cmluZycgJiYgIWlzSVNPODYwMURheVN0cmluZ1N0YXJ0KHgpKSB8fCBpc0RieERhdGVUaW1lRmllbGRUaW1lRGF0ZUNvbmZpZyh4KSkge1xuICAgICAgICAgIGNvbnN0IHsgcGF0aCwgbWFwVmFsdWUgfTogRGJ4RGF0ZVRpbWVGaWVsZFRpbWVEYXRlQ29uZmlnID0gdHlwZW9mIHggPT09ICdzdHJpbmcnID8geyBwYXRoOiB4IH0gOiB4O1xuICAgICAgICAgIG9icyA9XG4gICAgICAgICAgICBzdHJlYW1WYWx1ZUZyb21Db250cm9sPERhdGVPckRheVN0cmluZz4odGhpcy5mb3JtLCBwYXRoKT8ucGlwZShcbiAgICAgICAgICAgICAgbWFwKG1hcFZhbHVlID8/IG1hcElkZW50aXR5RnVuY3Rpb24oKSksXG4gICAgICAgICAgICAgIG1hcCgoeCkgPT4gKHggPyB0b0pzRGF5RGF0ZSh4KSA6IHVuZGVmaW5lZCkpXG4gICAgICAgICAgICApID8/IG9mKHVuZGVmaW5lZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JzID0gb2YodG9Kc0RheURhdGUoeCkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYnMgPSBvZih1bmRlZmluZWQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JzO1xuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVEYXkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgdmFsdWVJblN5c3RlbVRpbWV6b25lJDogT2JzZXJ2YWJsZTxNYXliZTxEYXRlPj4gPSB0aGlzLmZvcm1Db250cm9sJC5waXBlKFxuICAgIG1hcCgoY29udHJvbCkgPT4gY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGg8TWF5YmU8RGF0ZSB8IElTTzg2MDFEYXlTdHJpbmcgfCBNaW51dGVPZkRheSB8IFVuaXhEYXRlVGltZU51bWJlcj4+KGNvbnRyb2wudmFsdWUpLCBzaGFyZVJlcGxheSgxKSkpLFxuICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRoaXMudGltZXpvbmVJbnN0YW5jZSQpLFxuICAgIHN3aXRjaE1hcCgoW3gsIHRpbWV6b25lSW5zdGFuY2VdKSA9PiB7XG4gICAgICByZXR1cm4geC5waXBlKG1hcChkYnhEYXRlVGltZUlucHV0VmFsdWVQYXJzZUZhY3RvcnkodGhpcy52YWx1ZU1vZGUsIHRpbWV6b25lSW5zdGFuY2UpKSk7XG4gICAgfSksXG4gICAgdGhyb3R0bGVUaW1lKDIwLCB1bmRlZmluZWQsIHsgbGVhZGluZzogdHJ1ZSwgdHJhaWxpbmc6IHRydWUgfSksIC8vIHRocm90dGxlIGluY29taW5nIHZhbHVlcyBhbmQgdGltZXpvbmUgY2hhbmdlc1xuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVIb3Vyc0FuZE1pbnV0ZXMpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcmVmcmVzaEludGVyYWwkID0gaW50ZXJ2YWwoMTAgKiAxMDAwKTtcblxuICAvKipcbiAgICogVXNlZCB0byB0cmlnZ2VyL2Rpc3BsYXkgdmlzdWFsIHVwZGF0ZXMgKHNwZWNpZmljYWxseSBvbiB0aW1lRGlzdGFuY2UsIGV0Yy4pLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcGxheVZhbHVlJCA9IHRoaXMucmVmcmVzaEludGVyYWwkLnBpcGUoXG4gICAgLy8gZXZlcnkgMTAgc2Vjb25kcywgcmVmcmVzaCB3L2ludGVydmFsXG4gICAgc3RhcnRXaXRoKDApLFxuICAgIG1hcCgoKSA9PiBuZXcgRGF0ZSgpLmdldE1pbnV0ZXMoKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICB0YXAoKCkgPT4gdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKSksXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB0aW1lU3RyaW5nJDogT2JzZXJ2YWJsZTxSZWFkYWJsZVRpbWVTdHJpbmcgfCAnJz4gPSB0aGlzLnZhbHVlSW5TeXN0ZW1UaW1lem9uZSQucGlwZShcbiAgICBtYXAoKHgpID0+ICh4ID8gdG9Mb2NhbFJlYWRhYmxlVGltZVN0cmluZyh4KSA6ICcnKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGVJbnB1dEN0cmwgPSBuZXcgRm9ybUNvbnRyb2w8TWF5YmU8RGF0ZT4+KG51bGwsIHtcbiAgICB2YWxpZGF0b3JzOiBbXVxuICB9KTtcblxuICByZWFkb25seSB0aW1lSW5wdXRDdHJsID0gbmV3IEZvcm1Db250cm9sPE1heWJlPFJlYWRhYmxlVGltZVN0cmluZz4+KG51bGwsIHtcbiAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5wYXR0ZXJuKC9eKG5vdykkfF4oWzAtOV18KDBbMC05XSl8KDFbMC05XSl8KDJbMC0zXSkpKDopPyhbMC01XVswLTldKT8oXFxzKT8oW2FwQVBdW01tXSk/KFxcXFxzKSokLyldXG4gIH0pO1xuXG4gIGdldCBkYXRlTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRlTGFiZWwgPz8gJ0RhdGUnO1xuICB9XG5cbiAgZ2V0IHRpbWVMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnRpbWVMYWJlbCA/PyAnVGltZSc7XG4gIH1cblxuICBnZXQgYWxsRGF5TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5hbGxEYXlMYWJlbCA/PyAnQWxsIERheSc7XG4gIH1cblxuICBnZXQgYXRUaW1lTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5hdFRpbWVMYWJlbCA/PyAnQXQnO1xuICB9XG5cbiAgZ2V0IGRhdGVPbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRpbWVNb2RlID09PSBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUuTk9ORTtcbiAgfVxuXG4gIGdldCBkYXRlVGltZUZpZWxkKCk6IERieERhdGVUaW1lRmllbGRQcm9wcyB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHM7XG4gIH1cblxuICBnZXQgdGltZU9ubHkoKTogTWF5YmU8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHRpbWVWYWx1ZXNPbmx5ID0gdGhpcy52YWx1ZU1vZGUgPT09IERieERhdGVUaW1lVmFsdWVNb2RlLk1JTlVURV9PRl9EQVk7XG5cbiAgICBpZiAodGltZVZhbHVlc09ubHkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlVGltZUZpZWxkLnRpbWVPbmx5O1xuICAgIH1cbiAgfVxuXG4gIGdldCBhbHdheXNTaG93RGF0ZUlucHV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmFsd2F5c1Nob3dEYXRlSW5wdXQgPz8gdHJ1ZTtcbiAgfVxuXG4gIGdldCBhdXRvZmlsbERhdGVXaGVuVGltZUlzUGlja2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmF1dG9maWxsRGF0ZVdoZW5UaW1lSXNQaWNrZWQgPz8gdGhpcy5hbHdheXNTaG93RGF0ZUlucHV0ID09PSBmYWxzZTtcbiAgfVxuXG4gIGdldCBzaG93RGF0ZUlucHV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy50aW1lT25seTtcbiAgfVxuXG4gIGdldCB2YWx1ZU1vZGUoKTogRGJ4RGF0ZVRpbWVWYWx1ZU1vZGUge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLnZhbHVlTW9kZSA/PyBEYnhEYXRlVGltZVZhbHVlTW9kZS5EQVRFO1xuICB9XG5cbiAgZ2V0IHRpbWVNb2RlKCk6IERieERhdGVUaW1lRmllbGRUaW1lTW9kZSB7XG4gICAgY29uc3QgZGF0ZVZhbHVlc09ubHkgPSB0aGlzLnZhbHVlTW9kZSA9PT0gRGJ4RGF0ZVRpbWVWYWx1ZU1vZGUuREFZX1NUUklORztcblxuICAgIGlmIChkYXRlVmFsdWVzT25seSkge1xuICAgICAgcmV0dXJuIERieERhdGVUaW1lRmllbGRUaW1lTW9kZS5OT05FO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy50aW1lT25seSA/IERieERhdGVUaW1lRmllbGRUaW1lTW9kZS5SRVFVSVJFRCA6ICh0aGlzLmRhdGVUaW1lRmllbGQudGltZU1vZGUgPz8gRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlLlJFUVVJUkVEKTtcbiAgICB9XG4gIH1cblxuICBnZXQgaXNEYXRlUmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucmVxdWlyZWQgPz8gZmFsc2U7XG4gIH1cblxuICBnZXQgaXNUaW1lUmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEYXRlUmVxdWlyZWQgJiYgdGhpcy50aW1lTW9kZSA9PT0gRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlLlJFUVVJUkVEO1xuICB9XG5cbiAgZ2V0IGRlc2NyaXB0aW9uKCk6IE1heWJlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLmRlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGhpZGVEYXRlSGludCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5oaWRlRGF0ZUhpbnQgPz8gZmFsc2U7XG4gIH1cblxuICBnZXQgaGlkZURhdGVQaWNrZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMuaGlkZURhdGVQaWNrZXIgPz8gZmFsc2U7XG4gIH1cblxuICBnZXQgdGltZXpvbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMudGltZXpvbmU7XG4gIH1cblxuICBnZXQgdGltZURhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMudGltZURhdGU7XG4gIH1cblxuICBnZXQgc2hvd1RpbWV6b25lKCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLnNob3dUaW1lem9uZSA/PyB0cnVlO1xuICB9XG5cbiAgZ2V0IHByZXNldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMucHJlc2V0cztcbiAgfVxuXG4gIGdldCBzaG93Q2xlYXJCdXR0b24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMuc2hvd0NsZWFyQnV0dG9uO1xuICB9XG5cbiAgZ2V0IG1pbnV0ZVN0ZXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMubWludXRlU3RlcCA/PyB0aGlzLmZpZWxkLnByb3BzLnN0ZXAgPz8gNTtcbiAgfVxuXG4gIHJlYWRvbmx5IGZ1bGxEYXkkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5mdWxsRGF5Q29udHJvbCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKGNvbnRyb2wpID0+IGNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKGNvbnRyb2wudmFsdWUpKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHNob3dUaW1lSW5wdXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5mdWxsRGF5JC5waXBlKG1hcCgoeCkgPT4gIXggJiYgdGhpcy50aW1lTW9kZSAhPT0gRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlLk5PTkUpKTtcblxuICByZWFkb25seSBzaG93QWRkVGltZSQgPSB0aGlzLnNob3dUaW1lSW5wdXQkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiAheCAmJiB0aGlzLnRpbWVNb2RlID09PSBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUuT1BUSU9OQUwpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY3VycmVudERhdGUkID0gdGhpcy5kYXRlSW5wdXRDdHJsLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmRhdGVJbnB1dEN0cmwudmFsdWUpLCBzaGFyZVJlcGxheSgxKSk7XG4gIHJlYWRvbmx5IGRhdGUkID0gdGhpcy5jdXJyZW50RGF0ZSQucGlwZShmaWx0ZXJNYXliZSgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgdGltZXpvbmVBYmJyZXZpYXRpb24kID0gY29tYmluZUxhdGVzdChbdGhpcy5jdXJyZW50RGF0ZSQsIHRoaXMudGltZXpvbmUkLCB0aGlzLnRpbWVEYXRlJF0pLnBpcGUoXG4gICAgbWFwKChbZGF0ZSwgdGltZXpvbmUsIHRpbWVEYXRlXSkgPT4gZ2V0VGltZXpvbmVBYmJyZXZpYXRpb24odGltZXpvbmUsIHRpbWVEYXRlID8/IGRhdGUgPz8gbmV3IERhdGUoKSkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkYXRlVmFsdWUkOiBPYnNlcnZhYmxlPE1heWJlPERhdGU+PiA9IG1lcmdlKHRoaXMuZGF0ZSQsIHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJC5waXBlKHNraXBGaXJzdE1heWJlKCkpKS5waXBlKFxuICAgIG1hcCgoeDogTWF5YmU8RGF0ZT4pID0+ICh4ID8gc3RhcnRPZkRheSh4KSA6IG51bGwpKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxNYXliZTxEYXRlPj4oaXNTYW1lRGF0ZURheSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB0aW1lSW5wdXQkOiBPYnNlcnZhYmxlPFJlYWRhYmxlVGltZVN0cmluZz4gPSB0aGlzLl91cGRhdGVUaW1lLnBpcGUoXG4gICAgZGVib3VuY2VUaW1lKDUpLFxuICAgIG1hcCgoKSA9PiB0aGlzLnRpbWVJbnB1dEN0cmwudmFsdWUgfHwgJycpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgKTtcblxuICByZWFkb25seSBzeW5jQ29uZmlnT2JzJCA9IHRoaXMuX3N5bmNDb25maWdPYnMucGlwZShzd2l0Y2hNYXBNYXliZURlZmF1bHQoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IHBhcnNlZFN5bmNDb25maWdzJDogT2JzZXJ2YWJsZTxEYnhEYXRlVGltZUZpZWxkU3luY1BhcnNlZEZpZWxkW10+ID0gdGhpcy5zeW5jQ29uZmlnT2JzJC5waXBlKFxuICAgIG1hcCgoeCkgPT4ge1xuICAgICAgbGV0IHBhcnNlZDogRGJ4RGF0ZVRpbWVGaWVsZFN5bmNQYXJzZWRGaWVsZFtdO1xuXG4gICAgICBpZiAoeCkge1xuICAgICAgICBwYXJzZWQgPSBmaWx0ZXJNYXliZUFycmF5VmFsdWVzKFxuICAgICAgICAgIGFzQXJyYXkoeCkubWFwKCh5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldCh5LnN5bmNXaXRoKTtcblxuICAgICAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb250cm9sLFxuICAgICAgICAgICAgICAgIC4uLnlcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZCA9IFtdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgc3luY0NvbmZpZ0JlZm9yZVZhbHVlJDogT2JzZXJ2YWJsZTxEYXRlIHwgbnVsbD4gPSBzeW5jQ29uZmlnVmFsdWVPYnModGhpcy5wYXJzZWRTeW5jQ29uZmlncyQsICdiZWZvcmUnKTtcbiAgcmVhZG9ubHkgc3luY0NvbmZpZ0FmdGVyVmFsdWUkOiBPYnNlcnZhYmxlPERhdGUgfCBudWxsPiA9IHN5bmNDb25maWdWYWx1ZU9icyh0aGlzLnBhcnNlZFN5bmNDb25maWdzJCwgJ2FmdGVyJyk7XG5cbiAgcmVhZG9ubHkgaXNUaW1lQ2xlYXJlZCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmN1cnJlbnREYXRlJCwgdGhpcy5fdGltZURhdGUucGlwZShzdGFydFdpdGgobnVsbCkpXSkucGlwZShcbiAgICBzd2l0Y2hNYXAoKFtkYXRlLCB0aW1lXSkgPT4ge1xuICAgICAgY29uc3QgaXNUaW1lQ2xlYXJlZCA9IEJvb2xlYW4oIWRhdGUgJiYgIXRpbWUpO1xuICAgICAgcmV0dXJuIHRoaXMuX2NsZWFyZWQucGlwZShcbiAgICAgICAgbWFwKCgpID0+IHRydWUpLFxuICAgICAgICBzdGFydFdpdGgoaXNUaW1lQ2xlYXJlZClcbiAgICAgICk7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHJhd0RhdGVUaW1lJDogT2JzZXJ2YWJsZTxNYXliZTxEYXRlPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLl9jb25maWcucGlwZShcbiAgICAgIGZpcnN0KCksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gKHRoaXMudGltZU9ubHkgPyBvZihudWxsKSA6IHRoaXMuZGF0ZVZhbHVlJCkpXG4gICAgKSxcbiAgICB0aGlzLnRpbWVJbnB1dCQucGlwZShzdGFydFdpdGgobnVsbCkpLFxuICAgIHRoaXMuZnVsbERheSQsXG4gICAgdGhpcy50aW1lRGF0ZSQsXG4gICAgdGhpcy5pc1RpbWVDbGVhcmVkJFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2RhdGUsIHRpbWVTdHJpbmcsIGZ1bGxEYXksIHRpbWVEYXRlLCBpc1RpbWVDbGVhcmVkXSkgPT4ge1xuICAgICAgbGV0IHJlc3VsdDogTWF5YmU8RGF0ZT47XG5cbiAgICAgIGlmICghaXNUaW1lQ2xlYXJlZCkge1xuICAgICAgICBpZiAoIWRhdGUgfHwgdGhpcy50aW1lT25seSkge1xuICAgICAgICAgIGRhdGUgPSB0aW1lRGF0ZSA/PyBuZXcgRGF0ZSgpOyAvLyB1c2UgdGhlIHRpbWUgZGF0ZSwgb3IgZGVmYXVsdCB0byB0aGUgY3VycmVudCBkYXlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgaWYgKGZ1bGxEYXkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGVUaW1lRmllbGQuZnVsbERheUluVVRDKSB7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IHV0Y0RheUZvckRhdGUoZGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXN1bHQgPSBzdGFydE9mRGF5KGRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodGltZVN0cmluZykge1xuICAgICAgICAgICAgcmVzdWx0ID1cbiAgICAgICAgICAgICAgcmVhZGFibGVUaW1lU3RyaW5nVG9EYXRlKHRpbWVTdHJpbmcsIHtcbiAgICAgICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgICAgIHVzZVN5c3RlbVRpbWV6b25lOiB0cnVlXG4gICAgICAgICAgICAgIH0pID8/IGRhdGU7XG4gICAgICAgICAgfSBlbHNlIGlmICghdGhpcy50aW1lT25seSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGltZU1vZGUgIT09IERieERhdGVUaW1lRmllbGRUaW1lTW9kZS5SRVFVSVJFRCkge1xuICAgICAgICAgICAgICAvLyBvbmx5IGF1dG9maWxsIHRoZSBkYXRlIGlmIHRoZSB0aW1lIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAoYW5kIHRoZSB0aW1lIHN0cmluZyBpcyBlbXB0eSlcbiAgICAgICAgICAgICAgcmVzdWx0ID0gZGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlSG91cnNBbmRNaW51dGVzKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGVUaW1lUGlja2VyQ29uZmlnJDogT2JzZXJ2YWJsZTxNYXliZTxEYnhEYXRlVGltZVBpY2tlckNvbmZpZ3VyYXRpb24+PiA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuX2NvbmZpZy5waXBlKHN3aXRjaE1hcEZpbHRlck1heWJlKCkpLCB0aGlzLnN5bmNDb25maWdCZWZvcmVWYWx1ZSQsIHRoaXMuc3luY0NvbmZpZ0FmdGVyVmFsdWUkXSkucGlwZShcbiAgICBtYXAoKFt4LCBkYXRlSW5wdXRNaW4sIGRhdGVJbnB1dE1heF0pID0+IHtcbiAgICAgIGxldCByZXN1bHQ6IE1heWJlPERieERhdGVUaW1lUGlja2VyQ29uZmlndXJhdGlvbj4gPSB4O1xuXG4gICAgICBpZiAoZGF0ZUlucHV0TWluICE9IG51bGwgfHwgZGF0ZUlucHV0TWF4ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgeyBtaW46IGxpbWl0TWluLCBtYXg6IGxpbWl0TWF4IH0gPSB4Py5saW1pdHMgPz8ge307XG4gICAgICAgIGNvbnN0IG1pbiA9IGZpbmRNaW5EYXRlKFtkYXRlSW5wdXRNaW4sIGRhdGVGcm9tTG9naWNhbERhdGUobGltaXRNaW4pXSk7XG4gICAgICAgIGNvbnN0IG1heCA9IGZpbmRNYXhEYXRlKFtkYXRlSW5wdXRNYXgsIGRhdGVGcm9tTG9naWNhbERhdGUobGltaXRNYXgpXSk7XG5cbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgIC4uLngsXG4gICAgICAgICAgbGltaXRzOiB7XG4gICAgICAgICAgICAuLi54Py5saW1pdHMsXG4gICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICBtYXhcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGVJbnB1dE1pbiQ6IE9ic2VydmFibGU8RGF0ZSB8IG51bGw+ID0gdGhpcy5kYXRlVGltZVBpY2tlckNvbmZpZyQucGlwZShcbiAgICBtYXAoKHgpID0+ICh4Py5saW1pdHM/Lm1pbiA/PyBudWxsKSBhcyBEYXRlIHwgbnVsbCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQ8RGF0ZSB8IG51bGw+KGlzU2FtZURhdGUpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZGF0ZUlucHV0TWF4JDogT2JzZXJ2YWJsZTxEYXRlIHwgbnVsbD4gPSB0aGlzLmRhdGVUaW1lUGlja2VyQ29uZmlnJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gKHg/LmxpbWl0cz8ubWF4ID8/IG51bGwpIGFzIERhdGUgfCBudWxsKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxEYXRlIHwgbnVsbD4oaXNTYW1lRGF0ZSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhlcmUgaXMgYSBsaW1pdGVkIG1pbi9tYXggZGF0ZSByYW5nZSBhcHBsaWVkL2F2YWlsYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGhhc1Jlc3RyaWN0ZWREYXRlUmFuZ2UkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gY29tYmluZUxhdGVzdChbdGhpcy5kYXRlSW5wdXRNaW4kLCB0aGlzLmRhdGVJbnB1dE1heCRdKS5waXBlKFxuICAgIG1hcCgoW2EsIGJdKSA9PiBCb29sZWFuKGEgfHwgYikpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkYXRlTWluQW5kTWF4SXNTYW1lRGF5JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuZGF0ZUlucHV0TWluJCwgdGhpcy5kYXRlSW5wdXRNYXgkXSkucGlwZShcbiAgICBtYXAoKFthLCBiXSkgPT4gQm9vbGVhbihhICYmIGIpICYmIGlzU2FtZURhdGVEYXkoYSwgYikpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBwaWNrZXJGaWx0ZXIkOiBPYnNlcnZhYmxlPERlY2lzaW9uRnVuY3Rpb248RGF0ZSB8IG51bGw+PiA9IHRoaXMuZGF0ZVRpbWVQaWNrZXJDb25maWckLnBpcGUoXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBtYXAoKHgpID0+IHtcbiAgICAgIGlmICh4KSB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IGRhdGVUaW1lTWludXRlV2hvbGVEYXlEZWNpc2lvbkZ1bmN0aW9uKHgsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuICh4OiBEYXRlIHwgbnVsbCkgPT4gKHggIT0gbnVsbCA/IGZpbHRlcih4KSA6IHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICgpID0+IHRydWU7XG4gICAgICB9XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkZWZhdWx0UGlja2VyRmlsdGVyOiBEZWNpc2lvbkZ1bmN0aW9uPERhdGUgfCBudWxsPiA9ICgpID0+IHRydWU7XG5cbiAgcmVhZG9ubHkgdGltZU91dHB1dCQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZT4+ID0gY29tYmluZUxhdGVzdChbdGhpcy5yYXdEYXRlVGltZSQsIHRoaXMuX29mZnNldCwgdGhpcy5kYXRlVGltZVBpY2tlckNvbmZpZyRdKS5waXBlKFxuICAgIHRocm90dGxlVGltZShUSU1FX09VVFBVVF9USFJPVFRMRV9USU1FLCB1bmRlZmluZWQsIHsgbGVhZGluZzogZmFsc2UsIHRyYWlsaW5nOiB0cnVlIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChjdXJyZW50LCBuZXh0KSA9PiBjdXJyZW50WzBdID09PSBuZXh0WzBdICYmIG5leHRbMV0gPT09IDAgJiYgY3VycmVudFsyXSA9PT0gbmV4dFsyXSksXG4gICAgdGFwKChbLCBzdGVwc09mZnNldF0pID0+IChzdGVwc09mZnNldCA/IHRoaXMuX29mZnNldC5uZXh0KDApIDogMCkpLFxuICAgIG1hcCgoW2RhdGUsIHN0ZXBzT2Zmc2V0LCBjb25maWddKSA9PiB7XG4gICAgICBpZiAoZGF0ZSAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IERhdGVUaW1lTWludXRlSW5zdGFuY2Uoe1xuICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgIHJvdW5kRG93blRvTWludXRlOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIG9ubHkgY2xhbXAgd2hlbiB0aGUgc3RlcHMgb2Zmc2V0IGlzIHNldFxuICAgICAgICBpZiAoc3RlcHNPZmZzZXQpIHtcbiAgICAgICAgICBkYXRlID0gaW5zdGFuY2UuY2xhbXAoZGF0ZSk7XG5cbiAgICAgICAgICBjb25zdCBtaW51dGVzID0gc3RlcHNPZmZzZXQgKiB0aGlzLm1pbnV0ZVN0ZXA7XG5cbiAgICAgICAgICBpZiAobWludXRlcyAhPSAwKSB7XG4gICAgICAgICAgICBkYXRlID0gYWRkTWludXRlcyhkYXRlLCBtaW51dGVzKTtcbiAgICAgICAgICAgIGRhdGUgPSBpbnN0YW5jZS5jbGFtcChkYXRlKTsgLy8gY2xhbXAgdGhlIGRhdGUgYWdhaW5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZUhvdXJzQW5kTWludXRlcyksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkYXRlVGltZVBpY2tlckluc3RhbmNlJCA9IHRoaXMuZGF0ZVRpbWVQaWNrZXJDb25maWckLnBpcGUoXG4gICAgbWFwKChjb25maWcpID0+IHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWVNaW51dGVJbnN0YW5jZSh7XG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgcm91bmREb3duVG9NaW51dGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaGFzRW1wdHlEaXNwbGF5VmFsdWUkID0gdGhpcy5kaXNwbGF5VmFsdWUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiAheCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHByZXNldHMkOiBPYnNlcnZhYmxlPERhdGVUaW1lUHJlc2V0W10+ID0gdGhpcy5fcHJlc2V0cy5waXBlKFxuICAgIHN3aXRjaE1hcEZpbHRlck1heWJlKCksXG4gICAgbWFwKCh4OiBEYXRlVGltZVByZXNldENvbmZpZ3VyYXRpb25bXSkgPT4geC5tYXAoZGF0ZVRpbWVQcmVzZXQpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHNob3dDbGVhckJ1dHRvbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmhhc0VtcHR5RGlzcGxheVZhbHVlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gQm9vbGVhbih0aGlzLnNob3dDbGVhckJ1dHRvbiAmJiAheCkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjYW5BdXRvZmlsbERhdGVXaXRoT25seUF2YWlsYWJsZURhdGUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5kYXRlTWluQW5kTWF4SXNTYW1lRGF5JDtcblxuICByZWFkb25seSBzaG93RGF0ZUlucHV0JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuZGF0ZU1pbkFuZE1heElzU2FtZURheSQucGlwZShcbiAgICBtYXAoKGRhdGVNaW5BbmRNYXhJc1NhbWVEYXkpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnNob3dEYXRlSW5wdXQgJiYgKHRoaXMuYWx3YXlzU2hvd0RhdGVJbnB1dCB8fCAhZGF0ZU1pbkFuZE1heElzU2FtZURheSk7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRFcnJvck1lc3NhZ2UkID0gdGhpcy5mb3JtQ29udHJvbCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKGZvcm1Db250cm9sKSA9PlxuICAgICAgZm9ybUNvbnRyb2wuc3RhdHVzQ2hhbmdlcy5waXBlKFxuICAgICAgICBmaWx0ZXIoKHgpID0+IHggPT09ICdJTlZBTElEJyB8fCB4ID09PSAnVkFMSUQnKSxcbiAgICAgICAgbWFwKCh4KSA9PiB7XG4gICAgICAgICAgbGV0IGN1cnJlbnRFcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGlmICh4ID09PSAnSU5WQUxJRCcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1Db250cm9sLmhhc0Vycm9yKCdyZXF1aXJlZCcpKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRFcnJvck1lc3NhZ2UgPSAnRGF0ZSBpcyByZXF1aXJlZCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybUNvbnRyb2wuaGFzRXJyb3IoREJYX0RBVEVfVElNRV9GSUVMRF9EQVRFX05PVF9JTl9TQ0hFRFVMRV9FUlJPUikpIHtcbiAgICAgICAgICAgICAgY3VycmVudEVycm9yTWVzc2FnZSA9ICdEYXRlIGRvZXMgbm90IGZhbGwgb24gYW4gYXZhaWxhYmxlIGRhdGVzIGluIHNjaGVkdWxlLic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybUNvbnRyb2wuaGFzRXJyb3IoREJYX0RBVEVfVElNRV9GSUVMRF9USU1FX05PVF9JTl9SQU5HRV9FUlJPUikpIHtcbiAgICAgICAgICAgICAgY3VycmVudEVycm9yTWVzc2FnZSA9ICdUaW1lIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGdpdmVuIGRhdGUuJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRFcnJvck1lc3NhZ2UgPSAnVGhlIGdpdmVuIGRhdGUgYW5kIHRpbWUgaXMgaW52YWxpZC4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjdXJyZW50RXJyb3JNZXNzYWdlO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICksXG4gICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBoYXNFcnJvciQgPSB0aGlzLmN1cnJlbnRFcnJvck1lc3NhZ2UkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiBCb29sZWFuKHgpKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fZm9ybUNvbnRyb2xPYnMubmV4dCh0aGlzLmZvcm1Db250cm9sKTtcblxuICAgIGNvbnN0IGlucHV0UGlja2VyQ29uZmlnID0gdGhpcy5kYXRlVGltZUZpZWxkLnBpY2tlckNvbmZpZztcbiAgICB0aGlzLl9jb25maWcubmV4dChpbnB1dFBpY2tlckNvbmZpZyA/IGFzT2JzZXJ2YWJsZUZyb21HZXR0ZXIoaW5wdXRQaWNrZXJDb25maWcpIDogb2Yoe30pKTtcbiAgICB0aGlzLl9zeW5jQ29uZmlnT2JzLm5leHQodGhpcy5kYXRlVGltZUZpZWxkLmdldFN5bmNGaWVsZHNPYnM/LigpKTtcblxuICAgIHRoaXMuX3N1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLnZhbHVlSW5TeXN0ZW1UaW1lem9uZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBjb21iaW5lTGF0ZXN0V2l0aCh0aGlzLnRpbWV6b25lSW5zdGFuY2UkLnBpcGUobWFwKCh0aW1lem9uZUluc3RhbmNlKSA9PiBkYnhEYXRlVGltZU91dHB1dFZhbHVlRmFjdG9yeSh0aGlzLnZhbHVlTW9kZSwgdGltZXpvbmVJbnN0YW5jZSkpKSksXG4gICAgICAgIHRocm90dGxlVGltZShUSU1FX09VVFBVVF9USFJPVFRMRV9USU1FLCB1bmRlZmluZWQsIHsgbGVhZGluZzogZmFsc2UsIHRyYWlsaW5nOiB0cnVlIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKFtjdXJyZW50VmFsdWUsIHZhbHVlRmFjdG9yeV0pID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy50aW1lT3V0cHV0JC5waXBlKFxuICAgICAgICAgICAgdGhyb3R0bGVUaW1lKFRJTUVfT1VUUFVUX1RIUk9UVExFX1RJTUUgKiAyLCB1bmRlZmluZWQsIHsgbGVhZGluZzogZmFsc2UsIHRyYWlsaW5nOiB0cnVlIH0pLFxuICAgICAgICAgICAgc2tpcEZpcnN0TWF5YmUoKSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVIb3Vyc0FuZE1pbnV0ZXMpLFxuICAgICAgICAgICAgbWFwKCh4KSA9PiB2YWx1ZUZhY3RvcnkoeCkpLFxuICAgICAgICAgICAgZmlsdGVyKCh4KSA9PiAhZGJ4RGF0ZVRpbWVJc1NhbWVEYXRlVGltZUZpZWxkVmFsdWUoeCwgY3VycmVudFZhbHVlKSlcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICB9KTtcblxuICAgIGxldCBoYXNTZXRNaWRuaWdodEZyb21JbnB1dCA9IGZhbHNlO1xuXG4gICAgLypcbiAgICB0aGlzLl92YWx1ZVN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLnRpbWVTdHJpbmckLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgdGhpcy5zZXRUaW1lKHgpO1xuICAgIH0pO1xuICAgICovXG5cbiAgICBpZiAodGhpcy5hdXRvZmlsbERhdGVXaGVuVGltZUlzUGlja2VkKSB7XG4gICAgICB0aGlzLl9hdXRvRmlsbERhdGVTeW5jLnN1YnNjcmlwdGlvbiA9IHRoaXMuY2FuQXV0b2ZpbGxEYXRlV2l0aE9ubHlBdmFpbGFibGVEYXRlJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKGNhbkF1dG9maWxsKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FuQXV0b2ZpbGwpIHtcbiAgICAgICAgICAgICAgLy8gd2hlbiB0aGUgdGltZSB1cGRhdGVzIHRoZSBmaXJzdCB0aW1lLCBzZXQgdGhlIGN1cnJlbnQgbWluIGRhdGVcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZVRpbWUucGlwZShcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuZGF0ZUlucHV0TWluJCksXG4gICAgICAgICAgICAgICAgZmlsdGVyTWF5YmUoKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpOyAvLyBkb24ndCBzaG93IGFueXRoaW5nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChhdXRvRGF0ZSkgPT4ge1xuICAgICAgICAgIGlmIChhdXRvRGF0ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVJbnB1dEN0cmwuc2V0VmFsdWUoYXV0b0RhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdmFsdWVTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy52YWx1ZUluU3lzdGVtVGltZXpvbmUkXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh4KSA9PiAoeCA/IGlzU2FtZURhdGUoeCwgc3RhcnRPZkRheSh4KSkgOiBmYWxzZSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzd2l0Y2hNYXAoKGlzSW5wdXRWYWx1ZUF0TWlkbmlnaHQpID0+IHtcbiAgICAgICAgICBoYXNTZXRNaWRuaWdodEZyb21JbnB1dCA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiB0aGlzLnRpbWVTdHJpbmckLnBpcGUoXG4gICAgICAgICAgICAvLyBza2lwKDEpLFxuICAgICAgICAgICAgbWFwKCh0aW1lU3RyaW5nKSA9PiBbdGltZVN0cmluZywgaXNJbnB1dFZhbHVlQXRNaWRuaWdodF0gYXMgW3N0cmluZywgYm9vbGVhbl0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKFt4LCBpc0lucHV0VmFsdWVBdE1pZG5pZ2h0XSkgPT4ge1xuICAgICAgICAvLyBTa2lwIGV2ZW50cyB3aGVyZSB0aGUgdGltZUlucHV0IHZhbHVlIGlzIGNsZWFyZWQsIHVubGVzcyB0aGUgaW5wdXQgdmFsdWUgaXMgYXQgbWlkbmlnaHQgYW5kIHdlJ3ZlIGFscmVhZHkgcHJvY2Vzc2VkIGl0IGJlaW5nIGF0IG1pZG5pZ2h0XG4gICAgICAgIGlmICghdGhpcy50aW1lSW5wdXRDdHJsLnZhbHVlICYmIHggPT09ICcxMjowMEFNJyAmJiAoIWlzSW5wdXRWYWx1ZUF0TWlkbmlnaHQgfHwgKGlzSW5wdXRWYWx1ZUF0TWlkbmlnaHQgJiYgaGFzU2V0TWlkbmlnaHRGcm9tSW5wdXQpKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgaGFzIHNldCBmbGFnXG4gICAgICAgIGlmICh4ID09PSAnMTI6MDBBTScgJiYgaXNJbnB1dFZhbHVlQXRNaWRuaWdodCkge1xuICAgICAgICAgIGhhc1NldE1pZG5pZ2h0RnJvbUlucHV0ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0VGltZSh4KTtcbiAgICAgIH0pO1xuXG4gICAgLy8gU2V0IGRlZmF1bHQgdGltZXpvbmUgaWYgcHJvdmlkZWQuXG4gICAgaWYgKHRoaXMudGltZXpvbmUgJiYgIXRoaXMuZGF0ZVRpbWVGaWVsZC5mdWxsRGF5SW5VVEMpIHtcbiAgICAgIHRoaXMuX2RlZmF1bHRUaW1lem9uZS5uZXh0KGFzT2JzZXJ2YWJsZUZyb21HZXR0ZXIodGhpcy50aW1lem9uZSkpO1xuICAgIH1cblxuICAgIHRoaXMuX3RpbWVEYXRlLm5leHQoYXNPYnNlcnZhYmxlRnJvbUdldHRlcih0aGlzLnRpbWVEYXRlKSk7XG5cbiAgICAvLyBXYXRjaCBmb3IgZGlzYWJsZWQgY2hhbmdlcyBzbyB3ZSBjYW4gcHJvcG9nYXRlIHRoZW0gcHJvcGVybHkuXG4gICAgdGhpcy5mb3JtQ29udHJvbC5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoKGlzRGlzYWJsZWQpID0+IHtcbiAgICAgIHRvZ2dsZURpc2FibGVGb3JtQ29udHJvbCh0aGlzLmRhdGVJbnB1dEN0cmwsIGlzRGlzYWJsZWQpO1xuICAgICAgdG9nZ2xlRGlzYWJsZUZvcm1Db250cm9sKHRoaXMudGltZUlucHV0Q3RybCwgaXNEaXNhYmxlZCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBpc0Z1bGxEYXlGaWVsZCA9IHRoaXMuZGF0ZVRpbWVGaWVsZC5mdWxsRGF5RmllbGROYW1lO1xuICAgIGxldCBmdWxsRGF5RmllbGRDdHJsOiBNYXliZTxBYnN0cmFjdENvbnRyb2w+O1xuXG4gICAgaWYgKGlzRnVsbERheUZpZWxkKSB7XG4gICAgICBmdWxsRGF5RmllbGRDdHJsID0gdGhpcy5mb3JtLmdldChpc0Z1bGxEYXlGaWVsZCk7XG4gICAgfVxuXG4gICAgaWYgKCFmdWxsRGF5RmllbGRDdHJsKSB7XG4gICAgICBjb25zdCBpc0Z1bGxEYXkgPSB0aGlzLnRpbWVNb2RlID09PSBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUuTk9ORTtcbiAgICAgIHRoaXMuX2Z1bGxEYXlJbnB1dEN0cmwgPSBuZXcgRm9ybUNvbnRyb2woaXNGdWxsRGF5KTtcblxuICAgICAgLy8gU2V0IHRoZSBjb250cm9sIGluIHRoZSBmb3JtIHRvbyBpZiB0aGUgbmFtZSBpcyBkZWZpbmVkLlxuICAgICAgaWYgKGlzRnVsbERheUZpZWxkKSB7XG4gICAgICAgICh0aGlzLmZvcm0gYXMgRm9ybUdyb3VwKS5hZGRDb250cm9sKGlzRnVsbERheUZpZWxkLCB0aGlzLl9mdWxsRGF5SW5wdXRDdHJsKTtcbiAgICAgIH1cblxuICAgICAgZnVsbERheUZpZWxkQ3RybCA9IHRoaXMuX2Z1bGxEYXlJbnB1dEN0cmw7XG4gICAgfVxuXG4gICAgdGhpcy5fZnVsbERheUNvbnRyb2xPYnMubmV4dChmdWxsRGF5RmllbGRDdHJsKTtcblxuICAgIHN3aXRjaCAodGhpcy50aW1lTW9kZSkge1xuICAgICAgY2FzZSBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUuT1BUSU9OQUw6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUuTk9ORTpcbiAgICAgICAgdGhpcy5yZW1vdmVUaW1lKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUuUkVRVUlSRUQ6XG4gICAgICAgIHRoaXMuYWRkVGltZSgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcmVzZXRzICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX3ByZXNldHMubmV4dChhc09ic2VydmFibGVGcm9tR2V0dGVyKHRoaXMucHJlc2V0cykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wcmVzZXRzLm5leHQodGhpcy5kYnhEYXRlVGltZUZpZWxkQ29uZmlnU2VydmljZS5jb25maWd1cmF0aW9ucyQpO1xuICAgIH1cblxuICAgIHRoaXMuX3Jlc3luY1RpbWVJbnB1dFN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLnJlc3luY1RpbWVJbnB1dCQucGlwZShzd2l0Y2hNYXAoKHgpID0+IGNvbWJpbmVMYXRlc3QoW3RoaXMuY3VycmVudERhdGUkLCB0aGlzLnRpbWVTdHJpbmckXSkucGlwZShmaXJzdCgpKSkpLnN1YnNjcmliZSgoW2N1cnJlbnREYXRlLCB0aW1lU3RyaW5nXSkgPT4ge1xuICAgICAgLy8gb25seSByZXN5bmMgd2hlbiB0aGUgY3VycmVudCBkYXRlIGlzIHNldCwgb3RoZXJ3aXNlIGRvIG5vdCBjaGFuZ2UgdGhlIHRpbWUgc3RyaW5nLlxuICAgICAgLy8gVGhpcyBoZWxwcyBpbiBjYXNlcyB3aGVyZSB0aGUgdXNlciBwaWNrcyBhIHRpbWUgZmlyc3QgYW5kIHdlIGRvbid0IHdhbnQgaXQgdG8gYmUgY2xlYXJlZC5cbiAgICAgIGlmIChjdXJyZW50RGF0ZSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMudGltZUlucHV0Q3RybC5zZXRWYWx1ZSh0aW1lU3RyaW5nLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBhZGQgdmFsaWRhdG9ycy9lcnJvcnMgZm9yIHRoZSBmb3JtXG4gICAgdGhpcy5mb3JtQ29udHJvbC5hZGRBc3luY1ZhbGlkYXRvcnMoW1xuICAgICAgKHgpID0+IHtcbiAgICAgICAgY29uc3QgZm9ybVZhbHVlID0geC52YWx1ZSBhcyBNYXliZTxEYXRlPjtcbiAgICAgICAgbGV0IG9iczogT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzPjtcblxuICAgICAgICBpZiAoZm9ybVZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICBvYnMgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnRpbWV6b25lSW5zdGFuY2UkLCB0aGlzLmRhdGVUaW1lUGlja2VySW5zdGFuY2UkXSkucGlwZShcbiAgICAgICAgICAgIG1hcCgoW3RpbWV6b25lSW5zdGFuY2UsIHhdKSA9PiB7XG4gICAgICAgICAgICAgIC8vIHRoZSBmb3JtIHZhbHVlIGlzIGdvaW5nIHRvIGJlIGluIHRoZSBvdXRwdXQgZm9ybSwgc28gd2UgbmVlZCB0byBwYXJzZSBpdCBiYWNrIHRvIHRoZSBcImlucHV0XCIgZGF0ZSBiZWZvcmUgZXZhbHVhdGluZyBpdFxuICAgICAgICAgICAgICBjb25zdCBmb3JtVmFsdWVJblN5c3RlbVRpbWV6b25lID0gZGJ4RGF0ZVRpbWVJbnB1dFZhbHVlUGFyc2VGYWN0b3J5KHRoaXMudmFsdWVNb2RlLCB0aW1lem9uZUluc3RhbmNlKShmb3JtVmFsdWUpO1xuXG4gICAgICAgICAgICAgIGxldCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgPSB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy50aW1lSW5wdXRDdHJsLmVycm9yc1xuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChmb3JtVmFsdWVJblN5c3RlbVRpbWV6b25lKSB7XG4gICAgICAgICAgICAgICAgaWYgKHguZGF0ZUlzSW5TY2hlZHVsZShmb3JtVmFsdWVJblN5c3RlbVRpbWV6b25lKSkge1xuICAgICAgICAgICAgICAgICAgaWYgKCF4LmlzSW5WYWxpZFJhbmdlKGZvcm1WYWx1ZUluU3lzdGVtVGltZXpvbmUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBbREJYX0RBVEVfVElNRV9GSUVMRF9USU1FX05PVF9JTl9SQU5HRV9FUlJPUl06IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZXJyb3JzID0ge1xuICAgICAgICAgICAgICAgICAgICBbREJYX0RBVEVfVElNRV9GSUVMRF9EQVRFX05PVF9JTl9TQ0hFRFVMRV9FUlJPUl06IHRydWVcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZmlyc3QoKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JzID0gb2Yoe30pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9icztcbiAgICAgIH1cbiAgICBdKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgdGhpcy5fc3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl92YWx1ZVN1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5fY29uZmlnLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fY29uZmlnVXBkYXRlVGltZVN5bmMuZGVzdHJveSgpO1xuICAgIHRoaXMuX2RlZmF1bHRUaW1lem9uZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3Jlc3luY1RpbWVJbnB1dFN1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5fYXV0b0ZpbGxEYXRlU3luYy5kZXN0cm95KCk7XG4gICAgdGhpcy5fdGltZURhdGUuY29tcGxldGUoKTtcbiAgICB0aGlzLl9wcmVzZXRzLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZnVsbERheUNvbnRyb2xPYnMuY29tcGxldGUoKTtcbiAgICB0aGlzLl9vZmZzZXQuY29tcGxldGUoKTtcbiAgICB0aGlzLl9mb3JtQ29udHJvbE9icy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3VwZGF0ZVRpbWUuY29tcGxldGUoKTtcbiAgICB0aGlzLl9jbGVhcmVkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fcmVzeW5jVGltZUlucHV0LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fc3luY0NvbmZpZ09icy5jb21wbGV0ZSgpO1xuICB9XG5cbiAgc2VsZWN0UHJlc2V0KHByZXNldDogRGF0ZVRpbWVQcmVzZXQpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZSA9IHByZXNldC52YWx1ZSgpO1xuXG4gICAgaWYgKHZhbHVlLmxvZ2ljYWxEYXRlKSB7XG4gICAgICB0aGlzLnNldExvZ2ljYWxUaW1lKHZhbHVlLmxvZ2ljYWxEYXRlKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnRpbWVTdHJpbmcpIHtcbiAgICAgIHRoaXMuc2V0VGltZSh2YWx1ZS50aW1lU3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICBkYXRlUGlja2VkKGV2ZW50OiBNYXREYXRlcGlja2VySW5wdXRFdmVudDxEYXRlPik6IHZvaWQge1xuICAgIGNvbnN0IGRhdGUgPSBldmVudC52YWx1ZTtcblxuICAgIGlmIChkYXRlKSB7XG4gICAgICB0aGlzLnNldERhdGVJbnB1dFZhbHVlKGRhdGUpO1xuICAgIH1cbiAgfVxuXG4gIHNldExvZ2ljYWxUaW1lKHRpbWU6IExvZ2ljYWxEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IGRhdGVGcm9tTG9naWNhbERhdGUodGltZSk7XG5cbiAgICBpZiAoZGF0ZSkge1xuICAgICAgdGhpcy5zZXRUaW1lRnJvbURhdGUoZGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgc2V0RGF0ZUlucHV0VmFsdWUoZGF0ZTogRGF0ZSkge1xuICAgIHRoaXMuZGF0ZUlucHV0Q3RybC5zZXRWYWx1ZShkYXRlKTtcbiAgICB0aGlzLl91cGRhdGVUaW1lLm5leHQoKTtcbiAgfVxuXG4gIHNldFRpbWVGcm9tRGF0ZSh0aW1lRGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IHRpbWVTdHJpbmcgPSB0b0xvY2FsUmVhZGFibGVUaW1lU3RyaW5nKHRpbWVEYXRlKTtcbiAgICB0aGlzLnNldFRpbWUodGltZVN0cmluZyk7XG4gIH1cblxuICBzZXRUaW1lKHRpbWU6IFJlYWRhYmxlVGltZVN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRpbWVJbnB1dEN0cmwudmFsdWUgIT09IHRpbWUpIHtcbiAgICAgIHRoaXMudGltZUlucHV0Q3RybC5zZXRWYWx1ZSh0aW1lKTtcbiAgICAgIHRoaXMuX29mZnNldC5uZXh0KDApO1xuICAgICAgdGhpcy5fdXBkYXRlVGltZS5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAga2V5ZG93bk9uRGF0ZUlucHV0KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgbGV0IGRpcmVjdGlvbiA9IDA7XG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleT8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgY2FzZSAnYXJyb3d1cCc6XG4gICAgICAgIGRpcmVjdGlvbiA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYXJyb3dkb3duJzpcbiAgICAgICAgZGlyZWN0aW9uID0gLTE7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGxldCBvZmZzZXQgPSAxO1xuXG4gICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIG9mZnNldCA9IDM2NTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgIG9mZnNldCA9IDMwO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIG9mZnNldCA9IDc7XG4gICAgfVxuXG4gICAgaWYgKGRpcmVjdGlvbiAhPT0gMCkge1xuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5kYXRlJCwgdGhpcy5kYXRlVGltZVBpY2tlckNvbmZpZyRdKVxuICAgICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgICAuc3Vic2NyaWJlKChbZGF0ZSwgY29uZmlnXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBzdGFydE9mRGF5KGFkZERheXMoZGF0ZSwgb2Zmc2V0ICogZGlyZWN0aW9uKSk7XG4gICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRGF0ZVRpbWVNaW51dGVJbnN0YW5jZSh7XG4gICAgICAgICAgICBkYXRlOiBuZXdEYXRlLFxuICAgICAgICAgICAgLi4uY29uZmlnXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBuZXh0RGF0ZSA9IGluc3RhbmNlLmlzSW5TY2hlZHVsZShuZXdEYXRlKSA/IG5ld0RhdGUgOiBpbnN0YW5jZS5maW5kTmV4dEF2YWlsYWJsZURheUluU2NoZWR1bGUobmV3RGF0ZSwgZGlyZWN0aW9uID09PSAxID8gJ2Z1dHVyZScgOiAncGFzdCcpO1xuXG4gICAgICAgICAgaWYgKG5leHREYXRlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZUlucHV0VmFsdWUoaW5zdGFuY2UuY2xhbXBUb0xpbWl0KG5leHREYXRlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBrZXlkb3duT25UaW1lSW5wdXQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBsZXQgZGlyZWN0aW9uID0gMDtcblxuICAgIHN3aXRjaCAoZXZlbnQua2V5Py50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdhcnJvd3VwJzpcbiAgICAgICAgZGlyZWN0aW9uID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhcnJvd2Rvd24nOlxuICAgICAgICBkaXJlY3Rpb24gPSAtMTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbGV0IG9mZnNldCA9IDE7XG5cbiAgICBpZiAoZXZlbnQuYWx0S2V5ICYmIGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICBvZmZzZXQgPSAzMDA7XG4gICAgfSBlbHNlIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgIG9mZnNldCA9IDYwO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIG9mZnNldCA9IDU7XG4gICAgfVxuXG4gICAgaWYgKGRpcmVjdGlvbiAhPT0gMCkge1xuICAgICAgdGhpcy5fb2Zmc2V0Lm5leHQodGhpcy5fb2Zmc2V0LnZhbHVlICsgb2Zmc2V0ICogZGlyZWN0aW9uKTtcbiAgICAgIHRoaXMuX3VwZGF0ZVRpbWUubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzVGltZSgpOiB2b2lkIHtcbiAgICAvLyBkbyBub3RoaW5nXG4gIH1cblxuICBmb2N1c091dFRpbWUoKTogdm9pZCB7XG4gICAgLy8gb25seSByZWZyZXNoIHdoZW4gdGhlcmUgaXMgbm90IGEgcGF0dGVybiBlcnJvclxuICAgIGlmICghdGhpcy50aW1lSW5wdXRDdHJsLmhhc0Vycm9yKCdwYXR0ZXJuJykpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVRpbWUubmV4dCgpO1xuICAgICAgdGhpcy5fcmVzeW5jVGltZUlucHV0Lm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBhZGRUaW1lKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0RnVsbERheShmYWxzZSk7XG4gIH1cblxuICByZW1vdmVUaW1lKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0RnVsbERheSh0cnVlKTtcbiAgfVxuXG4gIHNldEZ1bGxEYXkoZnVsbERheTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZnVsbERheUNvbnRyb2wkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICB4LnNldFZhbHVlKGZ1bGxEYXkpO1xuICAgIH0pO1xuICB9XG5cbiAgY2xlYXJWYWx1ZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9jbGVhcmVkLm5leHQoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImRieC1kYXRldGltZS1maWVsZFwiIGZ4TGF5b3V0PVwicm93IHdyYXBcIiBmeExheW91dC54cz1cImNvbHVtbiB3cmFwXCIgZnhMYXlvdXRHYXA9XCI2cHggZ3JpZFwiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1ldmVubHkgc3RyZXRjaFwiPlxuICA8IS0tIERhdGUgLS0+XG4gIDxkaXYgY2xhc3M9XCJkYngtZGF0ZXRpbWUtcm93XCIgZnhGbGV4Lmx0LXNtPVwiMTAwXCIgW2Z4RmxleF09XCJkYXRlT25seSA/ICcxMDAnIDogJzUwJ1wiICpuZ0lmPVwic2hvd0RhdGVJbnB1dCQgfCBhc3luY1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkYXRlSW5wdXRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPCEtLSBUaW1lIC0tPlxuICA8ZGl2IGNsYXNzPVwiZGJ4LWRhdGV0aW1lLXJvd1wiIGZ4RmxleC5sdC1zbT1cIjEwMFwiIFtmeEZsZXhdPVwiKHNob3dEYXRlSW5wdXQkIHwgYXN5bmMpID8gJzUwJyA6ICcxMDAnXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dUaW1lSW5wdXQkIHwgYXN5bmNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0aW1lTWVudUFuZElucHV0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2ICpuZ0lmPVwic2hvd0FkZFRpbWUkIHwgYXN5bmNcIiBjbGFzcz1cImFkZC10aW1lLWJ1dHRvbi13cmFwcGVyXCI+XG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJtYXQtZGF0ZXBpY2tlci1idXR0b24taGlnaGxpZ2h0IGRieC1idXR0b24tc3BhY2VyIGFkZC10aW1lLWJ1dHRvblwiIG5nQ2xhc3MubHQtc209XCJhZGQtdGltZS1idXR0b24tZnVsbFwiIChjbGljayk9XCJhZGRUaW1lKClcIj5cbiAgICAgICAgPG1hdC1pY29uPnRpbWVyPC9tYXQtaWNvbj5cbiAgICAgICAgQWRkIFRpbWVcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPCEtLSBEYXRlIEhpbnQgLS0+XG4gIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImhhc0Vycm9yJCB8IGFzeW5jXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiZmFsc2VcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCIhaGlkZURhdGVIaW50XCIgY2xhc3M9XCJkYngtZGF0ZXRpbWUtcm93IGRieC1kYXRldGltZS1oaW50LXJvd1wiIGZ4RmxleD1cIjEwMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGJ4LWhpbnRcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJoYXNFbXB0eURpc3BsYXlWYWx1ZSQgfCBhc3luY1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRieC1zbWFsbFwiPk5vIGRhdGUvdGltZSBzZXQ8L3NwYW4+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImZ1bGxEYXkkIHwgYXN5bmNcIj5cbiAgICAgICAgICAgICAgICA8c21hbGwgKm5nU3dpdGNoQ2FzZT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgIDxiIGNsYXNzPVwiZGJ4LW9rXCI+e3sgYWxsRGF5TGFiZWwgfX08L2I+XG4gICAgICAgICAgICAgICAgICB7eyBkaXNwbGF5VmFsdWUkIHwgYXN5bmMgfCBkYXRlOiAnZnVsbERhdGUnIH19IHt7IHRpbWV6b25lQWJicmV2aWF0aW9uJCB8IGFzeW5jIH19ICh7eyBkaXNwbGF5VmFsdWUkIHwgYXN5bmMgfCBkYXRlRGlzdGFuY2UgfX0pXG4gICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8c21hbGwgKm5nU3dpdGNoQ2FzZT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGlzcGxheVZhbHVlJCB8IGFzeW5jXCI+XG4gICAgICAgICAgICAgICAgICAgIDxiIGNsYXNzPVwiZGJ4LW9rXCI+e3sgYXRUaW1lTGFiZWwgfX08L2I+XG4gICAgICAgICAgICAgICAgICAgIHt7IGRpc3BsYXlWYWx1ZSQgfCBhc3luYyB8IGRhdGU6ICdtZWRpdW0nIH19IHt7IHRpbWV6b25lQWJicmV2aWF0aW9uJCB8IGFzeW5jIH19ICh7eyBkaXNwbGF5VmFsdWUkIHwgYXN5bmMgfCB0aW1lRGlzdGFuY2UgfX0pXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInRydWVcIj5cbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJjdXJyZW50RXJyb3JNZXNzYWdlJCB8IGFzeW5jXCI+e3sgY3VycmVudEVycm9yTWVzc2FnZSQgfCBhc3luYyB9fTwvbWF0LWVycm9yPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48IS0tIERhdGUgSW5wdXQgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI2RhdGVJbnB1dFRlbXBsYXRlPlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJkYngtZGF0ZXRpbWUtcm93LWZpZWxkXCI+XG4gICAgPG1hdC1sYWJlbD57eyBkYXRlTGFiZWwgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgI2RhdGVJbnB1dCBtYXRJbnB1dCBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbcmVxdWlyZWRdPVwiaXNEYXRlUmVxdWlyZWRcIiBbbWluXT1cImRhdGVJbnB1dE1pbiQgfCBhc3luY1wiIFttYXhdPVwiZGF0ZUlucHV0TWF4JCB8IGFzeW5jXCIgW21hdERhdGVwaWNrZXJdPVwicGlja2VyXCIgW21hdERhdGVwaWNrZXJGaWx0ZXJdPVwiKHBpY2tlckZpbHRlciQgfCBhc3luYykgfHwgZGVmYXVsdFBpY2tlckZpbHRlclwiIChkYXRlQ2hhbmdlKT1cImRhdGVQaWNrZWQoJGV2ZW50KVwiIFt2YWx1ZV09XCJkYXRlVmFsdWUkIHwgYXN5bmNcIiAoa2V5ZG93bik9XCJrZXlkb3duT25EYXRlSW5wdXQoJGV2ZW50KVwiIC8+XG4gICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICA8YnV0dG9uIG1hdFByZWZpeCBjbGFzcz1cImRieC1kYXRldGltZS1yb3ctYnV0dG9uXCIgKm5nSWY9XCIhaGlkZURhdGVQaWNrZXJcIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInBpY2tlci5vcGVuKClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgIDxtYXQtaWNvbj5jYWxlbmRhcl90b2RheTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXRTdWZmaXggKm5nSWY9XCJzaG93Q2xlYXJCdXR0b24kIHwgYXN5bmNcIiBjbGFzcz1cImRieC1kYXRldGltZS1jbGVhci1idXR0b25cIiBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cImNsZWFycyB0aGUgZGF0ZSBhbmQgdGltZSBtZW51XCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgKGNsaWNrKT1cImNsZWFyVmFsdWUoKVwiPlxuICAgICAgPG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8c3BhbiBtYXRUZXh0U3VmZml4ICpuZ0lmPVwiIShzaG93VGltZUlucHV0JCB8IGFzeW5jKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRpbWV6b25lU3VmZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L3NwYW4+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFRpbWUgTWVudS9JbnB1dCBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjdGltZU1lbnVBbmRJbnB1dFRlbXBsYXRlPlxuICA8bWF0LW1lbnUgI3RpbWVtZW51PVwibWF0TWVudVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0aW1lTW9kZSA9PT0gJ29wdGlvbmFsJ1wiPlxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJyZW1vdmVUaW1lKClcIj5cbiAgICAgICAgPHNwYW4+UmVtb3ZlIFRpbWU8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHByZXNldCBvZiBwcmVzZXRzJCB8IGFzeW5jXCI+XG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInNlbGVjdFByZXNldChwcmVzZXQpXCI+e3sgcHJlc2V0LmxhYmVsIHwgZ2V0VmFsdWUgfX08L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtbWVudT5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZGJ4LWRhdGV0aW1lLXJvdy1maWVsZFwiPlxuICAgIDxtYXQtbGFiZWw+e3sgdGltZUxhYmVsIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0ICN0aW1lSW5wdXQgW2Vycm9yU3RhdGVNYXRjaGVyXT1cInRpbWVFcnJvclN0YXRlTWF0Y2hlclwiIG1hdElucHV0IFtyZXF1aXJlZF09XCJpc1RpbWVSZXF1aXJlZFwiIFtmb3JtQ29udHJvbF09XCJ0aW1lSW5wdXRDdHJsXCIgKGZvY3VzKT1cImZvY3VzVGltZSgpXCIgKGZvY3Vzb3V0KT1cImZvY3VzT3V0VGltZSgpXCIgKGtleWRvd24pPVwia2V5ZG93bk9uVGltZUlucHV0KCRldmVudClcIiAvPlxuICAgIDxidXR0b24gbWF0UHJlZml4IGNsYXNzPVwiZGJ4LWRhdGV0aW1lLXJvdy1idXR0b25cIiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cInRpbWVtZW51XCIgYXJpYS1sYWJlbD1cIm9wZW5zIHRoZSB0aW1lIG1lbnVcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgIDxtYXQtaWNvbj50aW1lcjwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPHNwYW4gbWF0VGV4dFN1ZmZpeD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0aW1lem9uZVN1ZmZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9zcGFuPlxuICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJ0aW1lSW5wdXRDdHJsLmhhc0Vycm9yKCdwYXR0ZXJuJylcIj5UaGUgaW5wdXQgdGltZSBpcyBub3QgcmVjb2duaXphYmxlLjwvbWF0LWVycm9yPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBUaW1lem9uZSBTdWZmaXggLS0+XG48bmctdGVtcGxhdGUgI3RpbWV6b25lU3VmZml4VGVtcGxhdGU+XG4gIDxzcGFuICpuZ0lmPVwic2hvd1RpbWV6b25lXCIgY2xhc3M9XCJkYngtZGF0ZXRpbWUtdGltZXpvbmUgZGJ4LWZhaW50XCI+e3sgdGltZXpvbmVBYmJyZXZpYXRpb24kIHwgYXN5bmMgfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuIl19
|