@tetacom/ng-components 1.0.151 → 1.1.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/assets/color-icons.svg +521 -49
- package/assets/file-icons.svg +1 -0
- package/assets/icons.svg +138 -205
- package/component/accordion/accordion-item/accordion-item.component.d.ts +1 -4
- package/component/button/button/button.component.d.ts +1 -4
- package/component/checkbox/checkbox/checkbox.component.d.ts +1 -2
- package/component/date-picker/date-picker/date-picker.component.d.ts +68 -38
- package/component/date-picker/date-picker.module.d.ts +16 -19
- package/component/date-picker/day-select/day-select.component.d.ts +51 -0
- package/component/date-picker/model/date-picker-mode.enum.d.ts +5 -0
- package/component/date-picker/month-picker/month-picker.component.d.ts +50 -16
- package/component/date-picker/month-select/month-select.component.d.ts +40 -0
- package/component/date-picker/public-api.d.ts +4 -5
- package/component/date-picker/service/picker-touch.service.d.ts +12 -0
- package/component/date-picker/time-part-control/time-part-control.component.d.ts +26 -0
- package/component/date-picker/util/date-picker-util.d.ts +15 -0
- package/component/date-picker/year-select/year-select.component.d.ts +45 -0
- package/component/dropdown/dropdown-base.d.ts +1 -3
- package/component/filter/filter.module.d.ts +2 -1
- package/component/icon/icon-file/icon-file.component.d.ts +3 -9
- package/component/icon/icon.module.d.ts +5 -4
- package/component/icon/public-api.d.ts +0 -1
- package/component/input/input/input.component.d.ts +1 -3
- package/component/message/model/message.d.ts +0 -3
- package/component/public-api.d.ts +0 -2
- package/component/select/select/select.component.d.ts +1 -4
- package/component/select/select.module.d.ts +2 -1
- package/component/switch/switch/switch.component.d.ts +1 -4
- package/component/table/table-body/table-body.component.d.ts +1 -0
- package/component/table/table.module.d.ts +2 -1
- package/component/tree/tree.module.d.ts +2 -1
- package/directive/hint/hint.directive.d.ts +1 -3
- package/directive/only-number/only-number.directive.d.ts +2 -1
- package/directive/public-api.d.ts +1 -0
- package/directive/scrollable/public-api.d.ts +3 -0
- package/directive/scrollable/scrollable/scrollable.component.d.ts +32 -0
- package/directive/scrollable/scrollable.directive.d.ts +6 -0
- package/directive/scrollable/scrollable.module.d.ts +10 -0
- package/esm2020/component/accordion/accordion/accordion.component.mjs +2 -3
- package/esm2020/component/accordion/accordion-head/accordion-head.component.mjs +2 -3
- package/esm2020/component/accordion/accordion-item/accordion-item.component.mjs +3 -13
- package/esm2020/component/button/button/button.component.mjs +3 -18
- package/esm2020/component/checkbox/checkbox/checkbox.component.mjs +3 -6
- package/esm2020/component/date-picker/date-picker/date-picker.component.mjs +235 -141
- package/esm2020/component/date-picker/date-picker.module.mjs +45 -41
- package/esm2020/component/date-picker/day-select/day-select.component.mjs +184 -0
- package/esm2020/component/date-picker/model/date-picker-mode.enum.mjs +7 -0
- package/esm2020/component/date-picker/month-picker/month-picker.component.mjs +237 -33
- package/esm2020/component/date-picker/month-select/month-select.component.mjs +148 -0
- package/esm2020/component/date-picker/public-api.mjs +5 -6
- package/esm2020/component/date-picker/service/picker-touch.service.mjs +34 -0
- package/esm2020/component/date-picker/time-part-control/time-part-control.component.mjs +73 -0
- package/esm2020/component/date-picker/util/date-picker-util.mjs +142 -0
- package/esm2020/component/date-picker/year-select/year-select.component.mjs +189 -0
- package/esm2020/component/dropdown/dropdown/dropdown.component.mjs +2 -3
- package/esm2020/component/dropdown/dropdown-base.mjs +2 -6
- package/esm2020/component/dropdown/dropdown.directive.mjs +1 -1
- package/esm2020/component/expand-card/expand-card/expand-card.component.mjs +1 -1
- package/esm2020/component/expand-card/expand-item/expand-item.component.mjs +1 -1
- package/esm2020/component/expand-panel/expand-panel/expand-panel.component.mjs +1 -1
- package/esm2020/component/file-upload/file-upload-area/file-upload-area.component.mjs +1 -1
- package/esm2020/component/filter/date-filter/date-filter.component.mjs +1 -1
- package/esm2020/component/filter/filter.module.mjs +7 -3
- package/esm2020/component/filter/list-filter/list-filter.component.mjs +4 -3
- package/esm2020/component/filter/numeric-filter/numeric-filter.component.mjs +1 -1
- package/esm2020/component/filter/string-filter/string-filter.component.mjs +1 -1
- package/esm2020/component/icon/icon-file/icon-file.component.mjs +6 -20
- package/esm2020/component/icon/icon.module.mjs +6 -1
- package/esm2020/component/icon/public-api.mjs +1 -2
- package/esm2020/component/input/input/input.component.mjs +3 -6
- package/esm2020/component/input/input.module.mjs +1 -1
- package/esm2020/component/input/text-field/text-field.component.mjs +3 -3
- package/esm2020/component/message/message/message.component.mjs +3 -4
- package/esm2020/component/message/message-host/message-host.component.mjs +1 -1
- package/esm2020/component/message/model/message.mjs +1 -2
- package/esm2020/component/modal/dialog/dialog.component.mjs +1 -1
- package/esm2020/component/property-grid/property-grid/property-grid-item/property-grid-item.component.mjs +2 -2
- package/esm2020/component/public-api.mjs +1 -4
- package/esm2020/component/select/select/select.component.mjs +6 -9
- package/esm2020/component/select/select.module.mjs +7 -3
- package/esm2020/component/switch/switch/switch.component.mjs +7 -19
- package/esm2020/component/table/default/boolean-cell/boolean-cell.component.mjs +1 -1
- package/esm2020/component/table/default/date-cell/date-cell.component.mjs +1 -1
- package/esm2020/component/table/default/date-time-cell/date-time-cell.component.mjs +1 -1
- package/esm2020/component/table/default/default-head-cell/default-head-cell.component.mjs +1 -1
- package/esm2020/component/table/default/list-cell/list-cell.component.mjs +1 -1
- package/esm2020/component/table/default/string-cell/string-cell.component.mjs +1 -1
- package/esm2020/component/table/selection-cell/selection-cell.component.mjs +1 -1
- package/esm2020/component/table/selection-head-cell/selection-head-cell.component.mjs +1 -1
- package/esm2020/component/table/table-body/table-body.component.mjs +11 -6
- package/esm2020/component/table/table-head/filter-dropdown-tab/filter-dropdown-tab.component.mjs +1 -1
- package/esm2020/component/table/table-head/visibility-dropdown-tab/visibility-dropdown-tab.component.mjs +4 -3
- package/esm2020/component/table/table.module.mjs +7 -3
- package/esm2020/component/theme-switch/theme-switch/theme-switch.component.mjs +1 -1
- package/esm2020/component/tree/tree/tree.component.mjs +6 -4
- package/esm2020/component/tree/tree.module.mjs +5 -4
- package/esm2020/directive/hint/hint.directive.mjs +3 -6
- package/esm2020/directive/only-number/only-number.directive.mjs +12 -2
- package/esm2020/directive/public-api.mjs +2 -1
- package/esm2020/directive/scrollable/public-api.mjs +4 -0
- package/esm2020/directive/scrollable/scrollable/scrollable.component.mjs +96 -0
- package/esm2020/directive/scrollable/scrollable.directive.mjs +19 -0
- package/esm2020/directive/scrollable/scrollable.module.mjs +33 -0
- package/esm2020/locale/en.mjs +1 -3
- package/esm2020/locale/ru.mjs +1 -3
- package/esm2020/locale/teta-localisation.mjs +1 -1
- package/esm2020/observable/animation-frame.mjs +30 -0
- package/esm2020/observable/public-api.mjs +2 -1
- package/esm2020/pipe/prepend-zero/prepend-zero.module.mjs +18 -0
- package/esm2020/pipe/prepend-zero/prepend-zero.pipe.mjs +21 -0
- package/fesm2015/tetacom-ng-components.mjs +5483 -5181
- package/fesm2015/tetacom-ng-components.mjs.map +1 -1
- package/fesm2020/tetacom-ng-components.mjs +3333 -3025
- package/fesm2020/tetacom-ng-components.mjs.map +1 -1
- package/locale/teta-localisation.d.ts +0 -2
- package/observable/animation-frame.d.ts +4 -0
- package/observable/public-api.d.ts +1 -0
- package/package.json +2 -3
- package/pipe/prepend-zero/prepend-zero.module.d.ts +8 -0
- package/pipe/prepend-zero/prepend-zero.pipe.d.ts +7 -0
- package/style/accordion.scss +6 -28
- package/style/assembly-library.scss +1 -4
- package/style/assembly-presets.scss +1 -0
- package/style/button.scss +13 -16
- package/style/checkbox.scss +13 -26
- package/style/chips.scss +10 -10
- package/style/color.scss +36 -1
- package/style/datepicker.scss +24 -139
- package/style/drag.scss +1 -1
- package/style/dropdown.scss +4 -6
- package/style/hint.scss +5 -5
- package/style/icon.scss +1 -2
- package/style/input.scss +23 -32
- package/style/layout.scss +2 -6
- package/style/library.scss +17 -0
- package/style/list.scss +8 -11
- package/style/loader.scss +2 -2
- package/style/message.scss +7 -15
- package/style/modal.scss +2 -3
- package/style/navigation.scss +1 -4
- package/style/presets/color-presets.scss +160 -8
- package/style/presets/font-presets.scss +25 -26
- package/style/presets/shadow-presets.scss +16 -0
- package/style/progress.scss +3 -3
- package/style/radio.scss +7 -21
- package/style/resize-panel.scss +2 -2
- package/style/scroll.scss +21 -17
- package/style/select.scss +21 -26
- package/style/shadow.scss +20 -0
- package/style/sidebar.scss +1 -1
- package/style/switch.scss +10 -15
- package/style/table.scss +15 -17
- package/style/tabs.scss +11 -11
- package/style/toggle.scss +18 -20
- package/style/tokens/basedark.tokens.css +77 -0
- package/style/tokens/baselight.tokens.css +61 -0
- package/style/tokens/global.tokens.css +235 -0
- package/style/tokens/utility.tokens.css +1119 -0
- package/style/toolbar.scss +1 -1
- package/style/tooltip.scss +6 -8
- package/style/tree.scss +4 -4
- package/style/util/button-util.scss +58 -0
- package/common/model/view-type.model.d.ts +0 -1
- package/component/avatar/avatar/avatar.component.d.ts +0 -17
- package/component/avatar/avatar.module.d.ts +0 -9
- package/component/avatar/model/avatar-color.enum.d.ts +0 -20
- package/component/avatar/public-api.d.ts +0 -2
- package/component/date-picker/base-calendar.d.ts +0 -49
- package/component/date-picker/base-picker.d.ts +0 -60
- package/component/date-picker/date-picker/date-calendar/date-calendar.component.d.ts +0 -20
- package/component/date-picker/date-range/date-range.component.d.ts +0 -46
- package/component/date-picker/date-range/range-calendar/range-calendar.component.d.ts +0 -39
- package/component/date-picker/day-picker/day-item/day-item.component.d.ts +0 -9
- package/component/date-picker/day-picker/day-picker.component.d.ts +0 -30
- package/component/date-picker/model/from-to.model.d.ts +0 -4
- package/component/date-picker/model/min-max-date.model.d.ts +0 -4
- package/component/date-picker/year-picker/scroll-to-selected-year.directive.d.ts +0 -11
- package/component/date-picker/year-picker/year-picker.component.d.ts +0 -24
- package/component/divider/divider/divider.component.d.ts +0 -10
- package/component/divider/divider.module.d.ts +0 -8
- package/component/divider/public-api.d.ts +0 -2
- package/component/icon/icon-file/icon-file.module.d.ts +0 -9
- package/esm2020/common/model/view-type.model.mjs +0 -2
- package/esm2020/component/avatar/avatar/avatar.component.mjs +0 -57
- package/esm2020/component/avatar/avatar.module.mjs +0 -28
- package/esm2020/component/avatar/model/avatar-color.enum.mjs +0 -22
- package/esm2020/component/avatar/public-api.mjs +0 -3
- package/esm2020/component/date-picker/base-calendar.mjs +0 -99
- package/esm2020/component/date-picker/base-picker.mjs +0 -102
- package/esm2020/component/date-picker/date-picker/date-calendar/date-calendar.component.mjs +0 -49
- package/esm2020/component/date-picker/date-range/date-range.component.mjs +0 -211
- package/esm2020/component/date-picker/date-range/range-calendar/range-calendar.component.mjs +0 -108
- package/esm2020/component/date-picker/day-picker/day-item/day-item.component.mjs +0 -15
- package/esm2020/component/date-picker/day-picker/day-picker.component.mjs +0 -113
- package/esm2020/component/date-picker/model/from-to.model.mjs +0 -2
- package/esm2020/component/date-picker/model/min-max-date.model.mjs +0 -2
- package/esm2020/component/date-picker/year-picker/scroll-to-selected-year.directive.mjs +0 -26
- package/esm2020/component/date-picker/year-picker/year-picker.component.mjs +0 -48
- package/esm2020/component/divider/divider/divider.component.mjs +0 -18
- package/esm2020/component/divider/divider.module.mjs +0 -20
- package/esm2020/component/divider/public-api.mjs +0 -3
- package/esm2020/component/icon/icon-file/icon-file.module.mjs +0 -28
- package/style/badge.scss +0 -28
- package/style/bottombar.scss +0 -5
- package/style/divider.scss +0 -15
- package/style/presets/view-types.scss +0 -15
- package/style/tag.scss +0 -37
- package/style/util/scroll-util.scss +0 -4
|
@@ -1,195 +1,289 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component,
|
|
2
|
-
import { NG_VALUE_ACCESSOR } from
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
9
|
-
import { ReplaySubject } from 'rxjs';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, forwardRef, HostBinding, HostListener, Input, } from '@angular/core';
|
|
2
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
+
import { takeWhile } from 'rxjs/operators';
|
|
4
|
+
import { DatePickerMode } from '../model/date-picker-mode.enum';
|
|
5
|
+
import { DateUtil } from '../../../util/date-util';
|
|
6
|
+
import { DatePickerUtil } from '../util/date-picker-util';
|
|
7
|
+
import { Align } from '../../../common/enum/align.enum';
|
|
8
|
+
import { VerticalAlign } from '../../../common/enum/vertical-align.enum';
|
|
10
9
|
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "
|
|
12
|
-
import * as i2 from "
|
|
13
|
-
import * as i3 from "../../dropdown/dropdown
|
|
14
|
-
import * as i4 from "../../dropdown/dropdown-
|
|
15
|
-
import * as i5 from "
|
|
16
|
-
import * as i6 from "@
|
|
10
|
+
import * as i1 from "../../../locale/teta-config.service";
|
|
11
|
+
import * as i2 from "@angular/common";
|
|
12
|
+
import * as i3 from "../../dropdown/dropdown/dropdown.component";
|
|
13
|
+
import * as i4 from "../../dropdown/dropdown-head.directive";
|
|
14
|
+
import * as i5 from "../../dropdown/dropdown-content.directive";
|
|
15
|
+
import * as i6 from "@angular/forms";
|
|
17
16
|
import * as i7 from "../../icon/icon/icon.component";
|
|
18
|
-
import * as i8 from "../../
|
|
19
|
-
import * as i9 from "
|
|
17
|
+
import * as i8 from "../../button/button/button.component";
|
|
18
|
+
import * as i9 from "../../../directive/scrollable/scrollable/scrollable.component";
|
|
19
|
+
import * as i10 from "../day-select/day-select.component";
|
|
20
|
+
import * as i11 from "../year-select/year-select.component";
|
|
21
|
+
import * as i12 from "../month-select/month-select.component";
|
|
22
|
+
import * as i13 from "../time-part-control/time-part-control.component";
|
|
20
23
|
export const DATE_PICKER_CONTROL_VALUE_ACCESSOR = {
|
|
21
24
|
provide: NG_VALUE_ACCESSOR,
|
|
22
25
|
useExisting: forwardRef(() => DatePickerComponent),
|
|
23
26
|
multi: true,
|
|
24
27
|
};
|
|
25
|
-
export class DatePickerComponent
|
|
26
|
-
constructor(
|
|
27
|
-
|
|
28
|
-
this._elementRef = _elementRef;
|
|
28
|
+
export class DatePickerComponent {
|
|
29
|
+
constructor(localeService, _cdr, _elementRef) {
|
|
30
|
+
this.localeService = localeService;
|
|
29
31
|
this._cdr = _cdr;
|
|
30
|
-
this.
|
|
31
|
-
this.
|
|
32
|
-
this.locale = 'ru';
|
|
33
|
-
this.showTime = false;
|
|
34
|
-
this.minDate = null;
|
|
35
|
-
this.maxDate = null;
|
|
36
|
-
this.invalid = false;
|
|
37
|
-
this.disabled = false;
|
|
32
|
+
this._elementRef = _elementRef;
|
|
33
|
+
this.firstDayOfWeek = 1;
|
|
38
34
|
this.align = Align.left;
|
|
39
35
|
this.verticalAlign = VerticalAlign.auto;
|
|
40
|
-
this.
|
|
41
|
-
this.
|
|
42
|
-
this.
|
|
43
|
-
this.
|
|
44
|
-
this.
|
|
45
|
-
this.
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
36
|
+
this.allowNull = true;
|
|
37
|
+
this.showTime = false;
|
|
38
|
+
this.classDatepicker = true;
|
|
39
|
+
this.tabindex = 0;
|
|
40
|
+
this.today = new Date();
|
|
41
|
+
this.datePickerModeEnum = DatePickerMode;
|
|
42
|
+
this.displayMode = DatePickerMode.date;
|
|
43
|
+
this._value = null;
|
|
44
|
+
this._alive = true;
|
|
45
|
+
this.onChange = (_) => {
|
|
46
|
+
};
|
|
47
|
+
this.onTouched = () => {
|
|
48
|
+
};
|
|
49
|
+
this.setDate = (day) => {
|
|
50
|
+
if (day === null || day === undefined) {
|
|
51
|
+
this.currentValue = null;
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const dt = this.internalValue;
|
|
55
|
+
dt.setFullYear(day.getFullYear(), day.getMonth(), day.getDate());
|
|
56
|
+
this.currentValue = new Date(dt);
|
|
57
|
+
this._cdr.markForCheck();
|
|
58
|
+
};
|
|
59
|
+
this.setYear = (year) => {
|
|
60
|
+
const dt = this.internalValue;
|
|
61
|
+
dt.setFullYear(year);
|
|
62
|
+
this.currentValue = new Date(dt);
|
|
63
|
+
this.setMode(DatePickerMode.date);
|
|
64
|
+
this._cdr.markForCheck();
|
|
65
|
+
};
|
|
66
|
+
this.setMonth = (month) => {
|
|
67
|
+
const dt = this.internalValue;
|
|
68
|
+
dt.setMonth(month);
|
|
69
|
+
this.currentValue = new Date(dt);
|
|
70
|
+
this.setMode(DatePickerMode.date);
|
|
71
|
+
this._cdr.markForCheck();
|
|
72
|
+
};
|
|
73
|
+
this.setHour = (hours) => {
|
|
74
|
+
const dt = this.internalValue;
|
|
75
|
+
dt.setHours(hours);
|
|
76
|
+
this.currentValue = new Date(dt);
|
|
77
|
+
this._cdr.markForCheck();
|
|
78
|
+
};
|
|
79
|
+
this.setMinute = (minute) => {
|
|
80
|
+
const dt = this.internalValue;
|
|
81
|
+
dt.setMinutes(minute);
|
|
82
|
+
this.currentValue = new Date(dt);
|
|
83
|
+
this._cdr.markForCheck();
|
|
84
|
+
};
|
|
85
|
+
this.setSecond = (seconds) => {
|
|
86
|
+
const dt = this.internalValue;
|
|
87
|
+
dt.setSeconds(seconds);
|
|
88
|
+
this.currentValue = new Date(dt);
|
|
89
|
+
this._cdr.markForCheck();
|
|
90
|
+
};
|
|
91
|
+
this.setToday = () => {
|
|
92
|
+
this.currentValue = this.emptyDate();
|
|
93
|
+
this._cdr.markForCheck();
|
|
94
|
+
};
|
|
95
|
+
this.clearPicker = (event) => {
|
|
96
|
+
this.preventEvent(event);
|
|
97
|
+
this.value = null;
|
|
98
|
+
this.onChange(null);
|
|
99
|
+
};
|
|
100
|
+
this.isDateInDisabledPeriod = (dat) => {
|
|
101
|
+
if (!this.disabledPeriods || this.disabledPeriods.length < 1 || !dat) {
|
|
102
|
+
return false;
|
|
63
103
|
}
|
|
64
|
-
|
|
65
|
-
|
|
104
|
+
return this.disabledPeriods.some((d) => d &&
|
|
105
|
+
d.start &&
|
|
106
|
+
d.end &&
|
|
107
|
+
d.start.getTime() <= dat.getTime() &&
|
|
108
|
+
d.end.getTime() >= dat.getTime());
|
|
109
|
+
};
|
|
110
|
+
this.isScrollIgnored = () => this.displayMode === DatePickerMode.month ||
|
|
111
|
+
this.displayMode === DatePickerMode.year;
|
|
112
|
+
this.scrollMonth = (e) => {
|
|
113
|
+
const delta = e?.deltaY ?? e;
|
|
114
|
+
if (e instanceof WheelEvent) {
|
|
115
|
+
this.preventEvent(e);
|
|
66
116
|
}
|
|
117
|
+
if (this.isScrollIgnored()) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
this.currentValue = DatePickerUtil.scrollMonth(delta, this.internalValue);
|
|
67
121
|
};
|
|
68
|
-
|
|
69
|
-
this.
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
timeMode: 'HH:MM',
|
|
73
|
-
dateSeparator: '.',
|
|
74
|
-
};
|
|
75
|
-
setMinMax();
|
|
76
|
-
this.maskitoOptions = maskitoDateTimeOptionsGenerator(option);
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
this.mask = 'dd.mm.yyyy';
|
|
80
|
-
option = {
|
|
81
|
-
mode: 'dd/mm/yyyy',
|
|
82
|
-
separator: '.',
|
|
83
|
-
};
|
|
84
|
-
setMinMax();
|
|
85
|
-
this.maskitoOptions = maskitoDateOptionsGenerator(option);
|
|
86
|
-
}
|
|
87
|
-
this.changePlaceholder(str);
|
|
88
|
-
}
|
|
89
|
-
onBlur() {
|
|
90
|
-
if (this.allowNull && this.inputText.trim() === '') {
|
|
91
|
-
this.setDate(null);
|
|
92
|
-
this.emitValue(null);
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
const val = this.inputText.split(',');
|
|
96
|
-
const { day, year, month } = this.getDateFromStr(val[0]);
|
|
97
|
-
const { mins, hours } = this.getTimeFromStr(val[1]);
|
|
98
|
-
if (day && year && month) {
|
|
99
|
-
let date = new Date(year, month - 1, day);
|
|
100
|
-
if (this.showTime) {
|
|
101
|
-
date = new Date(date.setHours(hours || 0, mins || 0));
|
|
102
|
-
}
|
|
103
|
-
this.changeSelectedDate(this.getAvailableDate(this.minDate, this.maxDate, date));
|
|
122
|
+
this.scrollYear = (e) => {
|
|
123
|
+
this.preventEvent(e);
|
|
124
|
+
if (this.isScrollIgnored()) {
|
|
125
|
+
return false;
|
|
104
126
|
}
|
|
105
|
-
|
|
106
|
-
|
|
127
|
+
this.currentValue = DatePickerUtil.scrollYear(e.deltaY, this.internalValue);
|
|
128
|
+
};
|
|
129
|
+
this.openPicker = (show) => {
|
|
130
|
+
if (this.disabled) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
if (!show) {
|
|
134
|
+
this.setMode(DatePickerMode.date);
|
|
135
|
+
this.applyValue(this.currentValue);
|
|
107
136
|
}
|
|
137
|
+
this.open = show;
|
|
138
|
+
this._cdr.markForCheck();
|
|
139
|
+
};
|
|
140
|
+
this.closePicker = () => {
|
|
141
|
+
this.openPicker(false);
|
|
142
|
+
this.onTouched();
|
|
143
|
+
};
|
|
144
|
+
this.preventEvent = (event) => {
|
|
145
|
+
event.stopPropagation();
|
|
146
|
+
event.preventDefault();
|
|
147
|
+
return false;
|
|
148
|
+
};
|
|
149
|
+
localeService.locale
|
|
150
|
+
.pipe(takeWhile((_) => this._alive))
|
|
151
|
+
.subscribe((locale) => {
|
|
152
|
+
this.locale = locale;
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
set format(val) {
|
|
156
|
+
this._format = val;
|
|
157
|
+
}
|
|
158
|
+
get format() {
|
|
159
|
+
if (this._format) {
|
|
160
|
+
return this._format;
|
|
108
161
|
}
|
|
162
|
+
return this.showTime ? 'dd.MM.yyyy HH:mm:ss' : 'dd.MM.yyyy';
|
|
163
|
+
}
|
|
164
|
+
get value() {
|
|
165
|
+
return this._value;
|
|
109
166
|
}
|
|
110
|
-
|
|
111
|
-
if (
|
|
112
|
-
this.
|
|
113
|
-
this.
|
|
114
|
-
this.selectedDate.next(new Date(this.minDate || new Date()));
|
|
167
|
+
set value(v) {
|
|
168
|
+
if (v?.getTime() !== this._value?.getTime()) {
|
|
169
|
+
this._value = v;
|
|
170
|
+
this.currentValue = this._value;
|
|
115
171
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
172
|
+
}
|
|
173
|
+
get currentValue() {
|
|
174
|
+
return this._currentValue;
|
|
175
|
+
}
|
|
176
|
+
set currentValue(date) {
|
|
177
|
+
this._currentValue = date;
|
|
178
|
+
this._cdr.markForCheck();
|
|
179
|
+
}
|
|
180
|
+
get internalValue() {
|
|
181
|
+
return this.currentValue ?? this.emptyDate();
|
|
182
|
+
}
|
|
183
|
+
keyUp(event) {
|
|
184
|
+
if (!this.open) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
if (event.code === 'Escape') {
|
|
188
|
+
this.currentValue = this.value;
|
|
189
|
+
this.open = false;
|
|
120
190
|
}
|
|
121
191
|
}
|
|
122
|
-
|
|
192
|
+
writeValue(value) {
|
|
193
|
+
this.value = value;
|
|
194
|
+
this._cdr.markForCheck();
|
|
123
195
|
}
|
|
124
196
|
registerOnChange(fn) {
|
|
125
197
|
this.onChange = fn;
|
|
126
198
|
}
|
|
127
199
|
registerOnTouched(fn) {
|
|
200
|
+
this.onTouched = fn;
|
|
201
|
+
}
|
|
202
|
+
setDisabledState(isDisabled) {
|
|
203
|
+
this.disabled = isDisabled;
|
|
204
|
+
this._cdr.detectChanges();
|
|
205
|
+
}
|
|
206
|
+
ngOnInit() {
|
|
207
|
+
}
|
|
208
|
+
ngOnDestroy() {
|
|
209
|
+
this._alive = false;
|
|
210
|
+
}
|
|
211
|
+
applyValue(date) {
|
|
212
|
+
this.setDate(date);
|
|
213
|
+
this.value = this.currentValue;
|
|
214
|
+
this.onChange(new Date(this.value));
|
|
215
|
+
this.open = false;
|
|
216
|
+
}
|
|
217
|
+
focus() {
|
|
218
|
+
this._elementRef.nativeElement.focus();
|
|
128
219
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
220
|
+
setMode(mode) {
|
|
221
|
+
let result;
|
|
222
|
+
if (mode === this.displayMode || mode === DatePickerMode.date) {
|
|
223
|
+
result = DatePickerMode.date;
|
|
133
224
|
}
|
|
134
225
|
else {
|
|
135
|
-
|
|
136
|
-
this.date = null;
|
|
137
|
-
this.selectedDate.next(null);
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
this.date = this.minDate || new Date();
|
|
141
|
-
this.selectedDate.next(this.minDate || new Date());
|
|
142
|
-
}
|
|
226
|
+
result = mode;
|
|
143
227
|
}
|
|
228
|
+
this.displayMode = result;
|
|
229
|
+
}
|
|
230
|
+
emptyDate() {
|
|
231
|
+
return DateUtil.truncateToDay(new Date());
|
|
144
232
|
}
|
|
145
233
|
}
|
|
146
|
-
DatePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DatePickerComponent, deps: [{ token:
|
|
147
|
-
DatePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: DatePickerComponent, selector: "teta-date-picker", inputs: {
|
|
234
|
+
DatePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DatePickerComponent, deps: [{ token: i1.TetaConfigService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
235
|
+
DatePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: DatePickerComponent, selector: "teta-date-picker", inputs: { disabled: "disabled", invalid: "invalid", firstDayOfWeek: "firstDayOfWeek", disabledDates: "disabledDates", disabledPeriods: "disabledPeriods", disabledDays: "disabledDays", minDate: "minDate", maxDate: "maxDate", minYearDate: "minYearDate", maxYearDate: "maxYearDate", align: "align", verticalAlign: "verticalAlign", appendToBody: "appendToBody", allowNull: "allowNull", backdrop: "backdrop", showTime: "showTime", format: "format" }, host: { listeners: { "window:keyup": "keyUp($event)" }, properties: { "class.datepicker-wide": "this.showTime", "class.datepicker_open": "this.open", "class.datepicker": "this.classDatepicker", "tabindex": "this.tabindex" } }, providers: [DATE_PICKER_CONTROL_VALUE_ACCESSOR], ngImport: i0, template: "<teta-dropdown\n class=\"row row_auto\"\n [disabled]=\"disabled\"\n [open]=\"open\"\n [autoCloseIgnore]=\"['esc', 'inside']\"\n (openChange)=\"openPicker($event)\"\n [align]=\"align\"\n [verticalAlign]=\"verticalAlign\"\n [appendToBody]=\"appendToBody\"\n [backdrop]=\"backdrop\">\n <div tetaDropdownHead\n class=\"datepicker-head font-body-3\"\n [class.datepicker-head_disabled]=\"disabled\"\n [class.datepicker-head_invalid]=\"invalid\">\n <teta-icon [name]=\"'calendar'\" class=\"margin-right-1\"></teta-icon>\n <div class=\"row_auto nowrap\">\n {{currentValue !== null && currentValue !== undefined ? (currentValue | date : format) : ''}}\n </div>\n <teta-icon *ngIf=\"allowNull\"\n [name]=\"'closeBig'\"\n (click)=\"clearPicker($event);\"\n class=\"margin-left-1\"></teta-icon>\n </div>\n <teta-scrollable tetaDropdownContent (click)=\"$event.preventDefault()\">\n <div class=\"padding-3\">\n <div class=\"row align-center justify-content-between\">\n <div>\n <button teta-button\n type=\"button\"\n [palette]=\"'text'\"\n [view]=\"displayMode===datePickerModeEnum.month ? 'primary' : 'ghost'\"\n (click)=\"setMode(datePickerModeEnum.month)\"\n (wheel)=\"scrollMonth($event);\">\n {{locale.months[internalValue?.getMonth()]}}\n </button>\n <button teta-button\n type=\"button\"\n class=\"margin-left-2\"\n [palette]=\"'text'\"\n [view]=\"displayMode===datePickerModeEnum.year ? 'primary' : 'ghost'\"\n (click)=\"setMode(datePickerModeEnum.year)\"\n (wheel)=\"scrollYear($event);\">\n {{internalValue?.getFullYear()}}\n </button>\n </div>\n <button teta-button\n type=\"button\"\n [palette]=\"'text'\"\n [view]=\"'ghost'\"\n (click)=\"setToday()\">\n <teta-icon [name]=\"'calendar'\"></teta-icon>\n </button>\n </div>\n <div class=\"datepicker-content\">\n <teta-year-select\n *ngIf=\"displayMode === datePickerModeEnum.year\"\n [currentYear]=\"internalValue?.getFullYear()\"\n [today]=\"today\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (yearSelected)=\"setYear($event)\">\n </teta-year-select>\n <teta-month-select\n *ngIf=\"displayMode === datePickerModeEnum.month\"\n [currentMonth]=\"internalValue?.getMonth()\"\n [currentYear]=\"internalValue?.getFullYear()\"\n [locale]=\"locale\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (monthSelected)=\"setMonth($event)\">\n </teta-month-select>\n <teta-day-select\n *ngIf=\"displayMode === datePickerModeEnum.date\"\n [ngModel]=\"currentValue\"\n (ngModelChange)=\"applyValue($event)\"\n (dateSelected)=\"setDate($event)\"\n (yearSelected)=\"setYear($event)\"\n (monthSelected)=\"setMonth($event)\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [disabledDays]=\"disabledDays\"\n [disabledDates]=\"disabledDates\"\n [disabledPeriods]=\"disabledPeriods\"></teta-day-select>\n </div>\n </div>\n <div *ngIf=\"showTime\" class=\"datepicker-time padding-v-1 border-top border-text-10 font-body-3 color-text-90\">\n <teta-time-part-control [max]=\"23\" [ngModel]=\"internalValue?.getHours()\"\n (ngModelChange)=\"setHour($event)\"></teta-time-part-control>\n :\n <teta-time-part-control [ngModel]=\"internalValue?.getMinutes()\"\n (ngModelChange)=\"setMinute($event)\"></teta-time-part-control>\n :\n <teta-time-part-control [ngModel]=\"internalValue?.getSeconds()\"\n (ngModelChange)=\"setSecond($event)\"></teta-time-part-control>\n </div>\n </teta-scrollable>\n</teta-dropdown>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.DropdownComponent, selector: "teta-dropdown", exportAs: ["dropdown"] }, { kind: "directive", type: i4.DropdownHeadDirective, selector: "[tetaDropdownHead]" }, { kind: "directive", type: i5.DropdownContentDirective, selector: "[tetaDropdownContent]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }, { kind: "component", type: i8.ButtonComponent, selector: "button[teta-button], teta-button", inputs: ["palette", "class", "view", "square"] }, { kind: "component", type: i9.ScrollableComponent, selector: "teta-scrollable", inputs: ["direction", "showScrollbars", "contentClass"], outputs: ["scroll"] }, { kind: "component", type: i10.DaySelectComponent, selector: "teta-day-select", inputs: ["firstDayOfWeek", "disabledDates", "disabledPeriods", "disabledDays", "minDate", "maxDate", "disabled"], outputs: ["dateSelected", "monthSelected", "yearSelected"] }, { kind: "component", type: i11.YearSelectComponent, selector: "teta-year-select", inputs: ["currentYear", "today", "size", "minDate", "maxDate", "allowableRange"], outputs: ["yearSelected", "yearApplied"] }, { kind: "component", type: i12.MonthSelectComponent, selector: "teta-month-select", inputs: ["locale", "minDate", "maxDate", "size", "currentMonth", "currentYear"], outputs: ["monthSelected", "monthApplied"] }, { kind: "component", type: i13.TimePartControlComponent, selector: "teta-time-part-control", inputs: ["min", "max", "disabled"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
148
236
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DatePickerComponent, decorators: [{
|
|
149
237
|
type: Component,
|
|
150
|
-
args: [{ selector: 'teta-date-picker',
|
|
151
|
-
}], ctorParameters: function () { return [{ type:
|
|
238
|
+
args: [{ selector: 'teta-date-picker', providers: [DATE_PICKER_CONTROL_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, template: "<teta-dropdown\n class=\"row row_auto\"\n [disabled]=\"disabled\"\n [open]=\"open\"\n [autoCloseIgnore]=\"['esc', 'inside']\"\n (openChange)=\"openPicker($event)\"\n [align]=\"align\"\n [verticalAlign]=\"verticalAlign\"\n [appendToBody]=\"appendToBody\"\n [backdrop]=\"backdrop\">\n <div tetaDropdownHead\n class=\"datepicker-head font-body-3\"\n [class.datepicker-head_disabled]=\"disabled\"\n [class.datepicker-head_invalid]=\"invalid\">\n <teta-icon [name]=\"'calendar'\" class=\"margin-right-1\"></teta-icon>\n <div class=\"row_auto nowrap\">\n {{currentValue !== null && currentValue !== undefined ? (currentValue | date : format) : ''}}\n </div>\n <teta-icon *ngIf=\"allowNull\"\n [name]=\"'closeBig'\"\n (click)=\"clearPicker($event);\"\n class=\"margin-left-1\"></teta-icon>\n </div>\n <teta-scrollable tetaDropdownContent (click)=\"$event.preventDefault()\">\n <div class=\"padding-3\">\n <div class=\"row align-center justify-content-between\">\n <div>\n <button teta-button\n type=\"button\"\n [palette]=\"'text'\"\n [view]=\"displayMode===datePickerModeEnum.month ? 'primary' : 'ghost'\"\n (click)=\"setMode(datePickerModeEnum.month)\"\n (wheel)=\"scrollMonth($event);\">\n {{locale.months[internalValue?.getMonth()]}}\n </button>\n <button teta-button\n type=\"button\"\n class=\"margin-left-2\"\n [palette]=\"'text'\"\n [view]=\"displayMode===datePickerModeEnum.year ? 'primary' : 'ghost'\"\n (click)=\"setMode(datePickerModeEnum.year)\"\n (wheel)=\"scrollYear($event);\">\n {{internalValue?.getFullYear()}}\n </button>\n </div>\n <button teta-button\n type=\"button\"\n [palette]=\"'text'\"\n [view]=\"'ghost'\"\n (click)=\"setToday()\">\n <teta-icon [name]=\"'calendar'\"></teta-icon>\n </button>\n </div>\n <div class=\"datepicker-content\">\n <teta-year-select\n *ngIf=\"displayMode === datePickerModeEnum.year\"\n [currentYear]=\"internalValue?.getFullYear()\"\n [today]=\"today\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (yearSelected)=\"setYear($event)\">\n </teta-year-select>\n <teta-month-select\n *ngIf=\"displayMode === datePickerModeEnum.month\"\n [currentMonth]=\"internalValue?.getMonth()\"\n [currentYear]=\"internalValue?.getFullYear()\"\n [locale]=\"locale\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (monthSelected)=\"setMonth($event)\">\n </teta-month-select>\n <teta-day-select\n *ngIf=\"displayMode === datePickerModeEnum.date\"\n [ngModel]=\"currentValue\"\n (ngModelChange)=\"applyValue($event)\"\n (dateSelected)=\"setDate($event)\"\n (yearSelected)=\"setYear($event)\"\n (monthSelected)=\"setMonth($event)\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [disabledDays]=\"disabledDays\"\n [disabledDates]=\"disabledDates\"\n [disabledPeriods]=\"disabledPeriods\"></teta-day-select>\n </div>\n </div>\n <div *ngIf=\"showTime\" class=\"datepicker-time padding-v-1 border-top border-text-10 font-body-3 color-text-90\">\n <teta-time-part-control [max]=\"23\" [ngModel]=\"internalValue?.getHours()\"\n (ngModelChange)=\"setHour($event)\"></teta-time-part-control>\n :\n <teta-time-part-control [ngModel]=\"internalValue?.getMinutes()\"\n (ngModelChange)=\"setMinute($event)\"></teta-time-part-control>\n :\n <teta-time-part-control [ngModel]=\"internalValue?.getSeconds()\"\n (ngModelChange)=\"setSecond($event)\"></teta-time-part-control>\n </div>\n </teta-scrollable>\n</teta-dropdown>\n" }]
|
|
239
|
+
}], ctorParameters: function () { return [{ type: i1.TetaConfigService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { disabled: [{
|
|
152
240
|
type: Input
|
|
153
|
-
}],
|
|
241
|
+
}], invalid: [{
|
|
154
242
|
type: Input
|
|
155
|
-
}],
|
|
243
|
+
}], firstDayOfWeek: [{
|
|
244
|
+
type: Input
|
|
245
|
+
}], disabledDates: [{
|
|
246
|
+
type: Input
|
|
247
|
+
}], disabledPeriods: [{
|
|
248
|
+
type: Input
|
|
249
|
+
}], disabledDays: [{
|
|
156
250
|
type: Input
|
|
157
251
|
}], minDate: [{
|
|
158
252
|
type: Input
|
|
159
253
|
}], maxDate: [{
|
|
160
254
|
type: Input
|
|
161
|
-
}],
|
|
255
|
+
}], minYearDate: [{
|
|
162
256
|
type: Input
|
|
163
|
-
}],
|
|
257
|
+
}], maxYearDate: [{
|
|
164
258
|
type: Input
|
|
165
259
|
}], align: [{
|
|
166
260
|
type: Input
|
|
167
261
|
}], verticalAlign: [{
|
|
168
262
|
type: Input
|
|
169
|
-
}], viewType: [{
|
|
170
|
-
type: Input
|
|
171
263
|
}], appendToBody: [{
|
|
172
264
|
type: Input
|
|
173
|
-
}], backdrop: [{
|
|
174
|
-
type: Input
|
|
175
265
|
}], allowNull: [{
|
|
176
266
|
type: Input
|
|
177
|
-
}],
|
|
178
|
-
type: Input
|
|
179
|
-
}], disabledDates: [{
|
|
180
|
-
type: Input
|
|
181
|
-
}], disabledPeriods: [{
|
|
182
|
-
type: Input
|
|
183
|
-
}], disabledDays: [{
|
|
267
|
+
}], backdrop: [{
|
|
184
268
|
type: Input
|
|
185
|
-
}],
|
|
269
|
+
}], showTime: [{
|
|
270
|
+
type: HostBinding,
|
|
271
|
+
args: ['class.datepicker-wide']
|
|
272
|
+
}, {
|
|
186
273
|
type: Input
|
|
187
|
-
}],
|
|
274
|
+
}], format: [{
|
|
188
275
|
type: Input
|
|
189
|
-
}],
|
|
190
|
-
type:
|
|
191
|
-
args: ['
|
|
192
|
-
}],
|
|
193
|
-
type:
|
|
276
|
+
}], open: [{
|
|
277
|
+
type: HostBinding,
|
|
278
|
+
args: ['class.datepicker_open']
|
|
279
|
+
}], classDatepicker: [{
|
|
280
|
+
type: HostBinding,
|
|
281
|
+
args: ['class.datepicker']
|
|
282
|
+
}], tabindex: [{
|
|
283
|
+
type: HostBinding,
|
|
284
|
+
args: ['tabindex']
|
|
285
|
+
}], keyUp: [{
|
|
286
|
+
type: HostListener,
|
|
287
|
+
args: ['window:keyup', ['$event']]
|
|
194
288
|
}] } });
|
|
195
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L2RhdGUtcGlja2VyL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFBRSxVQUFVLEVBQ3hCLEtBQUssRUFFTCxNQUFNLEVBQUUsU0FBUyxFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQXVCLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkUsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUN2RSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsMkJBQTJCLEVBQUUsK0JBQStCLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDMUYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7QUFHbkMsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQVE7SUFDckQsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQVdGLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxVQUFVO0lBNEJqRCxZQUFxQixXQUF1QixFQUFXLElBQXVCLEVBQVcsUUFBa0I7UUFDekcsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFEZixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUFXLFNBQUksR0FBSixJQUFJLENBQW1CO1FBQVcsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQTNCbEcsU0FBSSxHQUEyQixJQUFJLENBQUM7UUFDcEMsV0FBTSxHQUFXLElBQUksQ0FBQztRQUN0QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLFlBQU8sR0FBMkIsSUFBSSxDQUFDO1FBQ3ZDLFlBQU8sR0FBMkIsSUFBSSxDQUFDO1FBQ3ZDLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixVQUFLLEdBQVUsS0FBSyxDQUFDLElBQUksQ0FBQztRQUMxQixrQkFBYSxHQUFrQixhQUFhLENBQUMsSUFBSSxDQUFDO1FBQ2xELGFBQVEsR0FBYSxTQUFTLENBQUE7UUFHOUIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUUzQixtQkFBYyxHQUFHLENBQUMsQ0FBQztRQVFsQixlQUFVLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUE7UUFDNUQsaUJBQVksR0FBMEMsSUFBSSxhQUFhLENBQXlCLENBQUMsQ0FBQyxDQUFBO1FBQ2xHLFNBQUksR0FBVyxFQUFFLENBQUM7SUFLekIsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUE7WUFDaEQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUE7U0FFL0M7YUFBTTtZQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7U0FDbEM7UUFDRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7SUFDckIsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQzVELElBQUksTUFBTSxDQUFDO1FBQ1gsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFO1lBQ3JCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDaEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO2FBQzFEO1lBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoQixNQUFNLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7YUFDeEQ7UUFDSCxDQUFDLENBQUE7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxtQkFBbUIsQ0FBQztZQUNoQyxNQUFNLEdBQUc7Z0JBQ1AsUUFBUSxFQUFFLFlBQVk7Z0JBQ3RCLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixhQUFhLEVBQUUsR0FBRzthQUNuQixDQUFBO1lBQ0QsU0FBUyxFQUFFLENBQUE7WUFDWCxJQUFJLENBQUMsY0FBYyxHQUFHLCtCQUErQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1NBQzlEO2FBQU07WUFDTCxJQUFJLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztZQUN6QixNQUFNLEdBQUc7Z0JBQ1AsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLFNBQVMsRUFBRSxHQUFHO2FBQ2YsQ0FBQTtZQUNELFNBQVMsRUFBRSxDQUFBO1lBQ1gsSUFBSSxDQUFDLGNBQWMsR0FBRywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtTQUMxRDtRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUM3QixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDckI7YUFBTTtZQUNMLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkQsTUFBTSxFQUFDLElBQUksRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xELElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUU7Z0JBQ3hCLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO2dCQUN6QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQ2pCLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7aUJBQ3REO2dCQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7YUFDakY7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDekI7U0FDRjtJQUVILENBQUM7SUFFRCxPQUFPLENBQUMsSUFBSTtRQUNWLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQTtZQUNuQixJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQTtTQUM3RDthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQzNDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7WUFDbEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDN0I7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLElBQVU7SUFDbkIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQXVCO1FBQ3RDLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFPO0lBQ3pCLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBMkI7UUFDcEMsSUFBSSxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7U0FDbEM7YUFBTTtZQUNMLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7Z0JBQ2hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO2FBQzdCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLElBQUksRUFBRSxDQUFBO2dCQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQTthQUNuRDtTQUNGO0lBRUgsQ0FBQzs7Z0hBcElVLG1CQUFtQjtvR0FBbkIsbUJBQW1CLG9qQkFKbkIsQ0FBQyxrQ0FBa0MsRUFBRSxRQUFRLENBQUMsaUpDaEMzRCw0MkRBNkJBOzJGRE9hLG1CQUFtQjtrQkFUL0IsU0FBUzsrQkFDRSxrQkFBa0IsbUJBR1gsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDLGtDQUFrQyxFQUFFLFFBQVEsQ0FBQzt3SkFLaEQsSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFFYyxLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU87Z0JBQ1IsVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCwgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt2aWV3VHlwZX0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9tb2RlbC92aWV3LXR5cGUubW9kZWxcIjtcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7QWxpZ259IGZyb20gXCIuLi8uLi8uLi9jb21tb24vZW51bS9hbGlnbi5lbnVtXCI7XG5pbXBvcnQge1ZlcnRpY2FsQWxpZ259IGZyb20gXCIuLi8uLi8uLi9jb21tb24vZW51bS92ZXJ0aWNhbC1hbGlnbi5lbnVtXCI7XG5pbXBvcnQge0RhdGVQaXBlfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQge0Jhc2VQaWNrZXJ9IGZyb20gXCIuLi9iYXNlLXBpY2tlclwiO1xuaW1wb3J0IGRheWpzIGZyb20gXCJkYXlqc1wiO1xuaW1wb3J0IHttYXNraXRvRGF0ZU9wdGlvbnNHZW5lcmF0b3IsIG1hc2tpdG9EYXRlVGltZU9wdGlvbnNHZW5lcmF0b3J9IGZyb20gXCJAbWFza2l0by9raXRcIjtcbmltcG9ydCB7UmVwbGF5U3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0RhdGVQZXJpb2R9IGZyb20gXCIuLi9tb2RlbC9kYXRlLXBlcmlvZFwiO1xuXG5leHBvcnQgY29uc3QgREFURV9QSUNLRVJfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZVBpY2tlckNvbXBvbmVudCksXG4gIG11bHRpOiB0cnVlLFxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGV0YS1kYXRlLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGUtcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtEQVRFX1BJQ0tFUl9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SLCBEYXRlUGlwZV1cblxufSlcblxuZXhwb3J0IGNsYXNzIERhdGVQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlUGlja2VyIGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgpIGRhdGU6IERhdGUgfCBzdHJpbmcgfCBudW1iZXIgPSBudWxsO1xuICBASW5wdXQoKSBsb2NhbGU6IHN0cmluZyA9ICdydSc7XG4gIEBJbnB1dCgpIHNob3dUaW1lOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1pbkRhdGU6IERhdGUgfCBzdHJpbmcgfCBudW1iZXIgPSBudWxsO1xuICBASW5wdXQoKSBtYXhEYXRlOiBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyID0gbnVsbDtcbiAgQElucHV0KCkgaW52YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBhbGlnbjogQWxpZ24gPSBBbGlnbi5sZWZ0O1xuICBASW5wdXQoKSB2ZXJ0aWNhbEFsaWduOiBWZXJ0aWNhbEFsaWduID0gVmVydGljYWxBbGlnbi5hdXRvO1xuICBASW5wdXQoKSB2aWV3VHlwZTogdmlld1R5cGUgPSAncm91bmRlZCdcbiAgQElucHV0KCkgYXBwZW5kVG9Cb2R5OiBib29sZWFuO1xuICBASW5wdXQoKSBiYWNrZHJvcDogYm9vbGVhbjtcbiAgQElucHV0KCkgYWxsb3dOdWxsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgZmlyc3REYXlPZldlZWsgPSAxO1xuICBASW5wdXQoKSBkaXNhYmxlZERhdGVzOiBEYXRlW107XG4gIEBJbnB1dCgpIGRpc2FibGVkUGVyaW9kczogRGF0ZVBlcmlvZFtdO1xuICBASW5wdXQoKSBkaXNhYmxlZERheXM6IG51bWJlcltdO1xuICBASW5wdXQoKSBtaW5ZZWFyRGF0ZTogRGF0ZTtcbiAgQElucHV0KCkgbWF4WWVhckRhdGU6IERhdGU7XG5cbiAgQFZpZXdDaGlsZCgnaW5wdXQnKSBpbnB1dDogRWxlbWVudFJlZjtcbiAgQE91dHB1dCgpIHNlbGVjdERhdGU6IEV2ZW50RW1pdHRlcjxEYXRlPiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKVxuICBwdWJsaWMgc2VsZWN0ZWREYXRlOiBSZXBsYXlTdWJqZWN0PERhdGUgfCBzdHJpbmcgfCBudW1iZXI+ID0gbmV3IFJlcGxheVN1YmplY3Q8RGF0ZSB8IHN0cmluZyB8IG51bWJlcj4oMSlcbiAgcHVibGljIG1hc2s6IHN0cmluZyA9ICcnO1xuXG5cbiAgY29uc3RydWN0b3Iob3ZlcnJpZGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIG92ZXJyaWRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLCBvdmVycmlkZSBkYXRlUGlwZTogRGF0ZVBpcGUpIHtcbiAgICBzdXBlcihfZWxlbWVudFJlZiwgX2NkciwgZGF0ZVBpcGUpXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGF0ZSkge1xuICAgICAgdGhpcy5zZXREYXRlKHRoaXMuYWxsb3dOdWxsID8gbnVsbCA6IG5ldyBEYXRlKCkpXG4gICAgICB0aGlzLmRhdGUgPSB0aGlzLmFsbG93TnVsbCA/IG51bGwgOiBuZXcgRGF0ZSgpXG5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXREYXRlKG5ldyBEYXRlKHRoaXMuZGF0ZSkpXG4gICAgfVxuICAgIHRoaXMucHJlcGFyZUlucHV0KClcbiAgfVxuXG4gIHByZXBhcmVJbnB1dCgpIHtcbiAgICBjb25zdCBzdHIgPSB0aGlzLmRhdGUgPyB0aGlzLmdldExvY2FsZVN0cmluZyh0aGlzLmRhdGUpIDogJydcbiAgICBsZXQgb3B0aW9uO1xuICAgIGNvbnN0IHNldE1pbk1heCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLm1pbkRhdGUpIHtcbiAgICAgICAgb3B0aW9uLm1pbiA9IGRheWpzKG5ldyBEYXRlKHRoaXMubWluRGF0ZSkpLnN0YXJ0T2YoJ2RheScpXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5tYXhEYXRlKSB7XG4gICAgICAgIG9wdGlvbi5tYXggPSBkYXlqcyhuZXcgRGF0ZSh0aGlzLm1heERhdGUpKS5lbmRPZignZGF5JylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuc2hvd1RpbWUpIHtcbiAgICAgIHRoaXMubWFzayA9ICdkZC5tbS55eXl5LCBoaDptbSc7XG4gICAgICBvcHRpb24gPSB7XG4gICAgICAgIGRhdGVNb2RlOiAnZGQvbW0veXl5eScsXG4gICAgICAgIHRpbWVNb2RlOiAnSEg6TU0nLFxuICAgICAgICBkYXRlU2VwYXJhdG9yOiAnLicsXG4gICAgICB9XG4gICAgICBzZXRNaW5NYXgoKVxuICAgICAgdGhpcy5tYXNraXRvT3B0aW9ucyA9IG1hc2tpdG9EYXRlVGltZU9wdGlvbnNHZW5lcmF0b3Iob3B0aW9uKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1hc2sgPSAnZGQubW0ueXl5eSc7XG4gICAgICBvcHRpb24gPSB7XG4gICAgICAgIG1vZGU6ICdkZC9tbS95eXl5JyxcbiAgICAgICAgc2VwYXJhdG9yOiAnLicsXG4gICAgICB9XG4gICAgICBzZXRNaW5NYXgoKVxuICAgICAgdGhpcy5tYXNraXRvT3B0aW9ucyA9IG1hc2tpdG9EYXRlT3B0aW9uc0dlbmVyYXRvcihvcHRpb24pXG4gICAgfVxuICAgIHRoaXMuY2hhbmdlUGxhY2Vob2xkZXIoc3RyKVxuICB9XG5cbiAgb25CbHVyKCkge1xuICAgIGlmICh0aGlzLmFsbG93TnVsbCAmJiB0aGlzLmlucHV0VGV4dC50cmltKCkgPT09ICcnKSB7XG4gICAgICB0aGlzLnNldERhdGUobnVsbClcbiAgICAgIHRoaXMuZW1pdFZhbHVlKG51bGwpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHZhbCA9IHRoaXMuaW5wdXRUZXh0LnNwbGl0KCcsJyk7XG4gICAgICBjb25zdCB7ZGF5LCB5ZWFyLCBtb250aH0gPSB0aGlzLmdldERhdGVGcm9tU3RyKHZhbFswXSk7XG4gICAgICBjb25zdCB7bWlucywgaG91cnN9ID0gdGhpcy5nZXRUaW1lRnJvbVN0cih2YWxbMV0pO1xuICAgICAgaWYgKGRheSAmJiB5ZWFyICYmIG1vbnRoKSB7XG4gICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXkpXG4gICAgICAgIGlmICh0aGlzLnNob3dUaW1lKSB7XG4gICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGUuc2V0SG91cnMoaG91cnMgfHwgMCwgbWlucyB8fCAwKSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZVNlbGVjdGVkRGF0ZSh0aGlzLmdldEF2YWlsYWJsZURhdGUodGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUsIGRhdGUpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXREYXRlKHRoaXMuZGF0ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICBzZXREYXRlKGRhdGUpIHtcbiAgICBpZiAoIWRhdGUgJiYgdGhpcy5hbGxvd051bGwpIHtcbiAgICAgIHRoaXMuaW5wdXRUZXh0ID0gJydcbiAgICAgIHRoaXMuY2hhbmdlUGxhY2Vob2xkZXIoJycpXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZS5uZXh0KG5ldyBEYXRlKHRoaXMubWluRGF0ZSB8fCBuZXcgRGF0ZSgpKSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnB1dFRleHQgPSB0aGlzLmdldExvY2FsZVN0cmluZyhkYXRlKVxuICAgICAgdGhpcy5jaGFuZ2VQbGFjZWhvbGRlcih0aGlzLmdldExvY2FsZVN0cmluZyhkYXRlKSlcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlLm5leHQoZGF0ZSlcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZShkYXRlOiBEYXRlKSB7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoZGF0ZTogRGF0ZSkgPT4gYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICB9XG5cbiAgd3JpdGVWYWx1ZShvYmo6IERhdGUgfCBzdHJpbmcgfCBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICB0aGlzLmRhdGUgPSBuZXcgRGF0ZShvYmopXG4gICAgICB0aGlzLnNldERhdGUobmV3IERhdGUodGhpcy5kYXRlKSlcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuYWxsb3dOdWxsKSB7XG4gICAgICAgIHRoaXMuZGF0ZSA9IG51bGxcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUubmV4dChudWxsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5taW5EYXRlIHx8IG5ldyBEYXRlKClcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUubmV4dCh0aGlzLm1pbkRhdGUgfHwgbmV3IERhdGUoKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG5cbn1cbiIsIjx0ZXRhLWRyb3Bkb3duICpuZ0lmPVwie3NlbGVjdGVkRGF0ZTpzZWxlY3RlZERhdGV8YXN5bmN9YXMgZGF0YVwiIFthcHBlbmRUb0JvZHldPVwiYXBwZW5kVG9Cb2R5XCIgW2JhY2tkcm9wXT1cImJhY2tkcm9wXCJcbiAgICAgICAgICAgICAgICAgW29wZW5dPVwib3BlblwiIChvcGVuQ2hhbmdlKT1cIm9wZW5DaGFuZ2UoJGV2ZW50KVwiIFt2aWV3VHlwZV09XCJ2aWV3VHlwZVwiXG4gICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFt2ZXJ0aWNhbEFsaWduXT1cInZlcnRpY2FsQWxpZ25cIiBbYWxpZ25dPVwiYWxpZ25cIlxuICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlSWdub3JlXT1cIlsnZXNjJywgJ2luc2lkZScsJ2VudGVyJ11cIj5cbiAgICA8ZGl2IHRldGFEcm9wZG93bkhlYWRcbiAgICAgICAgIFtjbGFzc109XCInZGF0ZXBpY2tlci1oZWFkIGZvbnQtYm9keS0zIGdhcC04ICBkYXRlcGlja2VyXycrdmlld1R5cGVcIlxuICAgICAgICAgW25nQ2xhc3NdPVwieydkYXRlcGlja2VyLWhlYWRfaW52YWxpZCc6aW52YWxpZCwnZGF0ZXBpY2tlci1oZWFkX2Rpc2FibGVkJzpkaXNhYmxlZH1cIj5cbiAgICAgIDx0ZXRhLWlucHV0IGNsYXNzPVwicm93IHJvd19hdXRvIGZsZXhcIj5cbiAgICAgICAgPGRpdiBbY2xhc3NdPVwiJ3Jvd19hdXRvIHJvdyBkYXRlcGlja2VyXycrdmlld1R5cGVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHBvc2l0aW9uLXJlbGF0aXZlIGZvbnQtYm9keS0zIGFsaWduLWNlbnRlclwiPlxuICAgICAgICAgICAgPGlucHV0IFtuZ0NsYXNzXT1cInsnY29sb3ItdGV4dC05MCc6IWRpc2FibGVkfVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiICNpbnB1dCBzdHlsZT1cInotaW5kZXg6IDFcIiBjbGFzcz1cImJvcmRlci0wXCIgKGtleWRvd24pPVwiY2hlY2tFbnRlcigkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJpbnB1dFRleHRcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VJbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICBbbWFza2l0b109XCJtYXNraXRvT3B0aW9uc1wiPlxuICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiaW5wdXQuZm9jdXMoKVwiICpuZ0lmPVwiZGF0YS5zZWxlY3RlZERhdGV8fGFsbG93TnVsbFwiIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgY29sb3ItdGV4dC0xMFwiXG4gICAgICAgICAgICAgICAgIHN0eWxlPVwidG9wOi0wLjNweDtjdXJzb3I6IHRleHQ7dXNlci1zZWxlY3Q6IG5vbmVcIj57e3BsYWNlaG9sZGVyfX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8dGV0YS1pY29uIFtuYW1lXT1cIidjYWxlbmRhcidcIj48L3RldGEtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3RldGEtaW5wdXQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdiB0ZXRhRHJvcGRvd25Db250ZW50IGNsYXNzPVwic2Nyb2xsYWJsZVwiIChjbGljayk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wZW5cIj5cbiAgICAgICAgPHRldGEtZGF0ZS1jYWxlbmRhciBbaXNEYXRlTnVsbF09XCJkYXRlPT09bnVsbFwiIFtvcGVuXT1cIm9wZW5cIiBbbWF4XT1cIm1heERhdGVcIiBbbWluXT1cIm1pbkRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAoc2V0RGF0ZSk9XCJjaGFuZ2VTZWxlY3RlZERhdGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZERhdGVdPVwiZGF0YS5zZWxlY3RlZERhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICBbdmlld1R5cGVdPVwidmlld1R5cGVcIiBbbG9jYWxlXT1cImxvY2FsZVwiPjwvdGV0YS1kYXRlLWNhbGVuZGFyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8L2Rpdj5cbiAgPC90ZXRhLWRyb3Bkb3duPlxuIl19
|
|
289
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L2RhdGUtcGlja2VyL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFVBQVUsRUFDVixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssR0FHTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXVCLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXpDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDakQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMENBQTBDLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQUl2RSxNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBUTtJQUNyRCxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUM7SUFDbEQsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBU0YsTUFBTSxPQUFPLG1CQUFtQjtJQTBFOUIsWUFDUyxhQUFnQyxFQUMvQixJQUF1QixFQUN2QixXQUF1QjtRQUZ4QixrQkFBYSxHQUFiLGFBQWEsQ0FB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LENBQUMsQ0FBQztJQUM1QyxDQUFDOztnSEFsUlUsbUJBQW1CO29HQUFuQixtQkFBbUIsNHNCQUhuQixDQUFDLGtDQUFrQyxDQUFDLDBCQ2pDakQsNm5JQWtHQTsyRkQ5RGEsbUJBQW1CO2tCQVAvQixTQUFTOytCQUNFLGtCQUFrQixhQUdqQixDQUFDLGtDQUFrQyxDQUFDLG1CQUM5Qix1QkFBdUIsQ0FBQyxNQUFNO2lLQUl0QyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlOLFFBQVE7c0JBRlAsV0FBVzt1QkFBQyx1QkFBdUI7O3NCQUNuQyxLQUFLO2dCQUlGLE1BQU07c0JBRFQsS0FBSztnQkFZZ0MsSUFBSTtzQkFBekMsV0FBVzt1QkFBQyx1QkFBdUI7Z0JBQ2MsZUFBZTtzQkFBaEUsV0FBVzt1QkFBQyxrQkFBa0I7Z0JBQ1csUUFBUTtzQkFBakQsV0FBVzt1QkFBQyxVQUFVO2dCQWtEbUIsS0FBSztzQkFBOUMsWUFBWTt1QkFBQyxjQUFjLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge3Rha2VXaGlsZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtEYXRlUGVyaW9kfSBmcm9tICcuLi9tb2RlbC9kYXRlLXBlcmlvZCc7XG5pbXBvcnQge0RhdGVQaWNrZXJNb2RlfSBmcm9tICcuLi9tb2RlbC9kYXRlLXBpY2tlci1tb2RlLmVudW0nO1xuaW1wb3J0IHtEYXRlVXRpbH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9kYXRlLXV0aWwnO1xuaW1wb3J0IHtEYXRlUGlja2VyVXRpbH0gZnJvbSAnLi4vdXRpbC9kYXRlLXBpY2tlci11dGlsJztcbmltcG9ydCB7QWxpZ259IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9lbnVtL2FsaWduLmVudW0nO1xuaW1wb3J0IHtWZXJ0aWNhbEFsaWdufSBmcm9tICcuLi8uLi8uLi9jb21tb24vZW51bS92ZXJ0aWNhbC1hbGlnbi5lbnVtJztcbmltcG9ydCB7VGV0YUxvY2FsaXNhdGlvbn0gZnJvbSAnLi4vLi4vLi4vbG9jYWxlL3RldGEtbG9jYWxpc2F0aW9uJztcbmltcG9ydCB7VGV0YUNvbmZpZ1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2xvY2FsZS90ZXRhLWNvbmZpZy5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IERBVEVfUElDS0VSX0NPTlRST0xfVkFMVUVfQUNDRVNTT1I6IGFueSA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpLFxuICBtdWx0aTogdHJ1ZSxcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RldGEtZGF0ZS1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRlLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtEQVRFX1BJQ0tFUl9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIERhdGVQaWNrZXJDb21wb25lbnRcbiAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgaW52YWxpZDogYm9vbGVhbjtcbiAgQElucHV0KCkgZmlyc3REYXlPZldlZWsgPSAxO1xuICBASW5wdXQoKSBkaXNhYmxlZERhdGVzOiBEYXRlW107XG4gIEBJbnB1dCgpIGRpc2FibGVkUGVyaW9kczogRGF0ZVBlcmlvZFtdO1xuICBASW5wdXQoKSBkaXNhYmxlZERheXM6IG51bWJlcltdO1xuICBASW5wdXQoKSBtaW5EYXRlOiBEYXRlO1xuICBASW5wdXQoKSBtYXhEYXRlOiBEYXRlO1xuICBASW5wdXQoKSBtaW5ZZWFyRGF0ZTogRGF0ZTtcbiAgQElucHV0KCkgbWF4WWVhckRhdGU6IERhdGU7XG4gIEBJbnB1dCgpIGFsaWduOiBBbGlnbiA9IEFsaWduLmxlZnQ7XG4gIEBJbnB1dCgpIHZlcnRpY2FsQWxpZ246IFZlcnRpY2FsQWxpZ24gPSBWZXJ0aWNhbEFsaWduLmF1dG87XG4gIEBJbnB1dCgpIGFwcGVuZFRvQm9keTogYm9vbGVhbjtcbiAgQElucHV0KCkgYWxsb3dOdWxsID0gdHJ1ZTtcbiAgQElucHV0KCkgYmFja2Ryb3A6IGJvb2xlYW47XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kYXRlcGlja2VyLXdpZGUnKVxuICBASW5wdXQoKVxuICBzaG93VGltZSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBmb3JtYXQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9mb3JtYXQgPSB2YWw7XG4gIH1cblxuICBnZXQgZm9ybWF0KCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX2Zvcm1hdCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2hvd1RpbWUgPyAnZGQuTU0ueXl5eSBISDptbTpzcycgOiAnZGQuTU0ueXl5eSc7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRhdGVwaWNrZXJfb3BlbicpIG9wZW46IGJvb2xlYW47XG4gIEBIb3N0QmluZGluZygnY2xhc3MuZGF0ZXBpY2tlcicpIHByaXZhdGUgcmVhZG9ubHkgY2xhc3NEYXRlcGlja2VyID0gdHJ1ZTtcbiAgQEhvc3RCaW5kaW5nKCd0YWJpbmRleCcpIHByaXZhdGUgcmVhZG9ubHkgdGFiaW5kZXggPSAwO1xuXG4gIGxvY2FsZTogVGV0YUxvY2FsaXNhdGlvbjtcbiAgdG9kYXk6IERhdGUgPSBuZXcgRGF0ZSgpO1xuXG4gIGRhdGVQaWNrZXJNb2RlRW51bSA9IERhdGVQaWNrZXJNb2RlO1xuICBkaXNwbGF5TW9kZTogRGF0ZVBpY2tlck1vZGUgPSBEYXRlUGlja2VyTW9kZS5kYXRlO1xuICBfZm9ybWF0OiBzdHJpbmc7XG5cbiAgX3ZhbHVlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIF9jdXJyZW50VmFsdWU6IERhdGU7XG5cbiAgcHJpdmF0ZSBfYWxpdmUgPSB0cnVlO1xuXG4gIGdldCB2YWx1ZSgpOiBEYXRlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHY6IERhdGUgfCBudWxsKSB7XG4gICAgaWYgKHY/LmdldFRpbWUoKSAhPT0gdGhpcy5fdmFsdWU/LmdldFRpbWUoKSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2O1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXQgY3VycmVudFZhbHVlKCk6IERhdGUge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50VmFsdWU7XG4gIH1cblxuICBzZXQgY3VycmVudFZhbHVlKGRhdGU6IERhdGUpIHtcbiAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSBkYXRlO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldCBpbnRlcm5hbFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRWYWx1ZSA/PyB0aGlzLmVtcHR5RGF0ZSgpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGxvY2FsZVNlcnZpY2U6IFRldGFDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZlxuICApIHtcbiAgICBsb2NhbGVTZXJ2aWNlLmxvY2FsZVxuICAgICAgLnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKChsb2NhbGU6IFRldGFMb2NhbGlzYXRpb24pID0+IHtcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGU7XG4gICAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXl1cCcsIFsnJGV2ZW50J10pIGtleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm9wZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmNvZGUgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7XG4gIH07XG5cbiAgb25Ub3VjaGVkID0gKCkgPT4ge1xuICB9O1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChfOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9hbGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgYXBwbHlWYWx1ZShkYXRlOiBEYXRlKSB7XG4gICAgdGhpcy5zZXREYXRlKGRhdGUpO1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmN1cnJlbnRWYWx1ZTtcbiAgICB0aGlzLm9uQ2hhbmdlKG5ldyBEYXRlKHRoaXMudmFsdWUpKTtcbiAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHNldERhdGUgPSAoZGF5OiBEYXRlKSA9PiB7XG4gICAgaWYgKGRheSA9PT0gbnVsbCB8fCBkYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkdCA9IHRoaXMuaW50ZXJuYWxWYWx1ZTtcbiAgICBkdC5zZXRGdWxsWWVhcihkYXkuZ2V0RnVsbFllYXIoKSwgZGF5LmdldE1vbnRoKCksIGRheS5nZXREYXRlKCkpO1xuICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3IERhdGUoZHQpO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfTtcblxuICBzZXRZZWFyID0gKHllYXI6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGR0ID0gdGhpcy5pbnRlcm5hbFZhbHVlO1xuICAgIGR0LnNldEZ1bGxZZWFyKHllYXIpO1xuICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3IERhdGUoZHQpO1xuICAgIHRoaXMuc2V0TW9kZShEYXRlUGlja2VyTW9kZS5kYXRlKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH07XG5cbiAgc2V0TW9udGggPSAobW9udGg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGR0ID0gdGhpcy5pbnRlcm5hbFZhbHVlO1xuICAgIGR0LnNldE1vbnRoKG1vbnRoKTtcbiAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IG5ldyBEYXRlKGR0KTtcbiAgICB0aGlzLnNldE1vZGUoRGF0ZVBpY2tlck1vZGUuZGF0ZSk7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9O1xuXG4gIHNldEhvdXIgPSAoaG91cnM6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGR0ID0gdGhpcy5pbnRlcm5hbFZhbHVlO1xuICAgIGR0LnNldEhvdXJzKGhvdXJzKTtcbiAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IG5ldyBEYXRlKGR0KTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH07XG5cbiAgc2V0TWludXRlID0gKG1pbnV0ZTogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgZHQgPSB0aGlzLmludGVybmFsVmFsdWU7XG4gICAgZHQuc2V0TWludXRlcyhtaW51dGUpO1xuICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3IERhdGUoZHQpO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfTtcblxuICBzZXRTZWNvbmQgPSAoc2Vjb25kczogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgZHQgPSB0aGlzLmludGVybmFsVmFsdWU7XG4gICAgZHQuc2V0U2Vjb25kcyhzZWNvbmRzKTtcbiAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IG5ldyBEYXRlKGR0KTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH07XG5cbiAgc2V0VG9kYXkgPSAoKSA9PiB7XG4gICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0aGlzLmVtcHR5RGF0ZSgpO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfTtcblxuICBjbGVhclBpY2tlciA9IChldmVudDogTW91c2VFdmVudCk6IHZvaWQgPT4ge1xuICAgIHRoaXMucHJldmVudEV2ZW50KGV2ZW50KTtcbiAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xuICB9O1xuXG4gIGlzRGF0ZUluRGlzYWJsZWRQZXJpb2QgPSAoZGF0OiBEYXRlKTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkUGVyaW9kcyB8fCB0aGlzLmRpc2FibGVkUGVyaW9kcy5sZW5ndGggPCAxIHx8ICFkYXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWRQZXJpb2RzLnNvbWUoXG4gICAgICAoZDogRGF0ZVBlcmlvZCkgPT5cbiAgICAgICAgZCAmJlxuICAgICAgICBkLnN0YXJ0ICYmXG4gICAgICAgIGQuZW5kICYmXG4gICAgICAgIGQuc3RhcnQuZ2V0VGltZSgpIDw9IGRhdC5nZXRUaW1lKCkgJiZcbiAgICAgICAgZC5lbmQuZ2V0VGltZSgpID49IGRhdC5nZXRUaW1lKClcbiAgICApO1xuICB9O1xuXG4gIGlzU2Nyb2xsSWdub3JlZCA9ICgpOiBib29sZWFuID0+XG4gICAgdGhpcy5kaXNwbGF5TW9kZSA9PT0gRGF0ZVBpY2tlck1vZGUubW9udGggfHxcbiAgICB0aGlzLmRpc3BsYXlNb2RlID09PSBEYXRlUGlja2VyTW9kZS55ZWFyO1xuXG4gIHNjcm9sbE1vbnRoID0gKGU6IGFueSkgPT4ge1xuICAgIGNvbnN0IGRlbHRhID0gZT8uZGVsdGFZID8/IGU7XG5cbiAgICBpZiAoZSBpbnN0YW5jZW9mIFdoZWVsRXZlbnQpIHtcbiAgICAgIHRoaXMucHJldmVudEV2ZW50KGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2Nyb2xsSWdub3JlZCgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudFZhbHVlID0gRGF0ZVBpY2tlclV0aWwuc2Nyb2xsTW9udGgoZGVsdGEsIHRoaXMuaW50ZXJuYWxWYWx1ZSk7XG4gIH07XG5cbiAgc2Nyb2xsWWVhciA9IChlOiBhbnkpID0+IHtcbiAgICB0aGlzLnByZXZlbnRFdmVudChlKTtcbiAgICBpZiAodGhpcy5pc1Njcm9sbElnbm9yZWQoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IERhdGVQaWNrZXJVdGlsLnNjcm9sbFllYXIoXG4gICAgICBlLmRlbHRhWSxcbiAgICAgIHRoaXMuaW50ZXJuYWxWYWx1ZVxuICAgICk7XG4gIH07XG5cbiAgb3BlblBpY2tlciA9IChzaG93OiBib29sZWFuKSA9PiB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFzaG93KSB7XG4gICAgICB0aGlzLnNldE1vZGUoRGF0ZVBpY2tlck1vZGUuZGF0ZSk7XG4gICAgICB0aGlzLmFwcGx5VmFsdWUodGhpcy5jdXJyZW50VmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLm9wZW4gPSBzaG93O1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfTtcblxuICBjbG9zZVBpY2tlciA9ICgpID0+IHtcbiAgICB0aGlzLm9wZW5QaWNrZXIoZmFsc2UpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH07XG5cbiAgcHJldmVudEV2ZW50ID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICBmb2N1cygpIHtcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIHNldE1vZGUobW9kZTogRGF0ZVBpY2tlck1vZGUpIHtcbiAgICBsZXQgcmVzdWx0OiBEYXRlUGlja2VyTW9kZTtcbiAgICBpZiAobW9kZSA9PT0gdGhpcy5kaXNwbGF5TW9kZSB8fCBtb2RlID09PSBEYXRlUGlja2VyTW9kZS5kYXRlKSB7XG4gICAgICByZXN1bHQgPSBEYXRlUGlja2VyTW9kZS5kYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBtb2RlO1xuICAgIH1cbiAgICB0aGlzLmRpc3BsYXlNb2RlID0gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBlbXB0eURhdGUoKSB7XG4gICAgcmV0dXJuIERhdGVVdGlsLnRydW5jYXRlVG9EYXkobmV3IERhdGUoKSk7XG4gIH1cbn1cbiIsIjx0ZXRhLWRyb3Bkb3duXG4gIGNsYXNzPVwicm93IHJvd19hdXRvXCJcbiAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgW29wZW5dPVwib3BlblwiXG4gIFthdXRvQ2xvc2VJZ25vcmVdPVwiWydlc2MnLCAnaW5zaWRlJ11cIlxuICAob3BlbkNoYW5nZSk9XCJvcGVuUGlja2VyKCRldmVudClcIlxuICBbYWxpZ25dPVwiYWxpZ25cIlxuICBbdmVydGljYWxBbGlnbl09XCJ2ZXJ0aWNhbEFsaWduXCJcbiAgW2FwcGVuZFRvQm9keV09XCJhcHBlbmRUb0JvZHlcIlxuICBbYmFja2Ryb3BdPVwiYmFja2Ryb3BcIj5cbiAgPGRpdiB0ZXRhRHJvcGRvd25IZWFkXG4gICAgICAgY2xhc3M9XCJkYXRlcGlja2VyLWhlYWQgZm9udC1ib2R5LTNcIlxuICAgICAgIFtjbGFzcy5kYXRlcGlja2VyLWhlYWRfZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgIFtjbGFzcy5kYXRlcGlja2VyLWhlYWRfaW52YWxpZF09XCJpbnZhbGlkXCI+XG4gICAgPHRldGEtaWNvbiBbbmFtZV09XCInY2FsZW5kYXInXCIgY2xhc3M9XCJtYXJnaW4tcmlnaHQtMVwiPjwvdGV0YS1pY29uPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dfYXV0byBub3dyYXBcIj5cbiAgICAgIHt7Y3VycmVudFZhbHVlICE9PSBudWxsICYmIGN1cnJlbnRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gKGN1cnJlbnRWYWx1ZSB8IGRhdGUgOiBmb3JtYXQpIDogJyd9fVxuICAgIDwvZGl2PlxuICAgIDx0ZXRhLWljb24gKm5nSWY9XCJhbGxvd051bGxcIlxuICAgICAgICAgICAgICAgW25hbWVdPVwiJ2Nsb3NlQmlnJ1wiXG4gICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJQaWNrZXIoJGV2ZW50KTtcIlxuICAgICAgICAgICAgICAgY2xhc3M9XCJtYXJnaW4tbGVmdC0xXCI+PC90ZXRhLWljb24+XG4gIDwvZGl2PlxuICA8dGV0YS1zY3JvbGxhYmxlIHRldGFEcm9wZG93bkNvbnRlbnQgKGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgPGRpdiBjbGFzcz1cInBhZGRpbmctM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8YnV0dG9uIHRldGEtYnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIFtwYWxldHRlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgICAgICBbdmlld109XCJkaXNwbGF5TW9kZT09PWRhdGVQaWNrZXJNb2RlRW51bS5tb250aCA/ICdwcmltYXJ5JyA6ICdnaG9zdCdcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldE1vZGUoZGF0ZVBpY2tlck1vZGVFbnVtLm1vbnRoKVwiXG4gICAgICAgICAgICAgICAgICAod2hlZWwpPVwic2Nyb2xsTW9udGgoJGV2ZW50KTtcIj5cbiAgICAgICAgICAgIHt7bG9jYWxlLm1vbnRoc1tpbnRlcm5hbFZhbHVlPy5nZXRNb250aCgpXX19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiB0ZXRhLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hcmdpbi1sZWZ0LTJcIlxuICAgICAgICAgICAgICAgICAgW3BhbGV0dGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICAgICAgICAgIFt2aWV3XT1cImRpc3BsYXlNb2RlPT09ZGF0ZVBpY2tlck1vZGVFbnVtLnllYXIgPyAncHJpbWFyeScgOiAnZ2hvc3QnXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRNb2RlKGRhdGVQaWNrZXJNb2RlRW51bS55ZWFyKVwiXG4gICAgICAgICAgICAgICAgICAod2hlZWwpPVwic2Nyb2xsWWVhcigkZXZlbnQpO1wiPlxuICAgICAgICAgICAge3tpbnRlcm5hbFZhbHVlPy5nZXRGdWxsWWVhcigpfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gdGV0YS1idXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbcGFsZXR0ZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICAgIFt2aWV3XT1cIidnaG9zdCdcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRUb2RheSgpXCI+XG4gICAgICAgICAgPHRldGEtaWNvbiBbbmFtZV09XCInY2FsZW5kYXInXCI+PC90ZXRhLWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci1jb250ZW50XCI+XG4gICAgICAgIDx0ZXRhLXllYXItc2VsZWN0XG4gICAgICAgICAgKm5nSWY9XCJkaXNwbGF5TW9kZSA9PT0gZGF0ZVBpY2tlck1vZGVFbnVtLnllYXJcIlxuICAgICAgICAgIFtjdXJyZW50WWVhcl09XCJpbnRlcm5hbFZhbHVlPy5nZXRGdWxsWWVhcigpXCJcbiAgICAgICAgICBbdG9kYXldPVwidG9kYXlcIlxuICAgICAgICAgIFttaW5EYXRlXT1cIm1pbkRhdGVcIlxuICAgICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgICAgICAgICh5ZWFyU2VsZWN0ZWQpPVwic2V0WWVhcigkZXZlbnQpXCI+XG4gICAgICAgIDwvdGV0YS15ZWFyLXNlbGVjdD5cbiAgICAgICAgPHRldGEtbW9udGgtc2VsZWN0XG4gICAgICAgICAgKm5nSWY9XCJkaXNwbGF5TW9kZSA9PT0gZGF0ZVBpY2tlck1vZGVFbnVtLm1vbnRoXCJcbiAgICAgICAgICBbY3VycmVudE1vbnRoXT1cImludGVybmFsVmFsdWU/LmdldE1vbnRoKClcIlxuICAgICAgICAgIFtjdXJyZW50WWVhcl09XCJpbnRlcm5hbFZhbHVlPy5nZXRGdWxsWWVhcigpXCJcbiAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgICAgICAgW21heERhdGVdPVwibWF4RGF0ZVwiXG4gICAgICAgICAgKG1vbnRoU2VsZWN0ZWQpPVwic2V0TW9udGgoJGV2ZW50KVwiPlxuICAgICAgICA8L3RldGEtbW9udGgtc2VsZWN0PlxuICAgICAgICA8dGV0YS1kYXktc2VsZWN0XG4gICAgICAgICAgKm5nSWY9XCJkaXNwbGF5TW9kZSA9PT0gZGF0ZVBpY2tlck1vZGVFbnVtLmRhdGVcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiYXBwbHlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAoZGF0ZVNlbGVjdGVkKT1cInNldERhdGUoJGV2ZW50KVwiXG4gICAgICAgICAgKHllYXJTZWxlY3RlZCk9XCJzZXRZZWFyKCRldmVudClcIlxuICAgICAgICAgIChtb250aFNlbGVjdGVkKT1cInNldE1vbnRoKCRldmVudClcIlxuICAgICAgICAgIFttaW5EYXRlXT1cIm1pbkRhdGVcIlxuICAgICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgICAgICAgIFtmaXJzdERheU9mV2Vla109XCJmaXJzdERheU9mV2Vla1wiXG4gICAgICAgICAgW2Rpc2FibGVkRGF5c109XCJkaXNhYmxlZERheXNcIlxuICAgICAgICAgIFtkaXNhYmxlZERhdGVzXT1cImRpc2FibGVkRGF0ZXNcIlxuICAgICAgICAgIFtkaXNhYmxlZFBlcmlvZHNdPVwiZGlzYWJsZWRQZXJpb2RzXCI+PC90ZXRhLWRheS1zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwic2hvd1RpbWVcIiBjbGFzcz1cImRhdGVwaWNrZXItdGltZSBwYWRkaW5nLXYtMSBib3JkZXItdG9wIGJvcmRlci10ZXh0LTEwIGZvbnQtYm9keS0zIGNvbG9yLXRleHQtOTBcIj5cbiAgICAgIDx0ZXRhLXRpbWUtcGFydC1jb250cm9sIFttYXhdPVwiMjNcIiBbbmdNb2RlbF09XCJpbnRlcm5hbFZhbHVlPy5nZXRIb3VycygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEhvdXIoJGV2ZW50KVwiPjwvdGV0YS10aW1lLXBhcnQtY29udHJvbD5cbiAgICAgIDpcbiAgICAgIDx0ZXRhLXRpbWUtcGFydC1jb250cm9sIFtuZ01vZGVsXT1cImludGVybmFsVmFsdWU/LmdldE1pbnV0ZXMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRNaW51dGUoJGV2ZW50KVwiPjwvdGV0YS10aW1lLXBhcnQtY29udHJvbD5cbiAgICAgIDpcbiAgICAgIDx0ZXRhLXRpbWUtcGFydC1jb250cm9sIFtuZ01vZGVsXT1cImludGVybmFsVmFsdWU/LmdldFNlY29uZHMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRTZWNvbmQoJGV2ZW50KVwiPjwvdGV0YS10aW1lLXBhcnQtY29udHJvbD5cbiAgICA8L2Rpdj5cbiAgPC90ZXRhLXNjcm9sbGFibGU+XG48L3RldGEtZHJvcGRvd24+XG4iXX0=
|