@ardium-ui/ui 4.4.2 → 5.0.0-alpha.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/fesm2022/ardium-ui-ui.mjs +2482 -2400
- package/fesm2022/ardium-ui-ui.mjs.map +1 -1
- package/lib/_internal/boolean-component.d.ts +1 -1
- package/lib/_internal/disablable-component.d.ts +1 -1
- package/lib/_internal/focusable-component.d.ts +1 -1
- package/lib/_internal/form-field-component.d.ts +1 -1
- package/lib/_internal/ngmodel-component.d.ts +1 -1
- package/lib/_internal/selectable-list-component.d.ts +1 -1
- package/lib/_internal/utils/date.utils.d.ts +3 -0
- package/lib/buttons/_button-base.d.ts +1 -1
- package/lib/calendar/calendar.component.d.ts +8 -2
- package/lib/file-inputs/file-input-base.d.ts +1 -1
- package/lib/form-field/form-field-base.d.ts +1 -1
- package/lib/inputs/_simple-input-base.d.ts +3 -3
- package/lib/inputs/autocomplete-input/autocomplete-input.component.d.ts +66 -0
- package/lib/inputs/autocomplete-input/autocomplete-input.defaults.d.ts +15 -0
- package/lib/inputs/autocomplete-input/autocomplete-input.directives.d.ts +33 -0
- package/lib/inputs/autocomplete-input/autocomplete-input.module.d.ts +13 -0
- package/lib/inputs/autocomplete-input/index.d.ts +3 -0
- package/lib/inputs/date-input/date-input.component.d.ts +5 -2
- package/lib/inputs/input/index.d.ts +2 -1
- package/lib/inputs/input/input.component.d.ts +3 -56
- package/lib/inputs/input/input.defaults.d.ts +1 -10
- package/lib/inputs/input/input.directives.d.ts +0 -13
- package/lib/inputs/input/input.module.d.ts +3 -5
- package/lib/inputs/input-utils.d.ts +8 -8
- package/lib/option/option.component.d.ts +1 -1
- package/lib/slider/abstract-slider.d.ts +1 -1
- package/package.json +1 -3
- package/prebuilt-themes/default/inputs/{simple-input.css → autocomplete-input.css} +40 -15
- package/prebuilt-themes/default/inputs/autocomplete-input.css.map +1 -0
- package/prebuilt-themes/default/inputs/input.css +0 -25
- package/prebuilt-themes/default/inputs/input.css.map +1 -1
- package/public-api.d.ts +1 -1
- package/themes/default/inputs/autocomplete-input.scss +46 -0
- package/themes/default/inputs/input.scss +0 -34
- package/esm2022/ardium-ui-ui.mjs +0 -5
- package/esm2022/lib/_internal/boolean-component.mjs +0 -95
- package/esm2022/lib/_internal/clear-button/clear-button.component.mjs +0 -15
- package/esm2022/lib/_internal/clear-button/clear-button.module.mjs +0 -18
- package/esm2022/lib/_internal/disablable-component.mjs +0 -51
- package/esm2022/lib/_internal/focusable-component.mjs +0 -85
- package/esm2022/lib/_internal/form-field-component.mjs +0 -33
- package/esm2022/lib/_internal/item-storages/dropdown-item-storage.mjs +0 -453
- package/esm2022/lib/_internal/item-storages/simple-item-storage.mjs +0 -370
- package/esm2022/lib/_internal/item-storages/simplest-item-storage.mjs +0 -157
- package/esm2022/lib/_internal/models/pagination.model.mjs +0 -90
- package/esm2022/lib/_internal/models/queue.mjs +0 -59
- package/esm2022/lib/_internal/ngmodel-component.mjs +0 -101
- package/esm2022/lib/_internal/public-api.mjs +0 -2
- package/esm2022/lib/_internal/selectable-list-component.mjs +0 -271
- package/esm2022/lib/badge/badge.defaults.mjs +0 -20
- package/esm2022/lib/badge/badge.directive.mjs +0 -97
- package/esm2022/lib/badge/badge.module.mjs +0 -18
- package/esm2022/lib/badge/badge.types.mjs +0 -16
- package/esm2022/lib/badge/index.mjs +0 -5
- package/esm2022/lib/buttons/_button-base.defaults.mjs +0 -17
- package/esm2022/lib/buttons/_button-base.mjs +0 -26
- package/esm2022/lib/buttons/button/button.component.mjs +0 -38
- package/esm2022/lib/buttons/button/button.defaults.mjs +0 -17
- package/esm2022/lib/buttons/button/button.module.mjs +0 -18
- package/esm2022/lib/buttons/button/index.mjs +0 -4
- package/esm2022/lib/buttons/fab/fab.component.mjs +0 -33
- package/esm2022/lib/buttons/fab/fab.defaults.mjs +0 -17
- package/esm2022/lib/buttons/fab/fab.module.mjs +0 -18
- package/esm2022/lib/buttons/fab/index.mjs +0 -4
- package/esm2022/lib/buttons/general-button.types.mjs +0 -55
- package/esm2022/lib/buttons/icon-button/icon-button.component.mjs +0 -39
- package/esm2022/lib/buttons/icon-button/icon-button.defaults.mjs +0 -9
- package/esm2022/lib/buttons/icon-button/icon-button.module.mjs +0 -18
- package/esm2022/lib/buttons/icon-button/index.mjs +0 -4
- package/esm2022/lib/calendar/calendar.component.mjs +0 -466
- package/esm2022/lib/calendar/calendar.defaults.mjs +0 -26
- package/esm2022/lib/calendar/calendar.directives.mjs +0 -107
- package/esm2022/lib/calendar/calendar.internal-directives.mjs +0 -22
- package/esm2022/lib/calendar/calendar.internal-types.mjs +0 -2
- package/esm2022/lib/calendar/calendar.module.mjs +0 -71
- package/esm2022/lib/calendar/calendar.types.mjs +0 -6
- package/esm2022/lib/calendar/index.mjs +0 -6
- package/esm2022/lib/calendar/views/days-view/days-view.component.mjs +0 -282
- package/esm2022/lib/calendar/views/days-view/days-view.helpers.mjs +0 -65
- package/esm2022/lib/calendar/views/months-view/months-view.component.mjs +0 -245
- package/esm2022/lib/calendar/views/months-view/months-view.helpers.mjs +0 -22
- package/esm2022/lib/calendar/views/years-view/years-view.component.mjs +0 -244
- package/esm2022/lib/calendar/views/years-view/years-view.helpers.mjs +0 -14
- package/esm2022/lib/card/card.children.mjs +0 -96
- package/esm2022/lib/card/card.component.mjs +0 -38
- package/esm2022/lib/card/card.defaults.mjs +0 -17
- package/esm2022/lib/card/card.module.mjs +0 -59
- package/esm2022/lib/card/card.types.mjs +0 -9
- package/esm2022/lib/card/index.mjs +0 -6
- package/esm2022/lib/checkbox/checkbox.component.mjs +0 -68
- package/esm2022/lib/checkbox/checkbox.defaults.mjs +0 -17
- package/esm2022/lib/checkbox/checkbox.directives.mjs +0 -14
- package/esm2022/lib/checkbox/checkbox.internal-directives.mjs +0 -15
- package/esm2022/lib/checkbox/checkbox.module.mjs +0 -20
- package/esm2022/lib/checkbox/checkbox.types.mjs +0 -6
- package/esm2022/lib/checkbox/index.mjs +0 -6
- package/esm2022/lib/checkbox-list/checkbox-list.component.mjs +0 -116
- package/esm2022/lib/checkbox-list/checkbox-list.defaults.mjs +0 -25
- package/esm2022/lib/checkbox-list/checkbox-list.directives.mjs +0 -14
- package/esm2022/lib/checkbox-list/checkbox-list.module.mjs +0 -21
- package/esm2022/lib/checkbox-list/checkbox-list.types.mjs +0 -7
- package/esm2022/lib/checkbox-list/index.mjs +0 -6
- package/esm2022/lib/chip/chip.component.mjs +0 -36
- package/esm2022/lib/chip/chip.defaults.mjs +0 -20
- package/esm2022/lib/chip/chip.module.mjs +0 -21
- package/esm2022/lib/chip/deletable-chip/deletable-chip.component.mjs +0 -53
- package/esm2022/lib/chip/deletable-chip/deletable-chip.defaults.mjs +0 -17
- package/esm2022/lib/chip/index.mjs +0 -8
- package/esm2022/lib/chip/selectable-chip/selectable-chip.component.mjs +0 -53
- package/esm2022/lib/chip/selectable-chip/selectable-chip.defaults.mjs +0 -18
- package/esm2022/lib/dialog/dialog.component.mjs +0 -109
- package/esm2022/lib/dialog/dialog.defaults.mjs +0 -26
- package/esm2022/lib/dialog/dialog.directives.mjs +0 -25
- package/esm2022/lib/dialog/dialog.module.mjs +0 -21
- package/esm2022/lib/dialog/dialog.types.mjs +0 -10
- package/esm2022/lib/dialog/index.mjs +0 -6
- package/esm2022/lib/divider/divider.component.mjs +0 -19
- package/esm2022/lib/divider/divider.defaults.mjs +0 -13
- package/esm2022/lib/divider/divider.module.mjs +0 -18
- package/esm2022/lib/divider/index.mjs +0 -4
- package/esm2022/lib/dropdown-panel/dropdown-panel.component.mjs +0 -112
- package/esm2022/lib/dropdown-panel/dropdown-panel.defaults.mjs +0 -17
- package/esm2022/lib/dropdown-panel/dropdown-panel.module.mjs +0 -18
- package/esm2022/lib/dropdown-panel/dropdown-panel.types.mjs +0 -10
- package/esm2022/lib/dropdown-panel/index.mjs +0 -5
- package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.component.mjs +0 -70
- package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.defaults.mjs +0 -18
- package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.directives.mjs +0 -42
- package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.module.mjs +0 -52
- package/esm2022/lib/file-inputs/file-drop-area/index.mjs +0 -5
- package/esm2022/lib/file-inputs/file-input/file-input.component.mjs +0 -120
- package/esm2022/lib/file-inputs/file-input/file-input.defaults.mjs +0 -23
- package/esm2022/lib/file-inputs/file-input/file-input.directives.mjs +0 -86
- package/esm2022/lib/file-inputs/file-input/file-input.module.mjs +0 -55
- package/esm2022/lib/file-inputs/file-input/index.mjs +0 -5
- package/esm2022/lib/file-inputs/file-input-base.defaults.mjs +0 -8
- package/esm2022/lib/file-inputs/file-input-base.mjs +0 -356
- package/esm2022/lib/file-inputs/file-input-types.mjs +0 -8
- package/esm2022/lib/form-field/error/error.component.mjs +0 -17
- package/esm2022/lib/form-field/error/error.directive.mjs +0 -17
- package/esm2022/lib/form-field/form-field-base.mjs +0 -53
- package/esm2022/lib/form-field/form-field-child.token.mjs +0 -3
- package/esm2022/lib/form-field/form-field-native-inputs.mjs +0 -80
- package/esm2022/lib/form-field/form-field.component.mjs +0 -12
- package/esm2022/lib/form-field/form-field.defaults.mjs +0 -17
- package/esm2022/lib/form-field/form-field.module.mjs +0 -49
- package/esm2022/lib/form-field/hint/hint.component.mjs +0 -17
- package/esm2022/lib/form-field/hint/hint.directive.mjs +0 -30
- package/esm2022/lib/form-field/horizontal-form-field.component.mjs +0 -12
- package/esm2022/lib/form-field/index.mjs +0 -10
- package/esm2022/lib/form-field/label/label.component.mjs +0 -27
- package/esm2022/lib/form-field-frame/form-field-frame.component.mjs +0 -58
- package/esm2022/lib/form-field-frame/form-field-frame.defaults.mjs +0 -18
- package/esm2022/lib/form-field-frame/form-field-frame.directives.mjs +0 -25
- package/esm2022/lib/form-field-frame/form-field-frame.module.mjs +0 -19
- package/esm2022/lib/form-field-frame/index.mjs +0 -5
- package/esm2022/lib/icon/icon.component.mjs +0 -52
- package/esm2022/lib/icon/icon.defaults.mjs +0 -17
- package/esm2022/lib/icon/icon.module.mjs +0 -19
- package/esm2022/lib/icon/icon.pipe.mjs +0 -18
- package/esm2022/lib/icon/index.mjs +0 -5
- package/esm2022/lib/inputs/_simple-input-base.mjs +0 -153
- package/esm2022/lib/inputs/date-input/date-input.component.mjs +0 -375
- package/esm2022/lib/inputs/date-input/date-input.defaults.mjs +0 -38
- package/esm2022/lib/inputs/date-input/date-input.directive.mjs +0 -163
- package/esm2022/lib/inputs/date-input/date-input.module.mjs +0 -108
- package/esm2022/lib/inputs/date-input/date-input.serializers.mjs +0 -49
- package/esm2022/lib/inputs/date-input/date-input.types.mjs +0 -5
- package/esm2022/lib/inputs/date-input/index.mjs +0 -6
- package/esm2022/lib/inputs/digit-input/digit-input.component.mjs +0 -265
- package/esm2022/lib/inputs/digit-input/digit-input.defaults.mjs +0 -24
- package/esm2022/lib/inputs/digit-input/digit-input.model.mjs +0 -267
- package/esm2022/lib/inputs/digit-input/digit-input.module.mjs +0 -19
- package/esm2022/lib/inputs/digit-input/digit-input.types.mjs +0 -15
- package/esm2022/lib/inputs/digit-input/digit-input.utils.mjs +0 -8
- package/esm2022/lib/inputs/digit-input/index.mjs +0 -5
- package/esm2022/lib/inputs/hex-input/hex-input.component.mjs +0 -180
- package/esm2022/lib/inputs/hex-input/hex-input.defaults.mjs +0 -26
- package/esm2022/lib/inputs/hex-input/hex-input.directives.mjs +0 -36
- package/esm2022/lib/inputs/hex-input/hex-input.model.mjs +0 -97
- package/esm2022/lib/inputs/hex-input/hex-input.module.mjs +0 -37
- package/esm2022/lib/inputs/hex-input/index.mjs +0 -5
- package/esm2022/lib/inputs/input/index.mjs +0 -4
- package/esm2022/lib/inputs/input/input.component.mjs +0 -278
- package/esm2022/lib/inputs/input/input.defaults.mjs +0 -21
- package/esm2022/lib/inputs/input/input.directives.mjs +0 -58
- package/esm2022/lib/inputs/input/input.module.mjs +0 -61
- package/esm2022/lib/inputs/input-transformers.mjs +0 -66
- package/esm2022/lib/inputs/input-types.mjs +0 -6
- package/esm2022/lib/inputs/input-utils.mjs +0 -186
- package/esm2022/lib/inputs/number-input/index.mjs +0 -5
- package/esm2022/lib/inputs/number-input/number-input.component.mjs +0 -250
- package/esm2022/lib/inputs/number-input/number-input.defaults.mjs +0 -27
- package/esm2022/lib/inputs/number-input/number-input.directives.mjs +0 -14
- package/esm2022/lib/inputs/number-input/number-input.module.mjs +0 -21
- package/esm2022/lib/inputs/password-input/index.mjs +0 -6
- package/esm2022/lib/inputs/password-input/password-input.component.mjs +0 -167
- package/esm2022/lib/inputs/password-input/password-input.defaults.mjs +0 -24
- package/esm2022/lib/inputs/password-input/password-input.directives.mjs +0 -49
- package/esm2022/lib/inputs/password-input/password-input.module.mjs +0 -41
- package/esm2022/lib/inputs/password-input/password-input.types.mjs +0 -2
- package/esm2022/lib/inputs/simple-input/index.mjs +0 -5
- package/esm2022/lib/inputs/simple-input/simple-input.component.mjs +0 -50
- package/esm2022/lib/inputs/simple-input/simple-input.defaults.mjs +0 -25
- package/esm2022/lib/inputs/simple-input/simple-input.directives.mjs +0 -36
- package/esm2022/lib/inputs/simple-input/simple-input.module.mjs +0 -37
- package/esm2022/lib/kbd/index.mjs +0 -6
- package/esm2022/lib/kbd/kbd.component.mjs +0 -30
- package/esm2022/lib/kbd/kbd.defaults.mjs +0 -15
- package/esm2022/lib/kbd/kbd.directive.mjs +0 -33
- package/esm2022/lib/kbd/kbd.module.mjs +0 -20
- package/esm2022/lib/kbd/kbd.pipe.mjs +0 -21
- package/esm2022/lib/kbd-shortcut/index.mjs +0 -4
- package/esm2022/lib/kbd-shortcut/kbd-shortcut.component.mjs +0 -36
- package/esm2022/lib/kbd-shortcut/kbd-shortcut.defaults.mjs +0 -8
- package/esm2022/lib/kbd-shortcut/kbd-shortcut.module.mjs +0 -19
- package/esm2022/lib/modal/index.mjs +0 -5
- package/esm2022/lib/modal/modal.component.mjs +0 -95
- package/esm2022/lib/modal/modal.defaults.mjs +0 -20
- package/esm2022/lib/modal/modal.directives.mjs +0 -14
- package/esm2022/lib/modal/modal.module.mjs +0 -22
- package/esm2022/lib/option/index.mjs +0 -3
- package/esm2022/lib/option/option.component.mjs +0 -55
- package/esm2022/lib/option/option.module.mjs +0 -18
- package/esm2022/lib/progress-bar/index.mjs +0 -6
- package/esm2022/lib/progress-bar/progress-bar.component.mjs +0 -58
- package/esm2022/lib/progress-bar/progress-bar.defaults.mjs +0 -21
- package/esm2022/lib/progress-bar/progress-bar.directive.mjs +0 -14
- package/esm2022/lib/progress-bar/progress-bar.module.mjs +0 -19
- package/esm2022/lib/progress-bar/progress-bar.types.mjs +0 -19
- package/esm2022/lib/progress-circle/index.mjs +0 -6
- package/esm2022/lib/progress-circle/progress-circle.component.mjs +0 -45
- package/esm2022/lib/progress-circle/progress-circle.defaults.mjs +0 -21
- package/esm2022/lib/progress-circle/progress-circle.directive.mjs +0 -14
- package/esm2022/lib/progress-circle/progress-circle.module.mjs +0 -19
- package/esm2022/lib/progress-circle/progress-circle.types.mjs +0 -10
- package/esm2022/lib/radio/index.mjs +0 -5
- package/esm2022/lib/radio/radio/radio.component.mjs +0 -119
- package/esm2022/lib/radio/radio/radio.defaults.mjs +0 -16
- package/esm2022/lib/radio/radio-group.component.mjs +0 -203
- package/esm2022/lib/radio/radio.module.mjs +0 -19
- package/esm2022/lib/search-functions.mjs +0 -64
- package/esm2022/lib/segment/index.mjs +0 -6
- package/esm2022/lib/segment/segment.component.mjs +0 -125
- package/esm2022/lib/segment/segment.defaults.mjs +0 -26
- package/esm2022/lib/segment/segment.directives.mjs +0 -14
- package/esm2022/lib/segment/segment.module.mjs +0 -19
- package/esm2022/lib/segment/segment.types.mjs +0 -13
- package/esm2022/lib/select/index.mjs +0 -6
- package/esm2022/lib/select/select.component.mjs +0 -836
- package/esm2022/lib/select/select.defaults.mjs +0 -53
- package/esm2022/lib/select/select.directive.mjs +0 -171
- package/esm2022/lib/select/select.module.mjs +0 -112
- package/esm2022/lib/select/select.types.mjs +0 -2
- package/esm2022/lib/slide-toggle/index.mjs +0 -5
- package/esm2022/lib/slide-toggle/slide-toggle.component.mjs +0 -43
- package/esm2022/lib/slide-toggle/slide-toggle.defaults.mjs +0 -21
- package/esm2022/lib/slide-toggle/slide-toggle.module.mjs +0 -18
- package/esm2022/lib/slide-toggle/slide-toggle.types.mjs +0 -5
- package/esm2022/lib/slider/abstract-slider.mjs +0 -251
- package/esm2022/lib/slider/index.mjs +0 -8
- package/esm2022/lib/slider/range-slider/range-slider.component.mjs +0 -151
- package/esm2022/lib/slider/range-slider/range-slider.module.mjs +0 -18
- package/esm2022/lib/slider/slider.component.mjs +0 -100
- package/esm2022/lib/slider/slider.defaults.mjs +0 -14
- package/esm2022/lib/slider/slider.directive.mjs +0 -16
- package/esm2022/lib/slider/slider.module.mjs +0 -20
- package/esm2022/lib/slider/slider.types.mjs +0 -10
- package/esm2022/lib/snackbar/index.mjs +0 -5
- package/esm2022/lib/snackbar/snackbar-ref.mjs +0 -51
- package/esm2022/lib/snackbar/snackbar.component.mjs +0 -48
- package/esm2022/lib/snackbar/snackbar.service.mjs +0 -224
- package/esm2022/lib/snackbar/snackbar.token.mjs +0 -26
- package/esm2022/lib/snackbar/snackbar.types.mjs +0 -25
- package/esm2022/lib/spinner/index.mjs +0 -4
- package/esm2022/lib/spinner/spinner.component.mjs +0 -19
- package/esm2022/lib/spinner/spinner.defaults.mjs +0 -14
- package/esm2022/lib/spinner/spinner.module.mjs +0 -18
- package/esm2022/lib/star/index.mjs +0 -6
- package/esm2022/lib/star/rating-display/index.mjs +0 -6
- package/esm2022/lib/star/rating-display/rating-display.component.mjs +0 -71
- package/esm2022/lib/star/rating-display/rating-display.defaults.mjs +0 -16
- package/esm2022/lib/star/rating-display/rating-display.directives.mjs +0 -16
- package/esm2022/lib/star/rating-display/rating-display.module.mjs +0 -20
- package/esm2022/lib/star/rating-display/rating-display.types.mjs +0 -2
- package/esm2022/lib/star/rating-input/index.mjs +0 -6
- package/esm2022/lib/star/rating-input/rating-input.component.mjs +0 -191
- package/esm2022/lib/star/rating-input/rating-input.defaults.mjs +0 -17
- package/esm2022/lib/star/rating-input/rating-input.directives.mjs +0 -16
- package/esm2022/lib/star/rating-input/rating-input.module.mjs +0 -20
- package/esm2022/lib/star/rating-input/rating-input.types.mjs +0 -2
- package/esm2022/lib/star/star-button/index.mjs +0 -6
- package/esm2022/lib/star/star-button/star-button.component.mjs +0 -55
- package/esm2022/lib/star/star-button/star-button.defaults.mjs +0 -18
- package/esm2022/lib/star/star-button/star-button.directives.mjs +0 -16
- package/esm2022/lib/star/star-button/star-button.module.mjs +0 -20
- package/esm2022/lib/star/star-button/star-button.types.mjs +0 -2
- package/esm2022/lib/star/star.component.mjs +0 -36
- package/esm2022/lib/star/star.defaults.mjs +0 -15
- package/esm2022/lib/star/star.directives.mjs +0 -16
- package/esm2022/lib/star/star.module.mjs +0 -20
- package/esm2022/lib/star/star.types.mjs +0 -23
- package/esm2022/lib/statebox/index.mjs +0 -4
- package/esm2022/lib/statebox/statebox.component.mjs +0 -114
- package/esm2022/lib/statebox/statebox.defaults.mjs +0 -20
- package/esm2022/lib/statebox/statebox.module.mjs +0 -18
- package/esm2022/lib/statebox/statebox.types.mjs +0 -2
- package/esm2022/lib/tabber/index.mjs +0 -6
- package/esm2022/lib/tabber/tab/tab.component.mjs +0 -44
- package/esm2022/lib/tabber/tab/tab.defaults.mjs +0 -13
- package/esm2022/lib/tabber/tabber.component.mjs +0 -90
- package/esm2022/lib/tabber/tabber.defaults.mjs +0 -19
- package/esm2022/lib/tabber/tabber.module.mjs +0 -19
- package/esm2022/lib/table/index.mjs +0 -6
- package/esm2022/lib/table/table-item-storage.mjs +0 -564
- package/esm2022/lib/table/table.component.mjs +0 -367
- package/esm2022/lib/table/table.defaults.mjs +0 -53
- package/esm2022/lib/table/table.directives.mjs +0 -62
- package/esm2022/lib/table/table.module.mjs +0 -47
- package/esm2022/lib/table/table.types.mjs +0 -30
- package/esm2022/lib/table/utils.mjs +0 -18
- package/esm2022/lib/table-from-csv/index.mjs +0 -4
- package/esm2022/lib/table-from-csv/table-from-csv.component.mjs +0 -120
- package/esm2022/lib/table-from-csv/table-from-csv.defaults.mjs +0 -15
- package/esm2022/lib/table-from-csv/table-from-csv.module.mjs +0 -19
- package/esm2022/lib/table-pagination/index.mjs +0 -5
- package/esm2022/lib/table-pagination/table-pagination.component.mjs +0 -108
- package/esm2022/lib/table-pagination/table-pagination.defaults.mjs +0 -25
- package/esm2022/lib/table-pagination/table-pagination.module.mjs +0 -21
- package/esm2022/lib/table-pagination/table-pagination.types.mjs +0 -7
- package/esm2022/lib/text-list/index.mjs +0 -4
- package/esm2022/lib/text-list/text-list.component.mjs +0 -18
- package/esm2022/lib/text-list/text-list.module.mjs +0 -19
- package/esm2022/lib/text-list/text-list.pipe.mjs +0 -16
- package/esm2022/lib/types/alignment.types.mjs +0 -10
- package/esm2022/lib/types/button.types.mjs +0 -6
- package/esm2022/lib/types/colors.types.mjs +0 -43
- package/esm2022/lib/types/item-storage.types.mjs +0 -6
- package/esm2022/lib/types/theming.types.mjs +0 -48
- package/esm2022/lib/types/utility.types.mjs +0 -5
- package/esm2022/public-api.mjs +0 -74
- package/lib/inputs/simple-input/index.d.ts +0 -4
- package/lib/inputs/simple-input/simple-input.component.d.ts +0 -13
- package/lib/inputs/simple-input/simple-input.defaults.d.ts +0 -6
- package/lib/inputs/simple-input/simple-input.directives.d.ts +0 -20
- package/lib/inputs/simple-input/simple-input.module.d.ts +0 -11
- package/prebuilt-themes/default/inputs/simple-input.css.map +0 -1
- package/themes/default/inputs/simple-input.scss +0 -12
|
@@ -1,466 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, computed, contentChild, effect, forwardRef, HostListener, Inject, input, model, output, signal, ViewEncapsulation, } from '@angular/core';
|
|
2
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
-
import { coerceBooleanProperty, coerceDateProperty, coerceNumberProperty } from '@ardium-ui/devkit';
|
|
4
|
-
import { roundFromZero } from 'more-rounding';
|
|
5
|
-
import { isDefined, isNull } from 'simple-bool';
|
|
6
|
-
import { _FormFieldComponentBase } from '../_internal/form-field-component';
|
|
7
|
-
import { ARD_FORM_FIELD_CONTROL } from '../form-field/form-field-child.token';
|
|
8
|
-
import { ARD_CALENDAR_DEFAULTS } from './calendar.defaults';
|
|
9
|
-
import { ArdCalendarDaysViewHeaderTemplateDirective, ArdCalendarDayTemplateDirective, ArdCalendarFloatingMonthTemplateDirective, ArdCalendarMonthsViewHeaderTemplateDirective, ArdCalendarMonthTemplateDirective, ArdCalendarWeekdayTemplateDirective, ArdCalendarYearsViewHeaderTemplateDirective, ArdCalendarYearTemplateDirective, } from './calendar.directives';
|
|
10
|
-
import { _CalendarTemplateRepositoryDirective } from './calendar.internal-directives';
|
|
11
|
-
import { ArdCalendarView } from './calendar.types';
|
|
12
|
-
import { isDayOutOfRange } from './views/days-view/days-view.helpers';
|
|
13
|
-
import { isMonthOutOfRange } from './views/months-view/months-view.helpers';
|
|
14
|
-
import { isYearOutOfRange } from './views/years-view/years-view.helpers';
|
|
15
|
-
import * as i0 from "@angular/core";
|
|
16
|
-
import * as i1 from "@angular/common";
|
|
17
|
-
import * as i2 from "./views/days-view/days-view.component";
|
|
18
|
-
import * as i3 from "./views/months-view/months-view.component";
|
|
19
|
-
import * as i4 from "./views/years-view/years-view.component";
|
|
20
|
-
const TODAY = new Date();
|
|
21
|
-
export class ArdiumCalendarComponent extends _FormFieldComponentBase {
|
|
22
|
-
constructor(defaults) {
|
|
23
|
-
super(defaults);
|
|
24
|
-
//! appearance
|
|
25
|
-
this.color = input(this._DEFAULTS.color);
|
|
26
|
-
this.ngClasses = computed(() => [`ard-color-${this.color()}`].join(' '));
|
|
27
|
-
//! active view
|
|
28
|
-
this.activeView = model(this._DEFAULTS.activeView);
|
|
29
|
-
this.activeYear = model(this._DEFAULTS.activeYear);
|
|
30
|
-
this.activeMonth = model(this._DEFAULTS.activeMonth);
|
|
31
|
-
this.firstWeekday = input(this._DEFAULTS.firstWeekday, {
|
|
32
|
-
transform: v => {
|
|
33
|
-
const value = coerceNumberProperty(v, this._DEFAULTS.firstWeekday);
|
|
34
|
-
if (!Number.isInteger(value)) {
|
|
35
|
-
console.error(new Error(`ARD-NF2001A: [firstWeekday] must be a positive integer, got "${value}". Using default value instead.`));
|
|
36
|
-
return this._DEFAULTS.firstWeekday;
|
|
37
|
-
}
|
|
38
|
-
if (value < 0 || value > 6) {
|
|
39
|
-
console.error(new Error(`ARD-NF2001B: [firstWeekday] must be between 0 and 6, got "${value}". Using modulo operator to adjust the value.`));
|
|
40
|
-
}
|
|
41
|
-
return value % 7;
|
|
42
|
-
},
|
|
43
|
-
});
|
|
44
|
-
this.multipleYearPageChangeModifier = input(this._DEFAULTS.multipleYearPageChangeModifier, {
|
|
45
|
-
transform: v => {
|
|
46
|
-
const value = coerceNumberProperty(v, this._DEFAULTS.multipleYearPageChangeModifier);
|
|
47
|
-
if (!Number.isInteger(value) || value < 1) {
|
|
48
|
-
console.error(new Error(`ARD-NF2002: [multipleYearPageChangeModifier] must be a positive integer, got "${value}". Using default value instead.`));
|
|
49
|
-
return this._DEFAULTS.multipleYearPageChangeModifier;
|
|
50
|
-
}
|
|
51
|
-
return value;
|
|
52
|
-
},
|
|
53
|
-
});
|
|
54
|
-
this.autoFocus = input(this._DEFAULTS.autoFocus, { transform: v => coerceBooleanProperty(v) });
|
|
55
|
-
//! value
|
|
56
|
-
this.selectedDate = model(null, { alias: 'selected' });
|
|
57
|
-
this.yearSelect = output();
|
|
58
|
-
this.monthSelect = output();
|
|
59
|
-
this.min = input(this._DEFAULTS.min, {
|
|
60
|
-
transform: v => (v === null ? null : coerceDateProperty(v, this._DEFAULTS.min)),
|
|
61
|
-
});
|
|
62
|
-
this.max = input(this._DEFAULTS.max, {
|
|
63
|
-
transform: v => (v === null ? null : coerceDateProperty(v, this._DEFAULTS.max)),
|
|
64
|
-
});
|
|
65
|
-
this.filter = input(this._DEFAULTS.filter);
|
|
66
|
-
this.isDayFilteredOut = computed(() => {
|
|
67
|
-
return (day, month = this.activeMonth(), year = this.activeYear()) => {
|
|
68
|
-
const filter = this.filter();
|
|
69
|
-
return filter?.(new Date(year, month, day)) ?? false;
|
|
70
|
-
};
|
|
71
|
-
});
|
|
72
|
-
//! highlighting days
|
|
73
|
-
this.__highlightedDay = signal(null);
|
|
74
|
-
this.highlightedDay = this.__highlightedDay.asReadonly();
|
|
75
|
-
//! highlighting months
|
|
76
|
-
this.__highlightedMonth = signal(null);
|
|
77
|
-
this.highlightedMonth = this.__highlightedMonth.asReadonly();
|
|
78
|
-
//! highlighting years
|
|
79
|
-
this.__highlightedYear = signal(null);
|
|
80
|
-
this.highlightedYear = this.__highlightedYear.asReadonly();
|
|
81
|
-
this.currentYearRangeStart = signal(TODAY.getFullYear() - (TODAY.getFullYear() % 4) - 8); // current year always in 3rd row
|
|
82
|
-
//! internals
|
|
83
|
-
this._isUsingKeyboard = signal(false);
|
|
84
|
-
//! templates
|
|
85
|
-
this.templateRepository = contentChild(_CalendarTemplateRepositoryDirective);
|
|
86
|
-
this.yearsViewHeaderTemplate = contentChild(ArdCalendarYearsViewHeaderTemplateDirective);
|
|
87
|
-
this.monthsViewHeaderTemplate = contentChild(ArdCalendarMonthsViewHeaderTemplateDirective);
|
|
88
|
-
this.daysViewHeaderTemplate = contentChild(ArdCalendarDaysViewHeaderTemplateDirective);
|
|
89
|
-
this.floatingMonthTemplate = contentChild(ArdCalendarFloatingMonthTemplateDirective);
|
|
90
|
-
this.yearTemplate = contentChild(ArdCalendarYearTemplateDirective);
|
|
91
|
-
this.monthTemplate = contentChild(ArdCalendarMonthTemplateDirective);
|
|
92
|
-
this.dayTemplate = contentChild(ArdCalendarDayTemplateDirective);
|
|
93
|
-
this.weekdayTemplate = contentChild(ArdCalendarWeekdayTemplateDirective);
|
|
94
|
-
effect(() => {
|
|
95
|
-
this.selectedDate(); // trigger effect
|
|
96
|
-
this._emitChange();
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
onTriggerOpenDaysView() {
|
|
100
|
-
this.activeView.set(ArdCalendarView.Days);
|
|
101
|
-
}
|
|
102
|
-
onTriggerOpenMonthsView() {
|
|
103
|
-
this.activeView.set(ArdCalendarView.Months);
|
|
104
|
-
}
|
|
105
|
-
onTriggerOpenYearsView() {
|
|
106
|
-
this.activeView.set(ArdCalendarView.Years);
|
|
107
|
-
}
|
|
108
|
-
writeValue(v) {
|
|
109
|
-
if (v instanceof Date) {
|
|
110
|
-
this.selectedDate.set(v);
|
|
111
|
-
}
|
|
112
|
-
else if (!isDefined(v)) {
|
|
113
|
-
this.selectedDate.set(null);
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
console.error(new Error(`ARD-NF2003: <ard-calendar> [writeValue] expected a Date or null, got "${v}".`));
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
_emitChange() {
|
|
120
|
-
this._onChangeRegistered?.(this.selectedDate());
|
|
121
|
-
}
|
|
122
|
-
//! selecting days
|
|
123
|
-
isDaySelected(day) {
|
|
124
|
-
if (day instanceof Date)
|
|
125
|
-
day = day.getDate();
|
|
126
|
-
return (this.selectedDate() !== null &&
|
|
127
|
-
this.activeYear() === this.selectedDate()?.getFullYear() &&
|
|
128
|
-
this.activeMonth() === this.selectedDate()?.getMonth() &&
|
|
129
|
-
day === this.selectedDate()?.getDate());
|
|
130
|
-
}
|
|
131
|
-
isDayOutOfRange(day, month = this.activeMonth(), year = this.activeYear()) {
|
|
132
|
-
return isDayOutOfRange(day, month, year, this.min(), this.max());
|
|
133
|
-
}
|
|
134
|
-
selectDay(day) {
|
|
135
|
-
if (this.isDaySelected(day))
|
|
136
|
-
return;
|
|
137
|
-
if (isNull(day)) {
|
|
138
|
-
if (!isDefined(this.selectedDate()))
|
|
139
|
-
return;
|
|
140
|
-
this.selectedDate.set(null);
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
if (day instanceof Date)
|
|
144
|
-
day = day.getDate();
|
|
145
|
-
if ((day && this.isDayOutOfRange(day)) || this.isDayFilteredOut()(day))
|
|
146
|
-
return;
|
|
147
|
-
this.selectedDate.set(new Date(this.activeYear(), this.activeMonth(), day, 0, 0, 0, 0));
|
|
148
|
-
}
|
|
149
|
-
selectCurrentlyHighlightedDay() {
|
|
150
|
-
if (!isDefined(this.highlightedDay()))
|
|
151
|
-
return;
|
|
152
|
-
this.selectDay(this.highlightedDay());
|
|
153
|
-
}
|
|
154
|
-
setHighlightedDay(day, month = this.activeMonth(), year = this.activeYear()) {
|
|
155
|
-
if (isNull(day)) {
|
|
156
|
-
this.__highlightedDay.update(() => day);
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
const date = new Date(year, month, day);
|
|
160
|
-
const outOfRange = this.isDayOutOfRange(day, month, year);
|
|
161
|
-
if (outOfRange === -1) {
|
|
162
|
-
this._highlightMinDay();
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
if (outOfRange === 1) {
|
|
166
|
-
this._highlightMaxDay();
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
this.__highlightedDay.update(() => date.getDate());
|
|
170
|
-
if (date.getFullYear() !== this.activeYear()) {
|
|
171
|
-
this.activeYear.set(date.getFullYear());
|
|
172
|
-
}
|
|
173
|
-
if (date.getMonth() !== this.activeMonth()) {
|
|
174
|
-
this.activeMonth.set(date.getMonth());
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
_highlightMinDay() {
|
|
178
|
-
const min = this.min();
|
|
179
|
-
if (!isDefined(min))
|
|
180
|
-
return;
|
|
181
|
-
this.activeYear.set(min.getFullYear());
|
|
182
|
-
this.activeMonth.set(min.getMonth());
|
|
183
|
-
this.__highlightedDay.set(min.getDate());
|
|
184
|
-
}
|
|
185
|
-
_highlightMaxDay() {
|
|
186
|
-
const max = this.max();
|
|
187
|
-
if (!isDefined(max))
|
|
188
|
-
return;
|
|
189
|
-
this.activeYear.set(max.getFullYear());
|
|
190
|
-
this.activeMonth.set(max.getMonth());
|
|
191
|
-
this.__highlightedDay.set(max.getDate());
|
|
192
|
-
}
|
|
193
|
-
highlightNextDay(offset = 1) {
|
|
194
|
-
const currentDay = this.highlightedDay();
|
|
195
|
-
const newDay = isDefined(currentDay) ? currentDay + offset : 1;
|
|
196
|
-
this.setHighlightedDay(newDay);
|
|
197
|
-
}
|
|
198
|
-
highlightPreviousDay(offset = 1) {
|
|
199
|
-
this.highlightNextDay(offset * -1);
|
|
200
|
-
}
|
|
201
|
-
highlightFirstDay() {
|
|
202
|
-
this.setHighlightedDay(1);
|
|
203
|
-
}
|
|
204
|
-
highlightLastDay() {
|
|
205
|
-
const daysInMonth = new Date(this.activeYear(), this.activeMonth() + 1, 0).getDate();
|
|
206
|
-
this.setHighlightedDay(daysInMonth);
|
|
207
|
-
}
|
|
208
|
-
highlightSameDayNextMonth() {
|
|
209
|
-
const month = this.activeMonth();
|
|
210
|
-
const year = this.activeYear();
|
|
211
|
-
const newMonth = month + 1;
|
|
212
|
-
const newYear = year + Math.floor(newMonth / 12);
|
|
213
|
-
this.setHighlightedDay(this.highlightedDay(), newMonth % 12, newYear);
|
|
214
|
-
}
|
|
215
|
-
highlightSameDayPreviousMonth() {
|
|
216
|
-
const month = this.activeMonth();
|
|
217
|
-
const year = this.activeYear();
|
|
218
|
-
const newMonth = month - 1;
|
|
219
|
-
const newYear = year + Math.floor(newMonth / 12);
|
|
220
|
-
this.setHighlightedDay(this.highlightedDay(), newMonth % 12, newYear);
|
|
221
|
-
}
|
|
222
|
-
highlightSameDayNextYear() {
|
|
223
|
-
this.setHighlightedDay(this.highlightedDay(), this.activeMonth(), this.activeYear() + 1);
|
|
224
|
-
}
|
|
225
|
-
highlightSameDayPreviousYear() {
|
|
226
|
-
this.setHighlightedDay(this.highlightedDay(), this.activeMonth(), this.activeYear() - 1);
|
|
227
|
-
}
|
|
228
|
-
//! selecting months
|
|
229
|
-
isMonthSelected(month) {
|
|
230
|
-
if (month instanceof Date)
|
|
231
|
-
month = month.getMonth();
|
|
232
|
-
return (this.selectedDate() !== null &&
|
|
233
|
-
this.activeYear() === this.selectedDate()?.getFullYear() &&
|
|
234
|
-
month === this.selectedDate()?.getMonth());
|
|
235
|
-
}
|
|
236
|
-
isMonthOutOfRange(month, year = this.activeYear()) {
|
|
237
|
-
return isMonthOutOfRange(month, year, this.min(), this.max());
|
|
238
|
-
}
|
|
239
|
-
changeMonth(newMonth) {
|
|
240
|
-
if (isNull(newMonth)) {
|
|
241
|
-
this.activeMonth.set(TODAY.getMonth());
|
|
242
|
-
return true;
|
|
243
|
-
}
|
|
244
|
-
if (this.isMonthOutOfRange(newMonth))
|
|
245
|
-
return false;
|
|
246
|
-
if (newMonth > 11) {
|
|
247
|
-
this.activeMonth.set(0);
|
|
248
|
-
this.activeYear.update(v => v + 1);
|
|
249
|
-
}
|
|
250
|
-
else if (newMonth < 0) {
|
|
251
|
-
this.activeMonth.set(11);
|
|
252
|
-
this.activeYear.update(v => v - 1);
|
|
253
|
-
}
|
|
254
|
-
else {
|
|
255
|
-
this.activeMonth.set(newMonth);
|
|
256
|
-
}
|
|
257
|
-
return true;
|
|
258
|
-
}
|
|
259
|
-
selectMonth(newMonth) {
|
|
260
|
-
if (isNull(newMonth) || this.isMonthOutOfRange(newMonth))
|
|
261
|
-
return;
|
|
262
|
-
const wasSuccessful = this.changeMonth(newMonth);
|
|
263
|
-
if (!wasSuccessful)
|
|
264
|
-
return;
|
|
265
|
-
this.activeView.set(ArdCalendarView.Days);
|
|
266
|
-
this.monthSelect.emit(newMonth);
|
|
267
|
-
}
|
|
268
|
-
selectCurrentlyHighlightedMonth() {
|
|
269
|
-
if (!isDefined(this.highlightedMonth()))
|
|
270
|
-
return;
|
|
271
|
-
this.selectMonth(this.highlightedMonth());
|
|
272
|
-
}
|
|
273
|
-
setHighlightedMonth(month, year = this.activeYear()) {
|
|
274
|
-
if (isNull(month)) {
|
|
275
|
-
this.__highlightedMonth.update(() => month);
|
|
276
|
-
return;
|
|
277
|
-
}
|
|
278
|
-
const date = new Date(year, month, 15);
|
|
279
|
-
const outOfRange = this.isMonthOutOfRange(month, year);
|
|
280
|
-
if (outOfRange === -1) {
|
|
281
|
-
this._highlightMinMonth();
|
|
282
|
-
return;
|
|
283
|
-
}
|
|
284
|
-
if (outOfRange === 1) {
|
|
285
|
-
this._highlightMaxMonth();
|
|
286
|
-
return;
|
|
287
|
-
}
|
|
288
|
-
this.__highlightedMonth.update(() => date.getMonth());
|
|
289
|
-
if (date.getFullYear() !== this.activeYear()) {
|
|
290
|
-
this.activeYear.set(date.getFullYear());
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
_highlightMinMonth() {
|
|
294
|
-
const min = this.min();
|
|
295
|
-
if (!isDefined(min))
|
|
296
|
-
return;
|
|
297
|
-
this.activeYear.set(min.getFullYear());
|
|
298
|
-
this.__highlightedMonth.set(min.getMonth());
|
|
299
|
-
}
|
|
300
|
-
_highlightMaxMonth() {
|
|
301
|
-
const max = this.max();
|
|
302
|
-
if (!isDefined(max))
|
|
303
|
-
return;
|
|
304
|
-
this.activeYear.set(max.getFullYear());
|
|
305
|
-
this.__highlightedMonth.set(max.getMonth());
|
|
306
|
-
}
|
|
307
|
-
highlightNextMonth(offset = 1) {
|
|
308
|
-
const currentMonth = this.highlightedMonth();
|
|
309
|
-
const newMonth = isDefined(currentMonth) ? currentMonth + offset : 0;
|
|
310
|
-
this.setHighlightedMonth(newMonth);
|
|
311
|
-
}
|
|
312
|
-
highlightPreviousMonth(offset = 1) {
|
|
313
|
-
this.highlightNextMonth(offset * -1);
|
|
314
|
-
}
|
|
315
|
-
highlightFirstMonth() {
|
|
316
|
-
this.setHighlightedMonth(0);
|
|
317
|
-
}
|
|
318
|
-
highlightLastMonth() {
|
|
319
|
-
this.setHighlightedMonth(11);
|
|
320
|
-
}
|
|
321
|
-
highlightSameMonthNextYear(multiple) {
|
|
322
|
-
this.setHighlightedMonth(this.highlightedMonth(), this.activeYear() + (multiple ? 10 : 1));
|
|
323
|
-
}
|
|
324
|
-
highlightSameMonthPreviousYear(multiple) {
|
|
325
|
-
this.setHighlightedMonth(this.highlightedMonth(), this.activeYear() - (multiple ? 10 : 1));
|
|
326
|
-
}
|
|
327
|
-
//! selecting years
|
|
328
|
-
isYearSelected(year) {
|
|
329
|
-
if (year instanceof Date)
|
|
330
|
-
year = year.getFullYear();
|
|
331
|
-
return this.selectedDate() !== null && year === this.selectedDate()?.getFullYear();
|
|
332
|
-
}
|
|
333
|
-
isYearOutOfRange(year) {
|
|
334
|
-
return isYearOutOfRange(year, this.min(), this.max());
|
|
335
|
-
}
|
|
336
|
-
changeYear(year) {
|
|
337
|
-
if (isNull(year)) {
|
|
338
|
-
this.activeYear.set(TODAY.getFullYear());
|
|
339
|
-
return true;
|
|
340
|
-
}
|
|
341
|
-
if (this.isYearOutOfRange(year))
|
|
342
|
-
return false;
|
|
343
|
-
this.activeYear.set(year);
|
|
344
|
-
return true;
|
|
345
|
-
}
|
|
346
|
-
selectYear(year) {
|
|
347
|
-
if (isNull(year))
|
|
348
|
-
return;
|
|
349
|
-
if (year instanceof Date)
|
|
350
|
-
year = year.getFullYear();
|
|
351
|
-
const wasSuccessful = this.changeYear(year);
|
|
352
|
-
if (!wasSuccessful)
|
|
353
|
-
return;
|
|
354
|
-
this.activeView.set(ArdCalendarView.Months);
|
|
355
|
-
this.yearSelect.emit(year);
|
|
356
|
-
}
|
|
357
|
-
selectCurrentlyHighlightedYear() {
|
|
358
|
-
if (!isDefined(this.highlightedYear()))
|
|
359
|
-
return;
|
|
360
|
-
this.selectYear(this.highlightedYear());
|
|
361
|
-
}
|
|
362
|
-
setHighlightedYear(year) {
|
|
363
|
-
if (isNull(year)) {
|
|
364
|
-
this.__highlightedYear.update(() => year);
|
|
365
|
-
return;
|
|
366
|
-
}
|
|
367
|
-
const date = new Date(year, 0);
|
|
368
|
-
const outOfRange = this.isYearOutOfRange(year);
|
|
369
|
-
if (outOfRange === -1) {
|
|
370
|
-
this._highlightMinYear();
|
|
371
|
-
return;
|
|
372
|
-
}
|
|
373
|
-
if (outOfRange === 1) {
|
|
374
|
-
this._highlightMaxYear();
|
|
375
|
-
return;
|
|
376
|
-
}
|
|
377
|
-
const newYear = date.getFullYear();
|
|
378
|
-
this.__highlightedYear.update(() => newYear);
|
|
379
|
-
if (newYear < this.currentYearRangeStart() || newYear >= this.currentYearRangeStart() + 24) {
|
|
380
|
-
// round the offset away from zero: 0.1 -> 1, -0.1 -> -1
|
|
381
|
-
// this is to ensure the range start is always shifted by 24 years
|
|
382
|
-
const offset = roundFromZero((newYear - this.currentYearRangeStart()) / 24);
|
|
383
|
-
this.currentYearRangeStart.update(v => v + offset * 24);
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
changeYearsViewPage(offset) {
|
|
387
|
-
const newYearRangeStart = this.currentYearRangeStart() + offset * 24;
|
|
388
|
-
this.currentYearRangeStart.set(newYearRangeStart);
|
|
389
|
-
}
|
|
390
|
-
_highlightMinYear() {
|
|
391
|
-
const min = this.min();
|
|
392
|
-
if (!isDefined(min))
|
|
393
|
-
return;
|
|
394
|
-
this.__highlightedYear.set(min.getFullYear());
|
|
395
|
-
}
|
|
396
|
-
_highlightMaxYear() {
|
|
397
|
-
const max = this.max();
|
|
398
|
-
if (!isDefined(max))
|
|
399
|
-
return;
|
|
400
|
-
this.__highlightedYear.set(max.getFullYear());
|
|
401
|
-
}
|
|
402
|
-
highlightNextYear(offset = 1) {
|
|
403
|
-
const currentYear = this.highlightedYear();
|
|
404
|
-
const newYear = isDefined(currentYear) ? currentYear + offset : null;
|
|
405
|
-
this.setHighlightedYear(newYear);
|
|
406
|
-
}
|
|
407
|
-
highlightPreviousYear(offset = 1) {
|
|
408
|
-
this.highlightNextYear(offset * -1);
|
|
409
|
-
}
|
|
410
|
-
highlightFirstYear() {
|
|
411
|
-
this.setHighlightedYear(this.currentYearRangeStart());
|
|
412
|
-
}
|
|
413
|
-
highlightLastYear() {
|
|
414
|
-
this.setHighlightedYear(this.currentYearRangeStart() + 23); // 24 years per page
|
|
415
|
-
}
|
|
416
|
-
highlightSameYearNextPage(multiple) {
|
|
417
|
-
const year = this.highlightedYear() ?? this.currentYearRangeStart();
|
|
418
|
-
this.setHighlightedYear(year + (multiple ? 60 : 24));
|
|
419
|
-
}
|
|
420
|
-
highlightSameYearPreviousPage(multiple) {
|
|
421
|
-
const year = this.highlightedYear() ?? this.currentYearRangeStart();
|
|
422
|
-
this.setHighlightedYear(year - (multiple ? 60 : 24));
|
|
423
|
-
}
|
|
424
|
-
onDocumentMousemove() {
|
|
425
|
-
this._isUsingKeyboard.set(false);
|
|
426
|
-
}
|
|
427
|
-
onDocumentKeydown() {
|
|
428
|
-
this._isUsingKeyboard.set(true);
|
|
429
|
-
}
|
|
430
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumCalendarComponent, deps: [{ token: ARD_CALENDAR_DEFAULTS }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
431
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ArdiumCalendarComponent, selector: "ard-calendar", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, activeView: { classPropertyName: "activeView", publicName: "activeView", isSignal: true, isRequired: false, transformFunction: null }, activeYear: { classPropertyName: "activeYear", publicName: "activeYear", isSignal: true, isRequired: false, transformFunction: null }, activeMonth: { classPropertyName: "activeMonth", publicName: "activeMonth", isSignal: true, isRequired: false, transformFunction: null }, firstWeekday: { classPropertyName: "firstWeekday", publicName: "firstWeekday", isSignal: true, isRequired: false, transformFunction: null }, multipleYearPageChangeModifier: { classPropertyName: "multipleYearPageChangeModifier", publicName: "multipleYearPageChangeModifier", isSignal: true, isRequired: false, transformFunction: null }, autoFocus: { classPropertyName: "autoFocus", publicName: "autoFocus", isSignal: true, isRequired: false, transformFunction: null }, selectedDate: { classPropertyName: "selectedDate", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeView: "activeViewChange", activeYear: "activeYearChange", activeMonth: "activeMonthChange", selectedDate: "selectedChange", yearSelect: "yearSelect", monthSelect: "monthSelect" }, host: { listeners: { "document:mousemove": "onDocumentMousemove()", "document:keydown": "onDocumentKeydown()" } }, providers: [
|
|
432
|
-
{
|
|
433
|
-
provide: NG_VALUE_ACCESSOR,
|
|
434
|
-
useExisting: forwardRef(() => ArdiumCalendarComponent),
|
|
435
|
-
multi: true,
|
|
436
|
-
},
|
|
437
|
-
{
|
|
438
|
-
provide: ARD_FORM_FIELD_CONTROL,
|
|
439
|
-
useExisting: ArdiumCalendarComponent,
|
|
440
|
-
},
|
|
441
|
-
], queries: [{ propertyName: "templateRepository", first: true, predicate: _CalendarTemplateRepositoryDirective, descendants: true, isSignal: true }, { propertyName: "yearsViewHeaderTemplate", first: true, predicate: ArdCalendarYearsViewHeaderTemplateDirective, descendants: true, isSignal: true }, { propertyName: "monthsViewHeaderTemplate", first: true, predicate: ArdCalendarMonthsViewHeaderTemplateDirective, descendants: true, isSignal: true }, { propertyName: "daysViewHeaderTemplate", first: true, predicate: ArdCalendarDaysViewHeaderTemplateDirective, descendants: true, isSignal: true }, { propertyName: "floatingMonthTemplate", first: true, predicate: ArdCalendarFloatingMonthTemplateDirective, descendants: true, isSignal: true }, { propertyName: "yearTemplate", first: true, predicate: ArdCalendarYearTemplateDirective, descendants: true, isSignal: true }, { propertyName: "monthTemplate", first: true, predicate: ArdCalendarMonthTemplateDirective, descendants: true, isSignal: true }, { propertyName: "dayTemplate", first: true, predicate: ArdCalendarDayTemplateDirective, descendants: true, isSignal: true }, { propertyName: "weekdayTemplate", first: true, predicate: ArdCalendarWeekdayTemplateDirective, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\r\n class=\"ard-calendar\"\r\n [ngClass]=\"ngClasses()\"\r\n>\r\n @switch (activeView()) {\r\n @case ('days') {\r\n <ard-days-view\r\n [tabIndex]=\"tabIndex()\"\r\n [readOnly]=\"readonly()\"\r\n [disabled]=\"disabled()\"\r\n [autoFocus]=\"autoFocus()\"\r\n [_isUsingKeyboard]=\"_isUsingKeyboard()\"\r\n [activeMonth]=\"activeMonth()\"\r\n [activeYear]=\"activeYear()\"\r\n [selectedDate]=\"selectedDate()\"\r\n [firstWeekday]=\"firstWeekday()\"\r\n [highlightedDay]=\"highlightedDay()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [isDayFilteredOut]=\"isDayFilteredOut()\"\r\n [daysViewHeaderTemplate]=\"daysViewHeaderTemplate()?.template ?? templateRepository()?.daysViewHeaderTmp()?.template\"\r\n [floatingMonthTemplate]=\"floatingMonthTemplate()?.template ?? templateRepository()?.floatingMonthTmp()?.template\"\r\n [weekdayTemplate]=\"weekdayTemplate()?.template ?? templateRepository()?.weekdayTmp()?.template\"\r\n [dayTemplate]=\"dayTemplate()?.template ?? templateRepository()?.dayTmp()?.template\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n (triggerOpenMonthsView)=\"onTriggerOpenMonthsView()\"\r\n (triggerOpenYearsView)=\"onTriggerOpenYearsView()\"\r\n (triggerChangeMonth)=\"changeMonth($event)\"\r\n (triggerChangeYear)=\"changeYear($event)\"\r\n (triggerHighlightDay)=\"setHighlightedDay($event)\"\r\n (triggerHighlightFirstDay)=\"highlightFirstDay()\"\r\n (triggerHighlightLastDay)=\"highlightLastDay()\"\r\n (triggerHighlightNextDay)=\"highlightNextDay($event)\"\r\n (triggerHighlightPreviousDay)=\"highlightPreviousDay($event)\"\r\n (triggerHighlightSameDayNextPage)=\"$event ? highlightSameDayNextYear() : highlightSameDayNextMonth()\"\r\n (triggerHighlightSameDayPreviousPage)=\"$event ? highlightSameDayPreviousYear() : highlightSameDayPreviousMonth()\"\r\n (triggerSelectDay)=\"selectDay($event)\"\r\n />\r\n }\r\n @case ('months') {\r\n <ard-months-view\r\n [tabIndex]=\"tabIndex()\"\r\n [readOnly]=\"readonly()\"\r\n [disabled]=\"disabled()\"\r\n [autoFocus]=\"autoFocus()\"\r\n [_isUsingKeyboard]=\"_isUsingKeyboard()\"\r\n [color]=\"color()\"\r\n [activeMonth]=\"activeMonth()\"\r\n [activeYear]=\"activeYear()\"\r\n [selectedDate]=\"selectedDate()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [highlightedMonth]=\"highlightedMonth()\"\r\n [monthsViewHeaderTemplate]=\"monthsViewHeaderTemplate()?.template ?? templateRepository()?.monthsViewHeaderTmp()?.template\"\r\n [monthTemplate]=\"monthTemplate()?.template ?? templateRepository()?.monthTmp()?.template\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n (triggerOpenDaysView)=\"onTriggerOpenDaysView()\"\r\n (triggerOpenYearsView)=\"onTriggerOpenYearsView()\"\r\n (triggeChangeYear)=\"changeYear($event)\"\r\n (triggerSelectMonth)=\"selectMonth($event)\"\r\n (triggerHighlightMonth)=\"setHighlightedMonth($event)\"\r\n (triggerHighlightFirstMonth)=\"highlightFirstMonth()\"\r\n (triggerHighlightLastMonth)=\"highlightLastMonth()\"\r\n (triggerHighlightNextMonth)=\"highlightNextMonth($event)\"\r\n (triggerHighlightPreviousMonth)=\"highlightPreviousMonth($event)\"\r\n (triggerHighlightSameMonthNextPage)=\"highlightSameMonthNextYear($event)\"\r\n (triggerHighlightSameMonthPreviousPage)=\"highlightSameMonthPreviousYear($event)\"\r\n />\r\n }\r\n @case ('years') {\r\n <ard-years-view\r\n [tabIndex]=\"tabIndex()\"\r\n [readOnly]=\"readonly()\"\r\n [disabled]=\"disabled()\"\r\n [autoFocus]=\"autoFocus()\"\r\n [_isUsingKeyboard]=\"_isUsingKeyboard()\"\r\n [highlightedYear]=\"highlightedYear()\"\r\n [currentYearRangeStart]=\"currentYearRangeStart()\"\r\n [activeYear]=\"activeYear()\"\r\n [selectedDate]=\"selectedDate()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [yearsViewHeaderTemplate]=\"yearsViewHeaderTemplate()?.template ?? templateRepository()?.yearsViewHeaderTmp()?.template\"\r\n [yearTemplate]=\"yearTemplate()?.template ?? templateRepository()?.yearTmp()?.template\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n (triggerOpenDaysView)=\"onTriggerOpenDaysView()\"\r\n (triggerOpenMonthsView)=\"onTriggerOpenMonthsView()\"\r\n (triggerSelectYear)=\"selectYear($event)\"\r\n (triggerChangeYearsViewPage)=\"changeYearsViewPage($event)\"\r\n (triggerHighlightYear)=\"setHighlightedYear($event)\"\r\n (triggerHighlightFirstYear)=\"highlightFirstYear()\"\r\n (triggerHighlightLastYear)=\"highlightLastYear()\"\r\n (triggerHighlightNextYear)=\"highlightNextYear($event)\"\r\n (triggerHighlightPreviousYear)=\"highlightPreviousYear($event)\"\r\n (triggerHighlightSameYearNextPage)=\"highlightSameYearNextPage($event)\"\r\n (triggerHighlightSameYearPreviousPage)=\"highlightSameYearPreviousPage($event)\"\r\n />\r\n }\r\n }\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.DaysViewComponent, selector: "ard-days-view", inputs: ["tabIndex", "readOnly", "disabled", "autoFocus", "_isUsingKeyboard", "activeYear", "activeMonth", "selectedDate", "min", "max", "isDayFilteredOut", "highlightedDay", "firstWeekday", "daysViewHeaderTemplate", "floatingMonthTemplate", "weekdayTemplate", "dayTemplate"], outputs: ["triggerOpenYearsView", "triggerOpenMonthsView", "triggerSelectDay", "triggerChangeMonth", "triggerChangeYear", "triggerHighlightDay", "triggerHighlightNextDay", "triggerHighlightPreviousDay", "triggerHighlightFirstDay", "triggerHighlightLastDay", "triggerHighlightSameDayPreviousPage", "triggerHighlightSameDayNextPage", "focus", "blur"] }, { kind: "component", type: i3.MonthsViewComponent, selector: "ard-months-view", inputs: ["tabIndex", "readOnly", "disabled", "autoFocus", "_isUsingKeyboard", "color", "activeYear", "activeMonth", "selectedDate", "min", "max", "highlightedMonth", "monthsViewHeaderTemplate", "monthTemplate"], outputs: ["triggerOpenYearsView", "triggerOpenDaysView", "focus", "blur", "triggerSelectMonth", "triggeChangeYear", "triggerHighlightMonth", "triggerHighlightNextMonth", "triggerHighlightPreviousMonth", "triggerHighlightFirstMonth", "triggerHighlightLastMonth", "triggerHighlightSameMonthPreviousPage", "triggerHighlightSameMonthNextPage"] }, { kind: "component", type: i4.YearsViewComponent, selector: "ard-years-view", inputs: ["tabIndex", "readOnly", "disabled", "autoFocus", "_isUsingKeyboard", "activeYear", "selectedDate", "min", "max", "currentYearRangeStart", "highlightedYear", "yearsViewHeaderTemplate", "yearTemplate"], outputs: ["triggerOpenMonthsView", "triggerOpenDaysView", "focus", "blur", "triggerSelectYear", "triggerChangeYearsViewPage", "triggerHighlightYear", "triggerHighlightNextYear", "triggerHighlightPreviousYear", "triggerHighlightFirstYear", "triggerHighlightLastYear", "triggerHighlightSameYearPreviousPage", "triggerHighlightSameYearNextPage"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
442
|
-
}
|
|
443
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumCalendarComponent, decorators: [{
|
|
444
|
-
type: Component,
|
|
445
|
-
args: [{ selector: 'ard-calendar', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
446
|
-
{
|
|
447
|
-
provide: NG_VALUE_ACCESSOR,
|
|
448
|
-
useExisting: forwardRef(() => ArdiumCalendarComponent),
|
|
449
|
-
multi: true,
|
|
450
|
-
},
|
|
451
|
-
{
|
|
452
|
-
provide: ARD_FORM_FIELD_CONTROL,
|
|
453
|
-
useExisting: ArdiumCalendarComponent,
|
|
454
|
-
},
|
|
455
|
-
], template: "<div\r\n class=\"ard-calendar\"\r\n [ngClass]=\"ngClasses()\"\r\n>\r\n @switch (activeView()) {\r\n @case ('days') {\r\n <ard-days-view\r\n [tabIndex]=\"tabIndex()\"\r\n [readOnly]=\"readonly()\"\r\n [disabled]=\"disabled()\"\r\n [autoFocus]=\"autoFocus()\"\r\n [_isUsingKeyboard]=\"_isUsingKeyboard()\"\r\n [activeMonth]=\"activeMonth()\"\r\n [activeYear]=\"activeYear()\"\r\n [selectedDate]=\"selectedDate()\"\r\n [firstWeekday]=\"firstWeekday()\"\r\n [highlightedDay]=\"highlightedDay()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [isDayFilteredOut]=\"isDayFilteredOut()\"\r\n [daysViewHeaderTemplate]=\"daysViewHeaderTemplate()?.template ?? templateRepository()?.daysViewHeaderTmp()?.template\"\r\n [floatingMonthTemplate]=\"floatingMonthTemplate()?.template ?? templateRepository()?.floatingMonthTmp()?.template\"\r\n [weekdayTemplate]=\"weekdayTemplate()?.template ?? templateRepository()?.weekdayTmp()?.template\"\r\n [dayTemplate]=\"dayTemplate()?.template ?? templateRepository()?.dayTmp()?.template\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n (triggerOpenMonthsView)=\"onTriggerOpenMonthsView()\"\r\n (triggerOpenYearsView)=\"onTriggerOpenYearsView()\"\r\n (triggerChangeMonth)=\"changeMonth($event)\"\r\n (triggerChangeYear)=\"changeYear($event)\"\r\n (triggerHighlightDay)=\"setHighlightedDay($event)\"\r\n (triggerHighlightFirstDay)=\"highlightFirstDay()\"\r\n (triggerHighlightLastDay)=\"highlightLastDay()\"\r\n (triggerHighlightNextDay)=\"highlightNextDay($event)\"\r\n (triggerHighlightPreviousDay)=\"highlightPreviousDay($event)\"\r\n (triggerHighlightSameDayNextPage)=\"$event ? highlightSameDayNextYear() : highlightSameDayNextMonth()\"\r\n (triggerHighlightSameDayPreviousPage)=\"$event ? highlightSameDayPreviousYear() : highlightSameDayPreviousMonth()\"\r\n (triggerSelectDay)=\"selectDay($event)\"\r\n />\r\n }\r\n @case ('months') {\r\n <ard-months-view\r\n [tabIndex]=\"tabIndex()\"\r\n [readOnly]=\"readonly()\"\r\n [disabled]=\"disabled()\"\r\n [autoFocus]=\"autoFocus()\"\r\n [_isUsingKeyboard]=\"_isUsingKeyboard()\"\r\n [color]=\"color()\"\r\n [activeMonth]=\"activeMonth()\"\r\n [activeYear]=\"activeYear()\"\r\n [selectedDate]=\"selectedDate()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [highlightedMonth]=\"highlightedMonth()\"\r\n [monthsViewHeaderTemplate]=\"monthsViewHeaderTemplate()?.template ?? templateRepository()?.monthsViewHeaderTmp()?.template\"\r\n [monthTemplate]=\"monthTemplate()?.template ?? templateRepository()?.monthTmp()?.template\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n (triggerOpenDaysView)=\"onTriggerOpenDaysView()\"\r\n (triggerOpenYearsView)=\"onTriggerOpenYearsView()\"\r\n (triggeChangeYear)=\"changeYear($event)\"\r\n (triggerSelectMonth)=\"selectMonth($event)\"\r\n (triggerHighlightMonth)=\"setHighlightedMonth($event)\"\r\n (triggerHighlightFirstMonth)=\"highlightFirstMonth()\"\r\n (triggerHighlightLastMonth)=\"highlightLastMonth()\"\r\n (triggerHighlightNextMonth)=\"highlightNextMonth($event)\"\r\n (triggerHighlightPreviousMonth)=\"highlightPreviousMonth($event)\"\r\n (triggerHighlightSameMonthNextPage)=\"highlightSameMonthNextYear($event)\"\r\n (triggerHighlightSameMonthPreviousPage)=\"highlightSameMonthPreviousYear($event)\"\r\n />\r\n }\r\n @case ('years') {\r\n <ard-years-view\r\n [tabIndex]=\"tabIndex()\"\r\n [readOnly]=\"readonly()\"\r\n [disabled]=\"disabled()\"\r\n [autoFocus]=\"autoFocus()\"\r\n [_isUsingKeyboard]=\"_isUsingKeyboard()\"\r\n [highlightedYear]=\"highlightedYear()\"\r\n [currentYearRangeStart]=\"currentYearRangeStart()\"\r\n [activeYear]=\"activeYear()\"\r\n [selectedDate]=\"selectedDate()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [yearsViewHeaderTemplate]=\"yearsViewHeaderTemplate()?.template ?? templateRepository()?.yearsViewHeaderTmp()?.template\"\r\n [yearTemplate]=\"yearTemplate()?.template ?? templateRepository()?.yearTmp()?.template\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n (triggerOpenDaysView)=\"onTriggerOpenDaysView()\"\r\n (triggerOpenMonthsView)=\"onTriggerOpenMonthsView()\"\r\n (triggerSelectYear)=\"selectYear($event)\"\r\n (triggerChangeYearsViewPage)=\"changeYearsViewPage($event)\"\r\n (triggerHighlightYear)=\"setHighlightedYear($event)\"\r\n (triggerHighlightFirstYear)=\"highlightFirstYear()\"\r\n (triggerHighlightLastYear)=\"highlightLastYear()\"\r\n (triggerHighlightNextYear)=\"highlightNextYear($event)\"\r\n (triggerHighlightPreviousYear)=\"highlightPreviousYear($event)\"\r\n (triggerHighlightSameYearNextPage)=\"highlightSameYearNextPage($event)\"\r\n (triggerHighlightSameYearPreviousPage)=\"highlightSameYearPreviousPage($event)\"\r\n />\r\n }\r\n }\r\n</div>\r\n" }]
|
|
456
|
-
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
457
|
-
type: Inject,
|
|
458
|
-
args: [ARD_CALENDAR_DEFAULTS]
|
|
459
|
-
}] }], propDecorators: { onDocumentMousemove: [{
|
|
460
|
-
type: HostListener,
|
|
461
|
-
args: ['document:mousemove']
|
|
462
|
-
}], onDocumentKeydown: [{
|
|
463
|
-
type: HostListener,
|
|
464
|
-
args: ['document:keydown']
|
|
465
|
-
}] } });
|
|
466
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixZQUFZLEVBQ1osTUFBTSxFQUNOLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNoRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUU5RSxPQUFPLEVBQUUscUJBQXFCLEVBQXVCLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUNMLDBDQUEwQyxFQUMxQywrQkFBK0IsRUFDL0IseUNBQXlDLEVBQ3pDLDRDQUE0QyxFQUM1QyxpQ0FBaUMsRUFDakMsbUNBQW1DLEVBQ25DLDJDQUEyQyxFQUMzQyxnQ0FBZ0MsR0FDakMsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RixPQUFPLEVBQXVCLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7Ozs7O0FBRXpFLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7QUFvQnpCLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSx1QkFBdUI7SUFFbEUsWUFBMkMsUUFBNkI7UUFDdEUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBUWxCLGNBQWM7UUFDTCxVQUFLLEdBQUcsS0FBSyxDQUFpQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXBELGNBQVMsR0FBRyxRQUFRLENBQUMsR0FBVyxFQUFFLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFckYsZUFBZTtRQUNOLGVBQVUsR0FBRyxLQUFLLENBQWtCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0QsZUFBVSxHQUFHLEtBQUssQ0FBUyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RELGdCQUFXLEdBQUcsS0FBSyxDQUFTLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFeEQsaUJBQVksR0FBRyxLQUFLLENBQWMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUU7WUFDdEUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFO2dCQUNiLE1BQU0sS0FBSyxHQUFHLG9CQUFvQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUM3QixPQUFPLENBQUMsS0FBSyxDQUNYLElBQUksS0FBSyxDQUFDLGdFQUFnRSxLQUFLLGlDQUFpQyxDQUFDLENBQ2xILENBQUM7b0JBQ0YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztnQkFDckMsQ0FBQztnQkFDRCxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUMzQixPQUFPLENBQUMsS0FBSyxDQUNYLElBQUksS0FBSyxDQUNQLDZEQUE2RCxLQUFLLCtDQUErQyxDQUNsSCxDQUNGLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxPQUFPLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDbkIsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUVNLG1DQUE4QixHQUFHLEtBQUssQ0FBYyxJQUFJLENBQUMsU0FBUyxDQUFDLDhCQUE4QixFQUFFO1lBQzFHLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRTtnQkFDYixNQUFNLEtBQUssR0FBRyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO2dCQUNyRixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzFDLE9BQU8sQ0FBQyxLQUFLLENBQ1gsSUFBSSxLQUFLLENBQ1AsaUZBQWlGLEtBQUssaUNBQWlDLENBQ3hILENBQ0YsQ0FBQztvQkFDRixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUM7Z0JBQ3ZELENBQUM7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRU0sY0FBUyxHQUFHLEtBQUssQ0FBZSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQVlqSCxTQUFTO1FBQ0EsaUJBQVksR0FBRyxLQUFLLENBQWMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFFL0QsZUFBVSxHQUFHLE1BQU0sRUFBVSxDQUFDO1FBQzlCLGdCQUFXLEdBQUcsTUFBTSxFQUFVLENBQUM7UUFFL0IsUUFBRyxHQUFHLEtBQUssQ0FBbUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDekQsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2hGLENBQUMsQ0FBQztRQUNNLFFBQUcsR0FBRyxLQUFLLENBQW1CLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3pELFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNoRixDQUFDLENBQUM7UUFFTSxXQUFNLEdBQUcsS0FBSyxDQUE2QixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBNkJsRSxxQkFBZ0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3hDLE9BQU8sQ0FBQyxHQUFXLEVBQUUsUUFBZ0IsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLE9BQWUsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFXLEVBQUU7Z0JBQ3BHLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDN0IsT0FBTyxNQUFNLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO1lBQ3ZELENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBcUJILHFCQUFxQjtRQUNKLHFCQUFnQixHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFDdkQsbUJBQWMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLENBQUM7UUFpSTdELHVCQUF1QjtRQUNOLHVCQUFrQixHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFDekQscUJBQWdCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxDQUFDO1FBa0dqRSxzQkFBc0I7UUFDTCxzQkFBaUIsR0FBRyxNQUFNLENBQWdCLElBQUksQ0FBQyxDQUFDO1FBQ3hELG9CQUFlLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRXRELDBCQUFxQixHQUFHLE1BQU0sQ0FBUyxLQUFLLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQ0FBaUM7UUF1RXZJLGFBQWE7UUFDSixxQkFBZ0IsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7UUFVbkQsYUFBYTtRQUNKLHVCQUFrQixHQUFHLFlBQVksQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1FBRXhFLDRCQUF1QixHQUFHLFlBQVksQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1FBQ3BGLDZCQUF3QixHQUFHLFlBQVksQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQ3RGLDJCQUFzQixHQUFHLFlBQVksQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1FBQ2xGLDBCQUFxQixHQUFHLFlBQVksQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBQ2hGLGlCQUFZLEdBQUcsWUFBWSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDOUQsa0JBQWEsR0FBRyxZQUFZLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUNoRSxnQkFBVyxHQUFHLFlBQVksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQzVELG9CQUFlLEdBQUcsWUFBWSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUExYzNFLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxpQkFBaUI7WUFDdEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQWlERCxxQkFBcUI7UUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDRCx1QkFBdUI7UUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFDRCxzQkFBc0I7UUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFpQlEsVUFBVSxDQUFDLENBQU07UUFDeEIsSUFBSSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsQ0FBQzthQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMseUVBQXlFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzRyxDQUFDO0lBQ0gsQ0FBQztJQUVrQixXQUFXO1FBQzVCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsYUFBYSxDQUFDLEdBQXlCO1FBQ3JDLElBQUksR0FBRyxZQUFZLElBQUk7WUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzdDLE9BQU8sQ0FDTCxJQUFJLENBQUMsWUFBWSxFQUFFLEtBQUssSUFBSTtZQUM1QixJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLFdBQVcsRUFBRTtZQUN4RCxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLFFBQVEsRUFBRTtZQUN0RCxHQUFHLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUN2QyxDQUFDO0lBQ0osQ0FBQztJQUNELGVBQWUsQ0FBQyxHQUFXLEVBQUUsUUFBZ0IsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLE9BQWUsSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUMvRixPQUFPLGVBQWUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQU9ELFNBQVMsQ0FBQyxHQUF5QjtRQUNqQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTztRQUNwQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUFFLE9BQU87WUFFNUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLEdBQUcsWUFBWSxJQUFJO1lBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPO1FBRS9FLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUNELDZCQUE2QjtRQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUFFLE9BQU87UUFFOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBTUQsaUJBQWlCLENBQUMsR0FBa0IsRUFBRSxRQUFnQixJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsT0FBZSxJQUFJLENBQUMsVUFBVSxFQUFFO1FBQ3hHLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QyxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTFELElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLFVBQVUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFFbkQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU87UUFFNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ08sZ0JBQWdCO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU87UUFFNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDekIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0Qsb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNELGdCQUFnQjtRQUNkLE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQ0QseUJBQXlCO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDL0IsTUFBTSxRQUFRLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUMzQixNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFDRCw2QkFBNkI7UUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvQixNQUFNLFFBQVEsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUNELHdCQUF3QjtRQUN0QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUNELDRCQUE0QjtRQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUVELG9CQUFvQjtJQUNwQixlQUFlLENBQUMsS0FBb0I7UUFDbEMsSUFBSSxLQUFLLFlBQVksSUFBSTtZQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEQsT0FBTyxDQUNMLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxJQUFJO1lBQzVCLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsV0FBVyxFQUFFO1lBQ3hELEtBQUssS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQzFDLENBQUM7SUFDSixDQUFDO0lBQ0QsaUJBQWlCLENBQUMsS0FBYSxFQUFFLE9BQWUsSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUMvRCxPQUFPLGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFDRCxXQUFXLENBQUMsUUFBdUI7UUFDakMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN2QyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUVuRCxJQUFJLFFBQVEsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDO2FBQU0sSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsV0FBVyxDQUFDLFFBQXVCO1FBQ2pDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7WUFBRSxPQUFPO1FBRWpFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFPO1FBRTNCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsK0JBQStCO1FBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFBRSxPQUFPO1FBRWhELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFHLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBTUQsbUJBQW1CLENBQUMsS0FBb0IsRUFBRSxPQUFlLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDeEUsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN2QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXZELElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDMUIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLFVBQVUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFdEQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTztRQUU1QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFDTyxrQkFBa0I7UUFDeEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTztRQUU1QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUMzQixNQUFNLFlBQVks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QUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDO2dCQUN0RCxLQUFLLEVBQUUsSUFBSTthQUNaO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLHNCQUFzQjtnQkFDL0IsV0FBVyxFQUFFLHVCQUF1QjthQUNyQztTQUNGLDBFQXdjMEMsb0NBQW9DLDBHQUUvQiwyQ0FBMkMsMkdBQzFDLDRDQUE0Qyx5R0FDOUMsMENBQTBDLHdHQUMzQyx5Q0FBeUMsK0ZBQ2xELGdDQUFnQyxnR0FDL0IsaUNBQWlDLDhGQUNuQywrQkFBK0Isa0dBQzNCLG1DQUFtQyx1RkMxZ0I3RSx1dEtBdUdBOzs0RkQ1Q2EsdUJBQXVCO2tCQWxCbkMsU0FBUzsrQkFDRSxjQUFjLGlCQUdULGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsd0JBQXdCLENBQUM7NEJBQ3RELEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSxzQkFBc0I7NEJBQy9CLFdBQVcseUJBQXlCO3lCQUNyQztxQkFDRjs7MEJBSVksTUFBTTsyQkFBQyxxQkFBcUI7eUNBMmJ6QyxtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMsb0JBQW9CO2dCQUtsQyxpQkFBaUI7c0JBRGhCLFlBQVk7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgY29tcHV0ZWQsXHJcbiAgY29udGVudENoaWxkLFxyXG4gIGVmZmVjdCxcclxuICBmb3J3YXJkUmVmLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbmplY3QsXHJcbiAgaW5wdXQsXHJcbiAgbW9kZWwsXHJcbiAgb3V0cHV0LFxyXG4gIHNpZ25hbCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlRGF0ZVByb3BlcnR5LCBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0BhcmRpdW0tdWkvZGV2a2l0JztcclxuaW1wb3J0IHsgcm91bmRGcm9tWmVybyB9IGZyb20gJ21vcmUtcm91bmRpbmcnO1xyXG5pbXBvcnQgeyBpc0RlZmluZWQsIGlzTnVsbCB9IGZyb20gJ3NpbXBsZS1ib29sJztcclxuaW1wb3J0IHsgX0Zvcm1GaWVsZENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi9faW50ZXJuYWwvZm9ybS1maWVsZC1jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBUkRfRk9STV9GSUVMRF9DT05UUk9MIH0gZnJvbSAnLi4vZm9ybS1maWVsZC9mb3JtLWZpZWxkLWNoaWxkLnRva2VuJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29sb3IgfSBmcm9tICcuLi90eXBlcy9jb2xvcnMudHlwZXMnO1xyXG5pbXBvcnQgeyBBUkRfQ0FMRU5EQVJfREVGQVVMVFMsIEFyZENhbGVuZGFyRGVmYXVsdHMgfSBmcm9tICcuL2NhbGVuZGFyLmRlZmF1bHRzJztcclxuaW1wb3J0IHtcclxuICBBcmRDYWxlbmRhckRheXNWaWV3SGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsXHJcbiAgQXJkQ2FsZW5kYXJEYXlUZW1wbGF0ZURpcmVjdGl2ZSxcclxuICBBcmRDYWxlbmRhckZsb2F0aW5nTW9udGhUZW1wbGF0ZURpcmVjdGl2ZSxcclxuICBBcmRDYWxlbmRhck1vbnRoc1ZpZXdIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSxcclxuICBBcmRDYWxlbmRhck1vbnRoVGVtcGxhdGVEaXJlY3RpdmUsXHJcbiAgQXJkQ2FsZW5kYXJXZWVrZGF5VGVtcGxhdGVEaXJlY3RpdmUsXHJcbiAgQXJkQ2FsZW5kYXJZZWFyc1ZpZXdIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSxcclxuICBBcmRDYWxlbmRhclllYXJUZW1wbGF0ZURpcmVjdGl2ZSxcclxufSBmcm9tICcuL2NhbGVuZGFyLmRpcmVjdGl2ZXMnO1xyXG5pbXBvcnQgeyBfQ2FsZW5kYXJUZW1wbGF0ZVJlcG9zaXRvcnlEaXJlY3RpdmUgfSBmcm9tICcuL2NhbGVuZGFyLmludGVybmFsLWRpcmVjdGl2ZXMnO1xyXG5pbXBvcnQgeyBBcmRDYWxlbmRhckZpbHRlckZuLCBBcmRDYWxlbmRhclZpZXcgfSBmcm9tICcuL2NhbGVuZGFyLnR5cGVzJztcclxuaW1wb3J0IHsgaXNEYXlPdXRPZlJhbmdlIH0gZnJvbSAnLi92aWV3cy9kYXlzLXZpZXcvZGF5cy12aWV3LmhlbHBlcnMnO1xyXG5pbXBvcnQgeyBpc01vbnRoT3V0T2ZSYW5nZSB9IGZyb20gJy4vdmlld3MvbW9udGhzLXZpZXcvbW9udGhzLXZpZXcuaGVscGVycyc7XHJcbmltcG9ydCB7IGlzWWVhck91dE9mUmFuZ2UgfSBmcm9tICcuL3ZpZXdzL3llYXJzLXZpZXcveWVhcnMtdmlldy5oZWxwZXJzJztcclxuXHJcbmNvbnN0IFRPREFZID0gbmV3IERhdGUoKTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXJkLWNhbGVuZGFyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFyZGl1bUNhbGVuZGFyQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBBUkRfRk9STV9GSUVMRF9DT05UUk9MLFxyXG4gICAgICB1c2VFeGlzdGluZzogQXJkaXVtQ2FsZW5kYXJDb21wb25lbnQsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcmRpdW1DYWxlbmRhckNvbXBvbmVudCBleHRlbmRzIF9Gb3JtRmllbGRDb21wb25lbnRCYXNlIHtcclxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVhZG9ubHkgX0RFRkFVTFRTITogQXJkQ2FsZW5kYXJEZWZhdWx0cztcclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KEFSRF9DQUxFTkRBUl9ERUZBVUxUUykgZGVmYXVsdHM6IEFyZENhbGVuZGFyRGVmYXVsdHMpIHtcclxuICAgIHN1cGVyKGRlZmF1bHRzKTtcclxuXHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSgpOyAvLyB0cmlnZ2VyIGVmZmVjdFxyXG4gICAgICB0aGlzLl9lbWl0Q2hhbmdlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vISBhcHBlYXJhbmNlXHJcbiAgcmVhZG9ubHkgY29sb3IgPSBpbnB1dDxDb21wb25lbnRDb2xvcj4odGhpcy5fREVGQVVMVFMuY29sb3IpO1xyXG5cclxuICByZWFkb25seSBuZ0NsYXNzZXMgPSBjb21wdXRlZCgoKTogc3RyaW5nID0+IFtgYXJkLWNvbG9yLSR7dGhpcy5jb2xvcigpfWBdLmpvaW4oJyAnKSk7XHJcblxyXG4gIC8vISBhY3RpdmUgdmlld1xyXG4gIHJlYWRvbmx5IGFjdGl2ZVZpZXcgPSBtb2RlbDxBcmRDYWxlbmRhclZpZXc+KHRoaXMuX0RFRkFVTFRTLmFjdGl2ZVZpZXcpO1xyXG4gIHJlYWRvbmx5IGFjdGl2ZVllYXIgPSBtb2RlbDxudW1iZXI+KHRoaXMuX0RFRkFVTFRTLmFjdGl2ZVllYXIpO1xyXG4gIHJlYWRvbmx5IGFjdGl2ZU1vbnRoID0gbW9kZWw8bnVtYmVyPih0aGlzLl9ERUZBVUxUUy5hY3RpdmVNb250aCk7XHJcblxyXG4gIHJlYWRvbmx5IGZpcnN0V2Vla2RheSA9IGlucHV0PG51bWJlciwgYW55Pih0aGlzLl9ERUZBVUxUUy5maXJzdFdlZWtkYXksIHtcclxuICAgIHRyYW5zZm9ybTogdiA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodiwgdGhpcy5fREVGQVVMVFMuZmlyc3RXZWVrZGF5KTtcclxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICBuZXcgRXJyb3IoYEFSRC1ORjIwMDFBOiBbZmlyc3RXZWVrZGF5XSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgZ290IFwiJHt2YWx1ZX1cIi4gVXNpbmcgZGVmYXVsdCB2YWx1ZSBpbnN0ZWFkLmApXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fREVGQVVMVFMuZmlyc3RXZWVrZGF5O1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiA2KSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgIG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYEFSRC1ORjIwMDFCOiBbZmlyc3RXZWVrZGF5XSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiwgZ290IFwiJHt2YWx1ZX1cIi4gVXNpbmcgbW9kdWxvIG9wZXJhdG9yIHRvIGFkanVzdCB0aGUgdmFsdWUuYFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHZhbHVlICUgNztcclxuICAgIH0sXHJcbiAgfSk7XHJcblxyXG4gIHJlYWRvbmx5IG11bHRpcGxlWWVhclBhZ2VDaGFuZ2VNb2RpZmllciA9IGlucHV0PG51bWJlciwgYW55Pih0aGlzLl9ERUZBVUxUUy5tdWx0aXBsZVllYXJQYWdlQ2hhbmdlTW9kaWZpZXIsIHtcclxuICAgIHRyYW5zZm9ybTogdiA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodiwgdGhpcy5fREVGQVVMVFMubXVsdGlwbGVZZWFyUGFnZUNoYW5nZU1vZGlmaWVyKTtcclxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSB8fCB2YWx1ZSA8IDEpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgQVJELU5GMjAwMjogW211bHRpcGxlWWVhclBhZ2VDaGFuZ2VNb2RpZmllcl0gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIsIGdvdCBcIiR7dmFsdWV9XCIuIFVzaW5nIGRlZmF1bHQgdmFsdWUgaW5zdGVhZC5gXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fREVGQVVMVFMubXVsdGlwbGVZZWFyUGFnZUNoYW5nZU1vZGlmaWVyO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH0sXHJcbiAgfSk7XHJcblxyXG4gIHJlYWRvbmx5IGF1dG9Gb2N1cyA9IGlucHV0PGJvb2xlYW4sIGFueT4odGhpcy5fREVGQVVMVFMuYXV0b0ZvY3VzLCB7IHRyYW5zZm9ybTogdiA9PiBjb2VyY2VCb29sZWFuUHJvcGVydHkodikgfSk7XHJcblxyXG4gIG9uVHJpZ2dlck9wZW5EYXlzVmlldygpOiB2b2lkIHtcclxuICAgIHRoaXMuYWN0aXZlVmlldy5zZXQoQXJkQ2FsZW5kYXJWaWV3LkRheXMpO1xyXG4gIH1cclxuICBvblRyaWdnZXJPcGVuTW9udGhzVmlldygpOiB2b2lkIHtcclxuICAgIHRoaXMuYWN0aXZlVmlldy5zZXQoQXJkQ2FsZW5kYXJWaWV3Lk1vbnRocyk7XHJcbiAgfVxyXG4gIG9uVHJpZ2dlck9wZW5ZZWFyc1ZpZXcoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFjdGl2ZVZpZXcuc2V0KEFyZENhbGVuZGFyVmlldy5ZZWFycyk7XHJcbiAgfVxyXG5cclxuICAvLyEgdmFsdWVcclxuICByZWFkb25seSBzZWxlY3RlZERhdGUgPSBtb2RlbDxEYXRlIHwgbnVsbD4obnVsbCwgeyBhbGlhczogJ3NlbGVjdGVkJyB9KTtcclxuXHJcbiAgcmVhZG9ubHkgeWVhclNlbGVjdCA9IG91dHB1dDxudW1iZXI+KCk7XHJcbiAgcmVhZG9ubHkgbW9udGhTZWxlY3QgPSBvdXRwdXQ8bnVtYmVyPigpO1xyXG5cclxuICByZWFkb25seSBtaW4gPSBpbnB1dDxEYXRlIHwgbnVsbCwgYW55Pih0aGlzLl9ERUZBVUxUUy5taW4sIHtcclxuICAgIHRyYW5zZm9ybTogdiA9PiAodiA9PT0gbnVsbCA/IG51bGwgOiBjb2VyY2VEYXRlUHJvcGVydHkodiwgdGhpcy5fREVGQVVMVFMubWluKSksXHJcbiAgfSk7XHJcbiAgcmVhZG9ubHkgbWF4ID0gaW5wdXQ8RGF0ZSB8IG51bGwsIGFueT4odGhpcy5fREVGQVVMVFMubWF4LCB7XHJcbiAgICB0cmFuc2Zvcm06IHYgPT4gKHYgPT09IG51bGwgPyBudWxsIDogY29lcmNlRGF0ZVByb3BlcnR5KHYsIHRoaXMuX0RFRkFVTFRTLm1heCkpLFxyXG4gIH0pO1xyXG5cclxuICByZWFkb25seSBmaWx0ZXIgPSBpbnB1dDxBcmRDYWxlbmRhckZpbHRlckZuIHwgbnVsbD4odGhpcy5fREVGQVVMVFMuZmlsdGVyKTtcclxuXHJcbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZSh2OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZS5zZXQodik7XHJcbiAgICB9IGVsc2UgaWYgKCFpc0RlZmluZWQodikpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZERhdGUuc2V0KG51bGwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihuZXcgRXJyb3IoYEFSRC1ORjIwMDM6IDxhcmQtY2FsZW5kYXI+IFt3cml0ZVZhbHVlXSBleHBlY3RlZCBhIERhdGUgb3IgbnVsbCwgZ290IFwiJHt2fVwiLmApKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvdmVycmlkZSBfZW1pdENoYW5nZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX29uQ2hhbmdlUmVnaXN0ZXJlZD8uKHRoaXMuc2VsZWN0ZWREYXRlKCkpO1xyXG4gIH1cclxuXHJcbiAgLy8hIHNlbGVjdGluZyBkYXlzXHJcbiAgaXNEYXlTZWxlY3RlZChkYXk6IG51bWJlciB8IERhdGUgfCBudWxsKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZGF5IGluc3RhbmNlb2YgRGF0ZSkgZGF5ID0gZGF5LmdldERhdGUoKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlKCkgIT09IG51bGwgJiZcclxuICAgICAgdGhpcy5hY3RpdmVZZWFyKCkgPT09IHRoaXMuc2VsZWN0ZWREYXRlKCk/LmdldEZ1bGxZZWFyKCkgJiZcclxuICAgICAgdGhpcy5hY3RpdmVNb250aCgpID09PSB0aGlzLnNlbGVjdGVkRGF0ZSgpPy5nZXRNb250aCgpICYmXHJcbiAgICAgIGRheSA9PT0gdGhpcy5zZWxlY3RlZERhdGUoKT8uZ2V0RGF0ZSgpXHJcbiAgICApO1xyXG4gIH1cclxuICBpc0RheU91dE9mUmFuZ2UoZGF5OiBudW1iZXIsIG1vbnRoOiBudW1iZXIgPSB0aGlzLmFjdGl2ZU1vbnRoKCksIHllYXI6IG51bWJlciA9IHRoaXMuYWN0aXZlWWVhcigpKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBpc0RheU91dE9mUmFuZ2UoZGF5LCBtb250aCwgeWVhciwgdGhpcy5taW4oKSwgdGhpcy5tYXgoKSk7XHJcbiAgfVxyXG4gIHJlYWRvbmx5IGlzRGF5RmlsdGVyZWRPdXQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICByZXR1cm4gKGRheTogbnVtYmVyLCBtb250aDogbnVtYmVyID0gdGhpcy5hY3RpdmVNb250aCgpLCB5ZWFyOiBudW1iZXIgPSB0aGlzLmFjdGl2ZVllYXIoKSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmZpbHRlcigpO1xyXG4gICAgICByZXR1cm4gZmlsdGVyPy4obmV3IERhdGUoeWVhciwgbW9udGgsIGRheSkpID8/IGZhbHNlO1xyXG4gICAgfTtcclxuICB9KTtcclxuICBzZWxlY3REYXkoZGF5OiBudW1iZXIgfCBEYXRlIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNEYXlTZWxlY3RlZChkYXkpKSByZXR1cm47XHJcbiAgICBpZiAoaXNOdWxsKGRheSkpIHtcclxuICAgICAgaWYgKCFpc0RlZmluZWQodGhpcy5zZWxlY3RlZERhdGUoKSkpIHJldHVybjtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlLnNldChudWxsKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXkgaW5zdGFuY2VvZiBEYXRlKSBkYXkgPSBkYXkuZ2V0RGF0ZSgpO1xyXG4gICAgaWYgKChkYXkgJiYgdGhpcy5pc0RheU91dE9mUmFuZ2UoZGF5KSkgfHwgdGhpcy5pc0RheUZpbHRlcmVkT3V0KCkoZGF5KSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWREYXRlLnNldChuZXcgRGF0ZSh0aGlzLmFjdGl2ZVllYXIoKSwgdGhpcy5hY3RpdmVNb250aCgpLCBkYXksIDAsIDAsIDAsIDApKTtcclxuICB9XHJcbiAgc2VsZWN0Q3VycmVudGx5SGlnaGxpZ2h0ZWREYXkoKTogdm9pZCB7XHJcbiAgICBpZiAoIWlzRGVmaW5lZCh0aGlzLmhpZ2hsaWdodGVkRGF5KCkpKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5zZWxlY3REYXkodGhpcy5oaWdobGlnaHRlZERheSgpKTtcclxuICB9XHJcblxyXG4gIC8vISBoaWdobGlnaHRpbmcgZGF5c1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX19oaWdobGlnaHRlZERheSA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcclxuICByZWFkb25seSBoaWdobGlnaHRlZERheSA9IHRoaXMuX19oaWdobGlnaHRlZERheS5hc1JlYWRvbmx5KCk7XHJcblxyXG4gIHNldEhpZ2hsaWdodGVkRGF5KGRheTogbnVtYmVyIHwgbnVsbCwgbW9udGg6IG51bWJlciA9IHRoaXMuYWN0aXZlTW9udGgoKSwgeWVhcjogbnVtYmVyID0gdGhpcy5hY3RpdmVZZWFyKCkpOiB2b2lkIHtcclxuICAgIGlmIChpc051bGwoZGF5KSkge1xyXG4gICAgICB0aGlzLl9faGlnaGxpZ2h0ZWREYXkudXBkYXRlKCgpID0+IGRheSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcclxuICAgIGNvbnN0IG91dE9mUmFuZ2UgPSB0aGlzLmlzRGF5T3V0T2ZSYW5nZShkYXksIG1vbnRoLCB5ZWFyKTtcclxuXHJcbiAgICBpZiAob3V0T2ZSYW5nZSA9PT0gLTEpIHtcclxuICAgICAgdGhpcy5faGlnaGxpZ2h0TWluRGF5KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChvdXRPZlJhbmdlID09PSAxKSB7XHJcbiAgICAgIHRoaXMuX2hpZ2hsaWdodE1heERheSgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fX2hpZ2hsaWdodGVkRGF5LnVwZGF0ZSgoKSA9PiBkYXRlLmdldERhdGUoKSk7XHJcblxyXG4gICAgaWYgKGRhdGUuZ2V0RnVsbFllYXIoKSAhPT0gdGhpcy5hY3RpdmVZZWFyKCkpIHtcclxuICAgICAgdGhpcy5hY3RpdmVZZWFyLnNldChkYXRlLmdldEZ1bGxZZWFyKCkpO1xyXG4gICAgfVxyXG4gICAgaWYgKGRhdGUuZ2V0TW9udGgoKSAhPT0gdGhpcy5hY3RpdmVNb250aCgpKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlTW9udGguc2V0KGRhdGUuZ2V0TW9udGgoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oaWdobGlnaHRNaW5EYXkoKTogdm9pZCB7XHJcbiAgICBjb25zdCBtaW4gPSB0aGlzLm1pbigpO1xyXG4gICAgaWYgKCFpc0RlZmluZWQobWluKSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuYWN0aXZlWWVhci5zZXQobWluLmdldEZ1bGxZZWFyKCkpO1xyXG4gICAgdGhpcy5hY3RpdmVNb250aC5zZXQobWluLmdldE1vbnRoKCkpO1xyXG4gICAgdGhpcy5fX2hpZ2hsaWdodGVkRGF5LnNldChtaW4uZ2V0RGF0ZSgpKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaGlnaGxpZ2h0TWF4RGF5KCk6IHZvaWQge1xyXG4gICAgY29uc3QgbWF4ID0gdGhpcy5tYXgoKTtcclxuICAgIGlmICghaXNEZWZpbmVkKG1heCkpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmFjdGl2ZVllYXIuc2V0KG1heC5nZXRGdWxsWWVhcigpKTtcclxuICAgIHRoaXMuYWN0aXZlTW9udGguc2V0KG1heC5nZXRNb250aCgpKTtcclxuICAgIHRoaXMuX19oaWdobGlnaHRlZERheS5zZXQobWF4LmdldERhdGUoKSk7XHJcbiAgfVxyXG5cclxuICBoaWdobGlnaHROZXh0RGF5KG9mZnNldCA9IDEpOiB2b2lkIHtcclxuICAgIGNvbnN0IGN1cnJlbnREYXkgPSB0aGlzLmhpZ2hsaWdodGVkRGF5KCk7XHJcbiAgICBjb25zdCBuZXdEYXkgPSBpc0RlZmluZWQoY3VycmVudERheSkgPyBjdXJyZW50RGF5ICsgb2Zmc2V0IDogMTtcclxuICAgIHRoaXMuc2V0SGlnaGxpZ2h0ZWREYXkobmV3RGF5KTtcclxuICB9XHJcbiAgaGlnaGxpZ2h0UHJldmlvdXNEYXkob2Zmc2V0ID0gMSk6IHZvaWQge1xyXG4gICAgdGhpcy5oaWdobGlnaHROZXh0RGF5KG9mZnNldCAqIC0xKTtcclxuICB9XHJcbiAgaGlnaGxpZ2h0Rmlyc3REYXkoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldEhpZ2hsaWdodGVkRGF5KDEpO1xyXG4gIH1cclxuICBoaWdobGlnaHRMYXN0RGF5KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZGF5c0luTW9udGggPSBuZXcgRGF0ZSh0aGlzLmFjdGl2ZVllYXIoKSwgdGhpcy5hY3RpdmVNb250aCgpICsgMSwgMCkuZ2V0RGF0ZSgpO1xyXG4gICAgdGhpcy5zZXRIaWdobGlnaHRlZERheShkYXlzSW5Nb250aCk7XHJcbiAgfVxyXG4gIGhpZ2hsaWdodFNhbWVEYXlOZXh0TW9udGgoKTogdm9pZCB7XHJcbiAgICBjb25zdCBtb250aCA9IHRoaXMuYWN0aXZlTW9udGgoKTtcclxuICAgIGNvbnN0IHllYXIgPSB0aGlzLmFjdGl2ZVllYXIoKTtcclxuICAgIGNvbnN0IG5ld01vbnRoID0gbW9udGggKyAxO1xyXG4gICAgY29uc3QgbmV3WWVhciA9IHllYXIgKyBNYXRoLmZsb29yKG5ld01vbnRoIC8gMTIpO1xyXG4gICAgdGhpcy5zZXRIaWdobGlnaHRlZERheSh0aGlzLmhpZ2hsaWdodGVkRGF5KCksIG5ld01vbnRoICUgMTIsIG5ld1llYXIpO1xyXG4gIH1cclxuICBoaWdobGlnaHRTYW1lRGF5UHJldmlvdXNNb250aCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IG1vbnRoID0gdGhpcy5hY3RpdmVNb250aCgpO1xyXG4gICAgY29uc3QgeWVhciA9IHRoaXMuYWN0aXZlWWVhcigpO1xyXG4gICAgY29uc3QgbmV3TW9udGggPSBtb250aCAtIDE7XHJcbiAgICBjb25zdCBuZXdZZWFyID0geWVhciArIE1hdGguZmxvb3IobmV3TW9udGggLyAxMik7XHJcbiAgICB0aGlzLnNldEhpZ2hsaWdodGVkRGF5KHRoaXMuaGlnaGxpZ2h0ZWREYXkoKSwgbmV3TW9udGggJSAxMiwgbmV3WWVhcik7XHJcbiAgfVxyXG4gIGhpZ2hsaWdodFNhbWVEYXlOZXh0WWVhcigpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0SGlnaGxpZ2h0ZWREYXkodGhpcy5oaWdobGlnaHRlZERheSgpLCB0aGlzLmFjdGl2ZU1vbnRoKCksIHRoaXMuYWN0aXZlWWVhcigpICsgMSk7XHJcbiAgfVxyXG4gIGhpZ2hsaWdodFNhbWVEYXlQcmV2aW91c1llYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldEhpZ2hsaWdodGVkRGF5KHRoaXMuaGlnaGxpZ2h0ZWREYXkoKSwgdGhpcy5hY3RpdmVNb250aCgpLCB0aGlzLmFjdGl2ZVllYXIoKSAtIDEpO1xyXG4gIH1cclxuXHJcbiAgLy8hIHNlbGVjdGluZyBtb250aHNcclxuICBpc01vbnRoU2VsZWN0ZWQobW9udGg6IG51bWJlciB8IERhdGUpOiBib29sZWFuIHtcclxuICAgIGlmIChtb250aCBpbnN0YW5jZW9mIERhdGUpIG1vbnRoID0gbW9udGguZ2V0TW9udGgoKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlKCkgIT09IG51bGwgJiZcclxuICAgICAgdGhpcy5hY3RpdmVZZWFyKCkgPT09IHRoaXMuc2VsZWN0ZWREYXRlKCk/LmdldEZ1bGxZZWFyKCkgJiZcclxuICAgICAgbW9udGggPT09IHRoaXMuc2VsZWN0ZWREYXRlKCk/LmdldE1vbnRoKClcclxuICAgICk7XHJcbiAgfVxyXG4gIGlzTW9udGhPdXRPZlJhbmdlKG1vbnRoOiBudW1iZXIsIHllYXI6IG51bWJlciA9IHRoaXMuYWN0aXZlWWVhcigpKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBpc01vbnRoT3V0T2ZSYW5nZShtb250aCwgeWVhciwgdGhpcy5taW4oKSwgdGhpcy5tYXgoKSk7XHJcbiAgfVxyXG4gIGNoYW5nZU1vbnRoKG5ld01vbnRoOiBudW1iZXIgfCBudWxsKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoaXNOdWxsKG5ld01vbnRoKSkge1xyXG4gICAgICB0aGlzLmFjdGl2ZU1vbnRoLnNldChUT0RBWS5nZXRNb250aCgpKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNNb250aE91dE9mUmFuZ2UobmV3TW9udGgpKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKG5ld01vbnRoID4gMTEpIHtcclxuICAgICAgdGhpcy5hY3RpdmVNb250aC5zZXQoMCk7XHJcbiAgICAgIHRoaXMuYWN0aXZlWWVhci51cGRhdGUodiA9PiB2ICsgMSk7XHJcbiAgICB9IGVsc2UgaWYgKG5ld01vbnRoIDwgMCkge1xyXG4gICAgICB0aGlzLmFjdGl2ZU1vbnRoLnNldCgxMSk7XHJcbiAgICAgIHRoaXMuYWN0aXZlWWVhci51cGRhdGUodiA9PiB2IC0gMSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFjdGl2ZU1vbnRoLnNldChuZXdNb250aCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG4gIHNlbGVjdE1vbnRoKG5ld01vbnRoOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XHJcbiAgICBpZiAoaXNOdWxsKG5ld01vbnRoKSB8fCB0aGlzLmlzTW9udGhPdXRPZlJhbmdlKG5ld01vbnRoKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHdhc1N1Y2Nlc3NmdWwgPSB0aGlzLmNoYW5nZU1vbnRoKG5ld01vbnRoKTtcclxuICAgIGlmICghd2FzU3VjY2Vzc2Z1bCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuYWN0aXZlVmlldy5zZXQoQXJkQ2FsZW5kYXJWaWV3LkRheXMpO1xyXG4gICAgdGhpcy5tb250aFNlbGVjdC5lbWl0KG5ld01vbnRoKTtcclxuICB9XHJcbiAgc2VsZWN0Q3VycmVudGx5SGlnaGxpZ2h0ZWRNb250aCgpOiB2b2lkIHtcclxuICAgIGlmICghaXNEZWZpbmVkKHRoaXMuaGlnaGxpZ2h0ZWRNb250aCgpKSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0TW9udGgodGhpcy5oaWdobGlnaHRlZE1vbnRoKCkhKTtcclxuICB9XHJcblxyXG4gIC8vISBoaWdobGlnaHRpbmcgbW9udGhzXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfX2hpZ2hsaWdodGVkTW9udGggPSBzaWduYWw8bnVtYmVyIHwgbnVsbD4obnVsbCk7XHJcbiAgcmVhZG9ubHkgaGlnaGxpZ2h0ZWRNb250aCA9IHRoaXMuX19oaWdobGlnaHRlZE1vbnRoLmFzUmVhZG9ubHkoKTtcclxuXHJcbiAgc2V0SGlnaGxpZ2h0ZWRNb250aChtb250aDogbnVtYmVyIHwgbnVsbCwgeWVhcjogbnVtYmVyID0gdGhpcy5hY3RpdmVZZWFyKCkpOiB2b2lkIHtcclxuICAgIGlmIChpc051bGwobW9udGgpKSB7XHJcbiAgICAgIHRoaXMuX19oaWdobGlnaHRlZE1vbnRoLnVwZGF0ZSgoKSA9PiBtb250aCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMTUpO1xyXG4gICAgY29uc3Qgb3V0T2ZSYW5nZSA9IHRoaXMuaXNNb250aE91dE9mUmFuZ2UobW9udGgsIHllYXIpO1xyXG5cclxuICAgIGlmIChvdXRPZlJhbmdlID09PSAtMSkge1xyXG4gICAgICB0aGlzLl9oaWdobGlnaHRNaW5Nb250aCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAob3V0T2ZSYW5nZSA9PT0gMSkge1xyXG4gICAgICB0aGlzLl9oaWdobGlnaHRNYXhNb250aCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fX2hpZ2hsaWdodGVkTW9udGgudXBkYXRlKCgpID0+IGRhdGUuZ2V0TW9udGgoKSk7XHJcblxyXG4gICAgaWYgKGRhdGUuZ2V0RnVsbFllYXIoKSAhPT0gdGhpcy5hY3RpdmVZZWFyKCkpIHtcclxuICAgICAgdGhpcy5hY3RpdmVZZWFyLnNldChkYXRlLmdldEZ1bGxZZWFyKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGlnaGxpZ2h0TWluTW9udGgoKTogdm9pZCB7XHJcbiAgICBjb25zdCBtaW4gPSB0aGlzLm1pbigpO1xyXG4gICAgaWYgKCFpc0RlZmluZWQobWluKSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuYWN0aXZlWWVhci5zZXQobWluLmdldEZ1bGxZZWFyKCkpO1xyXG4gICAgdGhpcy5fX2hpZ2hsaWdodGVkTW9udGguc2V0KG1pbi5nZXRNb250aCgpKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaGlnaGxpZ2h0TWF4TW9udGgoKTogdm9pZCB7XHJcbiAgICBjb25zdCBtYXggPSB0aGlzLm1heCgpO1xyXG4gICAgaWYgKCFpc0RlZmluZWQobWF4KSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuYWN0aXZlWWVhci5zZXQobWF4LmdldEZ1bGxZZWFyKCkpO1xyXG4gICAgdGhpcy5fX2hpZ2hsaWdodGVkTW9udGguc2V0KG1heC5nZXRNb250aCgpKTtcclxuICB9XHJcblxyXG4gIGhpZ2hsaWdodE5leHRNb250aChvZmZzZXQgPSAxKTogdm9pZCB7XHJcbiAgICBjb25zdCBjdXJyZW50TW9udGggPSB0aGlzLmhpZ2hsaWdodGVkTW9udGgoKTtcclxuICAgIGNvbnN0IG5ld01vbnRoID0gaXNEZWZpbmVkKGN1cnJlbnRNb250aCkgPyBjdXJyZW50TW9udGggKyBvZmZzZXQgOiAwO1xyXG4gICAgdGhpcy5zZXRIaWdobGlnaHRlZE1vbnRoKG5ld01vbnRoKTtcclxuICB9XHJcbiAgaGlnaGxpZ2h0UHJldmlvdXNNb250aChvZmZzZXQgPSAxKTogdm9pZCB7XHJcbiAgICB0aGlzLmhpZ2hsaWdodE5leHRNb250aChvZmZzZXQgKiAtMSk7XHJcbiAgfVxyXG4gIGhpZ2hsaWdodEZpcnN0TW9udGgoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldEhpZ2hsaWdodGVkTW9udGgoMCk7XHJcbiAgfVxyXG4gIGhpZ2hsaWdodExhc3RNb250aCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0SGlnaGxpZ2h0ZWRNb250aCgxMSk7XHJcbiAgfVxyXG4gIGhpZ2hsaWdodFNhbWVNb250aE5leHRZZWFyKG11bHRpcGxlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldEhpZ2hsaWdodGVkTW9udGgodGhpcy5oaWdobGlnaHRlZE1vbnRoKCksIHRoaXMuYWN0aXZlWWVhcigpICsgKG11bHRpcGxlID8gMTAgOiAxKSk7XHJcbiAgfVxyXG4gIGhpZ2hsaWdodFNhbWVNb250aFByZXZpb3VzWWVhcihtdWx0aXBsZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRIaWdobGlnaHRlZE1vbnRoKHRoaXMuaGlnaGxpZ2h0ZWRNb250aCgpLCB0aGlzLmFjdGl2ZVllYXIoKSAtIChtdWx0aXBsZSA/IDEwIDogMSkpO1xyXG4gIH1cclxuXHJcbiAgLy8hIHNlbGVjdGluZyB5ZWFyc1xyXG4gIGlzWWVhclNlbGVjdGVkKHllYXI6IG51bWJlciB8IERhdGUpOiBib29sZWFuIHtcclxuICAgIGlmICh5ZWFyIGluc3RhbmNlb2YgRGF0ZSkgeWVhciA9IHllYXIuZ2V0RnVsbFllYXIoKTtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRGF0ZSgpICE9PSBudWxsICYmIHllYXIgPT09IHRoaXMuc2VsZWN0ZWREYXRlKCk/LmdldEZ1bGxZZWFyKCk7XHJcbiAgfVxyXG4gIGlzWWVhck91dE9mUmFuZ2UoeWVhcjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBpc1llYXJPdXRPZlJhbmdlKHllYXIsIHRoaXMubWluKCksIHRoaXMubWF4KCkpO1xyXG4gIH1cclxuICBjaGFuZ2VZZWFyKHllYXI6IG51bWJlciB8IG51bGwpOiBib29sZWFuIHtcclxuICAgIGlmIChpc051bGwoeWVhcikpIHtcclxuICAgICAgdGhpcy5hY3RpdmVZZWFyLnNldChUT0RBWS5nZXRGdWxsWWVhcigpKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNZZWFyT3V0T2ZSYW5nZSh5ZWFyKSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIHRoaXMuYWN0aXZlWWVhci5zZXQoeWVhcik7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG4gIHNlbGVjdFllYXIoeWVhcjogbnVtYmVyIHwgRGF0ZSB8IG51bGwpOiB2b2lkIHtcclxuICAgIGlmIChpc051bGwoeWVhcikpIHJldHVybjtcclxuICAgIGlmICh5ZWFyIGluc3RhbmNlb2YgRGF0ZSkgeWVhciA9IHllYXIuZ2V0RnVsbFllYXIoKTtcclxuXHJcbiAgICBjb25zdCB3YXNTdWNjZXNzZnVsID0gdGhpcy5jaGFuZ2VZZWFyKHllYXIpO1xyXG4gICAgaWYgKCF3YXNTdWNjZXNzZnVsKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5hY3RpdmVWaWV3LnNldChBcmRDYWxlbmRhclZpZXcuTW9udGhzKTtcclxuICAgIHRoaXMueWVhclNlbGVjdC5lbWl0KHllYXIpO1xyXG4gIH1cclxuICBzZWxlY3RDdXJyZW50bHlIaWdobGlnaHRlZFllYXIoKTogdm9pZCB7XHJcbiAgICBpZiAoIWlzRGVmaW5lZCh0aGlzLmhpZ2hsaWdodGVkWWVhcigpKSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0WWVhcih0aGlzLmhpZ2hsaWdodGVkWWVhcigpISk7XHJcbiAgfVxyXG5cclxuICAvLyEgaGlnaGxpZ2h0aW5nIHllYXJzXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfX2hpZ2hsaWdodGVkWWVhciA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcclxuICByZWFkb25seSBoaWdobGlnaHRlZFllYXIgPSB0aGlzLl9faGlnaGxpZ2h0ZWRZZWFyLmFzUmVhZG9ubHkoKTtcclxuXHJcbiAgcmVhZG9ubHkgY3VycmVudFllYXJSYW5nZVN0YXJ0ID0gc2lnbmFsPG51bWJlcj4oVE9EQVkuZ2V0RnVsbFllYXIoKSAtIChUT0RBWS5nZXRGdWxsWWVhcigpICUgNCkgLSA4KTsgLy8gY3VycmVudCB5ZWFyIGFsd2F5cyBpbiAzcmQgcm93XHJcblxyXG4gIHNldEhpZ2hsaWdodGVkWWVhcih5ZWFyOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XHJcbiAgICBpZiAoaXNOdWxsKHllYXIpKSB7XHJcbiAgICAgIHRoaXMuX19oaWdobGlnaHRlZFllYXIudXBkYXRlKCgpID0+IHllYXIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgMCk7XHJcbiAgICBjb25zdCBvdXRPZlJhbmdlID0gdGhpcy5pc1llYXJPdXRPZlJhbmdlKHllYXIpO1xyXG5cclxuICAgIGlmIChvdXRPZlJhbmdlID09PSAtMSkge1xyXG4gICAgICB0aGlzLl9oaWdobGlnaHRNaW5ZZWFyKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChvdXRPZlJhbmdlID09PSAxKSB7XHJcbiAgICAgIHRoaXMuX2hpZ2hsaWdodE1heFllYXIoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5ld1llYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICB0aGlzLl9faGlnaGxpZ2h0ZWRZZWFyLnVwZGF0ZSgoKSA9PiBuZXdZZWFyKTtcclxuXHJcbiAgICBpZiAobmV3WWVhciA8IHRoaXMuY3VycmVudFllYXJSYW5nZVN0YXJ0KCkgfHwgbmV3WWVhciA+PSB0aGlzLmN1cnJlbnRZZWFyUmFuZ2VTdGFydCgpICsgMjQpIHtcclxuICAgICAgLy8gcm91bmQgdGhlIG9mZnNldCBhd2F5IGZyb20gemVybzogMC4xIC0+IDEsIC0wLjEgLT4gLTFcclxuICAgICAgLy8gdGhpcyBpcyB0byBlbnN1cmUgdGhlIHJhbmdlIHN0YXJ0IGlzIGFsd2F5cyBzaGlmdGVkIGJ5IDI0IHllYXJzXHJcbiAgICAgIGNvbnN0IG9mZnNldCA9IHJvdW5kRnJvbVplcm8oKG5ld1llYXIgLSB0aGlzLmN1cnJlbnRZZWFyUmFuZ2VTdGFydCgpKSAvIDI0KTtcclxuICAgICAgdGhpcy5jdXJyZW50WWVhclJhbmdlU3RhcnQudXBkYXRlKHYgPT4gdiArIG9mZnNldCAqIDI0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoYW5nZVllYXJzVmlld1BhZ2Uob2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IG5ld1llYXJSYW5nZVN0YXJ0ID0gdGhpcy5jdXJyZW50WWVhclJhbmdlU3RhcnQoKSArIG9mZnNldCAqIDI0O1xyXG4gICAgdGhpcy5jdXJyZW50WWVhclJhbmdlU3RhcnQuc2V0KG5ld1llYXJSYW5nZVN0YXJ0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hpZ2hsaWdodE1pblllYXIoKTogdm9pZCB7XHJcbiAgICBjb25zdCBtaW4gPSB0aGlzLm1pbigpO1xyXG4gICAgaWYgKCFpc0RlZmluZWQobWluKSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuX19oaWdobGlnaHRlZFllYXIuc2V0KG1pbi5nZXRGdWxsWWVhcigpKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaGlnaGxpZ2h0TWF4WWVhcigpOiB2b2lkIHtcclxuICAgIGNvbnN0IG1heCA9IHRoaXMubWF4KCk7XHJcbiAgICBpZiAoIWlzRGVmaW5lZChtYXgpKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5fX2hpZ2hsaWdodGVkWWVhci5zZXQobWF4LmdldEZ1bGxZZWFyKCkpO1xyXG4gIH1cclxuXHJcbiAgaGlnaGxpZ2h0TmV4dFllYXIob2Zmc2V0ID0gMSk6IHZvaWQge1xyXG4gICAgY29uc3QgY3VycmVudFllYXIgPSB0aGlzLmhpZ2hsaWdodGVkWWVhcigpO1xyXG4gICAgY29uc3QgbmV3WWVhciA9IGlzRGVmaW5lZChjdXJyZW50WWVhcikgPyBjdXJyZW50WWVhciArIG9mZnNldCA6IG51bGw7XHJcbiAgICB0aGlzLnNldEhpZ2hsaWdodGVkWWVhcihuZXdZZWFyKTtcclxuICB9XHJcbiAgaGlnaGxpZ2h0UHJldmlvdXNZZWFyKG9mZnNldCA9IDEpOiB2b2lkIHtcclxuICAgIHRoaXMuaGlnaGxpZ2h0TmV4dFllYXIob2Zmc2V0ICogLTEpO1xyXG4gIH1cclxuICBoaWdobGlnaHRGaXJzdFllYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldEhpZ2hsaWdodGVkWWVhcih0aGlzLmN1cnJlbnRZZWFyUmFuZ2VTdGFydCgpKTtcclxuICB9XHJcbiAgaGlnaGxpZ2h0TGFzdFllYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldEhpZ2hsaWdodGVkWWVhcih0aGlzLmN1cnJlbnRZZWFyUmFuZ2VTdGFydCgpICsgMjMpOyAvLyAyNCB5ZWFycyBwZXIgcGFnZVxyXG4gIH1cclxuICBoaWdobGlnaHRTYW1lWWVhck5leHRQYWdlKG11bHRpcGxlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBjb25zdCB5ZWFyID0gdGhpcy5oaWdobGlnaHRlZFllYXIoKSA/PyB0aGlzLmN1cnJlbnRZZWFyUmFuZ2VTdGFydCgpO1xyXG4gICAgdGhpcy5zZXRIaWdobGlnaHRlZFllYXIoeWVhciArIChtdWx0aXBsZSA/IDYwIDogMjQpKTtcclxuICB9XHJcbiAgaGlnaGxpZ2h0U2FtZVllYXJQcmV2aW91c1BhZ2UobXVsdGlwbGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGNvbnN0IHllYXIgPSB0aGlzLmhpZ2hsaWdodGVkWWVhcigpID8/IHRoaXMuY3VycmVudFllYXJSYW5nZVN0YXJ0KCk7XHJcbiAgICB0aGlzLnNldEhpZ2hsaWdodGVkWWVhcih5ZWFyIC0gKG11bHRpcGxlID8gNjAgOiAyNCkpO1xyXG4gIH1cclxuXHJcbiAgLy8hIGludGVybmFsc1xyXG4gIHJlYWRvbmx5IF9pc1VzaW5nS2V5Ym9hcmQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlbW92ZScpXHJcbiAgb25Eb2N1bWVudE1vdXNlbW92ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2lzVXNpbmdLZXlib2FyZC5zZXQoZmFsc2UpO1xyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJylcclxuICBvbkRvY3VtZW50S2V5ZG93bigpOiB2b2lkIHtcclxuICAgIHRoaXMuX2lzVXNpbmdLZXlib2FyZC5zZXQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvLyEgdGVtcGxhdGVzXHJcbiAgcmVhZG9ubHkgdGVtcGxhdGVSZXBvc2l0b3J5ID0gY29udGVudENoaWxkKF9DYWxlbmRhclRlbXBsYXRlUmVwb3NpdG9yeURpcmVjdGl2ZSk7XHJcblxyXG4gIHJlYWRvbmx5IHllYXJzVmlld0hlYWRlclRlbXBsYXRlID0gY29udGVudENoaWxkKEFyZENhbGVuZGFyWWVhcnNWaWV3SGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpO1xyXG4gIHJlYWRvbmx5IG1vbnRoc1ZpZXdIZWFkZXJUZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZChBcmRDYWxlbmRhck1vbnRoc1ZpZXdIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSk7XHJcbiAgcmVhZG9ubHkgZGF5c1ZpZXdIZWFkZXJUZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZChBcmRDYWxlbmRhckRheXNWaWV3SGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpO1xyXG4gIHJlYWRvbmx5IGZsb2F0aW5nTW9udGhUZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZChBcmRDYWxlbmRhckZsb2F0aW5nTW9udGhUZW1wbGF0ZURpcmVjdGl2ZSk7XHJcbiAgcmVhZG9ubHkgeWVhclRlbXBsYXRlID0gY29udGVudENoaWxkKEFyZENhbGVuZGFyWWVhclRlbXBsYXRlRGlyZWN0aXZlKTtcclxuICByZWFkb25seSBtb250aFRlbXBsYXRlID0gY29udGVudENoaWxkKEFyZENhbGVuZGFyTW9udGhUZW1wbGF0ZURpcmVjdGl2ZSk7XHJcbiAgcmVhZG9ubHkgZGF5VGVtcGxhdGUgPSBjb250ZW50Q2hpbGQoQXJkQ2FsZW5kYXJEYXlUZW1wbGF0ZURpcmVjdGl2ZSk7XHJcbiAgcmVhZG9ubHkgd2Vla2RheVRlbXBsYXRlID0gY29udGVudENoaWxkKEFyZENhbGVuZGFyV2Vla2RheVRlbXBsYXRlRGlyZWN0aXZlKTtcclxufVxyXG4iLCI8ZGl2XHJcbiAgY2xhc3M9XCJhcmQtY2FsZW5kYXJcIlxyXG4gIFtuZ0NsYXNzXT1cIm5nQ2xhc3NlcygpXCJcclxuPlxyXG4gIEBzd2l0Y2ggKGFjdGl2ZVZpZXcoKSkge1xyXG4gICAgQGNhc2UgKCdkYXlzJykge1xyXG4gICAgICA8YXJkLWRheXMtdmlld1xyXG4gICAgICAgIFt0YWJJbmRleF09XCJ0YWJJbmRleCgpXCJcclxuICAgICAgICBbcmVhZE9ubHldPVwicmVhZG9ubHkoKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkKClcIlxyXG4gICAgICAgIFthdXRvRm9jdXNdPVwiYXV0b0ZvY3VzKClcIlxyXG4gICAgICAgIFtfaXNVc2luZ0tleWJvYXJkXT1cIl9pc1VzaW5nS2V5Ym9hcmQoKVwiXHJcbiAgICAgICAgW2FjdGl2ZU1vbnRoXT1cImFjdGl2ZU1vbnRoKClcIlxyXG4gICAgICAgIFthY3RpdmVZZWFyXT1cImFjdGl2ZVllYXIoKVwiXHJcbiAgICAgICAgW3NlbGVjdGVkRGF0ZV09XCJzZWxlY3RlZERhdGUoKVwiXHJcbiAgICAgICAgW2ZpcnN0V2Vla2RheV09XCJmaXJzdFdlZWtkYXkoKVwiXHJcbiAgICAgICAgW2hpZ2hsaWdodGVkRGF5XT1cImhpZ2hsaWdodGVkRGF5KClcIlxyXG4gICAgICAgIFttaW5dPVwibWluKClcIlxyXG4gICAgICAgIFttYXhdPVwibWF4KClcIlxyXG4gICAgICAgIFtpc0RheUZpbHRlcmVkT3V0XT1cImlzRGF5RmlsdGVyZWRPdXQoKVwiXHJcbiAgICAgICAgW2RheXNWaWV3SGVhZGVyVGVtcGxhdGVdPVwiZGF5c1ZpZXdIZWFkZXJUZW1wbGF0ZSgpPy50ZW1wbGF0ZSA/PyB0ZW1wbGF0ZVJlcG9zaXRvcnkoKT8uZGF5c1ZpZXdIZWFkZXJUbXAoKT8udGVtcGxhdGVcIlxyXG4gICAgICAgIFtmbG9hdGluZ01vbnRoVGVtcGxhdGVdPVwiZmxvYXRpbmdNb250aFRlbXBsYXRlKCk/LnRlbXBsYXRlID8/IHRlbXBsYXRlUmVwb3NpdG9yeSgpPy5mbG9hdGluZ01vbnRoVG1wKCk/LnRlbXBsYXRlXCJcclxuICAgICAgICBbd2Vla2RheVRlbXBsYXRlXT1cIndlZWtkYXlUZW1wbGF0ZSgpPy50ZW1wbGF0ZSA/PyB0ZW1wbGF0ZVJlcG9zaXRvcnkoKT8ud2Vla2RheVRtcCgpPy50ZW1wbGF0ZVwiXHJcbiAgICAgICAgW2RheVRlbXBsYXRlXT1cImRheVRlbXBsYXRlKCk/LnRlbXBsYXRlID8/IHRlbXBsYXRlUmVwb3NpdG9yeSgpPy5kYXlUbXAoKT8udGVtcGxhdGVcIlxyXG4gICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKCRldmVudClcIlxyXG4gICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcclxuICAgICAgICAodHJpZ2dlck9wZW5Nb250aHNWaWV3KT1cIm9uVHJpZ2dlck9wZW5Nb250aHNWaWV3KClcIlxyXG4gICAgICAgICh0cmlnZ2VyT3BlblllYXJzVmlldyk9XCJvblRyaWdnZXJPcGVuWWVhcnNWaWV3KClcIlxyXG4gICAgICAgICh0cmlnZ2VyQ2hhbmdlTW9udGgpPVwiY2hhbmdlTW9udGgoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRyaWdnZXJDaGFuZ2VZZWFyKT1cImNoYW5nZVllYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRyaWdnZXJIaWdobGlnaHREYXkpPVwic2V0SGlnaGxpZ2h0ZWREYXkoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRyaWdnZXJIaWdobGlnaHRGaXJzdERheSk9XCJoaWdobGlnaHRGaXJzdERheSgpXCJcclxuICAgICAgICAodHJpZ2dlckhpZ2hsaWdodExhc3REYXkpPVwiaGlnaGxpZ2h0TGFzdERheSgpXCJcclxuICAgICAgICAodHJpZ2dlckhpZ2hsaWdodE5leHREYXkpPVwiaGlnaGxpZ2h0TmV4dERheSgkZXZlbnQpXCJcclxuICAgICAgICAodHJpZ2dlckhpZ2hsaWdodFByZXZpb3VzRGF5KT1cImhpZ2hsaWdodFByZXZpb3VzRGF5KCRldmVudClcIlxyXG4gICAgICAgICh0cmlnZ2VySGlnaGxpZ2h0U2FtZURheU5leHRQYWdlKT1cIiRldmVudCA/IGhpZ2hsaWdodFNhbWVEYXlOZXh0WWVhcigpIDogaGlnaGxpZ2h0U2FtZURheU5leHRNb250aCgpXCJcclxuICAgICAgICAodHJpZ2dlckhpZ2hsaWdodFNhbWVEYXlQcmV2aW91c1BhZ2UpPVwiJGV2ZW50ID8gaGlnaGxpZ2h0U2FtZURheVByZXZpb3VzWWVhcigpIDogaGlnaGxpZ2h0U2FtZURheVByZXZpb3VzTW9udGgoKVwiXHJcbiAgICAgICAgKHRyaWdnZXJTZWxlY3REYXkpPVwic2VsZWN0RGF5KCRldmVudClcIlxyXG4gICAgICAvPlxyXG4gICAgfVxyXG4gICAgQGNhc2UgKCdtb250aHMnKSB7XHJcbiAgICAgIDxhcmQtbW9udGhzLXZpZXdcclxuICAgICAgICBbdGFiSW5kZXhdPVwidGFiSW5kZXgoKVwiXHJcbiAgICAgICAgW3JlYWRPbmx5XT1cInJlYWRvbmx5KClcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpXCJcclxuICAgICAgICBbYXV0b0ZvY3VzXT1cImF1dG9Gb2N1cygpXCJcclxuICAgICAgICBbX2lzVXNpbmdLZXlib2FyZF09XCJfaXNVc2luZ0tleWJvYXJkKClcIlxyXG4gICAgICAgIFtjb2xvcl09XCJjb2xvcigpXCJcclxuICAgICAgICBbYWN0aXZlTW9udGhdPVwiYWN0aXZlTW9udGgoKVwiXHJcbiAgICAgICAgW2FjdGl2ZVllYXJdPVwiYWN0aXZlWWVhcigpXCJcclxuICAgICAgICBbc2VsZWN0ZWREYXRlXT1cInNlbGVjdGVkRGF0ZSgpXCJcclxuICAgICAgICBbbWluXT1cIm1pbigpXCJcclxuICAgICAgICBbbWF4XT1cIm1heCgpXCJcclxuICAgICAgICBbaGlnaGxpZ2h0ZWRNb250aF09XCJoaWdobGlnaHRlZE1vbnRoKClcIlxyXG4gICAgICAgIFttb250aHNWaWV3SGVhZGVyVGVtcGxhdGVdPVwibW9udGhzVmlld0hlYWRlclRlbXBsYXRlKCk/LnRlbXBsYXRlID8/IHRlbXBsYXRlUmVwb3NpdG9yeSgpPy5tb250aHNWaWV3SGVhZGVyVG1wKCk/LnRlbXBsYXRlXCJcclxuICAgICAgICBbbW9udGhUZW1wbGF0ZV09XCJtb250aFRlbXBsYXRlKCk/LnRlbXBsYXRlID8/IHRlbXBsYXRlUmVwb3NpdG9yeSgpPy5tb250aFRtcCgpPy50ZW1wbGF0ZVwiXHJcbiAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXHJcbiAgICAgICAgKGJsdXIpPVwib25CbHVyKCRldmVudClcIlxyXG4gICAgICAgICh0cmlnZ2VyT3BlbkRheXNWaWV3KT1cIm9uVHJpZ2dlck9wZW5EYXlzVmlldygpXCJcclxuICAgICAgICAodHJpZ2dlck9wZW5ZZWFyc1ZpZXcpPVwib25UcmlnZ2VyT3BlblllYXJzVmlldygpXCJcclxuICAgICAgICAodHJpZ2dlQ2hhbmdlWWVhcik9XCJjaGFuZ2VZZWFyKCRldmVudClcIlxyXG4gICAgICAgICh0cmlnZ2VyU2VsZWN0TW9udGgpPVwic2VsZWN0TW9udGgoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRyaWdnZXJIaWdobGlnaHRNb250aCk9XCJzZXRIaWdobGlnaHRlZE1vbnRoKCRldmVudClcIlxyXG4gICAgICAgICh0cmlnZ2VySGlnaGxpZ2h0Rmlyc3RNb250aCk9XCJoaWdobGlnaHRGaXJzdE1vbnRoKClcIlxyXG4gICAgICAgICh0cmlnZ2VySGlnaGxpZ2h0TGFzdE1vbnRoKT1cImhpZ2hsaWdodExhc3RNb250aCgpXCJcclxuICAgICAgICAodHJpZ2dlckhpZ2hsaWdodE5leHRNb250aCk9XCJoaWdobGlnaHROZXh0TW9udGgoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRyaWdnZXJIaWdobGlnaHRQcmV2aW91c01vbnRoKT1cImhpZ2hsaWdodFByZXZpb3VzTW9udGgoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRyaWdnZXJIaWdobGlnaHRTYW1lTW9udGhOZXh0UGFnZSk9XCJoaWdobGlnaHRTYW1lTW9udGhOZXh0WWVhcigkZXZlbnQpXCJcclxuICAgICAgICAodHJpZ2dlckhpZ2hsaWdodFNhbWVNb250aFByZXZpb3VzUGFnZSk9XCJoaWdobGlnaHRTYW1lTW9udGhQcmV2aW91c1llYXIoJGV2ZW50KVwiXHJcbiAgICAgIC8+XHJcbiAgICB9XHJcbiAgICBAY2FzZSAoJ3llYXJzJykge1xyXG4gICAgICA8YXJkLXllYXJzLXZpZXdcclxuICAgICAgICBbdGFiSW5kZXhdPVwidGFiSW5kZXgoKVwiXHJcbiAgICAgICAgW3JlYWRPbmx5XT1cInJlYWRvbmx5KClcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpXCJcclxuICAgICAgICBbYXV0b0ZvY3VzXT1cImF1dG9Gb2N1cygpXCJcclxuICAgICAgICBbX2lzVXNpbmdLZXlib2FyZF09XCJfaXNVc2luZ0tleWJvYXJkKClcIlxyXG4gICAgICAgIFtoaWdobGlnaHRlZFllYXJdPVwiaGlnaGxpZ2h0ZWRZZWFyKClcIlxyXG4gICAgICAgIFtjdXJyZW50WWVhclJhbmdlU3RhcnRdPVwiY3VycmVudFllYXJSYW5nZVN0YXJ0KClcIlxyXG4gICAgICAgIFthY3RpdmVZZWFyXT1cImFjdGl2ZVllYXIoKVwiXHJcbiAgICAgICAgW3NlbGVjdGVkRGF0ZV09XCJzZWxlY3RlZERhdGUoKVwiXHJcbiAgICAgICAgW21pbl09XCJtaW4oKVwiXHJcbiAgICAgICAgW21heF09XCJtYXgoKVwiXHJcbiAgICAgICAgW3llYXJzVmlld0hlYWRlclRlbXBsYXRlXT1cInllYXJzVmlld0hlYWRlclRlbXBsYXRlKCk/LnRlbXBsYXRlID8/IHRlbXBsYXRlUmVwb3NpdG9yeSgpPy55ZWFyc1ZpZXdIZWFkZXJUbXAoKT8udGVtcGxhdGVcIlxyXG4gICAgICAgIFt5ZWFyVGVtcGxhdGVdPVwieWVhclRlbXBsYXRlKCk/LnRlbXBsYXRlID8/IHRlbXBsYXRlUmVwb3NpdG9yeSgpPy55ZWFyVG1wKCk/LnRlbXBsYXRlXCJcclxuICAgICAgICAoZm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCJcclxuICAgICAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRyaWdnZXJPcGVuRGF5c1ZpZXcpPVwib25UcmlnZ2VyT3BlbkRheXNWaWV3KClcIlxyXG4gICAgICAgICh0cmlnZ2VyT3Blbk1vbnRoc1ZpZXcpPVwib25UcmlnZ2VyT3Blbk1vbnRoc1ZpZXcoKVwiXHJcbiAgICAgICAgKHRyaWdnZXJTZWxlY3RZZWFyKT1cInNlbGVjdFllYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRyaWdnZXJDaGFuZ2VZZWFyc1ZpZXdQYWdlKT1cImNoYW5nZVllYXJzVmlld1BhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRyaWdnZXJIaWdobGlnaHRZZWFyKT1cInNldEhpZ2hsaWdodGVkWWVhcigkZXZlbnQpXCJcclxuICAgICAgICAodHJpZ2dlckhpZ2hsaWdodEZpcnN0WWVhcik9XCJoaWdobGlnaHRGaXJzdFllYXIoKVwiXHJcbiAgICAgICAgKHRyaWdnZXJIaWdobGlnaHRMYXN0WWVhcik9XCJoaWdobGlnaHRMYXN0WWVhcigpXCJcclxuICAgICAgICAodHJpZ2dlckhpZ2hsaWdodE5leHRZZWFyKT1cImhpZ2hsaWdodE5leHRZZWFyKCRldmVudClcIlxyXG4gICAgICAgICh0cmlnZ2VySGlnaGxpZ2h0UHJldmlvdXNZZWFyKT1cImhpZ2hsaWdodFByZXZpb3VzWWVhcigkZXZlbnQpXCJcclxuICAgICAgICAodHJpZ2dlckhpZ2hsaWdodFNhbWVZZWFyTmV4dFBhZ2UpPVwiaGlnaGxpZ2h0U2FtZVllYXJOZXh0UGFnZSgkZXZlbnQpXCJcclxuICAgICAgICAodHJpZ2dlckhpZ2hsaWdodFNhbWVZZWFyUHJldmlvdXNQYWdlKT1cImhpZ2hsaWdodFNhbWVZZWFyUHJldmlvdXNQYWdlKCRldmVudClcIlxyXG4gICAgICAvPlxyXG4gICAgfVxyXG4gIH1cclxuPC9kaXY+XHJcbiJdfQ==
|