ecabs-components 1.1.66 → 1.1.68

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -25,107 +25,110 @@ To get more help on the Angular CLI use `ng help` or go check out the [Angular C
25
25
 
26
26
  ## Version History
27
27
 
28
- - **v1.0.13** — Fixed emitEvent behaviour of checkbox
29
- - **v1.0.18** — Fixed width of date time picker
30
- - **v1.0.75** Upgrade `EcabsButtons` module to `MDC` styling.
31
- - **v1.0.76** — Upgrade `EcabsInput` module to `MDC` styling.
32
- - **v1.0.77** — Upgrade `MatChips` to `MDC`.
33
- - **v1.0.78** — Upgrade `MatSelect` to `MDC`.
28
+ - **v1.1.68** — Add `isVisible` callback for `SidebarMenuItem` to support dynamic visibility based on context.
29
+ - **v1.1.67** — Add support for optional "to" (end date) for `EcabsDateRangePickerV2Component`.
30
+ - Add allow cross-midnight time ranges for `EcabsTimeRangeInputV2Component`.
31
+ - **v1.1.66** — Suppress emission of an empty query on refocusing after selection of option from `EcabsChipAutocomplete`.
32
+ - **v1.1.65** — `EcabsInputRange`: Remove padding and background styling.
33
+ - **v1.1.64** — Refactor `EcabsChipAutocomplete` logic, improve component styles/disabled states, and update button styles.
34
+ - **v1.1.63** — Add `EcabsSegmentComponent`.
35
+ - Update `EcabsSelectV2` to be more robust when handling multiple selections.
36
+ - **v1.1.62** — Add `EcabsTimeRangeInputV2Component`.,
37
+ - **v1.1.61** — Added support for 12-hour time input for `maskito` library.
38
+ - **Affected components**: `EcabsDateTimePicker`, `EcabsTimepicker`, `EcabsDateTimeRangePicker`.
39
+ - **v1.1.60** — Migrate input mask library from `vanilla-text-mask` to `maskito`.
40
+ - **Affected components**: `EcabsDateTimePicker`, `EcabsTimepicker`, `EcabsDateTimeRangePicker`.
41
+ - **v1.1.59** — `EcabsCheckboxV2Component`: Implement version 2 of `EcabsCheckboxComponent`.
42
+ - **v1.1.58** — Add `EcabsInputRangeComponent` with support for minimum and maximum values.
43
+ - **v1.1.57** — Implement `EcabsChipGroup`and `EcabsAutocompleteChipGroup` components with demo.
44
+ - **v1.1.56** — Implement `EcabsDateRangePickerComponentV2`.
45
+ - **v1.1.55** — `EcabsButtonsV2Component`: Added version 2 of `EcabsButtonsComponent` with support for small, medium, and large sizes.
46
+ - **v1.1.54** — Implement `EcabsButtonToggleComponent` with support for small, medium, and large sizes.
47
+ - **v1.1.53** — Introduce new gray color palette and update references and apply styling improvements.
48
+ - **v1.1.52** — Update styling overrides for Material nav-style tabs, including active state.
49
+ - **v1.1.51** — Implement option of displaying dynamic content for `EcabsTableComponent` when empty.
50
+ - **v1.1.50** — Add `Documentation` for `EcabsTableModule`.
51
+ - **v1.1.49** — Add support for `splitButtonsWidth` in `EcabsDialogConfirmComponent` and update button styling.`.
52
+ - **v1.1.48** — Implement `EcabsPlaceAutocompleteV2Component` to support waypoints history, query change handling, and dropdown suggestions display.
53
+ - **v1.1.47** — Add `Title` and `dynamic` content support to `EcabsEmptyPlaceholderComponent`.
54
+ - **v1.1.46** — Add `ViewChild` reference for `MatRadioGroup` and update event type in `EcabsRadioButtonListComponent`.
55
+ - **v1.1.45** — Added default validation of date range
56
+ - **v1.1.44** — Fixed issue Apply button is still active when only the DateFrom is selected
57
+ - **v1.1.43** — Added disabling of Apply button for date range picker
58
+ - **v1.1.42** — Apply `width` and `height` properties directly to root `MatDialog` of `EcabsDialogConfirmComponent`.
59
+ - **v1.1.41** — Added EcabsDialogConfirmationDeletionComponent.
60
+ - **v1.1.40** — `EcabsDateTimePicker`: Added support for preserving and returning `receivedValue` when there is no change in the input.
61
+ - **v1.1.39** — Added date adapter to public api.
62
+ - **v1.1.38** — Use native `matDatepickerToggleIcon` in `EcabsDateTimePicker`.
63
+ - **v1.1.35** — Add `waypointType` input to `EcabsAutoComplete`.
64
+ - Add `nativeElement` handles to custom inputs.
65
+ - **v1.1.34** — Emit `selectionChange` event when selecting item from `EcabsSelectV2`.
66
+ - Add collapse styling for `EcabsLogo`.
67
+ - **v1.1.33** — Return falsey value when no input is available in `DateTime` selector through keyboard action deletion.
68
+ - **v1.1.32** — Return falsey value when no input is available in `DateTime` selector.
69
+ - **v1.1.31** — Prevent hover state persistence on disabled buttons.
70
+ - **v1.1.30** — Added blur event handling and support for special keys in `EcabsTimePickerComponent`.
71
+ - **v1.1.29** — Added handling manual updates data of date range picker.
72
+ - **v1.1.28** — Fixed issue related to the prev version.
73
+ - **v1.1.27** — Added results for the dialog message.
74
+ - **v1.1.26** — Implement dynamic titles for `EcabsDialogComponent`.
75
+ - **v1.1.25** — Fixed date range picker when choose one date only.
76
+ - **v1.1.24** — Fixed date range picker when reset value.
77
+ - **v1.1.23** — Update styling for map markers.
78
+ - **v1.1.22** — Added statuses for mat-chips.
79
+ - Added badges for menu items.
80
+ - **v1.1.21** — Improve style for hovered disabled calendar date.
81
+ - **v1.1.20** — Improve the appearance for the scrollbar.
82
+ - **v1.1.19** — Increase delay for phone control and to config.
83
+ - **v1.1.18** — Adjust position of `sticky` header on `MatTable`.
84
+ - **v1.1.17** — Fix peerDependency on `libphonenumber-js`.
85
+ - **v1.1.16** — Implemented custom phone number control.
86
+ - **v1.1.15** — Cleanup `EcabsComponentsService` and provide default config via `config` property.
87
+ - **v1.1.14** — Update styles for disabled indeterminate checkboxes.
88
+ - **v1.1.13** — Fix `overflow-y` issue on `MatCardContent`.
89
+ - **v1.1.12** — Extend @Input properties of `EcabsSelectV2` from `@ng-select` lib.
90
+ - **v1.1.10** — Added color styles for prompt title message.
91
+ - **v1.1.9** — Fixed i18n issue.
92
+ - **v1.1.8** — Add directive show-on-truncated to directives.
93
+ - **v1.1.7** — Add a message for alphanumeric-only validation.
94
+ - **v1.1.6** — accumulate all directives
95
+ - **v1.1.5** — added slider
96
+ - **v1.1.4** — Fixed blur issue for input.
97
+ - **v1.1.3** — Upgrade `MatLegacyCard` to `MDC`.
98
+ - **v1.1.2** — Introduce new select component (`EcabsSelectV2`) to deprecate `EcabsSelect`.
99
+ - **v1.1.1** — Hide `Timepicker` options on input blur.
100
+ - **v1.1.0** — Upgrade `MatLegacyMenu` to `MDC`.
101
+ - **v1.0.99** — Add `mini` and `maxi` directive and validators to `EcabsInput`.
102
+ - **v1.0.98** — Upgrade `MatLegacyAutocomplete` to `MDC`.
103
+ - **v1.0.97** — Correct misaligned icon and text on `EcabsNotes`.
104
+ - **v1.0.96** — Add missing styles for nested columns on `Table`.
105
+ - **v1.0.95** — Upgrade `MatLegacyTooltip` to `MDC`.
106
+ - **v1.0.94** — Upgrade `MatLegacyTabs` to `MDC`.
107
+ - **v1.0.93** — Update progress colors for percentage.
108
+ - **v1.0.92** — Add default buttons for Confirm and Cancel buttons on dialog.
109
+ - **v1.0.91** — Upgrade `MatLegacyCheckbox` and `MatSlideToggle` to `MDC`.
110
+ - **v1.0.90** — Upgrade `MatLegacyPaginator` to `MDC`.
111
+ - Add `EcabsPaginatorDirective`.
112
+ - Rename `AppHint` to `EcabsHint`.
113
+ - Apply `ngx-toaster` overrides.
114
+ - **v1.0.89** — Upgrade `MatLegacyTable` and `MatLegacyProgress` to `MDC`.
115
+ - **v1.0.88** — Roll back 1.0.87
116
+ - **v1.0.87** — Apply min/max Date logic for date picker
117
+ - **v1.0.85** — Improve styling for `EcabsTable` row colors.
118
+ - **v1.0.84** — Emit `falsey` result when Close button is clicked on `EcabsDialogConfirm` and `EcabsDialogMessage`.
119
+ - **v1.0.83** — Fix buttons height.
120
+ - **v1.0.82** — Improve the appearance of disabled inputs.
121
+ - Fix placeholder text of `EcabsSelect`.
122
+ - **v1.0.81** — Fix font size of `EcabsSelect`.
123
+ - **v1.0.80** — Allow custom button options for `Confirm` and `Cancel` buttons on `EcabsDialog`.
34
124
  - **v1.0.79** — feat(CU-11266): Update `MatDialog` to `MDC`.
35
125
  - Fix button height issue on anchor tags marked as `mat-button`.
36
126
  - Update default font family.
37
127
  - Rename `NoteComponent` to `EcabsNoteComponent`.
38
128
  - Add `expired` style for `EcabsChip`.
39
- - **v1.0.80** — Allow custom button options for `Confirm` and `Cancel` buttons on `EcabsDialog`.
40
- - **v1.0.81** — Fix font size of `EcabsSelect`.
41
- - **v1.0.82** — Improve the appearance of disabled inputs.
42
- - Fix placeholder text of `EcabsSelect`.
43
- - **v1.0.83** — Fix buttons height.
44
- - **v1.0.84** — Emit `falsey` result when Close button is clicked on `EcabsDialogConfirm` and `EcabsDialogMessage`.
45
- - **v1.0.85** — Improve styling for `EcabsTable` row colors.
46
- - **v1.0.87** — Apply min/max Date logic for date picker
47
- - **v1.0.88** — Roll back 1.0.87
48
- - **v1.0.89** — Upgrade `MatLegacyTable` and `MatLegacyProgress` to `MDC`.
49
- - **v1.0.90** — Upgrade `MatLegacyPaginator` to `MDC`.
50
- - Add `EcabsPaginatorDirective`.
51
- - Rename `AppHint` to `EcabsHint`.
52
- - Apply `ngx-toaster` overrides.
53
- - **v1.0.91** — Upgrade `MatLegacyCheckbox` and `MatSlideToggle` to `MDC`.
54
- - **v1.0.92** — Add default buttons for Confirm and Cancel buttons on dialog.
55
- - **v1.0.93** — Update progress colors for percentage.
56
- - **v1.0.94** — Upgrade `MatLegacyTabs` to `MDC`.
57
- - **v1.0.95** — Upgrade `MatLegacyTooltip` to `MDC`.
58
- - **v1.0.96** — Add missing styles for nested columns on `Table`.
59
- - **v1.0.97** — Correct misaligned icon and text on `EcabsNotes`.
60
- - **v1.0.98** — Upgrade `MatLegacyAutocomplete` to `MDC`.
61
- - **v1.0.99** — Add `mini` and `maxi` directive and validators to `EcabsInput`.
62
- - **v1.1.0** — Upgrade `MatLegacyMenu` to `MDC`.
63
- - **v1.1.1** — Hide `Timepicker` options on input blur.
64
- - **v1.1.2** — Introduce new select component (`EcabsSelectV2`) to deprecate `EcabsSelect`.
65
- - **v1.1.3** — Upgrade `MatLegacyCard` to `MDC`.
66
- - **v1.1.4** — Fixed blur issue for input.
67
- - **v1.1.5** — added slider
68
- - **v1.1.6** — accumulate all directives
69
- - **v1.1.7** — Add a message for alphanumeric-only validation.
70
- - **v1.1.8** — Add directive show-on-truncated to directives.
71
- - **v1.1.9** — Fixed i18n issue.
72
- - **v1.1.10** — Added color styles for prompt title message.
73
- - **v1.1.12** — Extend @Input properties of `EcabsSelectV2` from `@ng-select` lib.
74
- - **v1.1.13** — Fix `overflow-y` issue on `MatCardContent`.
75
- - **v1.1.14** — Update styles for disabled indeterminate checkboxes.
76
- - **v1.1.15** — Cleanup `EcabsComponentsService` and provide default config via `config` property.
77
- - **v1.1.16** — Implemented custom phone number control.
78
- - **v1.1.17** — Fix peerDependency on `libphonenumber-js`.
79
- - **v1.1.18** — Adjust position of `sticky` header on `MatTable`.
80
- - **v1.1.19** — Increase delay for phone control and to config.
81
- - **v1.1.20** — Improve the appearance for the scrollbar.
82
- - **v1.1.21** — Improve style for hovered disabled calendar date.
83
- - **v1.1.22** — Added statuses for mat-chips.
84
- - Added badges for menu items.
85
- - **v1.1.23** — Update styling for map markers.
86
- - **v1.1.24** — Fixed date range picker when reset value.
87
- - **v1.1.25** — Fixed date range picker when choose one date only.
88
- - **v1.1.26** — Implement dynamic titles for `EcabsDialogComponent`.
89
- - **v1.1.27** — Added results for the dialog message.
90
- - **v1.1.28** — Fixed issue related to the prev version.
91
- - **v1.1.29** — Added handling manual updates data of date range picker.
92
- - **v1.1.30** — Added blur event handling and support for special keys in `EcabsTimePickerComponent`.
93
- - **v1.1.31** — Prevent hover state persistence on disabled buttons.
94
- - **v1.1.32** — Return falsey value when no input is available in `DateTime` selector.
95
- - **v1.1.33** — Return falsey value when no input is available in `DateTime` selector through keyboard action deletion.
96
- - **v1.1.34** — Emit `selectionChange` event when selecting item from `EcabsSelectV2`.
97
- - Add collapse styling for `EcabsLogo`.
98
- - **v1.1.35** — Add `waypointType` input to `EcabsAutoComplete`.
99
- - Add `nativeElement` handles to custom inputs.
100
- - **v1.1.38** — Use native `matDatepickerToggleIcon` in `EcabsDateTimePicker`.
101
- - **v1.1.39** — Added date adapter to public api.
102
- - **v1.1.40** — `EcabsDateTimePicker`: Added support for preserving and returning `receivedValue` when there is no change in the input.
103
- - **v1.1.41** — Added EcabsDialogConfirmationDeletionComponent.
104
- - **v1.1.42** — Apply `width` and `height` properties directly to root `MatDialog` of `EcabsDialogConfirmComponent`.
105
- - **v1.1.43** — Added disabling of Apply button for date range picker
106
- - **v1.1.44** — Fixed issue Apply button is still active when only the DateFrom is selected
107
- - **v1.1.45** — Added default validation of date range
108
- - **v1.1.46** — Add `ViewChild` reference for `MatRadioGroup` and update event type in `EcabsRadioButtonListComponent`.
109
- - **v1.1.47** — Add `Title` and `dynamic` content support to `EcabsEmptyPlaceholderComponent`.
110
- - **v1.1.48** — Implement `EcabsPlaceAutocompleteV2Component` to support waypoints history, query change handling, and dropdown suggestions display.
111
- - **v1.1.49** — Add support for `splitButtonsWidth` in `EcabsDialogConfirmComponent` and update button styling.`.
112
- - **v1.1.50** — Add `Documentation` for `EcabsTableModule`.
113
- - **v1.1.51** — Implement option of displaying dynamic content for `EcabsTableComponent` when empty.
114
- - **v1.1.52** — Update styling overrides for Material nav-style tabs, including active state.
115
- - **v1.1.53** — Introduce new gray color palette and update references and apply styling improvements.
116
- - **v1.1.54** — Implement `EcabsButtonToggleComponent` with support for small, medium, and large sizes.
117
- - **v1.1.55** — `EcabsButtonsV2Component`: Added version 2 of `EcabsButtonsComponent` with support for small, medium, and large sizes.
118
- - **v1.1.56** — Implement `EcabsDateRangePickerComponentV2`.
119
- - **v1.1.57** — Implement `EcabsChipGroup`and `EcabsAutocompleteChipGroup` components with demo.
120
- - **v1.1.58** — Add `EcabsInputRangeComponent` with support for minimum and maximum values.
121
- - **v1.1.59** — `EcabsCheckboxV2Component`: Implement version 2 of `EcabsCheckboxComponent`.
122
- - **v1.1.60** — Migrate input mask library from `vanilla-text-mask` to `maskito`.
123
- - **Affected components**: `EcabsDateTimePicker`, `EcabsTimepicker`, `EcabsDateTimeRangePicker`.
124
- - **v1.1.61** — Added support for 12-hour time input for `maskito` library.
125
- - **Affected components**: `EcabsDateTimePicker`, `EcabsTimepicker`, `EcabsDateTimeRangePicker`.
126
- - **v1.1.62** — Add `EcabsTimeRangeInputV2Component`.,
127
- - **v1.1.63** — Add `EcabsSegmentComponent`.
128
- - Update `EcabsSelectV2` to be more robust when handling multiple selections.
129
- - **v1.1.64** — Refactor `EcabsChipAutocomplete` logic, improve component styles/disabled states, and update button styles.
130
- - **v1.1.65** — `EcabsInputRange`: Remove padding and background styling.
131
- - **v1.1.66** — Suppress emission of an empty query on refocusing after selection of option from `EcabsChipAutocomplete`.
129
+ - **v1.0.78** — Upgrade `MatSelect` to `MDC`.
130
+ - **v1.0.77** — Upgrade `MatChips` to `MDC`.
131
+ - **v1.0.76** — Upgrade `EcabsInput` module to `MDC` styling.
132
+ - **v1.0.75** Upgrade `EcabsButtons` module to `MDC` styling.
133
+ - **v1.0.18** — Fixed width of date time picker
134
+ - **v1.0.13** — Fixed emitEvent behaviour of checkbox
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci5tb2RlbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lY2Ficy1jb21wb25lbnRzL3NyYy9saWIvYmFzZS9tb2RlbHMvc2lkZWJhci5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgU2lkZWJhck1lbnVJdGVtIHtcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIGljb24/OiBzdHJpbmc7XHJcbiAgdXJsPzogc3RyaW5nO1xyXG4gIGV4cGFuZD86IGJvb2xlYW47XHJcbiAgc3ViSXRlbXM/OiBTaWRlYmFyTWVudUl0ZW1bXTtcclxuICBwZXJtaXNzaW9ucz86IFBlcm1pc3Npb25WYWx1ZUVudW08c3RyaW5nPltdO1xyXG4gIGljb25SZXNvdXJjZT86IFNpZGViYXJJY29uUmVzb3VyY2U7XHJcbiAgYmFkZ2U/OiBzdHJpbmc7XHJcbn1cclxuXHJcbnR5cGUgUGVybWlzc2lvblZhbHVlRW51bTxUIGV4dGVuZHMgc3RyaW5nPiA9IHtcclxuICB2YWx1ZXM6IFJlY29yZDxULCBzdHJpbmc+O1xyXG59O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTaWRlYmFySWNvblJlc291cmNlIHtcclxuICBwYXRoOiBzdHJpbmc7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG59XHJcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci5tb2RlbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lY2Ficy1jb21wb25lbnRzL3NyYy9saWIvYmFzZS9tb2RlbHMvc2lkZWJhci5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgU2lkZWJhck1lbnVJdGVtPFRFbnYgPSB1bmtub3duLCBUUm9sZSA9IHVua25vd24+IHtcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIGljb24/OiBzdHJpbmc7XHJcbiAgdXJsPzogc3RyaW5nO1xyXG4gIGV4cGFuZD86IGJvb2xlYW47XHJcbiAgc3ViSXRlbXM/OiBTaWRlYmFyTWVudUl0ZW1bXTtcclxuICBwZXJtaXNzaW9ucz86IFBlcm1pc3Npb25WYWx1ZUVudW08c3RyaW5nPltdO1xyXG4gIGljb25SZXNvdXJjZT86IFNpZGViYXJJY29uUmVzb3VyY2U7XHJcbiAgYmFkZ2U/OiBzdHJpbmc7XHJcbiAgaXNWaXNpYmxlPzogKGNvbnRleHQ6IE1lbnVJdGVtVmlzaWJpbGl0eUNvbnRleHQ8VEVudiwgVFJvbGU+KSA9PiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1lbnVJdGVtVmlzaWJpbGl0eUNvbnRleHQ8VEVudiwgVFJvbGU+IHtcclxuICBlbnZpcm9ubWVudDogVEVudjtcclxuICByb2xlOiBUUm9sZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTaWRlYmFySWNvblJlc291cmNlIHtcclxuICBwYXRoOiBzdHJpbmc7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgUGVybWlzc2lvblZhbHVlRW51bTxUIGV4dGVuZHMgc3RyaW5nPiB7XHJcbiAgdmFsdWVzOiBSZWNvcmQ8VCwgc3RyaW5nPjtcclxufVxyXG4iXX0=
@@ -3,21 +3,19 @@ import { NG_VALUE_ACCESSOR, NgControl, Validators, } from '@angular/forms';
3
3
  import { format, isEqual, isValid } from 'date-fns';
4
4
  import Holidays from 'date-holidays';
5
5
  import { isEqual as lodashIsEqual } from 'lodash';
6
- import { takeUntil } from 'rxjs';
7
6
  import EcabsElementBaseComponent from '../base/element-base';
8
- import { UnsubscribeService } from '../base/services/unsubscribe.service';
9
7
  import { EcabsDateRangePickerHeaderComponentV2 } from './components/ecabs-date-range-picker-header/ecabs-date-range-picker-header-v2.component';
8
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
10
9
  import * as i0 from "@angular/core";
11
10
  import * as i1 from "../base/services/ecabs-date-picker-translations.service";
12
- import * as i2 from "../base/services/unsubscribe.service";
13
- import * as i3 from "../base/element-wrapper/element-wrapper.component";
14
- import * as i4 from "@angular/material/datepicker";
15
- import * as i5 from "@angular/forms";
16
- import * as i6 from "../base/directives/date-mask.directive";
11
+ import * as i2 from "../base/element-wrapper/element-wrapper.component";
12
+ import * as i3 from "@angular/material/datepicker";
13
+ import * as i4 from "@angular/forms";
14
+ import * as i5 from "../base/directives/date-mask.directive";
17
15
  export class EcabsDateRangePickerComponentV2 extends EcabsElementBaseComponent {
18
16
  injector;
19
17
  ecabsDatePickerHeaderService;
20
- unsubscribeService;
18
+ destroyRef;
21
19
  minDate;
22
20
  maxDate;
23
21
  touchUi = false;
@@ -30,6 +28,7 @@ export class EcabsDateRangePickerComponentV2 extends EcabsElementBaseComponent {
30
28
  excludeWeekends;
31
29
  specificDates;
32
30
  holidayOptions;
31
+ dateToOptional = false;
33
32
  onblur = new EventEmitter();
34
33
  val;
35
34
  pickerTo;
@@ -64,28 +63,42 @@ export class EcabsDateRangePickerComponentV2 extends EcabsElementBaseComponent {
64
63
  }
65
64
  //eslint-disable-next-line
66
65
  set dateFrom(val) {
67
- if (this._dateFrom !== val && isValid(new Date(val))) {
66
+ if (this._dateFrom === val) {
67
+ return;
68
+ }
69
+ if (val && isValid(new Date(val))) {
68
70
  this._dateFrom = val;
69
71
  this.minDateTo = new Date(val);
70
- if (!this.dateTo) {
72
+ if (!this.dateTo && !this.dateToOptional) {
71
73
  this.pickerTo?.open();
72
74
  }
73
- this.onApply();
74
75
  }
76
+ else if (!val) {
77
+ this._dateFrom = val;
78
+ this.minDateTo = this.minDate;
79
+ }
80
+ this.onApply();
75
81
  }
76
82
  //eslint-disable-next-line
77
83
  set dateTo(val) {
78
- if (this._dateTo !== val && isValid(new Date(val))) {
84
+ if (this._dateTo === val) {
85
+ return;
86
+ }
87
+ if (val && isValid(new Date(val))) {
79
88
  this._dateTo = val;
80
89
  this.maxDateFrom = new Date(val);
81
- this.onApply();
82
90
  }
91
+ else if (!val) {
92
+ this._dateTo = val;
93
+ this.maxDateFrom = this.maxDate;
94
+ }
95
+ this.onApply();
83
96
  }
84
- constructor(injector, ecabsDatePickerHeaderService, unsubscribeService) {
97
+ constructor(injector, ecabsDatePickerHeaderService, destroyRef) {
85
98
  super();
86
99
  this.injector = injector;
87
100
  this.ecabsDatePickerHeaderService = ecabsDatePickerHeaderService;
88
- this.unsubscribeService = unsubscribeService;
101
+ this.destroyRef = destroyRef;
89
102
  }
90
103
  ngOnChanges(changes) {
91
104
  const { minDate, maxDate } = changes;
@@ -101,7 +114,7 @@ export class EcabsDateRangePickerComponentV2 extends EcabsElementBaseComponent {
101
114
  ngOnInit() {
102
115
  this.ecabsDatePickerHeaderService
103
116
  .getConfig()
104
- .pipe(takeUntil(this.unsubscribeService.subscription()))
117
+ .pipe(takeUntilDestroyed(this.destroyRef))
105
118
  .subscribe((config) => (this.translationConfig = config));
106
119
  if (this.holidayOptions?.countryCode) {
107
120
  this.holidayInstance = new Holidays(this.holidayOptions.countryCode.toUpperCase());
@@ -112,17 +125,15 @@ export class EcabsDateRangePickerComponentV2 extends EcabsElementBaseComponent {
112
125
  if (ngControl) {
113
126
  this.control = ngControl.control;
114
127
  this.control.valueChanges
115
- .pipe(takeUntil(this.unsubscribeService.subscription()))
128
+ .pipe(takeUntilDestroyed(this.destroyRef))
116
129
  .subscribe(() => this.dateRangeValidator(this.control));
117
130
  setTimeout(() => {
118
131
  this.dateFrom = this.value.dateFrom;
119
132
  this.dateTo = this.value.dateTo;
133
+ this.dateRangeValidator(this.control);
120
134
  });
121
135
  }
122
136
  }
123
- ngOnDestroy() {
124
- this.unsubscribeService.destroy();
125
- }
126
137
  onChange = () => { };
127
138
  onTouch = () => { };
128
139
  writeValue(value) {
@@ -181,38 +192,37 @@ export class EcabsDateRangePickerComponentV2 extends EcabsElementBaseComponent {
181
192
  }
182
193
  dateRangeValidator(control) {
183
194
  const required = control?.hasValidator(Validators.required);
184
- if (control.value) {
185
- const { dateFrom, dateTo } = control.value;
186
- control.setErrors(null);
187
- if (required &&
188
- (!dateFrom || dateFrom?.length === 0) &&
189
- (!dateTo || dateTo?.length === 0)) {
195
+ if (!control.value) {
196
+ if (required) {
190
197
  control.setErrors({ required: true });
191
- return;
192
- }
193
- if (!dateFrom && dateTo) {
194
- control.setErrors({ dateFromRangeRequired: true });
195
- return;
196
- }
197
- if (dateFrom && !dateTo) {
198
- control.setErrors({ dateToRangeRequired: true });
199
- return;
200
- }
201
- if (new Date(dateFrom) > new Date(dateTo)) {
202
- control.setErrors({ dateFromMoreThanDateTo: true });
203
- return;
204
198
  }
199
+ return;
200
+ }
201
+ const { dateFrom, dateTo } = control.value;
202
+ control.setErrors(null);
203
+ if (required &&
204
+ (!dateFrom || dateFrom?.length === 0) &&
205
+ (!dateTo || dateTo?.length === 0)) {
206
+ control.setErrors({ required: true });
207
+ }
208
+ else if (!dateFrom && dateTo) {
209
+ control.setErrors({ rangeFrom: true });
210
+ }
211
+ else if (dateFrom && !dateTo && !this.dateToOptional) {
212
+ control.setErrors({ rangeTo: true });
213
+ }
214
+ else if (dateFrom && dateTo && new Date(dateFrom) > new Date(dateTo)) {
215
+ control.setErrors({ rangeOrder: true });
205
216
  }
206
217
  }
207
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsDateRangePickerComponentV2, deps: [{ token: i0.Injector }, { token: i1.EcabsDatePickerHeaderService }, { token: i2.UnsubscribeService }], target: i0.ɵɵFactoryTarget.Component });
208
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsDateRangePickerComponentV2, selector: "ecabs-date-range-picker-v2", inputs: { minDate: "minDate", maxDate: "maxDate", touchUi: "touchUi", cancelLabel: "cancelLabel", applyLabel: "applyLabel", startDatePlaceholder: "startDatePlaceholder", endDatePlaceholder: "endDatePlaceholder", separatorLabel: "separatorLabel", excludeHolidays: "excludeHolidays", excludeWeekends: "excludeWeekends", specificDates: "specificDates", holidayOptions: "holidayOptions" }, outputs: { onblur: "onblur" }, providers: [
218
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsDateRangePickerComponentV2, deps: [{ token: i0.Injector }, { token: i1.EcabsDatePickerHeaderService }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
219
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsDateRangePickerComponentV2, selector: "ecabs-date-range-picker-v2", inputs: { minDate: "minDate", maxDate: "maxDate", touchUi: "touchUi", cancelLabel: "cancelLabel", applyLabel: "applyLabel", startDatePlaceholder: "startDatePlaceholder", endDatePlaceholder: "endDatePlaceholder", separatorLabel: "separatorLabel", excludeHolidays: "excludeHolidays", excludeWeekends: "excludeWeekends", specificDates: "specificDates", holidayOptions: "holidayOptions", dateToOptional: "dateToOptional" }, outputs: { onblur: "onblur" }, providers: [
209
220
  {
210
221
  provide: NG_VALUE_ACCESSOR,
211
222
  useExisting: EcabsDateRangePickerComponentV2,
212
223
  multi: true,
213
224
  },
214
- UnsubscribeService,
215
- ], viewQueries: [{ propertyName: "pickerTo", first: true, predicate: ["pickerTo"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__range--wrapper\">\r\n <div class=\"form-field__range\">\r\n <input\r\n class=\"border-none w-full\"\r\n id=\"{{ name + 'dateFrom' }}\"\r\n [(ngModel)]=\"dateFrom\"\r\n [placeholder]=\"startDatePlaceholder ?? translationConfig?.startDatePlaceholder\"\r\n [disabled]=\"disabled\"\r\n [matDatepicker]=\"pickerFrom\"\r\n [min]=\"minDateFrom\"\r\n [max]=\"maxDateFrom\"\r\n [matDatepickerFilter]=\"filterDateRange\"\r\n ecabsMaskDate\r\n (blur)=\"onTouch()\"\r\n (click)=\"pickerFrom.open()\"\r\n />\r\n <mat-datepicker #pickerFrom\r\n [panelClass]=\"panelClass\"\r\n [calendarHeaderComponent]=\"header\"\r\n [touchUi]=\"touchUi\">\r\n </mat-datepicker>\r\n </div>\r\n\r\n <span class=\"text-gray-400 px-3 text-sm\">{{ separatorLabel }}</span>\r\n <div class=\"form-field__range\">\r\n <input\r\n class=\"border-none w-full\"\r\n id=\"{{ name + 'dateTo' }}\"\r\n [(ngModel)]=\"dateTo\"\r\n [placeholder]=\"endDatePlaceholder ?? translationConfig?.endDatePlaceholder\"\r\n [disabled]=\"disabled\"\r\n [matDatepicker]=\"pickerTo\"\r\n [min]=\"minDateTo\"\r\n [max]=\"maxDateTo\"\r\n [matDatepickerFilter]=\"filterDateRange\"\r\n ecabsMaskDate\r\n (blur)=\"onTouch()\"\r\n (click)=\"pickerTo.open()\"\r\n />\r\n <mat-datepicker #pickerTo\r\n [panelClass]=\"panelClass\"\r\n [calendarHeaderComponent]=\"header\"\r\n [touchUi]=\"touchUi\">\r\n </mat-datepicker>\r\n </div>\r\n </div>\r\n</ecabs-element-wrapper>\r\n", styles: [""], dependencies: [{ kind: "component", type: i3.EcabsElementWrapperComponent, selector: "ecabs-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "component", type: i4.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i4.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.EcabsMaskDateDirective, selector: "[ecabsMaskDate]", inputs: ["isDateTimeMask", "considerSeconds"] }] });
225
+ ], viewQueries: [{ propertyName: "pickerTo", first: true, predicate: ["pickerTo"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__range--wrapper\">\r\n <div class=\"form-field__range\">\r\n <input\r\n class=\"border-none w-full\"\r\n id=\"{{ name + 'dateFrom' }}\"\r\n [(ngModel)]=\"dateFrom\"\r\n [placeholder]=\"startDatePlaceholder ?? translationConfig?.startDatePlaceholder\"\r\n [disabled]=\"disabled\"\r\n [matDatepicker]=\"pickerFrom\"\r\n [min]=\"minDateFrom\"\r\n [max]=\"maxDateFrom\"\r\n [matDatepickerFilter]=\"filterDateRange\"\r\n ecabsMaskDate\r\n (blur)=\"onTouch()\"\r\n (click)=\"pickerFrom.open()\"\r\n />\r\n <mat-datepicker #pickerFrom\r\n [panelClass]=\"panelClass\"\r\n [calendarHeaderComponent]=\"header\"\r\n [touchUi]=\"touchUi\">\r\n </mat-datepicker>\r\n </div>\r\n\r\n <span class=\"text-gray-400 px-3 text-sm\">{{ separatorLabel }}</span>\r\n <div class=\"form-field__range\">\r\n <input\r\n class=\"border-none w-full\"\r\n id=\"{{ name + 'dateTo' }}\"\r\n [(ngModel)]=\"dateTo\"\r\n [placeholder]=\"endDatePlaceholder ?? translationConfig?.endDatePlaceholder\"\r\n [disabled]=\"disabled\"\r\n [matDatepicker]=\"pickerTo\"\r\n [min]=\"minDateTo\"\r\n [max]=\"maxDateTo\"\r\n [matDatepickerFilter]=\"filterDateRange\"\r\n ecabsMaskDate\r\n (blur)=\"onTouch()\"\r\n (click)=\"pickerTo.open()\"\r\n />\r\n <mat-datepicker #pickerTo\r\n [panelClass]=\"panelClass\"\r\n [calendarHeaderComponent]=\"header\"\r\n [touchUi]=\"touchUi\">\r\n </mat-datepicker>\r\n </div>\r\n </div>\r\n</ecabs-element-wrapper>\r\n", styles: [""], dependencies: [{ kind: "component", type: i2.EcabsElementWrapperComponent, selector: "ecabs-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "component", type: i3.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i3.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.EcabsMaskDateDirective, selector: "[ecabsMaskDate]", inputs: ["isDateTimeMask", "considerSeconds"] }] });
216
226
  }
217
227
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsDateRangePickerComponentV2, decorators: [{
218
228
  type: Component,
@@ -222,9 +232,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
222
232
  useExisting: EcabsDateRangePickerComponentV2,
223
233
  multi: true,
224
234
  },
225
- UnsubscribeService,
226
235
  ], template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__range--wrapper\">\r\n <div class=\"form-field__range\">\r\n <input\r\n class=\"border-none w-full\"\r\n id=\"{{ name + 'dateFrom' }}\"\r\n [(ngModel)]=\"dateFrom\"\r\n [placeholder]=\"startDatePlaceholder ?? translationConfig?.startDatePlaceholder\"\r\n [disabled]=\"disabled\"\r\n [matDatepicker]=\"pickerFrom\"\r\n [min]=\"minDateFrom\"\r\n [max]=\"maxDateFrom\"\r\n [matDatepickerFilter]=\"filterDateRange\"\r\n ecabsMaskDate\r\n (blur)=\"onTouch()\"\r\n (click)=\"pickerFrom.open()\"\r\n />\r\n <mat-datepicker #pickerFrom\r\n [panelClass]=\"panelClass\"\r\n [calendarHeaderComponent]=\"header\"\r\n [touchUi]=\"touchUi\">\r\n </mat-datepicker>\r\n </div>\r\n\r\n <span class=\"text-gray-400 px-3 text-sm\">{{ separatorLabel }}</span>\r\n <div class=\"form-field__range\">\r\n <input\r\n class=\"border-none w-full\"\r\n id=\"{{ name + 'dateTo' }}\"\r\n [(ngModel)]=\"dateTo\"\r\n [placeholder]=\"endDatePlaceholder ?? translationConfig?.endDatePlaceholder\"\r\n [disabled]=\"disabled\"\r\n [matDatepicker]=\"pickerTo\"\r\n [min]=\"minDateTo\"\r\n [max]=\"maxDateTo\"\r\n [matDatepickerFilter]=\"filterDateRange\"\r\n ecabsMaskDate\r\n (blur)=\"onTouch()\"\r\n (click)=\"pickerTo.open()\"\r\n />\r\n <mat-datepicker #pickerTo\r\n [panelClass]=\"panelClass\"\r\n [calendarHeaderComponent]=\"header\"\r\n [touchUi]=\"touchUi\">\r\n </mat-datepicker>\r\n </div>\r\n </div>\r\n</ecabs-element-wrapper>\r\n" }]
227
- }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.EcabsDatePickerHeaderService }, { type: i2.UnsubscribeService }]; }, propDecorators: { minDate: [{
236
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.EcabsDatePickerHeaderService }, { type: i0.DestroyRef }]; }, propDecorators: { minDate: [{
228
237
  type: Input
229
238
  }], maxDate: [{
230
239
  type: Input
@@ -248,10 +257,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
248
257
  type: Input
249
258
  }], holidayOptions: [{
250
259
  type: Input
260
+ }], dateToOptional: [{
261
+ type: Input
251
262
  }], onblur: [{
252
263
  type: Output
253
264
  }], pickerTo: [{
254
265
  type: ViewChild,
255
266
  args: ['pickerTo']
256
267
  }] } });
257
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtZGF0ZS1yYW5nZS1waWNrZXItdjIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWNhYnMtY29tcG9uZW50cy9zcmMvbGliL2VjYWJzLWRhdGUtcmFuZ2UtcGlja2VyLXYyL2VjYWJzLWRhdGUtcmFuZ2UtcGlja2VyLXYyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1kYXRlLXJhbmdlLXBpY2tlci12Mi9lY2Ficy1kYXRlLXJhbmdlLXBpY2tlci12Mi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFFWixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEQsT0FBTyxRQUFRLE1BQU0sZUFBZSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLElBQUksYUFBYSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRWxELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFakMsT0FBTyx5QkFBeUIsTUFBTSxzQkFBc0IsQ0FBQztBQU03RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSx5RkFBeUYsQ0FBQzs7Ozs7Ozs7QUFlaEosTUFBTSxPQUFPLCtCQUNYLFNBQVEseUJBQXlCO0lBdUZkO0lBQ0E7SUFDQTtJQXRGVixPQUFPLENBQU87SUFDZCxPQUFPLENBQU87SUFDZCxP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QUFPO2FBQ1I7WUFFRCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN6QyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFFcEQsT0FBTzthQUNSO1NBQ0Y7SUFDSCxDQUFDO3dHQTVQVSwrQkFBK0I7NEZBQS9CLCtCQUErQixzZEFUL0I7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsK0JBQStCO2dCQUM1QyxLQUFLLEVBQUUsSUFBSTthQUNaO1lBQ0Qsa0JBQWtCO1NBQ25CLDRLQy9DSCx3eURBZ0RBOzs0RkRDYSwrQkFBK0I7a0JBYjNDLFNBQVM7K0JBQ0UsNEJBQTRCLGFBRzNCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsaUNBQWlDOzRCQUM1QyxLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRCxrQkFBa0I7cUJBQ25COzJLQU1RLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFFSSxNQUFNO3NCQUFmLE1BQU07Z0JBTWdCLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdG9yLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcclxuICBOR19WQUxVRV9BQ0NFU1NPUixcclxuICBOZ0NvbnRyb2wsXHJcbiAgVW50eXBlZEZvcm1Db250cm9sLFxyXG4gIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXREYXRlUmFuZ2VQaWNrZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcclxuaW1wb3J0IHsgZm9ybWF0LCBpc0VxdWFsLCBpc1ZhbGlkIH0gZnJvbSAnZGF0ZS1mbnMnO1xyXG5pbXBvcnQgSG9saWRheXMgZnJvbSAnZGF0ZS1ob2xpZGF5cyc7XHJcbmltcG9ydCB7IGlzRXF1YWwgYXMgbG9kYXNoSXNFcXVhbCB9IGZyb20gJ2xvZGFzaCc7XHJcblxyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCBFY2Fic0VsZW1lbnRCYXNlQ29tcG9uZW50IGZyb20gJy4uL2Jhc2UvZWxlbWVudC1iYXNlJztcclxuaW1wb3J0IHtcclxuICBFY2Fic0RhdGVQaWNrZXJIb2xpZGF5T3B0aW9ucyxcclxuICBFY2Fic0RhdGVQaWNrZXJUcmFuc2xhdGlvbnMsXHJcbn0gZnJvbSAnLi4vYmFzZS9tb2RlbHMvZWNhYnMtZGF0ZS1waWNrZXItdHJhbnNsYXRpb25zLm1vZGVscyc7XHJcbmltcG9ydCB7IEVjYWJzRGF0ZVBpY2tlckhlYWRlclNlcnZpY2UgfSBmcm9tICcuLi9iYXNlL3NlcnZpY2VzL2VjYWJzLWRhdGUtcGlja2VyLXRyYW5zbGF0aW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVW5zdWJzY3JpYmVTZXJ2aWNlIH0gZnJvbSAnLi4vYmFzZS9zZXJ2aWNlcy91bnN1YnNjcmliZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRWNhYnNEYXRlUmFuZ2VQaWNrZXJIZWFkZXJDb21wb25lbnRWMiB9IGZyb20gJy4vY29tcG9uZW50cy9lY2Ficy1kYXRlLXJhbmdlLXBpY2tlci1oZWFkZXIvZWNhYnMtZGF0ZS1yYW5nZS1waWNrZXItaGVhZGVyLXYyLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VjYWJzLWRhdGUtcmFuZ2UtcGlja2VyLXYyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZWNhYnMtZGF0ZS1yYW5nZS1waWNrZXItdjIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VjYWJzLWRhdGUtcmFuZ2UtcGlja2VyLXYyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogRWNhYnNEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnRWMixcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gICAgVW5zdWJzY3JpYmVTZXJ2aWNlLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFY2Fic0RhdGVSYW5nZVBpY2tlckNvbXBvbmVudFYyXHJcbiAgZXh0ZW5kcyBFY2Fic0VsZW1lbnRCYXNlQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveVxyXG57XHJcbiAgQElucHV0KCkgbWluRGF0ZTogRGF0ZTtcclxuICBASW5wdXQoKSBtYXhEYXRlOiBEYXRlO1xyXG4gIEBJbnB1dCgpIHRvdWNoVWkgPSBmYWxzZTtcclxuICBASW5wdXQoKSBjYW5jZWxMYWJlbDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGFwcGx5TGFiZWw6IHN0cmluZztcclxuICBASW5wdXQoKSBzdGFydERhdGVQbGFjZWhvbGRlcjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGVuZERhdGVQbGFjZWhvbGRlcjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNlcGFyYXRvckxhYmVsID0gJ3RvJztcclxuICBASW5wdXQoKSBleGNsdWRlSG9saWRheXM6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgZXhjbHVkZVdlZWtlbmRzOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHNwZWNpZmljRGF0ZXM6IERhdGVbXTtcclxuICBASW5wdXQoKSBob2xpZGF5T3B0aW9uczogRWNhYnNEYXRlUGlja2VySG9saWRheU9wdGlvbnM7XHJcblxyXG4gIEBPdXRwdXQoKSBvbmJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICB2YWw6IHtcclxuICAgIGRhdGVGcm9tOiBzdHJpbmc7XHJcbiAgICBkYXRlVG86IHN0cmluZztcclxuICB9O1xyXG5cclxuICBAVmlld0NoaWxkKCdwaWNrZXJUbycpIHBpY2tlclRvOiBNYXREYXRlUmFuZ2VQaWNrZXI8YW55PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgaGVhZGVyID0gRWNhYnNEYXRlUmFuZ2VQaWNrZXJIZWFkZXJDb21wb25lbnRWMjtcclxuICBfZGF0ZUZyb206IHN0cmluZztcclxuICBfZGF0ZVRvOiBzdHJpbmc7XHJcbiAgdHJhbnNsYXRpb25Db25maWc6IEVjYWJzRGF0ZVBpY2tlclRyYW5zbGF0aW9ucztcclxuICBtaW5EYXRlRnJvbT86IERhdGUgPSB1bmRlZmluZWQ7XHJcbiAgbWF4RGF0ZUZyb20/OiBEYXRlID0gdW5kZWZpbmVkO1xyXG4gIG1pbkRhdGVUbz86IERhdGUgPSB1bmRlZmluZWQ7XHJcbiAgbWF4RGF0ZVRvPzogRGF0ZSA9IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBhbmVsQ2xhc3MgPSAnZWNhYnMtZGF0ZS1yYW5nZS1waWNrZXItdjInO1xyXG5cclxuICBwcml2YXRlIGhvbGlkYXlJbnN0YW5jZTogSG9saWRheXM7XHJcblxyXG4gIGdldCB2YWx1ZSgpOiB7XHJcbiAgICBkYXRlRnJvbTogc3RyaW5nO1xyXG4gICAgZGF0ZVRvOiBzdHJpbmc7XHJcbiAgfSB7XHJcbiAgICByZXR1cm4gdGhpcy52YWw7XHJcbiAgfVxyXG5cclxuICBnZXQgZGF0ZUZyb20oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRlRnJvbTtcclxuICB9XHJcblxyXG4gIGdldCBkYXRlVG8oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRlVG87XHJcbiAgfVxyXG5cclxuICAvL2VzbGludC1kaXNhYmxlLW5leHQtbGluZVxyXG4gIHNldCB2YWx1ZSh2YWw6IHsgZGF0ZUZyb206IHN0cmluZzsgZGF0ZVRvOiBzdHJpbmcgfSkge1xyXG4gICAgaWYgKHRoaXMudmFsICE9PSB2YWwpIHtcclxuICAgICAgdGhpcy52YWwgPSB2YWw7XHJcbiAgICAgIHRoaXMuZGF0ZUZyb20gPSB2YWwuZGF0ZUZyb207XHJcbiAgICAgIHRoaXMuZGF0ZVRvID0gdmFsLmRhdGVUbztcclxuICAgICAgdGhpcy5vbkNoYW5nZSh2YWwpO1xyXG4gICAgICB0aGlzLm9uVG91Y2godmFsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXHJcbiAgc2V0IGRhdGVGcm9tKHZhbDogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5fZGF0ZUZyb20gIT09IHZhbCAmJiBpc1ZhbGlkKG5ldyBEYXRlKHZhbCkpKSB7XHJcbiAgICAgIHRoaXMuX2RhdGVGcm9tID0gdmFsO1xyXG4gICAgICB0aGlzLm1pbkRhdGVUbyA9IG5ldyBEYXRlKHZhbCk7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuZGF0ZVRvKSB7XHJcbiAgICAgICAgdGhpcy5waWNrZXJUbz8ub3BlbigpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLm9uQXBwbHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXHJcbiAgc2V0IGRhdGVUbyh2YWw6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuX2RhdGVUbyAhPT0gdmFsICYmIGlzVmFsaWQobmV3IERhdGUodmFsKSkpIHtcclxuICAgICAgdGhpcy5fZGF0ZVRvID0gdmFsO1xyXG4gICAgICB0aGlzLm1heERhdGVGcm9tID0gbmV3IERhdGUodmFsKTtcclxuICAgICAgdGhpcy5vbkFwcGx5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBlY2Fic0RhdGVQaWNrZXJIZWFkZXJTZXJ2aWNlOiBFY2Fic0RhdGVQaWNrZXJIZWFkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB1bnN1YnNjcmliZVNlcnZpY2U6IFVuc3Vic2NyaWJlU2VydmljZSxcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBjb25zdCB7IG1pbkRhdGUsIG1heERhdGUgfSA9IGNoYW5nZXM7XHJcblxyXG4gICAgaWYgKG1pbkRhdGU/LmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICB0aGlzLm1pbkRhdGVGcm9tID0gbWluRGF0ZT8uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLm1pbkRhdGVUbyA9IG1pbkRhdGU/LmN1cnJlbnRWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobWF4RGF0ZT8uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIHRoaXMubWF4RGF0ZUZyb20gPSBtYXhEYXRlPy5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHRoaXMubWF4RGF0ZVRvID0gbWF4RGF0ZT8uY3VycmVudFZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVjYWJzRGF0ZVBpY2tlckhlYWRlclNlcnZpY2VcclxuICAgICAgLmdldENvbmZpZygpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlU2VydmljZS5zdWJzY3JpcHRpb24oKSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGNvbmZpZykgPT4gKHRoaXMudHJhbnNsYXRpb25Db25maWcgPSBjb25maWcpKTtcclxuXHJcbiAgICBpZiAodGhpcy5ob2xpZGF5T3B0aW9ucz8uY291bnRyeUNvZGUpIHtcclxuICAgICAgdGhpcy5ob2xpZGF5SW5zdGFuY2UgPSBuZXcgSG9saWRheXMoXHJcbiAgICAgICAgdGhpcy5ob2xpZGF5T3B0aW9ucy5jb3VudHJ5Q29kZS50b1VwcGVyQ2FzZSgpLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgbmdDb250cm9sOiBOZ0NvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wsIG51bGwpO1xyXG4gICAgaWYgKG5nQ29udHJvbCkge1xyXG4gICAgICB0aGlzLmNvbnRyb2wgPSBuZ0NvbnRyb2wuY29udHJvbCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgICAgIHRoaXMuY29udHJvbC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZVNlcnZpY2Uuc3Vic2NyaXB0aW9uKCkpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kYXRlUmFuZ2VWYWxpZGF0b3IodGhpcy5jb250cm9sKSk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGF0ZUZyb20gPSB0aGlzLnZhbHVlLmRhdGVGcm9tO1xyXG4gICAgICAgIHRoaXMuZGF0ZVRvID0gdGhpcy52YWx1ZS5kYXRlVG87XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlU2VydmljZS5kZXN0cm95KCk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XHJcbiAgb25Ub3VjaDogYW55ID0gKCkgPT4ge307XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2ggPSBmbjtcclxuICB9XHJcblxyXG4gIGJsdXJDaGFuZ2UoZSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbmJsdXIuZW1pdChlKTtcclxuICB9XHJcblxyXG4gIG9uQXBwbHkoKTogdm9pZCB7XHJcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHtcclxuICAgICAgZGF0ZUZyb206IHRoaXMuZGF0ZUZyb20sXHJcbiAgICAgIGRhdGVUbzogdGhpcy5kYXRlVG8sXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICghbG9kYXNoSXNFcXVhbCh0aGlzLnZhbHVlLCBuZXdWYWx1ZSkpIHtcclxuICAgICAgdGhpcy52YWwgPSBuZXdWYWx1ZTtcclxuICAgICAgdGhpcy5vbkNoYW5nZShuZXdWYWx1ZSk7XHJcbiAgICAgIHRoaXMub25Ub3VjaChuZXdWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy52YWx1ZSA9IHtcclxuICAgICAgZGF0ZUZyb206IHRoaXMuZGF0ZUZyb20sXHJcbiAgICAgIGRhdGVUbzogdGhpcy5kYXRlVG8sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyRGF0ZVJhbmdlID0gKGRhdGU6IERhdGUpOiBib29sZWFuID0+IHtcclxuICAgIGxldCByZXN1bHQgPSB0cnVlO1xyXG5cclxuICAgIGlmIChpc1ZhbGlkKG5ldyBEYXRlKGRhdGUpKSkge1xyXG4gICAgICBjb25zdCBkYXkgPSBkYXRlPy5nZXREYXkoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmV4Y2x1ZGVXZWVrZW5kcykge1xyXG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBkYXkgIT09IDAgJiYgZGF5ICE9PSA2O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5leGNsdWRlSG9saWRheXMpIHtcclxuICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgdGhpcy5pc0RhdGVOb3RIb2xpZGF5KGRhdGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5zcGVjaWZpY0RhdGVzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3Qgc3BlY2lmaWNEYXRlcyA9IHRoaXMuc3BlY2lmaWNEYXRlcztcclxuICAgICAgICBpZiAoc3BlY2lmaWNEYXRlcyAmJiBzcGVjaWZpY0RhdGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gc3BlY2lmaWNEYXRlcy5maW5kSW5kZXgoKHNwZWNpZmljRGF0ZSkgPT5cclxuICAgICAgICAgICAgaXNFcXVhbChkYXRlLCBzcGVjaWZpY0RhdGUpLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBpbmRleCA9PT0gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9O1xyXG5cclxuICBpc0RhdGVOb3RIb2xpZGF5KGRhdGU6IERhdGUpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHsgY291bnRyeUNvZGUsIHRpbWVab25lT2Zmc2V0IH0gPSB0aGlzLmhvbGlkYXlPcHRpb25zID8/IHt9O1xyXG5cclxuICAgIGlmIChjb3VudHJ5Q29kZSAmJiB0aW1lWm9uZU9mZnNldCkge1xyXG4gICAgICByZXR1cm4gIXRoaXMuaG9saWRheUluc3RhbmNlPy5pc0hvbGlkYXkoXHJcbiAgICAgICAgYCR7Zm9ybWF0KGRhdGUsICd5eXl5LU1NLWRkJyl9VDAwOjAwOjAwJHt0aW1lWm9uZU9mZnNldH1gLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZGF0ZVJhbmdlVmFsaWRhdG9yKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCkge1xyXG4gICAgY29uc3QgcmVxdWlyZWQgPSBjb250cm9sPy5oYXNWYWxpZGF0b3IoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcblxyXG4gICAgaWYgKGNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgY29uc3QgeyBkYXRlRnJvbSwgZGF0ZVRvIH0gPSBjb250cm9sLnZhbHVlO1xyXG4gICAgICBjb250cm9sLnNldEVycm9ycyhudWxsKTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICByZXF1aXJlZCAmJlxyXG4gICAgICAgICghZGF0ZUZyb20gfHwgZGF0ZUZyb20/Lmxlbmd0aCA9PT0gMCkgJiZcclxuICAgICAgICAoIWRhdGVUbyB8fCBkYXRlVG8/Lmxlbmd0aCA9PT0gMClcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoeyByZXF1aXJlZDogdHJ1ZSB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWRhdGVGcm9tICYmIGRhdGVUbykge1xyXG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgZGF0ZUZyb21SYW5nZVJlcXVpcmVkOiB0cnVlIH0pO1xyXG5cclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChkYXRlRnJvbSAmJiAhZGF0ZVRvKSB7XHJcbiAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoeyBkYXRlVG9SYW5nZVJlcXVpcmVkOiB0cnVlIH0pO1xyXG5cclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChuZXcgRGF0ZShkYXRlRnJvbSkgPiBuZXcgRGF0ZShkYXRlVG8pKSB7XHJcbiAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoeyBkYXRlRnJvbU1vcmVUaGFuRGF0ZVRvOiB0cnVlIH0pO1xyXG5cclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGVjYWJzLWVsZW1lbnQtd3JhcHBlciBbZGF0YV09XCJnZXREYXRhKClcIj5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZF9fcmFuZ2UtLXdyYXBwZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkX19yYW5nZVwiPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICBjbGFzcz1cImJvcmRlci1ub25lIHctZnVsbFwiXHJcbiAgICAgICAgaWQ9XCJ7eyBuYW1lICsgJ2RhdGVGcm9tJyB9fVwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJkYXRlRnJvbVwiXHJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInN0YXJ0RGF0ZVBsYWNlaG9sZGVyID8/IHRyYW5zbGF0aW9uQ29uZmlnPy5zdGFydERhdGVQbGFjZWhvbGRlclwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJGcm9tXCJcclxuICAgICAgICBbbWluXT1cIm1pbkRhdGVGcm9tXCJcclxuICAgICAgICBbbWF4XT1cIm1heERhdGVGcm9tXCJcclxuICAgICAgICBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJmaWx0ZXJEYXRlUmFuZ2VcIlxyXG4gICAgICAgIGVjYWJzTWFza0RhdGVcclxuICAgICAgICAoYmx1cik9XCJvblRvdWNoKClcIlxyXG4gICAgICAgIChjbGljayk9XCJwaWNrZXJGcm9tLm9wZW4oKVwiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyRnJvbVxyXG4gICAgICAgICAgICAgICAgICAgICAgW3BhbmVsQ2xhc3NdPVwicGFuZWxDbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2FsZW5kYXJIZWFkZXJDb21wb25lbnRdPVwiaGVhZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFt0b3VjaFVpXT1cInRvdWNoVWlcIj5cclxuICAgICAgPC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ncmF5LTQwMCBweC0zIHRleHQtc21cIj57eyBzZXBhcmF0b3JMYWJlbCB9fTwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkX19yYW5nZVwiPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICBjbGFzcz1cImJvcmRlci1ub25lIHctZnVsbFwiXHJcbiAgICAgICAgaWQ9XCJ7eyBuYW1lICsgJ2RhdGVUbycgfX1cIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwiZGF0ZVRvXCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZW5kRGF0ZVBsYWNlaG9sZGVyID8/IHRyYW5zbGF0aW9uQ29uZmlnPy5lbmREYXRlUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgW21hdERhdGVwaWNrZXJdPVwicGlja2VyVG9cIlxyXG4gICAgICAgIFttaW5dPVwibWluRGF0ZVRvXCJcclxuICAgICAgICBbbWF4XT1cIm1heERhdGVUb1wiXHJcbiAgICAgICAgW21hdERhdGVwaWNrZXJGaWx0ZXJdPVwiZmlsdGVyRGF0ZVJhbmdlXCJcclxuICAgICAgICBlY2Fic01hc2tEYXRlXHJcbiAgICAgICAgKGJsdXIpPVwib25Ub3VjaCgpXCJcclxuICAgICAgICAoY2xpY2spPVwicGlja2VyVG8ub3BlbigpXCJcclxuICAgICAgLz5cclxuICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXJUb1xyXG4gICAgICAgICAgICAgICAgICAgICAgW3BhbmVsQ2xhc3NdPVwicGFuZWxDbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2FsZW5kYXJIZWFkZXJDb21wb25lbnRdPVwiaGVhZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFt0b3VjaFVpXT1cInRvdWNoVWlcIj5cclxuICAgICAgPC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2VjYWJzLWVsZW1lbnQtd3JhcHBlcj5cclxuIl19
268
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtZGF0ZS1yYW5nZS1waWNrZXItdjIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWNhYnMtY29tcG9uZW50cy9zcmMvbGliL2VjYWJzLWRhdGUtcmFuZ2UtcGlja2VyLXYyL2VjYWJzLWRhdGUtcmFuZ2UtcGlja2VyLXYyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1kYXRlLXJhbmdlLXBpY2tlci12Mi9lY2Ficy1kYXRlLXJhbmdlLXBpY2tlci12Mi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFFWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEQsT0FBTyxRQUFRLE1BQU0sZUFBZSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLElBQUksYUFBYSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRWxELE9BQU8seUJBQXlCLE1BQU0sc0JBQXNCLENBQUM7QUFNN0QsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0seUZBQXlGLENBQUM7QUFDaEosT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7QUFjaEUsTUFBTSxPQUFPLCtCQUNYLFNBQVEseUJBQXlCO0lBdUdkO0lBQ0E7SUFDQTtJQXRHVixPQUFPLENBQU87SUFDZCxPQUFPLENBQU87SUFDZCxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLFdBQVcsQ0FBUztJQUNwQixV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QUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUksTUFBTTtzQkFBZixNQUFNO2dCQU1nQixRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIERlc3Ryb3lSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdG9yLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxyXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gIE5nQ29udHJvbCxcclxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdERhdGVSYW5nZVBpY2tlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xyXG5pbXBvcnQgeyBmb3JtYXQsIGlzRXF1YWwsIGlzVmFsaWQgfSBmcm9tICdkYXRlLWZucyc7XHJcbmltcG9ydCBIb2xpZGF5cyBmcm9tICdkYXRlLWhvbGlkYXlzJztcclxuaW1wb3J0IHsgaXNFcXVhbCBhcyBsb2Rhc2hJc0VxdWFsIH0gZnJvbSAnbG9kYXNoJztcclxuXHJcbmltcG9ydCBFY2Fic0VsZW1lbnRCYXNlQ29tcG9uZW50IGZyb20gJy4uL2Jhc2UvZWxlbWVudC1iYXNlJztcclxuaW1wb3J0IHtcclxuICBFY2Fic0RhdGVQaWNrZXJIb2xpZGF5T3B0aW9ucyxcclxuICBFY2Fic0RhdGVQaWNrZXJUcmFuc2xhdGlvbnMsXHJcbn0gZnJvbSAnLi4vYmFzZS9tb2RlbHMvZWNhYnMtZGF0ZS1waWNrZXItdHJhbnNsYXRpb25zLm1vZGVscyc7XHJcbmltcG9ydCB7IEVjYWJzRGF0ZVBpY2tlckhlYWRlclNlcnZpY2UgfSBmcm9tICcuLi9iYXNlL3NlcnZpY2VzL2VjYWJzLWRhdGUtcGlja2VyLXRyYW5zbGF0aW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRWNhYnNEYXRlUmFuZ2VQaWNrZXJIZWFkZXJDb21wb25lbnRWMiB9IGZyb20gJy4vY29tcG9uZW50cy9lY2Ficy1kYXRlLXJhbmdlLXBpY2tlci1oZWFkZXIvZWNhYnMtZGF0ZS1yYW5nZS1waWNrZXItaGVhZGVyLXYyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWNhYnMtZGF0ZS1yYW5nZS1waWNrZXItdjInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lY2Ficy1kYXRlLXJhbmdlLXBpY2tlci12Mi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZWNhYnMtZGF0ZS1yYW5nZS1waWNrZXItdjIuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBFY2Fic0RhdGVSYW5nZVBpY2tlckNvbXBvbmVudFYyLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEVjYWJzRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50VjJcclxuICBleHRlbmRzIEVjYWJzRWxlbWVudEJhc2VDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uQ2hhbmdlc1xyXG57XHJcbiAgQElucHV0KCkgbWluRGF0ZTogRGF0ZTtcclxuICBASW5wdXQoKSBtYXhEYXRlOiBEYXRlO1xyXG4gIEBJbnB1dCgpIHRvdWNoVWkgPSBmYWxzZTtcclxuICBASW5wdXQoKSBjYW5jZWxMYWJlbDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGFwcGx5TGFiZWw6IHN0cmluZztcclxuICBASW5wdXQoKSBzdGFydERhdGVQbGFjZWhvbGRlcjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGVuZERhdGVQbGFjZWhvbGRlcjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNlcGFyYXRvckxhYmVsID0gJ3RvJztcclxuICBASW5wdXQoKSBleGNsdWRlSG9saWRheXM6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgZXhjbHVkZVdlZWtlbmRzOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHNwZWNpZmljRGF0ZXM6IERhdGVbXTtcclxuICBASW5wdXQoKSBob2xpZGF5T3B0aW9uczogRWNhYnNEYXRlUGlja2VySG9saWRheU9wdGlvbnM7XHJcbiAgQElucHV0KCkgZGF0ZVRvT3B0aW9uYWwgPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIG9uYmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIHZhbDoge1xyXG4gICAgZGF0ZUZyb206IHN0cmluZztcclxuICAgIGRhdGVUbzogc3RyaW5nO1xyXG4gIH07XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3BpY2tlclRvJykgcGlja2VyVG86IE1hdERhdGVSYW5nZVBpY2tlcjxhbnk+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBoZWFkZXIgPSBFY2Fic0RhdGVSYW5nZVBpY2tlckhlYWRlckNvbXBvbmVudFYyO1xyXG4gIF9kYXRlRnJvbTogc3RyaW5nO1xyXG4gIF9kYXRlVG86IHN0cmluZztcclxuICB0cmFuc2xhdGlvbkNvbmZpZzogRWNhYnNEYXRlUGlja2VyVHJhbnNsYXRpb25zO1xyXG4gIG1pbkRhdGVGcm9tPzogRGF0ZSA9IHVuZGVmaW5lZDtcclxuICBtYXhEYXRlRnJvbT86IERhdGUgPSB1bmRlZmluZWQ7XHJcbiAgbWluRGF0ZVRvPzogRGF0ZSA9IHVuZGVmaW5lZDtcclxuICBtYXhEYXRlVG8/OiBEYXRlID0gdW5kZWZpbmVkO1xyXG5cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGFuZWxDbGFzcyA9ICdlY2Ficy1kYXRlLXJhbmdlLXBpY2tlci12Mic7XHJcblxyXG4gIHByaXZhdGUgaG9saWRheUluc3RhbmNlOiBIb2xpZGF5cztcclxuXHJcbiAgZ2V0IHZhbHVlKCk6IHtcclxuICAgIGRhdGVGcm9tOiBzdHJpbmc7XHJcbiAgICBkYXRlVG86IHN0cmluZztcclxuICB9IHtcclxuICAgIHJldHVybiB0aGlzLnZhbDtcclxuICB9XHJcblxyXG4gIGdldCBkYXRlRnJvbSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGVGcm9tO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRhdGVUbygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGVUbztcclxuICB9XHJcblxyXG4gIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXHJcbiAgc2V0IHZhbHVlKHZhbDogeyBkYXRlRnJvbTogc3RyaW5nOyBkYXRlVG86IHN0cmluZyB9KSB7XHJcbiAgICBpZiAodGhpcy52YWwgIT09IHZhbCkge1xyXG4gICAgICB0aGlzLnZhbCA9IHZhbDtcclxuICAgICAgdGhpcy5kYXRlRnJvbSA9IHZhbC5kYXRlRnJvbTtcclxuICAgICAgdGhpcy5kYXRlVG8gPSB2YWwuZGF0ZVRvO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKHZhbCk7XHJcbiAgICAgIHRoaXMub25Ub3VjaCh2YWwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcclxuICBzZXQgZGF0ZUZyb20odmFsOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLl9kYXRlRnJvbSA9PT0gdmFsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFsICYmIGlzVmFsaWQobmV3IERhdGUodmFsKSkpIHtcclxuICAgICAgdGhpcy5fZGF0ZUZyb20gPSB2YWw7XHJcbiAgICAgIHRoaXMubWluRGF0ZVRvID0gbmV3IERhdGUodmFsKTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5kYXRlVG8gJiYgIXRoaXMuZGF0ZVRvT3B0aW9uYWwpIHtcclxuICAgICAgICB0aGlzLnBpY2tlclRvPy5vcGVuKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoIXZhbCkge1xyXG4gICAgICB0aGlzLl9kYXRlRnJvbSA9IHZhbDtcclxuICAgICAgdGhpcy5taW5EYXRlVG8gPSB0aGlzLm1pbkRhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vbkFwcGx5KCk7XHJcbiAgfVxyXG5cclxuICAvL2VzbGludC1kaXNhYmxlLW5leHQtbGluZVxyXG4gIHNldCBkYXRlVG8odmFsOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLl9kYXRlVG8gPT09IHZhbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbCAmJiBpc1ZhbGlkKG5ldyBEYXRlKHZhbCkpKSB7XHJcbiAgICAgIHRoaXMuX2RhdGVUbyA9IHZhbDtcclxuICAgICAgdGhpcy5tYXhEYXRlRnJvbSA9IG5ldyBEYXRlKHZhbCk7XHJcbiAgICB9IGVsc2UgaWYgKCF2YWwpIHtcclxuICAgICAgdGhpcy5fZGF0ZVRvID0gdmFsO1xyXG4gICAgICB0aGlzLm1heERhdGVGcm9tID0gdGhpcy5tYXhEYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub25BcHBseSgpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvcixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWNhYnNEYXRlUGlja2VySGVhZGVyU2VydmljZTogRWNhYnNEYXRlUGlja2VySGVhZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZjogRGVzdHJveVJlZixcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBjb25zdCB7IG1pbkRhdGUsIG1heERhdGUgfSA9IGNoYW5nZXM7XHJcblxyXG4gICAgaWYgKG1pbkRhdGU/LmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICB0aGlzLm1pbkRhdGVGcm9tID0gbWluRGF0ZT8uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLm1pbkRhdGVUbyA9IG1pbkRhdGU/LmN1cnJlbnRWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobWF4RGF0ZT8uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIHRoaXMubWF4RGF0ZUZyb20gPSBtYXhEYXRlPy5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHRoaXMubWF4RGF0ZVRvID0gbWF4RGF0ZT8uY3VycmVudFZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVjYWJzRGF0ZVBpY2tlckhlYWRlclNlcnZpY2VcclxuICAgICAgLmdldENvbmZpZygpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxyXG4gICAgICAuc3Vic2NyaWJlKChjb25maWcpID0+ICh0aGlzLnRyYW5zbGF0aW9uQ29uZmlnID0gY29uZmlnKSk7XHJcblxyXG4gICAgaWYgKHRoaXMuaG9saWRheU9wdGlvbnM/LmNvdW50cnlDb2RlKSB7XHJcbiAgICAgIHRoaXMuaG9saWRheUluc3RhbmNlID0gbmV3IEhvbGlkYXlzKFxyXG4gICAgICAgIHRoaXMuaG9saWRheU9wdGlvbnMuY291bnRyeUNvZGUudG9VcHBlckNhc2UoKSxcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IG5nQ29udHJvbDogTmdDb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sLCBudWxsKTtcclxuICAgIGlmIChuZ0NvbnRyb2wpIHtcclxuICAgICAgdGhpcy5jb250cm9sID0gbmdDb250cm9sLmNvbnRyb2wgYXMgVW50eXBlZEZvcm1Db250cm9sO1xyXG4gICAgICB0aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmRhdGVSYW5nZVZhbGlkYXRvcih0aGlzLmNvbnRyb2wpKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRlRnJvbSA9IHRoaXMudmFsdWUuZGF0ZUZyb207XHJcbiAgICAgICAgdGhpcy5kYXRlVG8gPSB0aGlzLnZhbHVlLmRhdGVUbztcclxuICAgICAgICB0aGlzLmRhdGVSYW5nZVZhbGlkYXRvcih0aGlzLmNvbnRyb2wpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcclxuICBvblRvdWNoOiBhbnkgPSAoKSA9PiB7fTtcclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgYmx1ckNoYW5nZShlKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uYmx1ci5lbWl0KGUpO1xyXG4gIH1cclxuXHJcbiAgb25BcHBseSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IG5ld1ZhbHVlID0ge1xyXG4gICAgICBkYXRlRnJvbTogdGhpcy5kYXRlRnJvbSxcclxuICAgICAgZGF0ZVRvOiB0aGlzLmRhdGVUbyxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKCFsb2Rhc2hJc0VxdWFsKHRoaXMudmFsdWUsIG5ld1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLnZhbCA9IG5ld1ZhbHVlO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKG5ld1ZhbHVlKTtcclxuICAgICAgdGhpcy5vblRvdWNoKG5ld1ZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnZhbHVlID0ge1xyXG4gICAgICBkYXRlRnJvbTogdGhpcy5kYXRlRnJvbSxcclxuICAgICAgZGF0ZVRvOiB0aGlzLmRhdGVUbyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJEYXRlUmFuZ2UgPSAoZGF0ZTogRGF0ZSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgbGV0IHJlc3VsdCA9IHRydWU7XHJcblxyXG4gICAgaWYgKGlzVmFsaWQobmV3IERhdGUoZGF0ZSkpKSB7XHJcbiAgICAgIGNvbnN0IGRheSA9IGRhdGU/LmdldERheSgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZXhjbHVkZVdlZWtlbmRzKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIGRheSAhPT0gMCAmJiBkYXkgIT09IDY7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmV4Y2x1ZGVIb2xpZGF5cykge1xyXG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiB0aGlzLmlzRGF0ZU5vdEhvbGlkYXkoZGF0ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnNwZWNpZmljRGF0ZXM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBzcGVjaWZpY0RhdGVzID0gdGhpcy5zcGVjaWZpY0RhdGVzO1xyXG4gICAgICAgIGlmIChzcGVjaWZpY0RhdGVzICYmIHNwZWNpZmljRGF0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSBzcGVjaWZpY0RhdGVzLmZpbmRJbmRleCgoc3BlY2lmaWNEYXRlKSA9PlxyXG4gICAgICAgICAgICBpc0VxdWFsKGRhdGUsIHNwZWNpZmljRGF0ZSksXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIGluZGV4ID09PSAtMTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH07XHJcblxyXG4gIGlzRGF0ZU5vdEhvbGlkYXkoZGF0ZTogRGF0ZSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgeyBjb3VudHJ5Q29kZSwgdGltZVpvbmVPZmZzZXQgfSA9IHRoaXMuaG9saWRheU9wdGlvbnMgPz8ge307XHJcblxyXG4gICAgaWYgKGNvdW50cnlDb2RlICYmIHRpbWVab25lT2Zmc2V0KSB7XHJcbiAgICAgIHJldHVybiAhdGhpcy5ob2xpZGF5SW5zdGFuY2U/LmlzSG9saWRheShcclxuICAgICAgICBgJHtmb3JtYXQoZGF0ZSwgJ3l5eXktTU0tZGQnKX1UMDA6MDA6MDAke3RpbWVab25lT2Zmc2V0fWAsXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBkYXRlUmFuZ2VWYWxpZGF0b3IoY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sKSB7XHJcbiAgICBjb25zdCByZXF1aXJlZCA9IGNvbnRyb2w/Lmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgaWYgKHJlcXVpcmVkKSB7XHJcbiAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoeyByZXF1aXJlZDogdHJ1ZSB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHsgZGF0ZUZyb20sIGRhdGVUbyB9ID0gY29udHJvbC52YWx1ZTtcclxuICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgcmVxdWlyZWQgJiZcclxuICAgICAgKCFkYXRlRnJvbSB8fCBkYXRlRnJvbT8ubGVuZ3RoID09PSAwKSAmJlxyXG4gICAgICAoIWRhdGVUbyB8fCBkYXRlVG8/Lmxlbmd0aCA9PT0gMClcclxuICAgICkge1xyXG4gICAgICBjb250cm9sLnNldEVycm9ycyh7IHJlcXVpcmVkOiB0cnVlIH0pO1xyXG4gICAgfSBlbHNlIGlmICghZGF0ZUZyb20gJiYgZGF0ZVRvKSB7XHJcbiAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgcmFuZ2VGcm9tOiB0cnVlIH0pO1xyXG4gICAgfSBlbHNlIGlmIChkYXRlRnJvbSAmJiAhZGF0ZVRvICYmICF0aGlzLmRhdGVUb09wdGlvbmFsKSB7XHJcbiAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgcmFuZ2VUbzogdHJ1ZSB9KTtcclxuICAgIH0gZWxzZSBpZiAoZGF0ZUZyb20gJiYgZGF0ZVRvICYmIG5ldyBEYXRlKGRhdGVGcm9tKSA+IG5ldyBEYXRlKGRhdGVUbykpIHtcclxuICAgICAgY29udHJvbC5zZXRFcnJvcnMoeyByYW5nZU9yZGVyOiB0cnVlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZWNhYnMtZWxlbWVudC13cmFwcGVyIFtkYXRhXT1cImdldERhdGEoKVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkX19yYW5nZS0td3JhcHBlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRfX3JhbmdlXCI+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIGNsYXNzPVwiYm9yZGVyLW5vbmUgdy1mdWxsXCJcclxuICAgICAgICBpZD1cInt7IG5hbWUgKyAnZGF0ZUZyb20nIH19XCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cImRhdGVGcm9tXCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwic3RhcnREYXRlUGxhY2Vob2xkZXIgPz8gdHJhbnNsYXRpb25Db25maWc/LnN0YXJ0RGF0ZVBsYWNlaG9sZGVyXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgIFttYXREYXRlcGlja2VyXT1cInBpY2tlckZyb21cIlxyXG4gICAgICAgIFttaW5dPVwibWluRGF0ZUZyb21cIlxyXG4gICAgICAgIFttYXhdPVwibWF4RGF0ZUZyb21cIlxyXG4gICAgICAgIFttYXREYXRlcGlja2VyRmlsdGVyXT1cImZpbHRlckRhdGVSYW5nZVwiXHJcbiAgICAgICAgZWNhYnNNYXNrRGF0ZVxyXG4gICAgICAgIChibHVyKT1cIm9uVG91Y2goKVwiXHJcbiAgICAgICAgKGNsaWNrKT1cInBpY2tlckZyb20ub3BlbigpXCJcclxuICAgICAgLz5cclxuICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXJGcm9tXHJcbiAgICAgICAgICAgICAgICAgICAgICBbcGFuZWxDbGFzc109XCJwYW5lbENsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjYWxlbmRhckhlYWRlckNvbXBvbmVudF09XCJoZWFkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3RvdWNoVWldPVwidG91Y2hVaVwiPlxyXG4gICAgICA8L21hdC1kYXRlcGlja2VyPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWdyYXktNDAwIHB4LTMgdGV4dC1zbVwiPnt7IHNlcGFyYXRvckxhYmVsIH19PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRfX3JhbmdlXCI+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIGNsYXNzPVwiYm9yZGVyLW5vbmUgdy1mdWxsXCJcclxuICAgICAgICBpZD1cInt7IG5hbWUgKyAnZGF0ZVRvJyB9fVwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJkYXRlVG9cIlxyXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJlbmREYXRlUGxhY2Vob2xkZXIgPz8gdHJhbnNsYXRpb25Db25maWc/LmVuZERhdGVQbGFjZWhvbGRlclwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJUb1wiXHJcbiAgICAgICAgW21pbl09XCJtaW5EYXRlVG9cIlxyXG4gICAgICAgIFttYXhdPVwibWF4RGF0ZVRvXCJcclxuICAgICAgICBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJmaWx0ZXJEYXRlUmFuZ2VcIlxyXG4gICAgICAgIGVjYWJzTWFza0RhdGVcclxuICAgICAgICAoYmx1cik9XCJvblRvdWNoKClcIlxyXG4gICAgICAgIChjbGljayk9XCJwaWNrZXJUby5vcGVuKClcIlxyXG4gICAgICAvPlxyXG4gICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlclRvXHJcbiAgICAgICAgICAgICAgICAgICAgICBbcGFuZWxDbGFzc109XCJwYW5lbENsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjYWxlbmRhckhlYWRlckNvbXBvbmVudF09XCJoZWFkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3RvdWNoVWldPVwidG91Y2hVaVwiPlxyXG4gICAgICA8L21hdC1kYXRlcGlja2VyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZWNhYnMtZWxlbWVudC13cmFwcGVyPlxyXG4iXX0=