igniteui-angular 13.0.0 → 13.0.1
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/esm2020/lib/accordion/accordion.component.mjs +3 -3
- package/esm2020/lib/accordion/accordion.module.mjs +4 -4
- package/esm2020/lib/action-strip/action-strip.component.mjs +6 -6
- package/esm2020/lib/action-strip/action-strip.module.mjs +4 -4
- package/esm2020/lib/action-strip/grid-actions/grid-action-button.component.mjs +3 -3
- package/esm2020/lib/action-strip/grid-actions/grid-actions-base.directive.mjs +3 -3
- package/esm2020/lib/action-strip/grid-actions/grid-editing-actions.component.mjs +3 -3
- package/esm2020/lib/action-strip/grid-actions/grid-pinning-actions.component.mjs +3 -3
- package/esm2020/lib/avatar/avatar.component.mjs +7 -7
- package/esm2020/lib/badge/badge.component.mjs +7 -7
- package/esm2020/lib/banner/banner.component.mjs +7 -7
- package/esm2020/lib/banner/banner.directives.mjs +3 -3
- package/esm2020/lib/buttonGroup/buttonGroup.component.mjs +7 -7
- package/esm2020/lib/calendar/calendar-base.mjs +3 -3
- package/esm2020/lib/calendar/calendar.component.mjs +5 -5
- package/esm2020/lib/calendar/calendar.directives.mjs +15 -15
- package/esm2020/lib/calendar/calendar.module.mjs +4 -4
- package/esm2020/lib/calendar/days-view/day-item.component.mjs +3 -3
- package/esm2020/lib/calendar/days-view/days-view.component.mjs +3 -3
- package/esm2020/lib/calendar/days-view/daysview-navigation.service.mjs +3 -3
- package/esm2020/lib/calendar/month-picker/month-picker.component.mjs +3 -3
- package/esm2020/lib/calendar/month-picker-base.mjs +3 -3
- package/esm2020/lib/calendar/months-view/months-view.component.mjs +3 -3
- package/esm2020/lib/calendar/months-view.pipe.mjs +6 -6
- package/esm2020/lib/calendar/years-view/years-view.component.mjs +6 -6
- package/esm2020/lib/card/card.component.mjs +31 -31
- package/esm2020/lib/carousel/carousel.component.mjs +10 -10
- package/esm2020/lib/carousel/carousel.directives.mjs +9 -9
- package/esm2020/lib/carousel/slide.component.mjs +3 -3
- package/esm2020/lib/checkbox/checkbox.component.mjs +10 -10
- package/esm2020/lib/chips/chip.component.mjs +3 -3
- package/esm2020/lib/chips/chips-area.component.mjs +3 -3
- package/esm2020/lib/chips/chips.module.mjs +4 -4
- package/esm2020/lib/combo/combo-add-item.component.mjs +3 -3
- package/esm2020/lib/combo/combo-dropdown.component.mjs +3 -3
- package/esm2020/lib/combo/combo-item.component.mjs +3 -3
- package/esm2020/lib/combo/combo.api.mjs +3 -3
- package/esm2020/lib/combo/combo.common.mjs +3 -3
- package/esm2020/lib/combo/combo.component.mjs +7 -7
- package/esm2020/lib/combo/combo.directives.mjs +24 -24
- package/esm2020/lib/combo/combo.pipes.mjs +6 -6
- package/esm2020/lib/core/displayDensity.mjs +7 -7
- package/esm2020/lib/core/navigation/directives.mjs +10 -10
- package/esm2020/lib/core/navigation/nav.service.mjs +3 -3
- package/esm2020/lib/core/selection.mjs +3 -3
- package/esm2020/lib/core/touch.mjs +3 -3
- package/esm2020/lib/core/utils.mjs +3 -3
- package/esm2020/lib/date-common/calendar-container/calendar-container.component.mjs +7 -7
- package/esm2020/lib/date-common/picker-base.directive.mjs +3 -3
- package/esm2020/lib/date-common/picker-icons.common.mjs +13 -13
- package/esm2020/lib/date-picker/date-picker.component.mjs +3 -3
- package/esm2020/lib/date-picker/date-picker.module.mjs +4 -4
- package/esm2020/lib/date-range-picker/date-range-picker-inputs.common.mjs +15 -15
- package/esm2020/lib/date-range-picker/date-range-picker.component.mjs +3 -3
- package/esm2020/lib/date-range-picker/date-range-picker.module.mjs +4 -4
- package/esm2020/lib/dialog/dialog.component.mjs +7 -7
- package/esm2020/lib/dialog/dialog.directives.mjs +6 -6
- package/esm2020/lib/directives/autocomplete/autocomplete.directive.mjs +7 -7
- package/esm2020/lib/directives/button/button.directive.mjs +7 -7
- package/esm2020/lib/directives/date-time-editor/date-time-editor.directive.mjs +7 -7
- package/esm2020/lib/directives/divider/divider.directive.mjs +7 -7
- package/esm2020/lib/directives/drag-drop/drag-drop.directive.mjs +16 -16
- package/esm2020/lib/directives/filter/filter.directive.mjs +10 -10
- package/esm2020/lib/directives/focus/focus.directive.mjs +7 -7
- package/esm2020/lib/directives/focus-trap/focus-trap.directive.mjs +7 -7
- package/esm2020/lib/directives/for-of/base.helper.component.mjs +3 -3
- package/esm2020/lib/directives/for-of/display.container.mjs +3 -3
- package/esm2020/lib/directives/for-of/for_of.directive.mjs +10 -10
- package/esm2020/lib/directives/for-of/for_of.sync.service.mjs +6 -6
- package/esm2020/lib/directives/for-of/horizontal.virtual.helper.component.mjs +3 -3
- package/esm2020/lib/directives/for-of/virtual.helper.component.mjs +3 -3
- package/esm2020/lib/directives/hint/hint.directive.mjs +3 -3
- package/esm2020/lib/directives/input/input.directive.mjs +3 -3
- package/esm2020/lib/directives/label/label.directive.mjs +3 -3
- package/esm2020/lib/directives/layout/layout.directive.mjs +10 -10
- package/esm2020/lib/directives/mask/mask-parsing.service.mjs +3 -3
- package/esm2020/lib/directives/mask/mask.directive.mjs +7 -7
- package/esm2020/lib/directives/notification/notifications.directive.mjs +3 -3
- package/esm2020/lib/directives/prefix/prefix.directive.mjs +7 -7
- package/esm2020/lib/directives/radio/radio-group.directive.mjs +7 -7
- package/esm2020/lib/directives/ripple/ripple.directive.mjs +7 -7
- package/esm2020/lib/directives/scroll-inertia/scroll_inertia.directive.mjs +7 -7
- package/esm2020/lib/directives/suffix/suffix.directive.mjs +7 -7
- package/esm2020/lib/directives/template-outlet/template_outlet.directive.mjs +7 -7
- package/esm2020/lib/directives/text-highlight/text-highlight.directive.mjs +7 -7
- package/esm2020/lib/directives/text-selection/text-selection.directive.mjs +7 -7
- package/esm2020/lib/directives/toggle/toggle.directive.mjs +13 -13
- package/esm2020/lib/directives/tooltip/tooltip.directive.mjs +10 -10
- package/esm2020/lib/drop-down/drop-down-group.component.mjs +3 -3
- package/esm2020/lib/drop-down/drop-down-item.base.mjs +3 -3
- package/esm2020/lib/drop-down/drop-down-item.component.mjs +3 -3
- package/esm2020/lib/drop-down/drop-down-navigation.directive.mjs +3 -3
- package/esm2020/lib/drop-down/drop-down.base.mjs +3 -3
- package/esm2020/lib/drop-down/drop-down.component.mjs +4 -4
- package/esm2020/lib/drop-down/public_api.mjs +4 -4
- package/esm2020/lib/expansion-panel/expansion-panel-body.component.mjs +3 -3
- package/esm2020/lib/expansion-panel/expansion-panel-header.component.mjs +3 -3
- package/esm2020/lib/expansion-panel/expansion-panel.component.mjs +3 -3
- package/esm2020/lib/expansion-panel/expansion-panel.directives.mjs +9 -9
- package/esm2020/lib/expansion-panel/expansion-panel.module.mjs +4 -4
- package/esm2020/lib/expansion-panel/toggle-animation-component.mjs +3 -3
- package/esm2020/lib/grids/api.service.mjs +3 -3
- package/esm2020/lib/grids/cell.component.mjs +3 -3
- package/esm2020/lib/grids/column-actions/column-actions-base.directive.mjs +3 -3
- package/esm2020/lib/grids/column-actions/column-actions.component.mjs +12 -12
- package/esm2020/lib/grids/column-actions/column-actions.module.mjs +4 -4
- package/esm2020/lib/grids/column-actions/column-hiding.directive.mjs +3 -3
- package/esm2020/lib/grids/column-actions/column-pinning.directive.mjs +3 -3
- package/esm2020/lib/grids/columns/column-group.component.mjs +3 -3
- package/esm2020/lib/grids/columns/column-layout.component.mjs +3 -3
- package/esm2020/lib/grids/columns/column.component.mjs +3 -3
- package/esm2020/lib/grids/columns/column.module.mjs +4 -4
- package/esm2020/lib/grids/columns/templates.directive.mjs +18 -18
- package/esm2020/lib/grids/common/crud.service.mjs +3 -3
- package/esm2020/lib/grids/common/grid-pipes.module.mjs +4 -4
- package/esm2020/lib/grids/common/pipes.mjs +51 -51
- package/esm2020/lib/grids/common/shared.module.mjs +4 -4
- package/esm2020/lib/grids/filtering/advanced-filtering/advanced-filtering-dialog.component.mjs +3 -3
- package/esm2020/lib/grids/filtering/base/filtering.module.mjs +4 -4
- package/esm2020/lib/grids/filtering/base/grid-filtering-cell.component.mjs +3 -3
- package/esm2020/lib/grids/filtering/base/grid-filtering-row.component.mjs +3 -3
- package/esm2020/lib/grids/filtering/excel-style/base-filtering.component.mjs +4 -4
- package/esm2020/lib/grids/filtering/excel-style/excel-style-clear-filters.component.mjs +3 -3
- package/esm2020/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.mjs +3 -3
- package/esm2020/lib/grids/filtering/excel-style/excel-style-custom-dialog.component.mjs +3 -3
- package/esm2020/lib/grids/filtering/excel-style/excel-style-date-expression.component.mjs +3 -3
- package/esm2020/lib/grids/filtering/excel-style/excel-style-default-expression.component.mjs +3 -3
- package/esm2020/lib/grids/filtering/excel-style/excel-style-header.component.mjs +3 -3
- package/esm2020/lib/grids/filtering/excel-style/excel-style-hiding.component.mjs +3 -3
- package/esm2020/lib/grids/filtering/excel-style/excel-style-moving.component.mjs +3 -3
- package/esm2020/lib/grids/filtering/excel-style/excel-style-pinning.component.mjs +3 -3
- package/esm2020/lib/grids/filtering/excel-style/excel-style-search.component.mjs +6 -6
- package/esm2020/lib/grids/filtering/excel-style/excel-style-selecting.component.mjs +3 -3
- package/esm2020/lib/grids/filtering/excel-style/excel-style-sorting.component.mjs +3 -3
- package/esm2020/lib/grids/filtering/excel-style/grid.excel-style-filtering.component.mjs +9 -9
- package/esm2020/lib/grids/filtering/excel-style/grid.excel-style-filtering.module.mjs +4 -4
- package/esm2020/lib/grids/filtering/grid-filtering.service.mjs +3 -3
- package/esm2020/lib/grids/grid/expandable-cell.component.mjs +3 -3
- package/esm2020/lib/grids/grid/grid-api.service.mjs +3 -3
- package/esm2020/lib/grids/grid/grid-row.component.mjs +3 -3
- package/esm2020/lib/grids/grid/grid.component.mjs +3 -3
- package/esm2020/lib/grids/grid/grid.details.pipe.mjs +3 -3
- package/esm2020/lib/grids/grid/grid.directives.mjs +33 -33
- package/esm2020/lib/grids/grid/grid.module.mjs +4 -4
- package/esm2020/lib/grids/grid/grid.pipes.mjs +12 -12
- package/esm2020/lib/grids/grid/grid.summary.pipe.mjs +3 -3
- package/esm2020/lib/grids/grid/groupby-row.component.mjs +3 -3
- package/esm2020/lib/grids/grid-base.directive.mjs +4 -4
- package/esm2020/lib/grids/grid-common.module.mjs +4 -4
- package/esm2020/lib/grids/grid-footer/grid-footer.component.mjs +3 -3
- package/esm2020/lib/grids/grid-mrl-navigation.service.mjs +3 -3
- package/esm2020/lib/grids/grid-navigation.service.mjs +3 -3
- package/esm2020/lib/grids/grid.common.mjs +3 -3
- package/esm2020/lib/grids/grid.rowEdit.directive.mjs +15 -15
- package/esm2020/lib/grids/grouping/grid-group-by-area.component.mjs +3 -3
- package/esm2020/lib/grids/grouping/group-by-area.directive.mjs +6 -6
- package/esm2020/lib/grids/grouping/tree-grid-group-by-area.component.mjs +3 -3
- package/esm2020/lib/grids/headers/grid-header-group.component.mjs +4 -4
- package/esm2020/lib/grids/headers/grid-header-row.component.mjs +3 -3
- package/esm2020/lib/grids/headers/grid-header.component.mjs +3 -3
- package/esm2020/lib/grids/headers/headers.module.mjs +4 -4
- package/esm2020/lib/grids/headers/pipes.mjs +9 -9
- package/esm2020/lib/grids/hierarchical-grid/hierarchical-cell.component.mjs +3 -3
- package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid-api.service.mjs +3 -3
- package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid-base.directive.mjs +3 -3
- package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid-navigation.service.mjs +3 -3
- package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +6 -6
- package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid.module.mjs +4 -4
- package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid.pipes.mjs +6 -6
- package/esm2020/lib/grids/hierarchical-grid/hierarchical-row.component.mjs +4 -4
- package/esm2020/lib/grids/hierarchical-grid/row-island-api.service.mjs +3 -3
- package/esm2020/lib/grids/hierarchical-grid/row-island.component.mjs +3 -3
- package/esm2020/lib/grids/moving/moving.drag.directive.mjs +3 -3
- package/esm2020/lib/grids/moving/moving.drop.directive.mjs +3 -3
- package/esm2020/lib/grids/moving/moving.module.mjs +4 -4
- package/esm2020/lib/grids/moving/moving.service.mjs +3 -3
- package/esm2020/lib/grids/resizing/resize-handle.directive.mjs +3 -3
- package/esm2020/lib/grids/resizing/resize.module.mjs +4 -4
- package/esm2020/lib/grids/resizing/resizer.component.mjs +3 -3
- package/esm2020/lib/grids/resizing/resizer.directive.mjs +3 -3
- package/esm2020/lib/grids/resizing/resizing.service.mjs +3 -3
- package/esm2020/lib/grids/row-drag.directive.mjs +13 -13
- package/esm2020/lib/grids/row.directive.mjs +4 -4
- package/esm2020/lib/grids/selection/drag-select.directive.mjs +3 -3
- package/esm2020/lib/grids/selection/row-selectors.mjs +9 -9
- package/esm2020/lib/grids/selection/selection.module.mjs +4 -4
- package/esm2020/lib/grids/selection/selection.service.mjs +3 -3
- package/esm2020/lib/grids/state.directive.mjs +7 -7
- package/esm2020/lib/grids/summaries/grid-root-summary.pipe.mjs +3 -3
- package/esm2020/lib/grids/summaries/grid-summary.service.mjs +3 -3
- package/esm2020/lib/grids/summaries/summary-cell.component.mjs +3 -3
- package/esm2020/lib/grids/summaries/summary-row.component.mjs +3 -3
- package/esm2020/lib/grids/summaries/summary.module.mjs +4 -4
- package/esm2020/lib/grids/toolbar/common.mjs +15 -15
- package/esm2020/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.mjs +3 -3
- package/esm2020/lib/grids/toolbar/grid-toolbar-exporter.component.mjs +3 -3
- package/esm2020/lib/grids/toolbar/grid-toolbar-hiding.component.mjs +3 -3
- package/esm2020/lib/grids/toolbar/grid-toolbar-pinning.component.mjs +3 -3
- package/esm2020/lib/grids/toolbar/grid-toolbar.base.mjs +6 -6
- package/esm2020/lib/grids/toolbar/grid-toolbar.component.mjs +3 -3
- package/esm2020/lib/grids/toolbar/token.mjs +1 -1
- package/esm2020/lib/grids/toolbar/toolbar.module.mjs +4 -4
- package/esm2020/lib/grids/tree-grid/tree-cell.component.mjs +3 -3
- package/esm2020/lib/grids/tree-grid/tree-grid-api.service.mjs +3 -3
- package/esm2020/lib/grids/tree-grid/tree-grid-row.component.mjs +3 -3
- package/esm2020/lib/grids/tree-grid/tree-grid-selection.service.mjs +3 -3
- package/esm2020/lib/grids/tree-grid/tree-grid.component.mjs +3 -3
- package/esm2020/lib/grids/tree-grid/tree-grid.directives.mjs +3 -3
- package/esm2020/lib/grids/tree-grid/tree-grid.filtering.pipe.mjs +3 -3
- package/esm2020/lib/grids/tree-grid/tree-grid.grouping.pipe.mjs +3 -3
- package/esm2020/lib/grids/tree-grid/tree-grid.module.mjs +4 -4
- package/esm2020/lib/grids/tree-grid/tree-grid.pipes.mjs +21 -21
- package/esm2020/lib/grids/tree-grid/tree-grid.summary.pipe.mjs +3 -3
- package/esm2020/lib/icon/icon.component.mjs +3 -3
- package/esm2020/lib/icon/icon.service.mjs +13 -7
- package/esm2020/lib/icon/public_api.mjs +4 -4
- package/esm2020/lib/input-group/input-group.component.mjs +7 -7
- package/esm2020/lib/list/list-item.component.mjs +3 -3
- package/esm2020/lib/list/list.common.mjs +15 -15
- package/esm2020/lib/list/list.component.mjs +23 -23
- package/esm2020/lib/navbar/navbar.component.mjs +13 -13
- package/esm2020/lib/navigation-drawer/navigation-drawer.component.mjs +3 -3
- package/esm2020/lib/navigation-drawer/navigation-drawer.directives.mjs +9 -9
- package/esm2020/lib/navigation-drawer/navigation-drawer.module.mjs +4 -4
- package/esm2020/lib/paginator/paginator-interfaces.mjs +3 -3
- package/esm2020/lib/paginator/paginator.component.mjs +12 -12
- package/esm2020/lib/paginator/public_api.mjs +4 -4
- package/esm2020/lib/progressbar/progressbar.common.mjs +6 -6
- package/esm2020/lib/progressbar/progressbar.component.mjs +13 -13
- package/esm2020/lib/radio/radio.component.mjs +3 -3
- package/esm2020/lib/select/select-group.component.mjs +3 -3
- package/esm2020/lib/select/select-item.component.mjs +3 -3
- package/esm2020/lib/select/select-navigation.directive.mjs +3 -3
- package/esm2020/lib/select/select.component.mjs +14 -14
- package/esm2020/lib/select/select.module.mjs +4 -4
- package/esm2020/lib/services/csv/csv-exporter.mjs +3 -3
- package/esm2020/lib/services/direction/directionality.mjs +3 -3
- package/esm2020/lib/services/excel/excel-exporter.mjs +3 -3
- package/esm2020/lib/services/overlay/overlay.mjs +3 -3
- package/esm2020/lib/services/overlay/scroll/scroll-strategy.mjs +1 -1
- package/esm2020/lib/services/transaction/transaction-factory.service.mjs +6 -6
- package/esm2020/lib/simple-combo/simple-combo.component.mjs +14 -11
- package/esm2020/lib/slider/label/thumb-label.component.mjs +3 -3
- package/esm2020/lib/slider/slider.common.mjs +9 -9
- package/esm2020/lib/slider/slider.component.mjs +7 -7
- package/esm2020/lib/slider/thumb/thumb-slider.component.mjs +3 -3
- package/esm2020/lib/slider/ticks/tick.pipe.mjs +3 -3
- package/esm2020/lib/slider/ticks/ticks.component.mjs +3 -3
- package/esm2020/lib/snackbar/snackbar.component.mjs +7 -7
- package/esm2020/lib/splitter/splitter-pane/splitter-pane.component.mjs +3 -3
- package/esm2020/lib/splitter/splitter.component.mjs +6 -6
- package/esm2020/lib/splitter/splitter.module.mjs +4 -4
- package/esm2020/lib/stepper/step/step.component.mjs +5 -5
- package/esm2020/lib/stepper/stepper.component.mjs +7 -7
- package/esm2020/lib/stepper/stepper.directive.mjs +21 -21
- package/esm2020/lib/stepper/stepper.service.mjs +3 -3
- package/esm2020/lib/switch/switch.component.mjs +10 -10
- package/esm2020/lib/tabs/bottom-nav/bottom-nav-content.component.mjs +3 -3
- package/esm2020/lib/tabs/bottom-nav/bottom-nav-header.component.mjs +3 -3
- package/esm2020/lib/tabs/bottom-nav/bottom-nav-item.component.mjs +3 -3
- package/esm2020/lib/tabs/bottom-nav/bottom-nav.component.mjs +3 -3
- package/esm2020/lib/tabs/bottom-nav/bottom-nav.directives.mjs +6 -6
- package/esm2020/lib/tabs/bottom-nav/bottom-nav.module.mjs +4 -4
- package/esm2020/lib/tabs/tab-content.directive.mjs +3 -3
- package/esm2020/lib/tabs/tab-header.directive.mjs +3 -3
- package/esm2020/lib/tabs/tab-item.directive.mjs +3 -3
- package/esm2020/lib/tabs/tabs/tab-content.component.mjs +3 -3
- package/esm2020/lib/tabs/tabs/tab-header.component.mjs +3 -3
- package/esm2020/lib/tabs/tabs/tab-item.component.mjs +3 -3
- package/esm2020/lib/tabs/tabs/tabs.component.mjs +3 -3
- package/esm2020/lib/tabs/tabs/tabs.directives.mjs +6 -6
- package/esm2020/lib/tabs/tabs/tabs.module.mjs +4 -4
- package/esm2020/lib/tabs/tabs.directive.mjs +3 -3
- package/esm2020/lib/time-picker/time-picker.component.mjs +10 -10
- package/esm2020/lib/time-picker/time-picker.directives.mjs +12 -12
- package/esm2020/lib/time-picker/time-picker.pipes.mjs +6 -6
- package/esm2020/lib/toast/toast.component.mjs +7 -7
- package/esm2020/lib/tree/tree-navigation.service.mjs +3 -3
- package/esm2020/lib/tree/tree-node/tree-node.component.mjs +6 -6
- package/esm2020/lib/tree/tree-selection.service.mjs +3 -3
- package/esm2020/lib/tree/tree.component.mjs +13 -13
- package/esm2020/lib/tree/tree.service.mjs +3 -3
- package/fesm2015/igniteui-angular.mjs +1543 -1533
- package/fesm2015/igniteui-angular.mjs.map +1 -1
- package/fesm2020/igniteui-angular.mjs +1541 -1533
- package/fesm2020/igniteui-angular.mjs.map +1 -1
- package/lib/icon/icon.service.d.ts +4 -2
- package/package.json +1 -1
- package/schematics/tsconfig.tsbuildinfo +1 -1
|
@@ -802,14 +802,14 @@ export class IgxCalendarComponent extends IgxMonthPickerBaseDirective {
|
|
|
802
802
|
}
|
|
803
803
|
}
|
|
804
804
|
}
|
|
805
|
-
IgxCalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.
|
|
806
|
-
IgxCalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.
|
|
805
|
+
IgxCalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: IgxCalendarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
806
|
+
IgxCalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: IgxCalendarComponent, selector: "igx-calendar", inputs: { id: "id", hasHeader: "hasHeader", vertical: "vertical", monthsViewNumber: "monthsViewNumber", showWeekNumbers: "showWeekNumbers", animationAction: "animationAction" }, host: { listeners: { "keydown.pagedown": "onKeydownPageDown($event)", "keydown.pageup": "onKeydownPageDown($event)", "keydown.shift.pageup": "onKeydownShiftPageUp($event)", "keydown.shift.pagedown": "onKeydownShiftPageUp($event)", "keydown.home": "onKeydownHome($event)", "keydown.end": "onKeydownEnd($event)", "document:mouseup": "onMouseUp($event)" }, properties: { "attr.id": "this.id", "class.igx-calendar--vertical": "this.styleVerticalClass", "class.igx-calendar": "this.styleClass" } }, providers: [
|
|
807
807
|
{
|
|
808
808
|
multi: true,
|
|
809
809
|
provide: NG_VALUE_ACCESSOR,
|
|
810
810
|
useExisting: IgxCalendarComponent
|
|
811
811
|
}
|
|
812
|
-
], queries: [{ propertyName: "headerTemplateDirective", first: true, predicate: IgxCalendarHeaderTemplateDirective, descendants: true, read: IgxCalendarHeaderTemplateDirective, static: true }, { propertyName: "subheaderTemplateDirective", first: true, predicate: IgxCalendarSubheaderTemplateDirective, descendants: true, read: IgxCalendarSubheaderTemplateDirective, static: true }], viewQueries: [{ propertyName: "monthsView", first: true, predicate: ["months"], descendants: true, read: IgxMonthsViewComponent }, { propertyName: "dacadeView", first: true, predicate: ["decade"], descendants: true, read: IgxYearsViewComponent }, { propertyName: "daysView", first: true, predicate: ["days"], descendants: true, read: IgxDaysViewComponent }, { propertyName: "prevMonthBtn", first: true, predicate: ["prevMonthBtn"], descendants: true }, { propertyName: "nextMonthBtn", first: true, predicate: ["nextMonthBtn"], descendants: true }, { propertyName: "monthsBtns", predicate: ["monthsBtn"], descendants: true }, { propertyName: "monthViews", predicate: ["days"], descendants: true, read: IgxDaysViewComponent }], usesInheritance: true, ngImport: i0, template: "<ng-template let-result #defaultHeader>\n <span>{{ getFormattedDate().weekday }}, </span>\n <span>{{ getFormattedDate().monthday }}</span>\n</ng-template>\n\n<ng-template let-result #defaultMonth let-obj>\n <span *ngIf=\"monthsViewNumber < 2 || obj.index < 1\" class=\"igx-calendar__aria-off-screen\" aria-live=\"polite\">\n {{ monthsViewNumber > 1 ? (resourceStrings.igx_calendar_first_picker_of.replace('{0}', monthsViewNumber.toString()) + ' ' + (getViewDate(obj.index) | date: 'LLLL yyyy')) : resourceStrings.igx_calendar_selected_month_is + (getViewDate(obj.index) | date: 'LLLL yyyy')}}\n </span>\n <span\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"(getViewDate(obj.index) | date: 'LLLL') + ' ' + resourceStrings.igx_calendar_select_month\"\n #monthsBtn\n (keydown)=\"onActiveViewYearKB(getViewDate(obj.index), $event, obj.index)\"\n (click)=\"onActiveViewYear(getViewDate(obj.index), obj.index)\"\n class=\"igx-calendar-picker__date\">\n {{ formattedMonth(getViewDate(obj.index)) }}\n </span>\n\n <span\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"(getViewDate(obj.index) | date: 'yyyy') + ' ' + resourceStrings.igx_calendar_select_year\"\n #yearsBtn\n (keydown)=\"onActiveViewDecadeKB($event, getViewDate(obj.index), obj.index)\"\n (click)=\"onActiveViewDecade(getViewDate(obj.index), obj.index)\"\n class=\"igx-calendar-picker__date\">\n {{ formattedYear(getViewDate(obj.index)) }}\n </span>\n</ng-template>\n\n<header\n aria-labelledby=\"igx-aria-calendar-title-month igx-aria-calendar-title-year\"\n class=\"igx-calendar__header\"\n *ngIf=\"selection === 'single' && hasHeader\">\n\n <h5 id=\"igx-aria-calendar-title-year\" class=\"igx-calendar__header-year\">\n {{ formattedYear(headerDate) }}\n </h5>\n\n <h2 id=\"igx-aria-calendar-title-month\" class=\"igx-calendar__header-date\">\n <ng-container *ngTemplateOutlet=\"headerTemplate ? headerTemplate : defaultHeader; context: headerContext\">\n </ng-container>\n </h2>\n</header>\n\n<div *ngIf=\"isDefaultView\" class=\"igx-calendar__body\" [@animateView]=\"activeView\" (@animateView.done)=\"viewRendered($event)\" (swiperight)=\"previousMonth()\"\n (swipeleft)=\"nextMonth()\" (pointerdown)=\"suppressBlur()\">\n <section class=\"igx-calendar-picker\">\n <span tabindex=\"0\" class=\"igx-calendar__aria-off-screen\">\n <ng-container *ngIf=\"selection === 'multi'\">\n {{ monthsViewNumber && monthsViewNumber > 1 ? resourceStrings.igx_calendar_multi_selection.replace('{0}', monthsViewNumber.toString()) : resourceStrings.igx_calendar_singular_multi_selection}}\n </ng-container>\n <ng-container *ngIf=\"selection === 'range'\">\n {{ monthsViewNumber && monthsViewNumber > 1 ? resourceStrings.igx_calendar_range_selection.replace('{0}', monthsViewNumber.toString()) : resourceStrings.igx_calendar_singular_range_selection}}\n </ng-container>\n <ng-container *ngIf=\"selection === 'single'\">\n {{ monthsViewNumber && monthsViewNumber > 1 ? resourceStrings.igx_calendar_single_selection.replace('{0}', monthsViewNumber.toString()) : resourceStrings.igx_calendar_singular_single_selection}}\n </ng-container>\n </span>\n <div\n tabindex=\"0\"\n class=\"igx-calendar-picker__prev\"\n role=\"button\"\n [attr.aria-label]=\"resourceStrings.igx_calendar_previous_month + ', ' + (getPrevMonth(viewDate) | date: 'LLLL')\"\n data-action=\"prev\"\n #prevMonthBtn\n igxCalendarScrollMonth\n [startScroll]=\"startPrevMonthScroll\"\n [stopScroll]=\"stopMonthScroll\"\n [ngStyle]=\"{ 'min-width.%': 100/(monthsViewNumber*7)}\">\n <igx-icon aria-hidden=\"true\">keyboard_arrow_left</igx-icon>\n </div>\n <div class=\"igx-calendar-picker__dates\"\n *ngFor=\"let view of monthsViewNumber | IgxMonthViewSlots; index as i;\"\n [style.width.%]=\"100/monthsViewNumber\"\n [attr.data-month]=\"i | IgxGetViewDate:viewDate:false\">\n <ng-container *ngTemplateOutlet=\"subheaderTemplate ? subheaderTemplate : defaultMonth; context: getContext(i)\">\n </ng-container>\n </div>\n <div\n tabindex=\"0\"\n class=\"igx-calendar-picker__next\"\n role=\"button\"\n [attr.aria-label]=\"resourceStrings.igx_calendar_next_month + ', ' + (getNextMonth(viewDate, monthsViewNumber) | date: 'LLLL')\"\n data-action=\"next\"\n #nextMonthBtn\n igxCalendarScrollMonth\n [startScroll]=\"startNextMonthScroll\"\n [stopScroll]=\"stopMonthScroll\"\n [ngStyle]=\"{'min-width.%': 100/(monthsViewNumber*7)}\">\n <igx-icon aria-hidden=\"true\">keyboard_arrow_right</igx-icon>\n </div>\n </section>\n\n <section style=\"display: flex\"\n [@animateChange]=\"animationAction\"\n (@animateChange.done)=\"animationDone($event)\">\n <igx-days-view role=\"grid\" *ngFor=\"let view of monthsViewNumber | IgxMonthViewSlots; index as i;\" [changeDaysView]=\"true\" #days\n [selection]=\"selection\"\n [locale]=\"locale\"\n [value]=\"value\"\n [(activeDate)]=\"activeDate\"\n [viewDate]=\"i | IgxGetViewDate:viewDate\"\n [weekStart]=\"weekStart\"\n [formatOptions]=\"formatOptions\"\n [formatViews]=\"formatViews\"\n [disabledDates]=\"disabledDates\"\n [specialDates]=\"specialDates\"\n [hideOutsideDays]=\"hideOutsideDays\"\n [showWeekNumbers]=\"showWeekNumbers\"\n (viewChanging)=\"viewChanging($event)\"\n (dateSelection)=\"childClicked($event)\"\n (monthsViewBlur)=\"resetActiveDate()\">\n </igx-days-view>\n </section>\n</div>\n\n<igx-months-view *ngIf=\"isYearView\"\n [@animateView]=\"activeView\"\n #months\n (@animateView.done)=\"viewRendered($event)\"\n [date]=\"viewDate\"\n [locale]=\"locale\"\n [formatView]=\"formatViews.month\"\n [monthFormat]=\"formatOptions.month\"\n (selected)=\"changeMonth($event)\">\n</igx-months-view>\n\n<igx-years-view *ngIf=\"isDecadeView\"\n [@animateView]=\"activeView\"\n #decade\n (@animateView.done)=\"viewRendered($event)\"\n [date]=\"viewDate\"\n [locale]=\"locale\"\n [formatView]=\"formatViews.year\"\n [yearFormat]=\"formatOptions.year\"\n (selected)=\"changeYear($event)\">\n</igx-years-view>\n", components: [{ type: i1.IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { type: i2.IgxDaysViewComponent, selector: "igx-days-view", inputs: ["id", "changeDaysView", "showWeekNumbers", "activeDate"], outputs: ["dateSelection", "viewChanging", "activeDateChange", "monthsViewBlur"] }, { type: i3.IgxMonthsViewComponent, selector: "igx-months-view", inputs: ["id", "date", "monthFormat", "locale", "formatView"], outputs: ["selected"] }, { type: i4.IgxYearsViewComponent, selector: "igx-years-view", inputs: ["formatView", "date", "yearFormat", "locale"], outputs: ["selected"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i6.IgxCalendarScrollMonthDirective, selector: "[igxCalendarScrollMonth]", inputs: ["startScroll", "stopScroll"] }, { type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "date": i5.DatePipe, "IgxGetViewDate": i7.IgxGetViewDateCalendar, "IgxMonthViewSlots": i7.IgxMonthViewSlotsCalendar }, animations: [
|
|
812
|
+
], queries: [{ propertyName: "headerTemplateDirective", first: true, predicate: i0.forwardRef(function () { return IgxCalendarHeaderTemplateDirective; }), descendants: true, read: IgxCalendarHeaderTemplateDirective, static: true }, { propertyName: "subheaderTemplateDirective", first: true, predicate: i0.forwardRef(function () { return IgxCalendarSubheaderTemplateDirective; }), descendants: true, read: IgxCalendarSubheaderTemplateDirective, static: true }], viewQueries: [{ propertyName: "monthsView", first: true, predicate: ["months"], descendants: true, read: IgxMonthsViewComponent }, { propertyName: "dacadeView", first: true, predicate: ["decade"], descendants: true, read: IgxYearsViewComponent }, { propertyName: "daysView", first: true, predicate: ["days"], descendants: true, read: IgxDaysViewComponent }, { propertyName: "prevMonthBtn", first: true, predicate: ["prevMonthBtn"], descendants: true }, { propertyName: "nextMonthBtn", first: true, predicate: ["nextMonthBtn"], descendants: true }, { propertyName: "monthsBtns", predicate: ["monthsBtn"], descendants: true }, { propertyName: "monthViews", predicate: ["days"], descendants: true, read: IgxDaysViewComponent }], usesInheritance: true, ngImport: i0, template: "<ng-template let-result #defaultHeader>\n <span>{{ getFormattedDate().weekday }}, </span>\n <span>{{ getFormattedDate().monthday }}</span>\n</ng-template>\n\n<ng-template let-result #defaultMonth let-obj>\n <span *ngIf=\"monthsViewNumber < 2 || obj.index < 1\" class=\"igx-calendar__aria-off-screen\" aria-live=\"polite\">\n {{ monthsViewNumber > 1 ? (resourceStrings.igx_calendar_first_picker_of.replace('{0}', monthsViewNumber.toString()) + ' ' + (getViewDate(obj.index) | date: 'LLLL yyyy')) : resourceStrings.igx_calendar_selected_month_is + (getViewDate(obj.index) | date: 'LLLL yyyy')}}\n </span>\n <span\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"(getViewDate(obj.index) | date: 'LLLL') + ' ' + resourceStrings.igx_calendar_select_month\"\n #monthsBtn\n (keydown)=\"onActiveViewYearKB(getViewDate(obj.index), $event, obj.index)\"\n (click)=\"onActiveViewYear(getViewDate(obj.index), obj.index)\"\n class=\"igx-calendar-picker__date\">\n {{ formattedMonth(getViewDate(obj.index)) }}\n </span>\n\n <span\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"(getViewDate(obj.index) | date: 'yyyy') + ' ' + resourceStrings.igx_calendar_select_year\"\n #yearsBtn\n (keydown)=\"onActiveViewDecadeKB($event, getViewDate(obj.index), obj.index)\"\n (click)=\"onActiveViewDecade(getViewDate(obj.index), obj.index)\"\n class=\"igx-calendar-picker__date\">\n {{ formattedYear(getViewDate(obj.index)) }}\n </span>\n</ng-template>\n\n<header\n aria-labelledby=\"igx-aria-calendar-title-month igx-aria-calendar-title-year\"\n class=\"igx-calendar__header\"\n *ngIf=\"selection === 'single' && hasHeader\">\n\n <h5 id=\"igx-aria-calendar-title-year\" class=\"igx-calendar__header-year\">\n {{ formattedYear(headerDate) }}\n </h5>\n\n <h2 id=\"igx-aria-calendar-title-month\" class=\"igx-calendar__header-date\">\n <ng-container *ngTemplateOutlet=\"headerTemplate ? headerTemplate : defaultHeader; context: headerContext\">\n </ng-container>\n </h2>\n</header>\n\n<div *ngIf=\"isDefaultView\" class=\"igx-calendar__body\" [@animateView]=\"activeView\" (@animateView.done)=\"viewRendered($event)\" (swiperight)=\"previousMonth()\"\n (swipeleft)=\"nextMonth()\" (pointerdown)=\"suppressBlur()\">\n <section class=\"igx-calendar-picker\">\n <span tabindex=\"0\" class=\"igx-calendar__aria-off-screen\">\n <ng-container *ngIf=\"selection === 'multi'\">\n {{ monthsViewNumber && monthsViewNumber > 1 ? resourceStrings.igx_calendar_multi_selection.replace('{0}', monthsViewNumber.toString()) : resourceStrings.igx_calendar_singular_multi_selection}}\n </ng-container>\n <ng-container *ngIf=\"selection === 'range'\">\n {{ monthsViewNumber && monthsViewNumber > 1 ? resourceStrings.igx_calendar_range_selection.replace('{0}', monthsViewNumber.toString()) : resourceStrings.igx_calendar_singular_range_selection}}\n </ng-container>\n <ng-container *ngIf=\"selection === 'single'\">\n {{ monthsViewNumber && monthsViewNumber > 1 ? resourceStrings.igx_calendar_single_selection.replace('{0}', monthsViewNumber.toString()) : resourceStrings.igx_calendar_singular_single_selection}}\n </ng-container>\n </span>\n <div\n tabindex=\"0\"\n class=\"igx-calendar-picker__prev\"\n role=\"button\"\n [attr.aria-label]=\"resourceStrings.igx_calendar_previous_month + ', ' + (getPrevMonth(viewDate) | date: 'LLLL')\"\n data-action=\"prev\"\n #prevMonthBtn\n igxCalendarScrollMonth\n [startScroll]=\"startPrevMonthScroll\"\n [stopScroll]=\"stopMonthScroll\"\n [ngStyle]=\"{ 'min-width.%': 100/(monthsViewNumber*7)}\">\n <igx-icon aria-hidden=\"true\">keyboard_arrow_left</igx-icon>\n </div>\n <div class=\"igx-calendar-picker__dates\"\n *ngFor=\"let view of monthsViewNumber | IgxMonthViewSlots; index as i;\"\n [style.width.%]=\"100/monthsViewNumber\"\n [attr.data-month]=\"i | IgxGetViewDate:viewDate:false\">\n <ng-container *ngTemplateOutlet=\"subheaderTemplate ? subheaderTemplate : defaultMonth; context: getContext(i)\">\n </ng-container>\n </div>\n <div\n tabindex=\"0\"\n class=\"igx-calendar-picker__next\"\n role=\"button\"\n [attr.aria-label]=\"resourceStrings.igx_calendar_next_month + ', ' + (getNextMonth(viewDate, monthsViewNumber) | date: 'LLLL')\"\n data-action=\"next\"\n #nextMonthBtn\n igxCalendarScrollMonth\n [startScroll]=\"startNextMonthScroll\"\n [stopScroll]=\"stopMonthScroll\"\n [ngStyle]=\"{'min-width.%': 100/(monthsViewNumber*7)}\">\n <igx-icon aria-hidden=\"true\">keyboard_arrow_right</igx-icon>\n </div>\n </section>\n\n <section style=\"display: flex\"\n [@animateChange]=\"animationAction\"\n (@animateChange.done)=\"animationDone($event)\">\n <igx-days-view role=\"grid\" *ngFor=\"let view of monthsViewNumber | IgxMonthViewSlots; index as i;\" [changeDaysView]=\"true\" #days\n [selection]=\"selection\"\n [locale]=\"locale\"\n [value]=\"value\"\n [(activeDate)]=\"activeDate\"\n [viewDate]=\"i | IgxGetViewDate:viewDate\"\n [weekStart]=\"weekStart\"\n [formatOptions]=\"formatOptions\"\n [formatViews]=\"formatViews\"\n [disabledDates]=\"disabledDates\"\n [specialDates]=\"specialDates\"\n [hideOutsideDays]=\"hideOutsideDays\"\n [showWeekNumbers]=\"showWeekNumbers\"\n (viewChanging)=\"viewChanging($event)\"\n (dateSelection)=\"childClicked($event)\"\n (monthsViewBlur)=\"resetActiveDate()\">\n </igx-days-view>\n </section>\n</div>\n\n<igx-months-view *ngIf=\"isYearView\"\n [@animateView]=\"activeView\"\n #months\n (@animateView.done)=\"viewRendered($event)\"\n [date]=\"viewDate\"\n [locale]=\"locale\"\n [formatView]=\"formatViews.month\"\n [monthFormat]=\"formatOptions.month\"\n (selected)=\"changeMonth($event)\">\n</igx-months-view>\n\n<igx-years-view *ngIf=\"isDecadeView\"\n [@animateView]=\"activeView\"\n #decade\n (@animateView.done)=\"viewRendered($event)\"\n [date]=\"viewDate\"\n [locale]=\"locale\"\n [formatView]=\"formatViews.year\"\n [yearFormat]=\"formatOptions.year\"\n (selected)=\"changeYear($event)\">\n</igx-years-view>\n", components: [{ type: i1.IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { type: i2.IgxDaysViewComponent, selector: "igx-days-view", inputs: ["id", "changeDaysView", "showWeekNumbers", "activeDate"], outputs: ["dateSelection", "viewChanging", "activeDateChange", "monthsViewBlur"] }, { type: i3.IgxMonthsViewComponent, selector: "igx-months-view", inputs: ["id", "date", "monthFormat", "locale", "formatView"], outputs: ["selected"] }, { type: i4.IgxYearsViewComponent, selector: "igx-years-view", inputs: ["formatView", "date", "yearFormat", "locale"], outputs: ["selected"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i6.IgxCalendarScrollMonthDirective, selector: "[igxCalendarScrollMonth]", inputs: ["startScroll", "stopScroll"] }, { type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "date": i5.DatePipe, "IgxGetViewDate": i7.IgxGetViewDateCalendar, "IgxMonthViewSlots": i7.IgxMonthViewSlotsCalendar }, animations: [
|
|
813
813
|
trigger('animateView', [
|
|
814
814
|
transition('void => 0', useAnimation(fadeIn)),
|
|
815
815
|
transition('void => *', useAnimation(scaleInCenter, {
|
|
@@ -832,7 +832,7 @@ IgxCalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
|
|
|
832
832
|
}))
|
|
833
833
|
])
|
|
834
834
|
] });
|
|
835
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.
|
|
835
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: IgxCalendarComponent, decorators: [{
|
|
836
836
|
type: Component,
|
|
837
837
|
args: [{ providers: [
|
|
838
838
|
{
|
|
@@ -933,4 +933,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
|
|
|
933
933
|
type: HostListener,
|
|
934
934
|
args: ['document:mouseup', ['$event']]
|
|
935
935
|
}] } });
|
|
936
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUdULFlBQVksRUFHZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEYsT0FBTyxFQUNILGtDQUFrQyxFQUNsQyxxQ0FBcUMsRUFDeEMsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQWlCLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxRQUFRLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzlD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Q0FBQyxHQUFHLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUc7Z0JBa0Q5SCxpQkFBaUI7c0JBRnZCLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUMzQyxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWdGbkMsb0JBQW9CO3NCQUYxQixZQUFZO3VCQUFDLHNCQUFzQixFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFDL0MsWUFBWTt1QkFBQyx3QkFBd0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkE0RDNDLGFBQWE7c0JBRG5CLFlBQVk7dUJBQUMsY0FBYyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWNqQyxZQUFZO3NCQURsQixZQUFZO3VCQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFjaEMsU0FBUztzQkFEZixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHJhbnNpdGlvbiwgdHJpZ2dlciwgdXNlQW5pbWF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgUXVlcnlMaXN0LFxuICAgIE9uRGVzdHJveVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZmFkZUluLCBzY2FsZUluQ2VudGVyLCBzbGlkZUluTGVmdCwgc2xpZGVJblJpZ2h0IH0gZnJvbSAnLi4vYW5pbWF0aW9ucy9tYWluJztcbmltcG9ydCB7XG4gICAgSWd4Q2FsZW5kYXJIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBJZ3hDYWxlbmRhclN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlXG59IGZyb20gJy4vY2FsZW5kYXIuZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBJQ2FsZW5kYXJEYXRlLCBtb250aFJhbmdlIH0gZnJvbSAnLi9jYWxlbmRhcic7XG5pbXBvcnQgeyBDYWxlbmRhclZpZXcsIElneENhbGVuZGFyVmlldywgSWd4TW9udGhQaWNrZXJCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi9tb250aC1waWNrZXItYmFzZSc7XG5pbXBvcnQgeyBJZ3hNb250aHNWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9tb250aHMtdmlldy9tb250aHMtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4WWVhcnNWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi95ZWFycy12aWV3L3llYXJzLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IElneERheXNWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9kYXlzLXZpZXcvZGF5cy12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBpbnRlcnZhbCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIGRlYm91bmNlLCBza2lwTGFzdCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU2Nyb2xsTW9udGggfSBmcm9tICcuL2NhbGVuZGFyLWJhc2UnO1xuaW1wb3J0IHsgSVZpZXdDaGFuZ2luZ0V2ZW50QXJncyB9IGZyb20gJy4vZGF5cy12aWV3L2RheXMtdmlldy5pbnRlcmZhY2UnO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5cbi8qKlxuICogQ2FsZW5kYXIgcHJvdmlkZXMgYSB3YXkgdG8gZGlzcGxheSBkYXRlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4Q2FsZW5kYXJNb2R1bGVcbiAqXG4gKiBAaWd4VGhlbWUgaWd4LWNhbGVuZGFyLXRoZW1lLCBpZ3gtaWNvbi10aGVtZVxuICpcbiAqIEBpZ3hLZXl3b3JkcyBjYWxlbmRhciwgZGF0ZXBpY2tlciwgc2NoZWR1bGUsIGRhdGVcbiAqXG4gKiBAaWd4R3JvdXAgU2NoZWR1bGluZ1xuICpcbiAqIEByZW1hcmtzXG4gKiBUaGUgSWduaXRlIFVJIENhbGVuZGFyIHByb3ZpZGVzIGFuIGVhc3kgd2F5IHRvIGRpc3BsYXkgYSBjYWxlbmRhciBhbmQgYWxsb3cgdXNlcnMgdG8gc2VsZWN0IGRhdGVzIHVzaW5nIHNpbmdsZSwgbXVsdGlwbGVcbiAqIG9yIHJhbmdlIHNlbGVjdGlvbi5cbiAqXG4gKiBAZXhhbXBsZTpcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtY2FsZW5kYXIgc2VsZWN0aW9uPVwicmFuZ2VcIj48L2lneC1jYWxlbmRhcj5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuICAgICAgICB9XG4gICAgXSxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIHRyaWdnZXIoJ2FuaW1hdGVWaWV3JywgW1xuICAgICAgICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAwJywgdXNlQW5pbWF0aW9uKGZhZGVJbikpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAqJywgdXNlQW5pbWF0aW9uKHNjYWxlSW5DZW50ZXIsIHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246ICcuMnMnLFxuICAgICAgICAgICAgICAgICAgICBmcm9tU2NhbGU6IC45XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpXG4gICAgICAgIF0pLFxuICAgICAgICB0cmlnZ2VyKCdhbmltYXRlQ2hhbmdlJywgW1xuICAgICAgICAgICAgdHJhbnNpdGlvbignKiA9PiBwcmV2JywgdXNlQW5pbWF0aW9uKHNsaWRlSW5MZWZ0LCB7XG4gICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgIGZyb21Qb3NpdGlvbjogJ3RyYW5zbGF0ZVgoLTMwJSknXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignKiA9PiBuZXh0JywgdXNlQW5pbWF0aW9uKHNsaWRlSW5SaWdodCwge1xuICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICBmcm9tUG9zaXRpb246ICd0cmFuc2xhdGVYKDMwJSknXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpXG4gICAgICAgIF0pXG4gICAgXSxcbiAgICBzZWxlY3RvcjogJ2lneC1jYWxlbmRhcicsXG4gICAgdGVtcGxhdGVVcmw6ICdjYWxlbmRhci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgSWd4Q2FsZW5kYXJDb21wb25lbnQgZXh0ZW5kcyBJZ3hNb250aFBpY2tlckJhc2VEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgYGlkYCBvZiB0aGUgY2FsZW5kYXIuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIElmIG5vdCBzZXQsIHRoZSBgaWRgIHdpbGwgaGF2ZSB2YWx1ZSBgXCJpZ3gtY2FsZW5kYXItMFwiYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2FsZW5kYXIgaWQ9XCJteS1maXJzdC1jYWxlbmRhclwiPjwvaWd4LWNhbGVuZGFyPlxuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWQgPSBgaWd4LWNhbGVuZGFyLSR7TkVYVF9JRCsrfWA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgd2hldGhlciB0aGUgY2FsZW5kYXIgaGFzIGhlYWRlci5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2FsZW5kYXIgW2hhc0hlYWRlcl09XCJmYWxzZVwiPjwvaWd4LWNhbGVuZGFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhhc0hlYWRlciA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgd2hldGhlciB0aGUgY2FsZW5kYXIgaGVhZGVyIHdpbGwgYmUgaW4gdmVydGljYWwgcG9zaXRpb24uXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYWxlbmRhciBbdmVydGljYWxdID0gXCJ0cnVlXCI+PC9pZ3gtY2FsZW5kYXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdmVydGljYWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgbnVtYmVyIG9mIG1vbnRoIHZpZXdzIGRpc3BsYXllZC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGAxYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2FsZW5kYXIgW21vbnRoc1ZpZXdOdW1iZXJdPVwiMlwiPjwvaWd4LWNhbGVuZGFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBtb250aHNWaWV3TnVtYmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzVmlld051bWJlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IG1vbnRoc1ZpZXdOdW1iZXIodmFsOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHZhbCA8IDEgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tb250aHNWaWV3TnVtYmVyID0gdmFsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3cvaGlkZSB3ZWVrIG51bWJlcnNcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2FsZW5kYXIgW3Nob3dXZWVrTnVtYmVyc109XCJ0cnVlXCI+PC9pZ3gtY2FsZW5kYXI+XG4gICAgICogYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93V2Vla051bWJlcnMgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEFwcGx5IHRoZSBkaWZmZXJlbnQgc3RhdGVzIGZvciB0aGUgdHJhbnNpdGlvbnMgb2YgYW5pbWF0ZUNoYW5nZVxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFuaW1hdGlvbkFjdGlvbjogYW55ID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBjc3MgY2xhc3MgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWNhbGVuZGFyLS12ZXJ0aWNhbCcpXG4gICAgcHVibGljIGdldCBzdHlsZVZlcnRpY2FsQ2xhc3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcnRpY2FsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IGNzcyBjbGFzcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtY2FsZW5kYXInKVxuICAgIHB1YmxpYyBzdHlsZUNsYXNzID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFZpZXdDaGlsZCB0aGF0IHJlcHJlc2VudHMgdGhlIG1vbnRocyB2aWV3LlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ21vbnRocycsIHsgcmVhZDogSWd4TW9udGhzVmlld0NvbXBvbmVudCB9KVxuICAgIHB1YmxpYyBtb250aHNWaWV3OiBJZ3hNb250aHNWaWV3Q29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogTW9udGggYnV0dG9uLCB0aGF0IGRpc3BsYXlzIHRoZSBtb250aHMgdmlldy5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKCdtb250aHNCdG4nKVxuICAgIHB1YmxpYyBtb250aHNCdG5zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgICAvKipcbiAgICAgKiBWaWV3Q2hpbGQgdGhhdCByZXByZXNlbnRzIHRoZSBkZWNhZGUgdmlldy5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkZWNhZGUnLCB7IHJlYWQ6IElneFllYXJzVmlld0NvbXBvbmVudCB9KVxuICAgIHB1YmxpYyBkYWNhZGVWaWV3OiBJZ3hZZWFyc1ZpZXdDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3Q2hpbGQgdGhhdCByZXByZXNlbnRzIHRoZSBkYXlzIHZpZXcuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZGF5cycsIHsgcmVhZDogSWd4RGF5c1ZpZXdDb21wb25lbnQgfSlcbiAgICBwdWJsaWMgZGF5c1ZpZXc6IElneERheXNWaWV3Q29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogVmlld0NoaWxkcmVuZGVuIHJlcHJlc2VudGluZyBhbGwgb2YgdGhlIHJlbmRlcmVkIGRheXMgdmlld3MuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZHJlbignZGF5cycsIHsgcmVhZDogSWd4RGF5c1ZpZXdDb21wb25lbnQgfSlcbiAgICBwdWJsaWMgbW9udGhWaWV3czogUXVlcnlMaXN0PElneERheXNWaWV3Q29tcG9uZW50PjtcblxuICAgIC8qKlxuICAgICAqIEJ1dHRvbiBmb3IgcHJldmlvdXMgbW9udGguXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgncHJldk1vbnRoQnRuJylcbiAgICBwdWJsaWMgcHJldk1vbnRoQnRuOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogQnV0dG9uIGZvciBuZXh0IG1vbnRoLlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ25leHRNb250aEJ0bicpXG4gICAgcHVibGljIG5leHRNb250aEJ0bjogRWxlbWVudFJlZjtcblxuICAgIC8qKlxuICAgICAqIERlbm90ZSBpZiB0aGUgeWVhciB2aWV3IGlzIGFjdGl2ZS5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlzWWVhclZpZXcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVZpZXcgPT09IENhbGVuZGFyVmlldy5ZRUFSIHx8IHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LlllYXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaGVhZGVyIHRlbXBsYXRlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGhlYWRlclRlbXBsYXRlID0gIHRoaXMuY2FsZW5kYXIuaGVhZGVyVGVhbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGVhZGVyVGVtcGxhdGUoKTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMuaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLnRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGhlYWRlciB0ZW1wbGF0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2FsZW5kYXIgaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUgPSBcImlneENhbGVuZGFySGVhZGVyXCI+PC9pZ3gtY2FsZW5kYXI+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENhbGVuZGFyQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHNldCBoZWFkZXJUZW1wbGF0ZShkaXJlY3RpdmU6IGFueSkge1xuICAgICAgICB0aGlzLmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlID0gZGlyZWN0aXZlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHN1YmhlYWRlciB0ZW1wbGF0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBzdWJoZWFkZXJUZW1wbGF0ZSA9IHRoaXMuY2FsZW5kYXIuc3ViaGVhZGVyVGVtcGxhdGU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBzdWJoZWFkZXJUZW1wbGF0ZSgpOiBhbnkge1xuICAgICAgICBpZiAodGhpcy5zdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUudGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3ViaGVhZGVyIHRlbXBsYXRlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYWxlbmRhciBzdWJoZWFkZXJUZW1wbGF0ZSA9IFwiaWd4Q2FsZW5kYXJTdWJoZWFkZXJcIj48L2lneC1jYWxlbmRhcj5cbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q2FsZW5kYXJDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHN1YmhlYWRlclRlbXBsYXRlKGRpcmVjdGl2ZTogYW55KSB7XG4gICAgICAgIHRoaXMuc3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUgPSBkaXJlY3RpdmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY29udGV4dCBmb3IgdGhlIHRlbXBsYXRlIG1hcmtlZCB3aXRoIHRoZSBgaWd4Q2FsZW5kYXJIZWFkZXJgIGRpcmVjdGl2ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBoZWFkZXJDb250ZXh0ID0gIHRoaXMuY2FsZW5kYXIuaGVhZGVyQ29udGV4dDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhlYWRlckNvbnRleHQoKSB7XG4gICAgICAgIGNvbnN0IGRhdGU6IERhdGUgPSB0aGlzLmhlYWRlckRhdGU7XG4gICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlQ29udGV4dChkYXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjb250ZXh0IGZvciB0aGUgdGVtcGxhdGUgbWFya2VkIHdpdGggZWl0aGVyIGBpZ3hDYWxlbmRhclN1YkhlYWRlck1vbnRoYFxuICAgICAqIG9yIGBpZ3hDYWxlbmRhclN1YkhlYWRlclllYXJgIGRpcmVjdGl2ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjb250ZXh0ID0gIHRoaXMuY2FsZW5kYXIuY29udGV4dDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNvbnRleHQoKSB7XG4gICAgICAgIGNvbnN0IGRhdGU6IERhdGUgPSB0aGlzLnZpZXdEYXRlO1xuICAgICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUNvbnRleHQoZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGF0ZSBkaXNwbGF5ZWQgaW4gaGVhZGVyXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBoZWFkZXJEYXRlKCk6IERhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZERhdGVzID8gdGhpcy5zZWxlY3RlZERhdGVzIDogbmV3IERhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChmb3J3YXJkUmVmKCgpID0+IElneENhbGVuZGFySGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpLCB7IHJlYWQ6IElneENhbGVuZGFySGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsIHN0YXRpYzogdHJ1ZSAgfSlcbiAgICBwcml2YXRlIGhlYWRlclRlbXBsYXRlRGlyZWN0aXZlOiBJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgQENvbnRlbnRDaGlsZChmb3J3YXJkUmVmKCgpID0+IElneENhbGVuZGFyU3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpLCB7IHJlYWQ6IElneENhbGVuZGFyU3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsIHN0YXRpYzogdHJ1ZSAgfSlcbiAgICBwcml2YXRlIHN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlOiBJZ3hDYWxlbmRhclN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBhY3RpdmVEYXRlID0gbmV3IERhdGUoKS50b0xvY2FsZURhdGVTdHJpbmcoKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gYXBwbHkgdGhlIGFjdGl2ZSBkYXRlIHdoZW4gdGhlIGNhbGVuZGFyIHZpZXcgaXMgY2hhbmdlZFxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBuZXh0RGF0ZTogRGF0ZTtcblxuICAgIC8qKlxuICAgICAqIERlbm90ZSBpZiB0aGUgY2FsZW5kYXIgdmlldyB3YXMgY2hhbmdlZCB3aXRoIHRoZSBrZXlib2FyZFxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBpc0tleWRvd25UcmlnZ2VyID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNhbGxiYWNrOiAobmV4dCkgPT4gdm9pZDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9tb250aHNWaWV3TnVtYmVyID0gMTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbW9udGhWaWV3c0NoYW5nZXMkOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKipcbiAgICAgKiBLZXlib2FyZCBuYXZpZ2F0aW9uIG9mIHRoZSBjYWxlbmRhclxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24ucGFnZWRvd24nLCBbJyRldmVudCddKVxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24ucGFnZXVwJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duUGFnZURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGVmYXVsdFZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzUGFnZURvd24gPSBldmVudC5rZXkgPT09ICdQYWdlRG93bic7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBpc1BhZ2VEb3duID8gMSA6IC0xO1xuICAgICAgICBsZXQgbW9udGhWaWV3ID0gdGhpcy5kYXlzVmlldyBhcyBJZ3hEYXlzVmlld0NvbXBvbmVudDtcbiAgICAgICAgbGV0IGFjdGl2ZURhdGU7XG5cbiAgICAgICAgd2hpbGUgKCFhY3RpdmVEYXRlICYmIG1vbnRoVmlldykge1xuICAgICAgICAgICAgYWN0aXZlRGF0ZSA9IG1vbnRoVmlldy5kYXRlcy5maW5kKChkYXRlKSA9PiBkYXRlLm5hdGl2ZUVsZW1lbnQgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgbW9udGhWaWV3ID0gbW9udGhWaWV3Lm5leHRNb250aFZpZXc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWN0aXZlRGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5uZXh0RGF0ZSA9IG5ldyBEYXRlKGFjdGl2ZURhdGUuZGF0ZS5kYXRlKTtcblxuICAgICAgICAgICAgbGV0IHllYXIgPSB0aGlzLm5leHREYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgICAgICAgICAgIGxldCBtb250aCA9IHRoaXMubmV4dERhdGUuZ2V0TW9udGgoKSArIHN0ZXA7XG4gICAgICAgICAgICBpZiAoaXNQYWdlRG93bikge1xuICAgICAgICAgICAgICAgIGlmIChtb250aCA+IDExKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoID0gMDsgeWVhciArPSBzdGVwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKG1vbnRoIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBtb250aCA9IDExOyB5ZWFyICs9IHN0ZXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IG1vbnRoUmFuZ2UodGhpcy5uZXh0RGF0ZS5nZXRGdWxsWWVhcigpLCBtb250aCk7XG5cbiAgICAgICAgICAgIGxldCBkYXkgPSB0aGlzLm5leHREYXRlLmdldERhdGUoKTtcbiAgICAgICAgICAgIGlmIChkYXkgPiByYW5nZVsxXSkge1xuICAgICAgICAgICAgICAgIGRheSA9IHJhbmdlWzFdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm5leHREYXRlLnNldERhdGUoZGF5KTtcbiAgICAgICAgICAgIHRoaXMubmV4dERhdGUuc2V0TW9udGgobW9udGgpO1xuICAgICAgICAgICAgdGhpcy5uZXh0RGF0ZS5zZXRGdWxsWWVhcih5ZWFyKTtcblxuICAgICAgICAgICAgdGhpcy5jYWxsYmFjayA9IChuZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgbW9udGhWaWV3ID0gdGhpcy5kYXlzVmlldyBhcyBJZ3hEYXlzVmlld0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBsZXQgZGF5SXRlbTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoKCFkYXlJdGVtICYmIG1vbnRoVmlldykgfHwgKGRheUl0ZW0gJiYgIWRheUl0ZW0uaXNDdXJyZW50TW9udGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRheUl0ZW0gPSBtb250aFZpZXcuZGF0ZXMuZmluZCgoZCkgPT4gZC5kYXRlLmRhdGUuZ2V0VGltZSgpID09PSBuZXh0LmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoVmlldyA9IG1vbnRoVmlldy5uZXh0TW9udGhWaWV3O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGF5SXRlbSAmJiBkYXlJdGVtLmlzRm9jdXNhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRheUl0ZW0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNQYWdlRG93bikge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnJlcGVhdCkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLm5leHRNb250aCh0cnVlKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubmV4dE1vbnRoKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnJlcGVhdCkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLnByZXZpb3VzTW9udGgodHJ1ZSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzTW9udGgodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBLZXlib2FyZCBuYXZpZ2F0aW9uIG9mIHRoZSBjYWxlbmRhclxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uc2hpZnQucGFnZXVwJywgWyckZXZlbnQnXSlcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLnNoaWZ0LnBhZ2Vkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duU2hpZnRQYWdlVXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNEZWZhdWx0Vmlldykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNQYWdlRG93biA9IGV2ZW50LmtleSA9PT0gJ1BhZ2VEb3duJztcbiAgICAgICAgY29uc3Qgc3RlcCA9IGlzUGFnZURvd24gPyAxIDogLTE7XG4gICAgICAgIHRoaXMucHJldmlvdXNWaWV3RGF0ZSA9IHRoaXMudmlld0RhdGU7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSB0aGlzLmNhbGVuZGFyTW9kZWwudGltZWRlbHRhKHRoaXMudmlld0RhdGUsICd5ZWFyJywgc3RlcCk7XG5cbiAgICAgICAgdGhpcy5hbmltYXRpb25BY3Rpb24gPSBpc1BhZ2VEb3duID8gU2Nyb2xsTW9udGguTkVYVCA6IFNjcm9sbE1vbnRoLlBSRVY7XG4gICAgICAgIHRoaXMuaXNLZXlkb3duVHJpZ2dlciA9IHRydWU7XG5cbiAgICAgICAgbGV0IG1vbnRoVmlldyA9IHRoaXMuZGF5c1ZpZXcgYXMgSWd4RGF5c1ZpZXdDb21wb25lbnQ7XG4gICAgICAgIGxldCBhY3RpdmVEYXRlO1xuXG4gICAgICAgIHdoaWxlICghYWN0aXZlRGF0ZSAmJiBtb250aFZpZXcpIHtcbiAgICAgICAgICAgIGFjdGl2ZURhdGUgPSBtb250aFZpZXcuZGF0ZXMuZmluZCgoZGF0ZSkgPT4gZGF0ZS5uYXRpdmVFbGVtZW50ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIG1vbnRoVmlldyA9IG1vbnRoVmlldy5uZXh0TW9udGhWaWV3O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdGl2ZURhdGUpIHtcbiAgICAgICAgICAgIHRoaXMubmV4dERhdGUgPSBuZXcgRGF0ZShhY3RpdmVEYXRlLmRhdGUuZGF0ZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSB0aGlzLm5leHREYXRlLmdldEZ1bGxZZWFyKCkgKyBzdGVwO1xuXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IG1vbnRoUmFuZ2UoeWVhciwgdGhpcy5uZXh0RGF0ZS5nZXRNb250aCgpKTtcblxuICAgICAgICAgICAgbGV0IGRheSA9IHRoaXMubmV4dERhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICAgICAgaWYgKGRheSA+IHJhbmdlWzFdKSB7XG4gICAgICAgICAgICAgICAgZGF5ID0gcmFuZ2VbMV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubmV4dERhdGUuc2V0RGF0ZShkYXkpO1xuICAgICAgICAgICAgdGhpcy5uZXh0RGF0ZS5zZXRGdWxsWWVhcih5ZWFyKTtcblxuICAgICAgICAgICAgdGhpcy5jYWxsYmFjayA9IChuZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgbW9udGhWaWV3ID0gdGhpcy5kYXlzVmlldyBhcyBJZ3hEYXlzVmlld0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBsZXQgZGF5SXRlbTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoKCFkYXlJdGVtICYmIG1vbnRoVmlldykgfHwgKGRheUl0ZW0gJiYgIWRheUl0ZW0uaXNDdXJyZW50TW9udGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRheUl0ZW0gPSBtb250aFZpZXcuZGF0ZXMuZmluZCgoZCkgPT4gZC5kYXRlLmRhdGUuZ2V0VGltZSgpID09PSBuZXh0LmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoVmlldyA9IG1vbnRoVmlldy5uZXh0TW9udGhWaWV3O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGF5SXRlbSAmJiBkYXlJdGVtLmlzRm9jdXNhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRheUl0ZW0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBLZXlib2FyZCBuYXZpZ2F0aW9uIG9mIHRoZSBjYWxlbmRhclxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uaG9tZScsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uS2V5ZG93bkhvbWUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF5c1ZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuZGF5c1ZpZXcub25LZXlkb3duSG9tZShldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBLZXlib2FyZCBuYXZpZ2F0aW9uIG9mIHRoZSBjYWxlbmRhclxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW5kJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duRW5kKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmRheXNWaWV3KSB7XG4gICAgICAgICAgICB0aGlzLmRheXNWaWV3Lm9uS2V5ZG93bkVuZChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdG9wIGNvbnRpbnVvdXMgbmF2aWdhdGlvbiBvbiBtb3VzZXVwIGV2ZW50XG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2V1cCcsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uTW91c2VVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5tb250aFNjcm9sbERpcmVjdGlvbiAhPT0gU2Nyb2xsTW9udGguTk9ORSkge1xuICAgICAgICAgICAgdGhpcy5zdG9wTW9udGhTY3JvbGwoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXRTaWJsaW5nTW9udGhzKHRoaXMubW9udGhWaWV3cyk7XG4gICAgICAgIHRoaXMuX21vbnRoVmlld3NDaGFuZ2VzJCA9IHRoaXMubW9udGhWaWV3cy5jaGFuZ2VzLnN1YnNjcmliZShjID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2libGluZ01vbnRocyhjKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zdGFydE1vbnRoU2Nyb2xsJC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuc3RvcE1vbnRoU2Nyb2xsJCksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5zY3JvbGxNb250aCQucGlwZShcbiAgICAgICAgICAgICAgICBza2lwTGFzdCgxKSxcbiAgICAgICAgICAgICAgICBkZWJvdW5jZSgoKSA9PiBpbnRlcnZhbCgzMDApKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5zdG9wTW9udGhTY3JvbGwkKVxuICAgICAgICAgICAgKSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLm1vbnRoU2Nyb2xsRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU2Nyb2xsTW9udGguUFJFVjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNNb250aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU2Nyb2xsTW9udGguTkVYVDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dE1vbnRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTY3JvbGxNb250aC5OT05FOlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBsb2NhbGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIGluIHRoZSBtb250aCB2aWV3IGlmIGVuYWJsZWQsXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgdGhlIGRlZmF1bHQgYERhdGUuZ2V0TW9udGgoKWAgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGZvcm1hdHRlZE1vbnRoKHZhbHVlOiBEYXRlKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0Vmlld3MubW9udGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdHRlck1vbnRoLmZvcm1hdCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlLmdldE1vbnRoKCl9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgdG8gcHJldmlvdXMgbW9udGhcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcHJldmlvdXNNb250aChpc0tleWRvd25UcmlnZ2VyID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGlzS2V5ZG93blRyaWdnZXIgJiYgdGhpcy5hbmltYXRpb25BY3Rpb24gPT09IFNjcm9sbE1vbnRoLk5FWFQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXZpb3VzVmlld0RhdGUgPSB0aGlzLnZpZXdEYXRlO1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gdGhpcy5jYWxlbmRhck1vZGVsLmdldFByZXZNb250aCh0aGlzLnZpZXdEYXRlKTtcbiAgICAgICAgdGhpcy5hbmltYXRpb25BY3Rpb24gPSBTY3JvbGxNb250aC5QUkVWO1xuICAgICAgICB0aGlzLmlzS2V5ZG93blRyaWdnZXIgPSBpc0tleWRvd25UcmlnZ2VyO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdXBwcmVzc0JsdXIoKSB7XG4gICAgICAgIHRoaXMubW9udGhWaWV3cz8uZm9yRWFjaChkID0+IGQuc2hvdWxkUmVzZXREYXRlID0gZmFsc2UpO1xuICAgICAgICBpZiAodGhpcy5kYXlzVmlldykge1xuICAgICAgICAgICAgdGhpcy5kYXlzVmlldy5zaG91bGRSZXNldERhdGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZSB0byBuZXh0IG1vbnRoXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5leHRNb250aChpc0tleWRvd25UcmlnZ2VyID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGlzS2V5ZG93blRyaWdnZXIgJiYgdGhpcy5hbmltYXRpb25BY3Rpb24gPT09ICdwcmV2Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNLZXlkb3duVHJpZ2dlciA9IGlzS2V5ZG93blRyaWdnZXI7XG4gICAgICAgIHRoaXMucHJldmlvdXNWaWV3RGF0ZSA9IHRoaXMudmlld0RhdGU7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSB0aGlzLmNhbGVuZGFyTW9kZWwuZ2V0TmV4dE1vbnRoKHRoaXMudmlld0RhdGUpO1xuICAgICAgICB0aGlzLmFuaW1hdGlvbkFjdGlvbiA9IFNjcm9sbE1vbnRoLk5FWFQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udGluaW91cyBuYXZpZ2F0aW9uIHRocm91Z2ggdGhlIHByZXZpb3VzIG1vbnRoc1xuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBzdGFydFByZXZNb250aFNjcm9sbCA9IChpc0tleWRvd25UcmlnZ2VyID0gZmFsc2UpID0+IHtcbiAgICAgICAgdGhpcy5zdGFydE1vbnRoU2Nyb2xsJC5uZXh0KCk7XG4gICAgICAgIHRoaXMubW9udGhTY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxNb250aC5QUkVWO1xuICAgICAgICB0aGlzLmFuaW1hdGlvbkFjdGlvbiA9IFNjcm9sbE1vbnRoLlBSRVY7XG4gICAgICAgIHRoaXMucHJldmlvdXNNb250aChpc0tleWRvd25UcmlnZ2VyKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ29udGluaW91cyBuYXZpZ2F0aW9uIHRocm91Z2ggdGhlIG5leHQgbW9udGhzXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHN0YXJ0TmV4dE1vbnRoU2Nyb2xsID0gKGlzS2V5ZG93blRyaWdnZXIgPSBmYWxzZSkgPT4ge1xuICAgICAgICB0aGlzLnN0YXJ0TW9udGhTY3JvbGwkLm5leHQoKTtcbiAgICAgICAgdGhpcy5tb250aFNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbE1vbnRoLk5FWFQ7XG4gICAgICAgIHRoaXMuYW5pbWF0aW9uQWN0aW9uID0gU2Nyb2xsTW9udGguTkVYVDtcbiAgICAgICAgdGhpcy5uZXh0TW9udGgoaXNLZXlkb3duVHJpZ2dlcik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFN0b3AgY29udGludW91cyBuYXZpZ2F0aW9uXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHN0b3BNb250aFNjcm9sbCA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAvLyBnZW5lcmFsbHkgdGhlIHNjcm9sbGluZyBpcyBidWlsdCBvbiB0aGUgY2FsZW5kYXIgY29tcG9uZW50XG4gICAgICAgIC8vIGFuZCBhbGwgc3RhcnQvc3RvcCBzY3JvbGxpbmcgbWV0aG9kcyBhcmUgY2FsbGVkIG9uIHRoZSBjYWxlbmRhclxuICAgICAgICAvLyBpZiB3ZSBjaGFuZ2UgYmVsb3cgbGluZXMgdG8gY2FsbCBzdG9wTW9udGhTY3JvbGwkIG9uIHRoZSBjYWxlbmRhciBpbnN0ZWFkIG9mIG9uIHRoZSB2aWV3cyxcbiAgICAgICAgLy8gc3RyYW5nZSBidWcgaXMgaW50cm9kdWNlZCAtLT4gYWZ0ZXIgY2hhbmdpbmcgbnVtYmVyIG9mIG1vbnRocywgY29udGludW91cyBzY3JvbGxpbmcgb24gbW91c2UgY2xpY2sgZG9lcyBub3QgaGFwcGVuXG4gICAgICAgIHRoaXMuZGF5c1ZpZXcuc3RvcE1vbnRoU2Nyb2xsJC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmRheXNWaWV3LnN0b3BNb250aFNjcm9sbCQuY29tcGxldGUoKTtcblxuXG4gICAgICAgIGlmICh0aGlzLm1vbnRoU2Nyb2xsRGlyZWN0aW9uID09PSBTY3JvbGxNb250aC5QUkVWKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZNb250aEJ0bi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb250aFNjcm9sbERpcmVjdGlvbiA9PT0gU2Nyb2xsTW9udGguTkVYVCkge1xuICAgICAgICAgICAgdGhpcy5uZXh0TW9udGhCdG4ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzQWN0aXZhdGlvbktleShldmVudCkpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRBY3RpdmVEYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1vbnRoU2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsTW9udGguTk9ORTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkFjdGl2ZVZpZXdEZWNhZGUoYXJnczogRGF0ZSwgYWN0aXZlVmlld0lkeDogbnVtYmVyKSB7XG4gICAgICAgIHN1cGVyLmFjdGl2ZVZpZXdEZWNhZGUoYWN0aXZlVmlld0lkeCk7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYWNhZGVWaWV3KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYWNhZGVWaWV3LmRhdGUgPSBhcmdzO1xuICAgICAgICAgICAgICAgIHRoaXMuZGFjYWRlVmlldy5jYWxlbmRhckRpci5maW5kKGRhdGUgPT4gZGF0ZS5pc0N1cnJlbnRZZWFyKS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25BY3RpdmVWaWV3RGVjYWRlS0IoZXZlbnQsIGFyZ3M6IERhdGUsIGFjdGl2ZVZpZXdJZHg6IG51bWJlcikge1xuICAgICAgICBzdXBlci5hY3RpdmVWaWV3RGVjYWRlS0IoZXZlbnQsIGFjdGl2ZVZpZXdJZHgpO1xuXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYWNhZGVWaWV3KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYWNhZGVWaWV3LmRhdGUgPSBhcmdzO1xuICAgICAgICAgICAgICAgIHRoaXMuZGFjYWRlVmlldy5jYWxlbmRhckRpci5maW5kKGRhdGUgPT4gZGF0ZS5pc0N1cnJlbnRZZWFyKS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Rm9ybWF0dGVkRGF0ZSgpOiB7IHdlZWtkYXk6IHN0cmluZzsgbW9udGhkYXk6IHN0cmluZyB9IHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuaGVhZGVyRGF0ZTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbW9udGhkYXk6IHRoaXMuZm9ybWF0dGVyTW9udGhkYXkuZm9ybWF0KGRhdGUpLFxuICAgICAgICAgICAgd2Vla2RheTogdGhpcy5mb3JtYXR0ZXJXZWVrZGF5LmZvcm1hdChkYXRlKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIGludm9rZWQgb24gZGF0ZSBzZWxlY3Rpb25cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY2hpbGRDbGlja2VkKGluc3RhbmNlOiBJQ2FsZW5kYXJEYXRlKSB7XG4gICAgICAgIGlmIChpbnN0YW5jZS5pc1ByZXZNb250aCkge1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c01vbnRoKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5zdGFuY2UuaXNOZXh0TW9udGgpIHtcbiAgICAgICAgICAgIHRoaXMubmV4dE1vbnRoKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdERhdGVGcm9tQ2xpZW50KGluc3RhbmNlLmRhdGUpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09ICdtdWx0aScpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzZWxlY3REYXRlSW5Nb250aFZpZXdzKGluc3RhbmNlLmRhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgdmlld0NoYW5naW5nKGFyZ3M6IElWaWV3Q2hhbmdpbmdFdmVudEFyZ3MpIHtcbiAgICAgICAgdGhpcy5hbmltYXRpb25BY3Rpb24gPSBhcmdzLm1vbnRoQWN0aW9uO1xuICAgICAgICB0aGlzLmlzS2V5ZG93blRyaWdnZXIgPSB0cnVlO1xuICAgICAgICB0aGlzLm5leHREYXRlID0gYXJncy5uZXh0RGF0ZTtcbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IChuZXh0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXkgPSB0aGlzLmRheXNWaWV3LmRhdGVzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZGF0ZS5kYXRlLmdldFRpbWUoKSA9PT0gbmV4dC5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgaWYgKGRheSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF5c1ZpZXcuZGF5c05hdlNlcnZpY2UuZm9jdXNOZXh0RGF0ZShkYXkubmF0aXZlRWxlbWVudCwgYXJncy5rZXksIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnByZXZpb3VzVmlld0RhdGUgPSB0aGlzLnZpZXdEYXRlO1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gdGhpcy5uZXh0RGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY2hhbmdlTW9udGgoZXZlbnQ6IERhdGUpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c1ZpZXdEYXRlID0gdGhpcy52aWV3RGF0ZTtcbiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IHRoaXMuY2FsZW5kYXJNb2RlbC5nZXRGaXJzdFZpZXdEYXRlKGV2ZW50LCAnbW9udGgnLCB0aGlzLmFjdGl2ZVZpZXdJZHgpO1xuICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSBJZ3hDYWxlbmRhclZpZXcuTW9udGg7XG5cbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLm1vbnRoc0J0bnMuZmluZCgoZTogRWxlbWVudFJlZiwgaWR4OiBudW1iZXIpID0+IGlkeCA9PT0gdGhpcy5hY3RpdmVWaWV3SWR4KTtcbiAgICAgICAgICAgIGlmIChlbGVtKSB7XG4gICAgICAgICAgICAgICAgZWxlbS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25BY3RpdmVWaWV3WWVhcihhcmdzOiBEYXRlLCBhY3RpdmVWaWV3SWR4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gSWd4Q2FsZW5kYXJWaWV3LlllYXI7XG4gICAgICAgIHRoaXMuYWN0aXZlVmlld0lkeCA9IGFjdGl2ZVZpZXdJZHg7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoc1ZpZXcuZGF0ZSA9IGFyZ3M7XG4gICAgICAgICAgICB0aGlzLmZvY3VzTW9udGgoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkFjdGl2ZVZpZXdZZWFyS0IoYXJnczogRGF0ZSwgZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGFjdGl2ZVZpZXdJZHg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0FjdGl2YXRpb25LZXkoZXZlbnQpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5vbkFjdGl2ZVZpZXdZZWFyKGFyZ3MsIGFjdGl2ZVZpZXdJZHgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzZWxlY3RzIGRhdGUocykgKGJhc2VkIG9uIHRoZSBzZWxlY3Rpb24gdHlwZSkuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgdGhpcy5jYWxlbmRhci5kZXNlbGVjdERhdGUobmV3IERhdGUoYDIwMTgtMDYtMTJgKSk7XG4gICAgICogYGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBkZXNlbGVjdERhdGUodmFsdWU/OiBEYXRlIHwgRGF0ZVtdKSB7XG4gICAgICAgIHN1cGVyLmRlc2VsZWN0RGF0ZSh2YWx1ZSk7XG5cbiAgICAgICAgdGhpcy5tb250aFZpZXdzLmZvckVhY2goKHZpZXcpID0+IHtcbiAgICAgICAgICAgIHZpZXcuc2VsZWN0ZWREYXRlcyA9IHRoaXMuc2VsZWN0ZWREYXRlcztcbiAgICAgICAgICAgIHZpZXcucmFuZ2VTdGFydGVkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHRoaXMuc2VsZWN0ZWREYXRlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRWaWV3RGF0ZShpOiBudW1iZXIpOiBEYXRlIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuY2FsZW5kYXJNb2RlbC50aW1lZGVsdGEodGhpcy52aWV3RGF0ZSwgJ21vbnRoJywgaSk7XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHRlciBmb3IgdGhlIGNvbnRleHQgb2JqZWN0IGluc2lkZSB0aGUgY2FsZW5kYXIgdGVtcGxhdGVzLlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDb250ZXh0KGk6IG51bWJlcikge1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5nZXRWaWV3RGF0ZShpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVDb250ZXh0KGRhdGUsIGkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgYW5pbWF0aW9uRG9uZShldmVudCkge1xuICAgICAgICBpZiAoKGV2ZW50LmZyb21TdGF0ZSA9PT0gU2Nyb2xsTW9udGguTk9ORSAmJiAoZXZlbnQudG9TdGF0ZSA9PT0gU2Nyb2xsTW9udGguUFJFViB8fCBldmVudC50b1N0YXRlID09PSBTY3JvbGxNb250aC5ORVhUKSkgfHxcbiAgICAgICAgICAgICAoZXZlbnQuZnJvbVN0YXRlID09PSAndm9pZCcgJiYgZXZlbnQudG9TdGF0ZSA9PT0gU2Nyb2xsTW9udGguTk9ORSkpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0RhdGVDaGFuZ2VkLmVtaXQoeyBwcmV2aW91c1ZhbHVlOiB0aGlzLnByZXZpb3VzVmlld0RhdGUsIGN1cnJlbnRWYWx1ZTogdGhpcy52aWV3RGF0ZSB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXNLZXlkb3duVHJpZ2dlcikge1xuICAgICAgICAgICAgdGhpcy5yZXNldEFjdGl2ZURhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1vbnRoU2Nyb2xsRGlyZWN0aW9uICE9PSBTY3JvbGxNb250aC5OT05FKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbE1vbnRoJC5uZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaXNEZWZhdWx0Vmlldykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1vbnRoVmlldyA9IHRoaXMuZGF5c1ZpZXcgYXMgSWd4RGF5c1ZpZXdDb21wb25lbnQ7XG4gICAgICAgIGxldCBkYXRlID0gbW9udGhWaWV3LmRhdGVzLmZpbmQoKGQpID0+IGQuc2VsZWN0ZWQpO1xuXG4gICAgICAgIHdoaWxlICghZGF0ZSAmJiBtb250aFZpZXcubmV4dE1vbnRoVmlldykge1xuICAgICAgICAgICAgbW9udGhWaWV3ID0gbW9udGhWaWV3Lm5leHRNb250aFZpZXc7XG4gICAgICAgICAgICBkYXRlID0gbW9udGhWaWV3LmRhdGVzLmZpbmQoKGQpID0+IGQuc2VsZWN0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRlICYmIGRhdGUuaXNGb2N1c2FibGUgJiYgIXRoaXMuaXNLZXlkb3duVHJpZ2dlcikge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZGF0ZS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9LCBwYXJzZUludChzbGlkZUluUmlnaHQub3B0aW9ucy5wYXJhbXMuZHVyYXRpb24sIDEwKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYWxsYmFjayAmJiAoZXZlbnQudG9TdGF0ZSA9PT0gU2Nyb2xsTW9udGguTkVYVCB8fCBldmVudC50b1N0YXRlID09PSBTY3JvbGxNb250aC5QUkVWKSkge1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLm5leHREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFuaW1hdGlvbkFjdGlvbiA9IFNjcm9sbE1vbnRoLk5PTkU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyB2aWV3UmVuZGVyZWQoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmZyb21TdGF0ZSAhPT0gJ3ZvaWQnKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXdDaGFuZ2VkLmVtaXQodGhpcy5hY3RpdmVWaWV3KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVmYXVsdFZpZXcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0QWN0aXZlRGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyByZXNldEFjdGl2ZURhdGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5tb250aFZpZXdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRhdGVzID0gW107XG4gICAgICAgIHRoaXMubW9udGhWaWV3cy5tYXAobXYgPT4gbXYuZGF0ZXMpLmZvckVhY2goZGF5cyA9PiB7XG4gICAgICAgICAgICBkYXRlcyA9IGRhdGVzLmNvbmNhdChkYXlzLnRvQXJyYXkoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkYXRlID0gZGF0ZXMuZmluZChkYXkgPT4gZGF5LnNlbGVjdGVkICYmIGRheS5pc0N1cnJlbnRNb250aCkgfHwgZGF0ZXMuZmluZChkYXkgPT4gZGF5LmlzVG9kYXkgJiYgZGF5LmlzQ3VycmVudE1vbnRoKVxuICAgICAgICAgICAgfHwgZGF0ZXMuZmluZChkID0+IGQuaXNGb2N1c2FibGUpO1xuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gZGF0ZS5kYXRlLmRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fbW9udGhWaWV3c0NoYW5nZXMkKSB7XG4gICAgICAgICAgICB0aGlzLl9tb250aFZpZXdzQ2hhbmdlcyQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UHJldk1vbnRoKGRhdGUpOiBEYXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsZW5kYXJNb2RlbC5nZXRQcmV2TW9udGgoZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXROZXh0TW9udGgoZGF0ZSwgdmlld0luZGV4KTogRGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGVuZGFyTW9kZWwuZ2V0RGF0ZUJ5VmlldyhkYXRlLCAnTW9udGgnLCB2aWV3SW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBtZXRob2QgYnVpbGRpbmcgYW5kIHJldHVybmluZyB0aGUgY29udGV4dCBvYmplY3QgaW5zaWRlXG4gICAgICogdGhlIGNhbGVuZGFyIHRlbXBsYXRlcy5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIGdlbmVyYXRlQ29udGV4dCh2YWx1ZTogRGF0ZSwgaT86IG51bWJlcikge1xuICAgICAgICBjb25zdCBmb3JtYXRPYmplY3QgPSB7XG4gICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgIG1vbnRoVmlldzogKCkgPT4gdGhpcy5vbkFjdGl2ZVZpZXdZZWFyKHZhbHVlLCBpKSxcbiAgICAgICAgICAgIHllYXJWaWV3OiAoKSA9PiB0aGlzLm9uQWN0aXZlVmlld0RlY2FkZSh2YWx1ZSwgaSksXG4gICAgICAgICAgICAuLi50aGlzLmNhbGVuZGFyTW9kZWwuZm9ybWF0VG9QYXJ0cyh2YWx1ZSwgdGhpcy5sb2NhbGUsIHRoaXMuZm9ybWF0T3B0aW9ucyxcbiAgICAgICAgICAgICAgICBbJ2VyYScsICd5ZWFyJywgJ21vbnRoJywgJ2RheScsICd3ZWVrZGF5J10pXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7ICRpbXBsaWNpdDogZm9ybWF0T2JqZWN0IH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIG1ldGhvZCB0aGF0IHNldHMgcmVmZXJlbmNlcyBmb3IgcHJldi9uZXh0IG1vbnRocyBmb3IgZWFjaCBtb250aCBpbiB0aGUgdmlld1xuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0U2libGluZ01vbnRocyhtb250aFZpZXdzOiBRdWVyeUxpc3Q8SWd4RGF5c1ZpZXdDb21wb25lbnQ+KSB7XG4gICAgICAgIG1vbnRoVmlld3MuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZNb250aFZpZXcgPSB0aGlzLmdldE1vbnRoVmlldyhpbmRleCAtIDEpO1xuICAgICAgICAgICAgY29uc3QgbmV4dE1vbnRoVmlldyA9IHRoaXMuZ2V0TW9udGhWaWV3KGluZGV4ICsgMSk7XG4gICAgICAgICAgICBpdGVtLm5leHRNb250aFZpZXcgPSBuZXh0TW9udGhWaWV3O1xuICAgICAgICAgICAgaXRlbS5wcmV2TW9udGhWaWV3ID0gcHJldk1vbnRoVmlldztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIG1ldGhvZCByZXR1cm5pbmcgcHJldmlvdXMvbmV4dCBkYXkgdmlld3NcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1vbnRoVmlldyhpbmRleDogbnVtYmVyKTogSWd4RGF5c1ZpZXdDb21wb25lbnQge1xuICAgICAgICBpZiAoaW5kZXggPT09IC0xIHx8IGluZGV4ID09PSB0aGlzLm1vbnRoVmlld3MubGVuZ3RoICkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb250aFZpZXdzLnRvQXJyYXkoKVtpbmRleF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgbWV0aG9kIHRoYXQgZG9lcyBkZXNlbGVjdGlvbiBmb3IgYWxsIG1vbnRoIHZpZXdzIHdoZW4gc2VsZWN0aW9uIGlzIFwibXVsdGlcIlxuICAgICAqIElmIG5vdCBjYWxsZWQsIHNlbGVjdGlvbiBpbiBvdGhlciBtb250aCB2aWV3cyBzdGF5c1xuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgZGVzZWxlY3REYXRlSW5Nb250aFZpZXdzKHZhbHVlOiBEYXRlKSB7XG4gICAgICAgIHRoaXMubW9udGhWaWV3cy5mb3JFYWNoKG0gPT4ge1xuICAgICAgICAgICAgbS5kZXNlbGVjdE11bHRpcGxlSW5Nb250aCh2YWx1ZSk7XG4gICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvY3VzTW9udGgoKSB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gdGhpcy5tb250aHNWaWV3Lm1vbnRoc1JlZi5maW5kKChlKSA9PlxuICAgICAgICAgICAgZS5pbmRleCA9PT0gdGhpcy5tb250aHNWaWV3LmRhdGUuZ2V0TW9udGgoKSk7XG4gICAgICAgIGlmIChtb250aCkge1xuICAgICAgICAgICAgbW9udGgubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlIGxldC1yZXN1bHQgI2RlZmF1bHRIZWFkZXI+XG4gICAgPHNwYW4+e3sgZ2V0Rm9ybWF0dGVkRGF0ZSgpLndlZWtkYXkgfX0sJm5ic3A7PC9zcGFuPlxuICAgIDxzcGFuPnt7IGdldEZvcm1hdHRlZERhdGUoKS5tb250aGRheSB9fTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBsZXQtcmVzdWx0ICNkZWZhdWx0TW9udGggbGV0LW9iaj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJtb250aHNWaWV3TnVtYmVyIDwgMiB8fCBvYmouaW5kZXggPCAxXCIgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2FyaWEtb2ZmLXNjcmVlblwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgICAge3sgbW9udGhzVmlld051bWJlciA+IDEgPyAocmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9maXJzdF9waWNrZXJfb2YucmVwbGFjZSgnezB9JywgbW9udGhzVmlld051bWJlci50b1N0cmluZygpKSAgKyAnICcgKyAoZ2V0Vmlld0RhdGUob2JqLmluZGV4KSB8IGRhdGU6ICdMTExMIHl5eXknKSkgOiByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3NlbGVjdGVkX21vbnRoX2lzICsgKGdldFZpZXdEYXRlKG9iai5pbmRleCkgfCBkYXRlOiAnTExMTCB5eXl5Jyl9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihnZXRWaWV3RGF0ZShvYmouaW5kZXgpIHwgZGF0ZTogJ0xMTEwnKSArICcgJyArIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2VsZWN0X21vbnRoXCJcbiAgICAgICAgICAgICNtb250aHNCdG5cbiAgICAgICAgICAgIChrZXlkb3duKT1cIm9uQWN0aXZlVmlld1llYXJLQihnZXRWaWV3RGF0ZShvYmouaW5kZXgpLCAkZXZlbnQsIG9iai5pbmRleClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQWN0aXZlVmlld1llYXIoZ2V0Vmlld0RhdGUob2JqLmluZGV4KSwgb2JqLmluZGV4KVwiXG4gICAgICAgICAgICBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX2RhdGVcIj5cbiAgICAgICAgICAgIHt7IGZvcm1hdHRlZE1vbnRoKGdldFZpZXdEYXRlKG9iai5pbmRleCkpIH19XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoZ2V0Vmlld0RhdGUob2JqLmluZGV4KSB8IGRhdGU6ICd5eXl5JykgKyAnICcgKyByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3NlbGVjdF95ZWFyXCJcbiAgICAgICAgICAgICN5ZWFyc0J0blxuICAgICAgICAgICAgKGtleWRvd24pPVwib25BY3RpdmVWaWV3RGVjYWRlS0IoJGV2ZW50LCBnZXRWaWV3RGF0ZShvYmouaW5kZXgpLCBvYmouaW5kZXgpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkFjdGl2ZVZpZXdEZWNhZGUoZ2V0Vmlld0RhdGUob2JqLmluZGV4KSwgb2JqLmluZGV4KVwiXG4gICAgICAgICAgICBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX2RhdGVcIj5cbiAgICAgICAgICAgIHt7IGZvcm1hdHRlZFllYXIoZ2V0Vmlld0RhdGUob2JqLmluZGV4KSkgfX1cbiAgICAgICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGhlYWRlclxuICAgIGFyaWEtbGFiZWxsZWRieT1cImlneC1hcmlhLWNhbGVuZGFyLXRpdGxlLW1vbnRoIGlneC1hcmlhLWNhbGVuZGFyLXRpdGxlLXllYXJcIlxuICAgIGNsYXNzPVwiaWd4LWNhbGVuZGFyX19oZWFkZXJcIlxuICAgICpuZ0lmPVwic2VsZWN0aW9uID09PSAnc2luZ2xlJyAmJiBoYXNIZWFkZXJcIj5cblxuICAgIDxoNSBpZD1cImlneC1hcmlhLWNhbGVuZGFyLXRpdGxlLXllYXJcIiBjbGFzcz1cImlneC1jYWxlbmRhcl9faGVhZGVyLXllYXJcIj5cbiAgICAgICAge3sgZm9ybWF0dGVkWWVhcihoZWFkZXJEYXRlKSB9fVxuICAgIDwvaDU+XG5cbiAgICA8aDIgaWQ9XCJpZ3gtYXJpYS1jYWxlbmRhci10aXRsZS1tb250aFwiIGNsYXNzPVwiaWd4LWNhbGVuZGFyX19oZWFkZXItZGF0ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGUgPyBoZWFkZXJUZW1wbGF0ZSA6IGRlZmF1bHRIZWFkZXI7IGNvbnRleHQ6IGhlYWRlckNvbnRleHRcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9oMj5cbjwvaGVhZGVyPlxuXG48ZGl2ICpuZ0lmPVwiaXNEZWZhdWx0Vmlld1wiICBjbGFzcz1cImlneC1jYWxlbmRhcl9fYm9keVwiIFtAYW5pbWF0ZVZpZXddPVwiYWN0aXZlVmlld1wiIChAYW5pbWF0ZVZpZXcuZG9uZSk9XCJ2aWV3UmVuZGVyZWQoJGV2ZW50KVwiIChzd2lwZXJpZ2h0KT1cInByZXZpb3VzTW9udGgoKVwiXG4gICAgKHN3aXBlbGVmdCk9XCJuZXh0TW9udGgoKVwiIChwb2ludGVyZG93bik9XCJzdXBwcmVzc0JsdXIoKVwiPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlclwiPlxuICAgICAgICA8c3BhbiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cImlneC1jYWxlbmRhcl9fYXJpYS1vZmYtc2NyZWVuXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAnbXVsdGknXCI+XG4gICAgICAgICAgICAgICAge3sgbW9udGhzVmlld051bWJlciAmJiBtb250aHNWaWV3TnVtYmVyID4gMSA/ICByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX211bHRpX3NlbGVjdGlvbi5yZXBsYWNlKCd7MH0nLCBtb250aHNWaWV3TnVtYmVyLnRvU3RyaW5nKCkpIDogcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zaW5ndWxhcl9tdWx0aV9zZWxlY3Rpb259fVxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAncmFuZ2UnXCI+XG4gICAgICAgICAgICAgICAge3sgbW9udGhzVmlld051bWJlciAmJiBtb250aHNWaWV3TnVtYmVyID4gMSA/ICByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3JhbmdlX3NlbGVjdGlvbi5yZXBsYWNlKCd7MH0nLCBtb250aHNWaWV3TnVtYmVyLnRvU3RyaW5nKCkpIDogcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zaW5ndWxhcl9yYW5nZV9zZWxlY3Rpb259fVxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAnc2luZ2xlJ1wiPlxuICAgICAgICAgICAgICAgIHt7IG1vbnRoc1ZpZXdOdW1iZXIgJiYgbW9udGhzVmlld051bWJlciA+IDEgPyAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zaW5nbGVfc2VsZWN0aW9uLnJlcGxhY2UoJ3swfScsIG1vbnRoc1ZpZXdOdW1iZXIudG9TdHJpbmcoKSkgOiByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3Npbmd1bGFyX3NpbmdsZV9zZWxlY3Rpb259fVxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fcHJldlwiXG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9wcmV2aW91c19tb250aCArICcsICcgKyAoZ2V0UHJldk1vbnRoKHZpZXdEYXRlKSB8IGRhdGU6ICdMTExMJylcIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb249XCJwcmV2XCJcbiAgICAgICAgICAgICNwcmV2TW9udGhCdG5cbiAgICAgICAgICAgIGlneENhbGVuZGFyU2Nyb2xsTW9udGhcbiAgICAgICAgICAgIFtzdGFydFNjcm9sbF09XCJzdGFydFByZXZNb250aFNjcm9sbFwiXG4gICAgICAgICAgICBbc3RvcFNjcm9sbF09XCJzdG9wTW9udGhTY3JvbGxcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnbWluLXdpZHRoLiUnOiAxMDAvKG1vbnRoc1ZpZXdOdW1iZXIqNyl9XCI+XG4gICAgICAgICAgICA8aWd4LWljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCI+a2V5Ym9hcmRfYXJyb3dfbGVmdDwvaWd4LWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fZGF0ZXNcIlxuICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB2aWV3IG9mIG1vbnRoc1ZpZXdOdW1iZXIgfCBJZ3hNb250aFZpZXdTbG90czsgaW5kZXggYXMgaTtcIlxuICAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cIjEwMC9tb250aHNWaWV3TnVtYmVyXCJcbiAgICAgICAgICAgICBbYXR0ci5kYXRhLW1vbnRoXT1cImkgfCBJZ3hHZXRWaWV3RGF0ZTp2aWV3RGF0ZTpmYWxzZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN1YmhlYWRlclRlbXBsYXRlID8gc3ViaGVhZGVyVGVtcGxhdGUgOiBkZWZhdWx0TW9udGg7IGNvbnRleHQ6IGdldENvbnRleHQoaSlcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fbmV4dFwiXG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9uZXh0X21vbnRoICsgJywgJyArICAoZ2V0TmV4dE1vbnRoKHZpZXdEYXRlLCBtb250aHNWaWV3TnVtYmVyKSB8IGRhdGU6ICdMTExMJylcIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb249XCJuZXh0XCJcbiAgICAgICAgICAgICNuZXh0TW9udGhCdG5cbiAgICAgICAgICAgIGlneENhbGVuZGFyU2Nyb2xsTW9udGhcbiAgICAgICAgICAgIFtzdGFydFNjcm9sbF09XCJzdGFydE5leHRNb250aFNjcm9sbFwiXG4gICAgICAgICAgICBbc3RvcFNjcm9sbF09XCJzdG9wTW9udGhTY3JvbGxcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwieydtaW4td2lkdGguJSc6IDEwMC8obW9udGhzVmlld051bWJlcio3KX1cIj5cbiAgICAgICAgICAgIDxpZ3gtaWNvbiBhcmlhLWhpZGRlbj1cInRydWVcIj5rZXlib2FyZF9hcnJvd19yaWdodDwvaWd4LWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cblxuICAgIDxzZWN0aW9uIHN0eWxlPVwiZGlzcGxheTogZmxleFwiXG4gICAgICAgIFtAYW5pbWF0ZUNoYW5nZV09XCJhbmltYXRpb25BY3Rpb25cIlxuICAgICAgICAoQGFuaW1hdGVDaGFuZ2UuZG9uZSk9XCJhbmltYXRpb25Eb25lKCRldmVudClcIj5cbiAgICAgICAgPGlneC1kYXlzLXZpZXcgcm9sZT1cImdyaWRcIiAqbmdGb3I9XCJsZXQgdmlldyBvZiBtb250aHNWaWV3TnVtYmVyIHwgSWd4TW9udGhWaWV3U2xvdHM7IGluZGV4IGFzIGk7XCIgW2NoYW5nZURheXNWaWV3XT1cInRydWVcIiAjZGF5c1xuICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICBbKGFjdGl2ZURhdGUpXT1cImFjdGl2ZURhdGVcIlxuICAgICAgICAgICAgICAgIFt2aWV3RGF0ZV09XCJpIHwgSWd4R2V0Vmlld0RhdGU6dmlld0RhdGVcIlxuICAgICAgICAgICAgICAgIFt3ZWVrU3RhcnRdPVwid2Vla1N0YXJ0XCJcbiAgICAgICAgICAgICAgICBbZm9ybWF0T3B0aW9uc109XCJmb3JtYXRPcHRpb25zXCJcbiAgICAgICAgICAgICAgICBbZm9ybWF0Vmlld3NdPVwiZm9ybWF0Vmlld3NcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZERhdGVzXT1cImRpc2FibGVkRGF0ZXNcIlxuICAgICAgICAgICAgICAgIFtzcGVjaWFsRGF0ZXNdPVwic3BlY2lhbERhdGVzXCJcbiAgICAgICAgICAgICAgICBbaGlkZU91dHNpZGVEYXlzXT1cImhpZGVPdXRzaWRlRGF5c1wiXG4gICAgICAgICAgICAgICAgW3Nob3dXZWVrTnVtYmVyc109XCJzaG93V2Vla051bWJlcnNcIlxuICAgICAgICAgICAgICAgICh2aWV3Q2hhbmdpbmcpPVwidmlld0NoYW5naW5nKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChkYXRlU2VsZWN0aW9uKT1cImNoaWxkQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAobW9udGhzVmlld0JsdXIpPVwicmVzZXRBY3RpdmVEYXRlKClcIj5cbiAgICAgICAgPC9pZ3gtZGF5cy12aWV3PlxuICAgIDwvc2VjdGlvbj5cbjwvZGl2PlxuXG48aWd4LW1vbnRocy12aWV3ICpuZ0lmPVwiaXNZZWFyVmlld1wiXG4gICAgICAgICAgICAgICAgIFtAYW5pbWF0ZVZpZXddPVwiYWN0aXZlVmlld1wiXG4gICAgICAgICAgICAgICAgICNtb250aHNcbiAgICAgICAgICAgICAgICAgKEBhbmltYXRlVmlldy5kb25lKT1cInZpZXdSZW5kZXJlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgW2RhdGVdPVwidmlld0RhdGVcIlxuICAgICAgICAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgICAgICAgIFtmb3JtYXRWaWV3XT1cImZvcm1hdFZpZXdzLm1vbnRoXCJcbiAgICAgICAgICAgICAgICAgW21vbnRoRm9ybWF0XT1cImZvcm1hdE9wdGlvbnMubW9udGhcIlxuICAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwiY2hhbmdlTW9udGgoJGV2ZW50KVwiPlxuPC9pZ3gtbW9udGhzLXZpZXc+XG5cbjxpZ3gteWVhcnMtdmlldyAqbmdJZj1cImlzRGVjYWRlVmlld1wiXG4gICAgICAgICAgICAgICAgW0BhbmltYXRlVmlld109XCJhY3RpdmVWaWV3XCJcbiAgICAgICAgICAgICAgICAjZGVjYWRlXG4gICAgICAgICAgICAgICAgKEBhbmltYXRlVmlldy5kb25lKT1cInZpZXdSZW5kZXJlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbZGF0ZV09XCJ2aWV3RGF0ZVwiXG4gICAgICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICAgICAgICAgIFtmb3JtYXRWaWV3XT1cImZvcm1hdFZpZXdzLnllYXJcIlxuICAgICAgICAgICAgICAgIFt5ZWFyRm9ybWF0XT1cImZvcm1hdE9wdGlvbnMueWVhclwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImNoYW5nZVllYXIoJGV2ZW50KVwiPlxuPC9pZ3gteWVhcnMtdmlldz5cbiJdfQ==
|
|
936
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUdULFlBQVksRUFHZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEYsT0FBTyxFQUNILGtDQUFrQyxFQUNsQyxxQ0FBcUMsRUFDeEMsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQWlCLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxRQUFRLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzlD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Q0FBQyxHQUFHLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUc7Z0JBa0Q5SCxpQkFBaUI7c0JBRnZCLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUMzQyxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWdGbkMsb0JBQW9CO3NCQUYxQixZQUFZO3VCQUFDLHNCQUFzQixFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFDL0MsWUFBWTt1QkFBQyx3QkFBd0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkE0RDNDLGFBQWE7c0JBRG5CLFlBQVk7dUJBQUMsY0FBYyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWNqQyxZQUFZO3NCQURsQixZQUFZO3VCQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFjaEMsU0FBUztzQkFEZixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHJhbnNpdGlvbiwgdHJpZ2dlciwgdXNlQW5pbWF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgUXVlcnlMaXN0LFxuICAgIE9uRGVzdHJveVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZmFkZUluLCBzY2FsZUluQ2VudGVyLCBzbGlkZUluTGVmdCwgc2xpZGVJblJpZ2h0IH0gZnJvbSAnLi4vYW5pbWF0aW9ucy9tYWluJztcbmltcG9ydCB7XG4gICAgSWd4Q2FsZW5kYXJIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBJZ3hDYWxlbmRhclN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlXG59IGZyb20gJy4vY2FsZW5kYXIuZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBJQ2FsZW5kYXJEYXRlLCBtb250aFJhbmdlIH0gZnJvbSAnLi9jYWxlbmRhcic7XG5pbXBvcnQgeyBDYWxlbmRhclZpZXcsIElneENhbGVuZGFyVmlldywgSWd4TW9udGhQaWNrZXJCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi9tb250aC1waWNrZXItYmFzZSc7XG5pbXBvcnQgeyBJZ3hNb250aHNWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9tb250aHMtdmlldy9tb250aHMtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4WWVhcnNWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi95ZWFycy12aWV3L3llYXJzLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IElneERheXNWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9kYXlzLXZpZXcvZGF5cy12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBpbnRlcnZhbCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIGRlYm91bmNlLCBza2lwTGFzdCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU2Nyb2xsTW9udGggfSBmcm9tICcuL2NhbGVuZGFyLWJhc2UnO1xuaW1wb3J0IHsgSVZpZXdDaGFuZ2luZ0V2ZW50QXJncyB9IGZyb20gJy4vZGF5cy12aWV3L2RheXMtdmlldy5pbnRlcmZhY2UnO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5cbi8qKlxuICogQ2FsZW5kYXIgcHJvdmlkZXMgYSB3YXkgdG8gZGlzcGxheSBkYXRlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4Q2FsZW5kYXJNb2R1bGVcbiAqXG4gKiBAaWd4VGhlbWUgaWd4LWNhbGVuZGFyLXRoZW1lLCBpZ3gtaWNvbi10aGVtZVxuICpcbiAqIEBpZ3hLZXl3b3JkcyBjYWxlbmRhciwgZGF0ZXBpY2tlciwgc2NoZWR1bGUsIGRhdGVcbiAqXG4gKiBAaWd4R3JvdXAgU2NoZWR1bGluZ1xuICpcbiAqIEByZW1hcmtzXG4gKiBUaGUgSWduaXRlIFVJIENhbGVuZGFyIHByb3ZpZGVzIGFuIGVhc3kgd2F5IHRvIGRpc3BsYXkgYSBjYWxlbmRhciBhbmQgYWxsb3cgdXNlcnMgdG8gc2VsZWN0IGRhdGVzIHVzaW5nIHNpbmdsZSwgbXVsdGlwbGVcbiAqIG9yIHJhbmdlIHNlbGVjdGlvbi5cbiAqXG4gKiBAZXhhbXBsZTpcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtY2FsZW5kYXIgc2VsZWN0aW9uPVwicmFuZ2VcIj48L2lneC1jYWxlbmRhcj5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuICAgICAgICB9XG4gICAgXSxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIHRyaWdnZXIoJ2FuaW1hdGVWaWV3JywgW1xuICAgICAgICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAwJywgdXNlQW5pbWF0aW9uKGZhZGVJbikpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAqJywgdXNlQW5pbWF0aW9uKHNjYWxlSW5DZW50ZXIsIHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246ICcuMnMnLFxuICAgICAgICAgICAgICAgICAgICBmcm9tU2NhbGU6IC45XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpXG4gICAgICAgIF0pLFxuICAgICAgICB0cmlnZ2VyKCdhbmltYXRlQ2hhbmdlJywgW1xuICAgICAgICAgICAgdHJhbnNpdGlvbignKiA9PiBwcmV2JywgdXNlQW5pbWF0aW9uKHNsaWRlSW5MZWZ0LCB7XG4gICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgIGZyb21Qb3NpdGlvbjogJ3RyYW5zbGF0ZVgoLTMwJSknXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignKiA9PiBuZXh0JywgdXNlQW5pbWF0aW9uKHNsaWRlSW5SaWdodCwge1xuICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICBmcm9tUG9zaXRpb246ICd0cmFuc2xhdGVYKDMwJSknXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpXG4gICAgICAgIF0pXG4gICAgXSxcbiAgICBzZWxlY3RvcjogJ2lneC1jYWxlbmRhcicsXG4gICAgdGVtcGxhdGVVcmw6ICdjYWxlbmRhci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgSWd4Q2FsZW5kYXJDb21wb25lbnQgZXh0ZW5kcyBJZ3hNb250aFBpY2tlckJhc2VEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgYGlkYCBvZiB0aGUgY2FsZW5kYXIuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIElmIG5vdCBzZXQsIHRoZSBgaWRgIHdpbGwgaGF2ZSB2YWx1ZSBgXCJpZ3gtY2FsZW5kYXItMFwiYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2FsZW5kYXIgaWQ9XCJteS1maXJzdC1jYWxlbmRhclwiPjwvaWd4LWNhbGVuZGFyPlxuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWQgPSBgaWd4LWNhbGVuZGFyLSR7TkVYVF9JRCsrfWA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgd2hldGhlciB0aGUgY2FsZW5kYXIgaGFzIGhlYWRlci5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2FsZW5kYXIgW2hhc0hlYWRlcl09XCJmYWxzZVwiPjwvaWd4LWNhbGVuZGFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhhc0hlYWRlciA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgd2hldGhlciB0aGUgY2FsZW5kYXIgaGVhZGVyIHdpbGwgYmUgaW4gdmVydGljYWwgcG9zaXRpb24uXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYWxlbmRhciBbdmVydGljYWxdID0gXCJ0cnVlXCI+PC9pZ3gtY2FsZW5kYXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdmVydGljYWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgbnVtYmVyIG9mIG1vbnRoIHZpZXdzIGRpc3BsYXllZC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGAxYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2FsZW5kYXIgW21vbnRoc1ZpZXdOdW1iZXJdPVwiMlwiPjwvaWd4LWNhbGVuZGFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBtb250aHNWaWV3TnVtYmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzVmlld051bWJlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IG1vbnRoc1ZpZXdOdW1iZXIodmFsOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHZhbCA8IDEgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tb250aHNWaWV3TnVtYmVyID0gdmFsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3cvaGlkZSB3ZWVrIG51bWJlcnNcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2FsZW5kYXIgW3Nob3dXZWVrTnVtYmVyc109XCJ0cnVlXCI+PC9pZ3gtY2FsZW5kYXI+XG4gICAgICogYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93V2Vla051bWJlcnMgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEFwcGx5IHRoZSBkaWZmZXJlbnQgc3RhdGVzIGZvciB0aGUgdHJhbnNpdGlvbnMgb2YgYW5pbWF0ZUNoYW5nZVxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFuaW1hdGlvbkFjdGlvbjogYW55ID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBjc3MgY2xhc3MgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWNhbGVuZGFyLS12ZXJ0aWNhbCcpXG4gICAgcHVibGljIGdldCBzdHlsZVZlcnRpY2FsQ2xhc3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcnRpY2FsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IGNzcyBjbGFzcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtY2FsZW5kYXInKVxuICAgIHB1YmxpYyBzdHlsZUNsYXNzID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFZpZXdDaGlsZCB0aGF0IHJlcHJlc2VudHMgdGhlIG1vbnRocyB2aWV3LlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ21vbnRocycsIHsgcmVhZDogSWd4TW9udGhzVmlld0NvbXBvbmVudCB9KVxuICAgIHB1YmxpYyBtb250aHNWaWV3OiBJZ3hNb250aHNWaWV3Q29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogTW9udGggYnV0dG9uLCB0aGF0IGRpc3BsYXlzIHRoZSBtb250aHMgdmlldy5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKCdtb250aHNCdG4nKVxuICAgIHB1YmxpYyBtb250aHNCdG5zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgICAvKipcbiAgICAgKiBWaWV3Q2hpbGQgdGhhdCByZXByZXNlbnRzIHRoZSBkZWNhZGUgdmlldy5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkZWNhZGUnLCB7IHJlYWQ6IElneFllYXJzVmlld0NvbXBvbmVudCB9KVxuICAgIHB1YmxpYyBkYWNhZGVWaWV3OiBJZ3hZZWFyc1ZpZXdDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3Q2hpbGQgdGhhdCByZXByZXNlbnRzIHRoZSBkYXlzIHZpZXcuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZGF5cycsIHsgcmVhZDogSWd4RGF5c1ZpZXdDb21wb25lbnQgfSlcbiAgICBwdWJsaWMgZGF5c1ZpZXc6IElneERheXNWaWV3Q29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogVmlld0NoaWxkcmVuZGVuIHJlcHJlc2VudGluZyBhbGwgb2YgdGhlIHJlbmRlcmVkIGRheXMgdmlld3MuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZHJlbignZGF5cycsIHsgcmVhZDogSWd4RGF5c1ZpZXdDb21wb25lbnQgfSlcbiAgICBwdWJsaWMgbW9udGhWaWV3czogUXVlcnlMaXN0PElneERheXNWaWV3Q29tcG9uZW50PjtcblxuICAgIC8qKlxuICAgICAqIEJ1dHRvbiBmb3IgcHJldmlvdXMgbW9udGguXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgncHJldk1vbnRoQnRuJylcbiAgICBwdWJsaWMgcHJldk1vbnRoQnRuOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogQnV0dG9uIGZvciBuZXh0IG1vbnRoLlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ25leHRNb250aEJ0bicpXG4gICAgcHVibGljIG5leHRNb250aEJ0bjogRWxlbWVudFJlZjtcblxuICAgIC8qKlxuICAgICAqIERlbm90ZSBpZiB0aGUgeWVhciB2aWV3IGlzIGFjdGl2ZS5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlzWWVhclZpZXcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVZpZXcgPT09IENhbGVuZGFyVmlldy5ZRUFSIHx8IHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LlllYXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaGVhZGVyIHRlbXBsYXRlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGhlYWRlclRlbXBsYXRlID0gIHRoaXMuY2FsZW5kYXIuaGVhZGVyVGVhbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGVhZGVyVGVtcGxhdGUoKTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMuaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLnRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGhlYWRlciB0ZW1wbGF0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2FsZW5kYXIgaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUgPSBcImlneENhbGVuZGFySGVhZGVyXCI+PC9pZ3gtY2FsZW5kYXI+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENhbGVuZGFyQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHNldCBoZWFkZXJUZW1wbGF0ZShkaXJlY3RpdmU6IGFueSkge1xuICAgICAgICB0aGlzLmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlID0gZGlyZWN0aXZlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHN1YmhlYWRlciB0ZW1wbGF0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBzdWJoZWFkZXJUZW1wbGF0ZSA9IHRoaXMuY2FsZW5kYXIuc3ViaGVhZGVyVGVtcGxhdGU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBzdWJoZWFkZXJUZW1wbGF0ZSgpOiBhbnkge1xuICAgICAgICBpZiAodGhpcy5zdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUudGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3ViaGVhZGVyIHRlbXBsYXRlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYWxlbmRhciBzdWJoZWFkZXJUZW1wbGF0ZSA9IFwiaWd4Q2FsZW5kYXJTdWJoZWFkZXJcIj48L2lneC1jYWxlbmRhcj5cbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q2FsZW5kYXJDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHN1YmhlYWRlclRlbXBsYXRlKGRpcmVjdGl2ZTogYW55KSB7XG4gICAgICAgIHRoaXMuc3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUgPSBkaXJlY3RpdmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY29udGV4dCBmb3IgdGhlIHRlbXBsYXRlIG1hcmtlZCB3aXRoIHRoZSBgaWd4Q2FsZW5kYXJIZWFkZXJgIGRpcmVjdGl2ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBoZWFkZXJDb250ZXh0ID0gIHRoaXMuY2FsZW5kYXIuaGVhZGVyQ29udGV4dDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhlYWRlckNvbnRleHQoKSB7XG4gICAgICAgIGNvbnN0IGRhdGU6IERhdGUgPSB0aGlzLmhlYWRlckRhdGU7XG4gICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlQ29udGV4dChkYXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjb250ZXh0IGZvciB0aGUgdGVtcGxhdGUgbWFya2VkIHdpdGggZWl0aGVyIGBpZ3hDYWxlbmRhclN1YkhlYWRlck1vbnRoYFxuICAgICAqIG9yIGBpZ3hDYWxlbmRhclN1YkhlYWRlclllYXJgIGRpcmVjdGl2ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjb250ZXh0ID0gIHRoaXMuY2FsZW5kYXIuY29udGV4dDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNvbnRleHQoKSB7XG4gICAgICAgIGNvbnN0IGRhdGU6IERhdGUgPSB0aGlzLnZpZXdEYXRlO1xuICAgICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUNvbnRleHQoZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGF0ZSBkaXNwbGF5ZWQgaW4gaGVhZGVyXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBoZWFkZXJEYXRlKCk6IERhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZERhdGVzID8gdGhpcy5zZWxlY3RlZERhdGVzIDogbmV3IERhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChmb3J3YXJkUmVmKCgpID0+IElneENhbGVuZGFySGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpLCB7IHJlYWQ6IElneENhbGVuZGFySGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsIHN0YXRpYzogdHJ1ZSAgfSlcbiAgICBwcml2YXRlIGhlYWRlclRlbXBsYXRlRGlyZWN0aXZlOiBJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgQENvbnRlbnRDaGlsZChmb3J3YXJkUmVmKCgpID0+IElneENhbGVuZGFyU3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpLCB7IHJlYWQ6IElneENhbGVuZGFyU3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsIHN0YXRpYzogdHJ1ZSAgfSlcbiAgICBwcml2YXRlIHN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlOiBJZ3hDYWxlbmRhclN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBhY3RpdmVEYXRlID0gbmV3IERhdGUoKS50b0xvY2FsZURhdGVTdHJpbmcoKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gYXBwbHkgdGhlIGFjdGl2ZSBkYXRlIHdoZW4gdGhlIGNhbGVuZGFyIHZpZXcgaXMgY2hhbmdlZFxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBuZXh0RGF0ZTogRGF0ZTtcblxuICAgIC8qKlxuICAgICAqIERlbm90ZSBpZiB0aGUgY2FsZW5kYXIgdmlldyB3YXMgY2hhbmdlZCB3aXRoIHRoZSBrZXlib2FyZFxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBpc0tleWRvd25UcmlnZ2VyID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNhbGxiYWNrOiAobmV4dCkgPT4gdm9pZDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9tb250aHNWaWV3TnVtYmVyID0gMTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbW9udGhWaWV3c0NoYW5nZXMkOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKipcbiAgICAgKiBLZXlib2FyZCBuYXZpZ2F0aW9uIG9mIHRoZSBjYWxlbmRhclxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24ucGFnZWRvd24nLCBbJyRldmVudCddKVxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24ucGFnZXVwJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duUGFnZURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGVmYXVsdFZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzUGFnZURvd24gPSBldmVudC5rZXkgPT09ICdQYWdlRG93bic7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBpc1BhZ2VEb3duID8gMSA6IC0xO1xuICAgICAgICBsZXQgbW9udGhWaWV3ID0gdGhpcy5kYXlzVmlldyBhcyBJZ3hEYXlzVmlld0NvbXBvbmVudDtcbiAgICAgICAgbGV0IGFjdGl2ZURhdGU7XG5cbiAgICAgICAgd2hpbGUgKCFhY3RpdmVEYXRlICYmIG1vbnRoVmlldykge1xuICAgICAgICAgICAgYWN0aXZlRGF0ZSA9IG1vbnRoVmlldy5kYXRlcy5maW5kKChkYXRlKSA9PiBkYXRlLm5hdGl2ZUVsZW1lbnQgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgbW9udGhWaWV3ID0gbW9udGhWaWV3Lm5leHRNb250aFZpZXc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWN0aXZlRGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5uZXh0RGF0ZSA9IG5ldyBEYXRlKGFjdGl2ZURhdGUuZGF0ZS5kYXRlKTtcblxuICAgICAgICAgICAgbGV0IHllYXIgPSB0aGlzLm5leHREYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgICAgICAgICAgIGxldCBtb250aCA9IHRoaXMubmV4dERhdGUuZ2V0TW9udGgoKSArIHN0ZXA7XG4gICAgICAgICAgICBpZiAoaXNQYWdlRG93bikge1xuICAgICAgICAgICAgICAgIGlmIChtb250aCA+IDExKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoID0gMDsgeWVhciArPSBzdGVwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKG1vbnRoIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBtb250aCA9IDExOyB5ZWFyICs9IHN0ZXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IG1vbnRoUmFuZ2UodGhpcy5uZXh0RGF0ZS5nZXRGdWxsWWVhcigpLCBtb250aCk7XG5cbiAgICAgICAgICAgIGxldCBkYXkgPSB0aGlzLm5leHREYXRlLmdldERhdGUoKTtcbiAgICAgICAgICAgIGlmIChkYXkgPiByYW5nZVsxXSkge1xuICAgICAgICAgICAgICAgIGRheSA9IHJhbmdlWzFdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm5leHREYXRlLnNldERhdGUoZGF5KTtcbiAgICAgICAgICAgIHRoaXMubmV4dERhdGUuc2V0TW9udGgobW9udGgpO1xuICAgICAgICAgICAgdGhpcy5uZXh0RGF0ZS5zZXRGdWxsWWVhcih5ZWFyKTtcblxuICAgICAgICAgICAgdGhpcy5jYWxsYmFjayA9IChuZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgbW9udGhWaWV3ID0gdGhpcy5kYXlzVmlldyBhcyBJZ3hEYXlzVmlld0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBsZXQgZGF5SXRlbTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoKCFkYXlJdGVtICYmIG1vbnRoVmlldykgfHwgKGRheUl0ZW0gJiYgIWRheUl0ZW0uaXNDdXJyZW50TW9udGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRheUl0ZW0gPSBtb250aFZpZXcuZGF0ZXMuZmluZCgoZCkgPT4gZC5kYXRlLmRhdGUuZ2V0VGltZSgpID09PSBuZXh0LmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoVmlldyA9IG1vbnRoVmlldy5uZXh0TW9udGhWaWV3O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGF5SXRlbSAmJiBkYXlJdGVtLmlzRm9jdXNhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRheUl0ZW0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNQYWdlRG93bikge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnJlcGVhdCkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLm5leHRNb250aCh0cnVlKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubmV4dE1vbnRoKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnJlcGVhdCkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLnByZXZpb3VzTW9udGgodHJ1ZSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzTW9udGgodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBLZXlib2FyZCBuYXZpZ2F0aW9uIG9mIHRoZSBjYWxlbmRhclxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uc2hpZnQucGFnZXVwJywgWyckZXZlbnQnXSlcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLnNoaWZ0LnBhZ2Vkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duU2hpZnRQYWdlVXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNEZWZhdWx0Vmlldykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNQYWdlRG93biA9IGV2ZW50LmtleSA9PT0gJ1BhZ2VEb3duJztcbiAgICAgICAgY29uc3Qgc3RlcCA9IGlzUGFnZURvd24gPyAxIDogLTE7XG4gICAgICAgIHRoaXMucHJldmlvdXNWaWV3RGF0ZSA9IHRoaXMudmlld0RhdGU7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSB0aGlzLmNhbGVuZGFyTW9kZWwudGltZWRlbHRhKHRoaXMudmlld0RhdGUsICd5ZWFyJywgc3RlcCk7XG5cbiAgICAgICAgdGhpcy5hbmltYXRpb25BY3Rpb24gPSBpc1BhZ2VEb3duID8gU2Nyb2xsTW9udGguTkVYVCA6IFNjcm9sbE1vbnRoLlBSRVY7XG4gICAgICAgIHRoaXMuaXNLZXlkb3duVHJpZ2dlciA9IHRydWU7XG5cbiAgICAgICAgbGV0IG1vbnRoVmlldyA9IHRoaXMuZGF5c1ZpZXcgYXMgSWd4RGF5c1ZpZXdDb21wb25lbnQ7XG4gICAgICAgIGxldCBhY3RpdmVEYXRlO1xuXG4gICAgICAgIHdoaWxlICghYWN0aXZlRGF0ZSAmJiBtb250aFZpZXcpIHtcbiAgICAgICAgICAgIGFjdGl2ZURhdGUgPSBtb250aFZpZXcuZGF0ZXMuZmluZCgoZGF0ZSkgPT4gZGF0ZS5uYXRpdmVFbGVtZW50ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIG1vbnRoVmlldyA9IG1vbnRoVmlldy5uZXh0TW9udGhWaWV3O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdGl2ZURhdGUpIHtcbiAgICAgICAgICAgIHRoaXMubmV4dERhdGUgPSBuZXcgRGF0ZShhY3RpdmVEYXRlLmRhdGUuZGF0ZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSB0aGlzLm5leHREYXRlLmdldEZ1bGxZZWFyKCkgKyBzdGVwO1xuXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IG1vbnRoUmFuZ2UoeWVhciwgdGhpcy5uZXh0RGF0ZS5nZXRNb250aCgpKTtcblxuICAgICAgICAgICAgbGV0IGRheSA9IHRoaXMubmV4dERhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICAgICAgaWYgKGRheSA+IHJhbmdlWzFdKSB7XG4gICAgICAgICAgICAgICAgZGF5ID0gcmFuZ2VbMV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubmV4dERhdGUuc2V0RGF0ZShkYXkpO1xuICAgICAgICAgICAgdGhpcy5uZXh0RGF0ZS5zZXRGdWxsWWVhcih5ZWFyKTtcblxuICAgICAgICAgICAgdGhpcy5jYWxsYmFjayA9IChuZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgbW9udGhWaWV3ID0gdGhpcy5kYXlzVmlldyBhcyBJZ3hEYXlzVmlld0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBsZXQgZGF5SXRlbTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoKCFkYXlJdGVtICYmIG1vbnRoVmlldykgfHwgKGRheUl0ZW0gJiYgIWRheUl0ZW0uaXNDdXJyZW50TW9udGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRheUl0ZW0gPSBtb250aFZpZXcuZGF0ZXMuZmluZCgoZCkgPT4gZC5kYXRlLmRhdGUuZ2V0VGltZSgpID09PSBuZXh0LmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoVmlldyA9IG1vbnRoVmlldy5uZXh0TW9udGhWaWV3O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGF5SXRlbSAmJiBkYXlJdGVtLmlzRm9jdXNhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRheUl0ZW0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBLZXlib2FyZCBuYXZpZ2F0aW9uIG9mIHRoZSBjYWxlbmRhclxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uaG9tZScsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uS2V5ZG93bkhvbWUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF5c1ZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuZGF5c1ZpZXcub25LZXlkb3duSG9tZShldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBLZXlib2FyZCBuYXZpZ2F0aW9uIG9mIHRoZSBjYWxlbmRhclxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW5kJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duRW5kKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmRheXNWaWV3KSB7XG4gICAgICAgICAgICB0aGlzLmRheXNWaWV3Lm9uS2V5ZG93bkVuZChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdG9wIGNvbnRpbnVvdXMgbmF2aWdhdGlvbiBvbiBtb3VzZXVwIGV2ZW50XG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2V1cCcsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uTW91c2VVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5tb250aFNjcm9sbERpcmVjdGlvbiAhPT0gU2Nyb2xsTW9udGguTk9ORSkge1xuICAgICAgICAgICAgdGhpcy5zdG9wTW9udGhTY3JvbGwoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXRTaWJsaW5nTW9udGhzKHRoaXMubW9udGhWaWV3cyk7XG4gICAgICAgIHRoaXMuX21vbnRoVmlld3NDaGFuZ2VzJCA9IHRoaXMubW9udGhWaWV3cy5jaGFuZ2VzLnN1YnNjcmliZShjID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2libGluZ01vbnRocyhjKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zdGFydE1vbnRoU2Nyb2xsJC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuc3RvcE1vbnRoU2Nyb2xsJCksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5zY3JvbGxNb250aCQucGlwZShcbiAgICAgICAgICAgICAgICBza2lwTGFzdCgxKSxcbiAgICAgICAgICAgICAgICBkZWJvdW5jZSgoKSA9PiBpbnRlcnZhbCgzMDApKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5zdG9wTW9udGhTY3JvbGwkKVxuICAgICAgICAgICAgKSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLm1vbnRoU2Nyb2xsRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU2Nyb2xsTW9udGguUFJFVjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNNb250aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU2Nyb2xsTW9udGguTkVYVDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dE1vbnRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTY3JvbGxNb250aC5OT05FOlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBsb2NhbGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIGluIHRoZSBtb250aCB2aWV3IGlmIGVuYWJsZWQsXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgdGhlIGRlZmF1bHQgYERhdGUuZ2V0TW9udGgoKWAgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGZvcm1hdHRlZE1vbnRoKHZhbHVlOiBEYXRlKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0Vmlld3MubW9udGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdHRlck1vbnRoLmZvcm1hdCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlLmdldE1vbnRoKCl9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgdG8gcHJldmlvdXMgbW9udGhcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcHJldmlvdXNNb250aChpc0tleWRvd25UcmlnZ2VyID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGlzS2V5ZG93blRyaWdnZXIgJiYgdGhpcy5hbmltYXRpb25BY3Rpb24gPT09IFNjcm9sbE1vbnRoLk5FWFQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXZpb3VzVmlld0RhdGUgPSB0aGlzLnZpZXdEYXRlO1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gdGhpcy5jYWxlbmRhck1vZGVsLmdldFByZXZNb250aCh0aGlzLnZpZXdEYXRlKTtcbiAgICAgICAgdGhpcy5hbmltYXRpb25BY3Rpb24gPSBTY3JvbGxNb250aC5QUkVWO1xuICAgICAgICB0aGlzLmlzS2V5ZG93blRyaWdnZXIgPSBpc0tleWRvd25UcmlnZ2VyO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdXBwcmVzc0JsdXIoKSB7XG4gICAgICAgIHRoaXMubW9udGhWaWV3cz8uZm9yRWFjaChkID0+IGQuc2hvdWxkUmVzZXREYXRlID0gZmFsc2UpO1xuICAgICAgICBpZiAodGhpcy5kYXlzVmlldykge1xuICAgICAgICAgICAgdGhpcy5kYXlzVmlldy5zaG91bGRSZXNldERhdGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZSB0byBuZXh0IG1vbnRoXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5leHRNb250aChpc0tleWRvd25UcmlnZ2VyID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGlzS2V5ZG93blRyaWdnZXIgJiYgdGhpcy5hbmltYXRpb25BY3Rpb24gPT09ICdwcmV2Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNLZXlkb3duVHJpZ2dlciA9IGlzS2V5ZG93blRyaWdnZXI7XG4gICAgICAgIHRoaXMucHJldmlvdXNWaWV3RGF0ZSA9IHRoaXMudmlld0RhdGU7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSB0aGlzLmNhbGVuZGFyTW9kZWwuZ2V0TmV4dE1vbnRoKHRoaXMudmlld0RhdGUpO1xuICAgICAgICB0aGlzLmFuaW1hdGlvbkFjdGlvbiA9IFNjcm9sbE1vbnRoLk5FWFQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udGluaW91cyBuYXZpZ2F0aW9uIHRocm91Z2ggdGhlIHByZXZpb3VzIG1vbnRoc1xuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBzdGFydFByZXZNb250aFNjcm9sbCA9IChpc0tleWRvd25UcmlnZ2VyID0gZmFsc2UpID0+IHtcbiAgICAgICAgdGhpcy5zdGFydE1vbnRoU2Nyb2xsJC5uZXh0KCk7XG4gICAgICAgIHRoaXMubW9udGhTY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxNb250aC5QUkVWO1xuICAgICAgICB0aGlzLmFuaW1hdGlvbkFjdGlvbiA9IFNjcm9sbE1vbnRoLlBSRVY7XG4gICAgICAgIHRoaXMucHJldmlvdXNNb250aChpc0tleWRvd25UcmlnZ2VyKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ29udGluaW91cyBuYXZpZ2F0aW9uIHRocm91Z2ggdGhlIG5leHQgbW9udGhzXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHN0YXJ0TmV4dE1vbnRoU2Nyb2xsID0gKGlzS2V5ZG93blRyaWdnZXIgPSBmYWxzZSkgPT4ge1xuICAgICAgICB0aGlzLnN0YXJ0TW9udGhTY3JvbGwkLm5leHQoKTtcbiAgICAgICAgdGhpcy5tb250aFNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbE1vbnRoLk5FWFQ7XG4gICAgICAgIHRoaXMuYW5pbWF0aW9uQWN0aW9uID0gU2Nyb2xsTW9udGguTkVYVDtcbiAgICAgICAgdGhpcy5uZXh0TW9udGgoaXNLZXlkb3duVHJpZ2dlcik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFN0b3AgY29udGludW91cyBuYXZpZ2F0aW9uXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHN0b3BNb250aFNjcm9sbCA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAvLyBnZW5lcmFsbHkgdGhlIHNjcm9sbGluZyBpcyBidWlsdCBvbiB0aGUgY2FsZW5kYXIgY29tcG9uZW50XG4gICAgICAgIC8vIGFuZCBhbGwgc3RhcnQvc3RvcCBzY3JvbGxpbmcgbWV0aG9kcyBhcmUgY2FsbGVkIG9uIHRoZSBjYWxlbmRhclxuICAgICAgICAvLyBpZiB3ZSBjaGFuZ2UgYmVsb3cgbGluZXMgdG8gY2FsbCBzdG9wTW9udGhTY3JvbGwkIG9uIHRoZSBjYWxlbmRhciBpbnN0ZWFkIG9mIG9uIHRoZSB2aWV3cyxcbiAgICAgICAgLy8gc3RyYW5nZSBidWcgaXMgaW50cm9kdWNlZCAtLT4gYWZ0ZXIgY2hhbmdpbmcgbnVtYmVyIG9mIG1vbnRocywgY29udGludW91cyBzY3JvbGxpbmcgb24gbW91c2UgY2xpY2sgZG9lcyBub3QgaGFwcGVuXG4gICAgICAgIHRoaXMuZGF5c1ZpZXcuc3RvcE1vbnRoU2Nyb2xsJC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmRheXNWaWV3LnN0b3BNb250aFNjcm9sbCQuY29tcGxldGUoKTtcblxuXG4gICAgICAgIGlmICh0aGlzLm1vbnRoU2Nyb2xsRGlyZWN0aW9uID09PSBTY3JvbGxNb250aC5QUkVWKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZNb250aEJ0bi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb250aFNjcm9sbERpcmVjdGlvbiA9PT0gU2Nyb2xsTW9udGguTkVYVCkge1xuICAgICAgICAgICAgdGhpcy5uZXh0TW9udGhCdG4ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzQWN0aXZhdGlvbktleShldmVudCkpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRBY3RpdmVEYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1vbnRoU2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsTW9udGguTk9ORTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkFjdGl2ZVZpZXdEZWNhZGUoYXJnczogRGF0ZSwgYWN0aXZlVmlld0lkeDogbnVtYmVyKSB7XG4gICAgICAgIHN1cGVyLmFjdGl2ZVZpZXdEZWNhZGUoYWN0aXZlVmlld0lkeCk7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYWNhZGVWaWV3KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYWNhZGVWaWV3LmRhdGUgPSBhcmdzO1xuICAgICAgICAgICAgICAgIHRoaXMuZGFjYWRlVmlldy5jYWxlbmRhckRpci5maW5kKGRhdGUgPT4gZGF0ZS5pc0N1cnJlbnRZZWFyKS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25BY3RpdmVWaWV3RGVjYWRlS0IoZXZlbnQsIGFyZ3M6IERhdGUsIGFjdGl2ZVZpZXdJZHg6IG51bWJlcikge1xuICAgICAgICBzdXBlci5hY3RpdmVWaWV3RGVjYWRlS0IoZXZlbnQsIGFjdGl2ZVZpZXdJZHgpO1xuXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYWNhZGVWaWV3KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYWNhZGVWaWV3LmRhdGUgPSBhcmdzO1xuICAgICAgICAgICAgICAgIHRoaXMuZGFjYWRlVmlldy5jYWxlbmRhckRpci5maW5kKGRhdGUgPT4gZGF0ZS5pc0N1cnJlbnRZZWFyKS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Rm9ybWF0dGVkRGF0ZSgpOiB7IHdlZWtkYXk6IHN0cmluZzsgbW9udGhkYXk6IHN0cmluZyB9IHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuaGVhZGVyRGF0ZTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbW9udGhkYXk6IHRoaXMuZm9ybWF0dGVyTW9udGhkYXkuZm9ybWF0KGRhdGUpLFxuICAgICAgICAgICAgd2Vla2RheTogdGhpcy5mb3JtYXR0ZXJXZWVrZGF5LmZvcm1hdChkYXRlKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIGludm9rZWQgb24gZGF0ZSBzZWxlY3Rpb25cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY2hpbGRDbGlja2VkKGluc3RhbmNlOiBJQ2FsZW5kYXJEYXRlKSB7XG4gICAgICAgIGlmIChpbnN0YW5jZS5pc1ByZXZNb250aCkge1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c01vbnRoKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5zdGFuY2UuaXNOZXh0TW9udGgpIHtcbiAgICAgICAgICAgIHRoaXMubmV4dE1vbnRoKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdERhdGVGcm9tQ2xpZW50KGluc3RhbmNlLmRhdGUpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09ICdtdWx0aScpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzZWxlY3REYXRlSW5Nb250aFZpZXdzKGluc3RhbmNlLmRhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgdmlld0NoYW5naW5nKGFyZ3M6IElWaWV3Q2hhbmdpbmdFdmVudEFyZ3MpIHtcbiAgICAgICAgdGhpcy5hbmltYXRpb25BY3Rpb24gPSBhcmdzLm1vbnRoQWN0aW9uO1xuICAgICAgICB0aGlzLmlzS2V5ZG93blRyaWdnZXIgPSB0cnVlO1xuICAgICAgICB0aGlzLm5leHREYXRlID0gYXJncy5uZXh0RGF0ZTtcbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IChuZXh0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXkgPSB0aGlzLmRheXNWaWV3LmRhdGVzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZGF0ZS5kYXRlLmdldFRpbWUoKSA9PT0gbmV4dC5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgaWYgKGRheSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF5c1ZpZXcuZGF5c05hdlNlcnZpY2UuZm9jdXNOZXh0RGF0ZShkYXkubmF0aXZlRWxlbWVudCwgYXJncy5rZXksIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnByZXZpb3VzVmlld0RhdGUgPSB0aGlzLnZpZXdEYXRlO1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gdGhpcy5uZXh0RGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY2hhbmdlTW9udGgoZXZlbnQ6IERhdGUpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c1ZpZXdEYXRlID0gdGhpcy52aWV3RGF0ZTtcbiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IHRoaXMuY2FsZW5kYXJNb2RlbC5nZXRGaXJzdFZpZXdEYXRlKGV2ZW50LCAnbW9udGgnLCB0aGlzLmFjdGl2ZVZpZXdJZHgpO1xuICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSBJZ3hDYWxlbmRhclZpZXcuTW9udGg7XG5cbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLm1vbnRoc0J0bnMuZmluZCgoZTogRWxlbWVudFJlZiwgaWR4OiBudW1iZXIpID0+IGlkeCA9PT0gdGhpcy5hY3RpdmVWaWV3SWR4KTtcbiAgICAgICAgICAgIGlmIChlbGVtKSB7XG4gICAgICAgICAgICAgICAgZWxlbS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25BY3RpdmVWaWV3WWVhcihhcmdzOiBEYXRlLCBhY3RpdmVWaWV3SWR4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gSWd4Q2FsZW5kYXJWaWV3LlllYXI7XG4gICAgICAgIHRoaXMuYWN0aXZlVmlld0lkeCA9IGFjdGl2ZVZpZXdJZHg7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoc1ZpZXcuZGF0ZSA9IGFyZ3M7XG4gICAgICAgICAgICB0aGlzLmZvY3VzTW9udGgoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkFjdGl2ZVZpZXdZZWFyS0IoYXJnczogRGF0ZSwgZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGFjdGl2ZVZpZXdJZHg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0FjdGl2YXRpb25LZXkoZXZlbnQpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5vbkFjdGl2ZVZpZXdZZWFyKGFyZ3MsIGFjdGl2ZVZpZXdJZHgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzZWxlY3RzIGRhdGUocykgKGJhc2VkIG9uIHRoZSBzZWxlY3Rpb24gdHlwZSkuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgdGhpcy5jYWxlbmRhci5kZXNlbGVjdERhdGUobmV3IERhdGUoYDIwMTgtMDYtMTJgKSk7XG4gICAgICogYGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBkZXNlbGVjdERhdGUodmFsdWU/OiBEYXRlIHwgRGF0ZVtdKSB7XG4gICAgICAgIHN1cGVyLmRlc2VsZWN0RGF0ZSh2YWx1ZSk7XG5cbiAgICAgICAgdGhpcy5tb250aFZpZXdzLmZvckVhY2goKHZpZXcpID0+IHtcbiAgICAgICAgICAgIHZpZXcuc2VsZWN0ZWREYXRlcyA9IHRoaXMuc2VsZWN0ZWREYXRlcztcbiAgICAgICAgICAgIHZpZXcucmFuZ2VTdGFydGVkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHRoaXMuc2VsZWN0ZWREYXRlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRWaWV3RGF0ZShpOiBudW1iZXIpOiBEYXRlIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuY2FsZW5kYXJNb2RlbC50aW1lZGVsdGEodGhpcy52aWV3RGF0ZSwgJ21vbnRoJywgaSk7XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHRlciBmb3IgdGhlIGNvbnRleHQgb2JqZWN0IGluc2lkZSB0aGUgY2FsZW5kYXIgdGVtcGxhdGVzLlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDb250ZXh0KGk6IG51bWJlcikge1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5nZXRWaWV3RGF0ZShpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVDb250ZXh0KGRhdGUsIGkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgYW5pbWF0aW9uRG9uZShldmVudCkge1xuICAgICAgICBpZiAoKGV2ZW50LmZyb21TdGF0ZSA9PT0gU2Nyb2xsTW9udGguTk9ORSAmJiAoZXZlbnQudG9TdGF0ZSA9PT0gU2Nyb2xsTW9udGguUFJFViB8fCBldmVudC50b1N0YXRlID09PSBTY3JvbGxNb250aC5ORVhUKSkgfHxcbiAgICAgICAgICAgICAoZXZlbnQuZnJvbVN0YXRlID09PSAndm9pZCcgJiYgZXZlbnQudG9TdGF0ZSA9PT0gU2Nyb2xsTW9udGguTk9ORSkpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0RhdGVDaGFuZ2VkLmVtaXQoeyBwcmV2aW91c1ZhbHVlOiB0aGlzLnByZXZpb3VzVmlld0RhdGUsIGN1cnJlbnRWYWx1ZTogdGhpcy52aWV3RGF0ZSB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXNLZXlkb3duVHJpZ2dlcikge1xuICAgICAgICAgICAgdGhpcy5yZXNldEFjdGl2ZURhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1vbnRoU2Nyb2xsRGlyZWN0aW9uICE9PSBTY3JvbGxNb250aC5OT05FKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbE1vbnRoJC5uZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaXNEZWZhdWx0Vmlldykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1vbnRoVmlldyA9IHRoaXMuZGF5c1ZpZXcgYXMgSWd4RGF5c1ZpZXdDb21wb25lbnQ7XG4gICAgICAgIGxldCBkYXRlID0gbW9udGhWaWV3LmRhdGVzLmZpbmQoKGQpID0+IGQuc2VsZWN0ZWQpO1xuXG4gICAgICAgIHdoaWxlICghZGF0ZSAmJiBtb250aFZpZXcubmV4dE1vbnRoVmlldykge1xuICAgICAgICAgICAgbW9udGhWaWV3ID0gbW9udGhWaWV3Lm5leHRNb250aFZpZXc7XG4gICAgICAgICAgICBkYXRlID0gbW9udGhWaWV3LmRhdGVzLmZpbmQoKGQpID0+IGQuc2VsZWN0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRlICYmIGRhdGUuaXNGb2N1c2FibGUgJiYgIXRoaXMuaXNLZXlkb3duVHJpZ2dlcikge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZGF0ZS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9LCBwYXJzZUludChzbGlkZUluUmlnaHQub3B0aW9ucy5wYXJhbXMuZHVyYXRpb24sIDEwKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYWxsYmFjayAmJiAoZXZlbnQudG9TdGF0ZSA9PT0gU2Nyb2xsTW9udGguTkVYVCB8fCBldmVudC50b1N0YXRlID09PSBTY3JvbGxNb250aC5QUkVWKSkge1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLm5leHREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFuaW1hdGlvbkFjdGlvbiA9IFNjcm9sbE1vbnRoLk5PTkU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyB2aWV3UmVuZGVyZWQoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmZyb21TdGF0ZSAhPT0gJ3ZvaWQnKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXdDaGFuZ2VkLmVtaXQodGhpcy5hY3RpdmVWaWV3KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVmYXVsdFZpZXcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0QWN0aXZlRGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyByZXNldEFjdGl2ZURhdGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5tb250aFZpZXdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRhdGVzID0gW107XG4gICAgICAgIHRoaXMubW9udGhWaWV3cy5tYXAobXYgPT4gbXYuZGF0ZXMpLmZvckVhY2goZGF5cyA9PiB7XG4gICAgICAgICAgICBkYXRlcyA9IGRhdGVzLmNvbmNhdChkYXlzLnRvQXJyYXkoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkYXRlID0gZGF0ZXMuZmluZChkYXkgPT4gZGF5LnNlbGVjdGVkICYmIGRheS5pc0N1cnJlbnRNb250aCkgfHwgZGF0ZXMuZmluZChkYXkgPT4gZGF5LmlzVG9kYXkgJiYgZGF5LmlzQ3VycmVudE1vbnRoKVxuICAgICAgICAgICAgfHwgZGF0ZXMuZmluZChkID0+IGQuaXNGb2N1c2FibGUpO1xuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gZGF0ZS5kYXRlLmRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fbW9udGhWaWV3c0NoYW5nZXMkKSB7XG4gICAgICAgICAgICB0aGlzLl9tb250aFZpZXdzQ2hhbmdlcyQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UHJldk1vbnRoKGRhdGUpOiBEYXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsZW5kYXJNb2RlbC5nZXRQcmV2TW9udGgoZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXROZXh0TW9udGgoZGF0ZSwgdmlld0luZGV4KTogRGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGVuZGFyTW9kZWwuZ2V0RGF0ZUJ5VmlldyhkYXRlLCAnTW9udGgnLCB2aWV3SW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBtZXRob2QgYnVpbGRpbmcgYW5kIHJldHVybmluZyB0aGUgY29udGV4dCBvYmplY3QgaW5zaWRlXG4gICAgICogdGhlIGNhbGVuZGFyIHRlbXBsYXRlcy5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIGdlbmVyYXRlQ29udGV4dCh2YWx1ZTogRGF0ZSwgaT86IG51bWJlcikge1xuICAgICAgICBjb25zdCBmb3JtYXRPYmplY3QgPSB7XG4gICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgIG1vbnRoVmlldzogKCkgPT4gdGhpcy5vbkFjdGl2ZVZpZXdZZWFyKHZhbHVlLCBpKSxcbiAgICAgICAgICAgIHllYXJWaWV3OiAoKSA9PiB0aGlzLm9uQWN0aXZlVmlld0RlY2FkZSh2YWx1ZSwgaSksXG4gICAgICAgICAgICAuLi50aGlzLmNhbGVuZGFyTW9kZWwuZm9ybWF0VG9QYXJ0cyh2YWx1ZSwgdGhpcy5sb2NhbGUsIHRoaXMuZm9ybWF0T3B0aW9ucyxcbiAgICAgICAgICAgICAgICBbJ2VyYScsICd5ZWFyJywgJ21vbnRoJywgJ2RheScsICd3ZWVrZGF5J10pXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7ICRpbXBsaWNpdDogZm9ybWF0T2JqZWN0IH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIG1ldGhvZCB0aGF0IHNldHMgcmVmZXJlbmNlcyBmb3IgcHJldi9uZXh0IG1vbnRocyBmb3IgZWFjaCBtb250aCBpbiB0aGUgdmlld1xuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0U2libGluZ01vbnRocyhtb250aFZpZXdzOiBRdWVyeUxpc3Q8SWd4RGF5c1ZpZXdDb21wb25lbnQ+KSB7XG4gICAgICAgIG1vbnRoVmlld3MuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZNb250aFZpZXcgPSB0aGlzLmdldE1vbnRoVmlldyhpbmRleCAtIDEpO1xuICAgICAgICAgICAgY29uc3QgbmV4dE1vbnRoVmlldyA9IHRoaXMuZ2V0TW9udGhWaWV3KGluZGV4ICsgMSk7XG4gICAgICAgICAgICBpdGVtLm5leHRNb250aFZpZXcgPSBuZXh0TW9udGhWaWV3O1xuICAgICAgICAgICAgaXRlbS5wcmV2TW9udGhWaWV3ID0gcHJldk1vbnRoVmlldztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIG1ldGhvZCByZXR1cm5pbmcgcHJldmlvdXMvbmV4dCBkYXkgdmlld3NcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1vbnRoVmlldyhpbmRleDogbnVtYmVyKTogSWd4RGF5c1ZpZXdDb21wb25lbnQge1xuICAgICAgICBpZiAoaW5kZXggPT09IC0xIHx8IGluZGV4ID09PSB0aGlzLm1vbnRoVmlld3MubGVuZ3RoICkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb250aFZpZXdzLnRvQXJyYXkoKVtpbmRleF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgbWV0aG9kIHRoYXQgZG9lcyBkZXNlbGVjdGlvbiBmb3IgYWxsIG1vbnRoIHZpZXdzIHdoZW4gc2VsZWN0aW9uIGlzIFwibXVsdGlcIlxuICAgICAqIElmIG5vdCBjYWxsZWQsIHNlbGVjdGlvbiBpbiBvdGhlciBtb250aCB2aWV3cyBzdGF5c1xuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgZGVzZWxlY3REYXRlSW5Nb250aFZpZXdzKHZhbHVlOiBEYXRlKSB7XG4gICAgICAgIHRoaXMubW9udGhWaWV3cy5mb3JFYWNoKG0gPT4ge1xuICAgICAgICAgICAgbS5kZXNlbGVjdE11bHRpcGxlSW5Nb250aCh2YWx1ZSk7XG4gICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvY3VzTW9udGgoKSB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gdGhpcy5tb250aHNWaWV3Lm1vbnRoc1JlZi5maW5kKChlKSA9PlxuICAgICAgICAgICAgZS5pbmRleCA9PT0gdGhpcy5tb250aHNWaWV3LmRhdGUuZ2V0TW9udGgoKSk7XG4gICAgICAgIGlmIChtb250aCkge1xuICAgICAgICAgICAgbW9udGgubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlIGxldC1yZXN1bHQgI2RlZmF1bHRIZWFkZXI+XG4gICAgPHNwYW4+e3sgZ2V0Rm9ybWF0dGVkRGF0ZSgpLndlZWtkYXkgfX0sJm5ic3A7PC9zcGFuPlxuICAgIDxzcGFuPnt7IGdldEZvcm1hdHRlZERhdGUoKS5tb250aGRheSB9fTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBsZXQtcmVzdWx0ICNkZWZhdWx0TW9udGggbGV0LW9iaj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJtb250aHNWaWV3TnVtYmVyIDwgMiB8fCBvYmouaW5kZXggPCAxXCIgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2FyaWEtb2ZmLXNjcmVlblwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgICAge3sgbW9udGhzVmlld051bWJlciA+IDEgPyAocmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9maXJzdF9waWNrZXJfb2YucmVwbGFjZSgnezB9JywgbW9udGhzVmlld051bWJlci50b1N0cmluZygpKSAgKyAnICcgKyAoZ2V0Vmlld0RhdGUob2JqLmluZGV4KSB8IGRhdGU6ICdMTExMIHl5eXknKSkgOiByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3NlbGVjdGVkX21vbnRoX2lzICsgKGdldFZpZXdEYXRlKG9iai5pbmRleCkgfCBkYXRlOiAnTExMTCB5eXl5Jyl9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihnZXRWaWV3RGF0ZShvYmouaW5kZXgpIHwgZGF0ZTogJ0xMTEwnKSArICcgJyArIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2VsZWN0X21vbnRoXCJcbiAgICAgICAgICAgICNtb250aHNCdG5cbiAgICAgICAgICAgIChrZXlkb3duKT1cIm9uQWN0aXZlVmlld1llYXJLQihnZXRWaWV3RGF0ZShvYmouaW5kZXgpLCAkZXZlbnQsIG9iai5pbmRleClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQWN0aXZlVmlld1llYXIoZ2V0Vmlld0RhdGUob2JqLmluZGV4KSwgb2JqLmluZGV4KVwiXG4gICAgICAgICAgICBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX2RhdGVcIj5cbiAgICAgICAgICAgIHt7IGZvcm1hdHRlZE1vbnRoKGdldFZpZXdEYXRlKG9iai5pbmRleCkpIH19XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoZ2V0Vmlld0RhdGUob2JqLmluZGV4KSB8IGRhdGU6ICd5eXl5JykgKyAnICcgKyByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3NlbGVjdF95ZWFyXCJcbiAgICAgICAgICAgICN5ZWFyc0J0blxuICAgICAgICAgICAgKGtleWRvd24pPVwib25BY3RpdmVWaWV3RGVjYWRlS0IoJGV2ZW50LCBnZXRWaWV3RGF0ZShvYmouaW5kZXgpLCBvYmouaW5kZXgpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkFjdGl2ZVZpZXdEZWNhZGUoZ2V0Vmlld0RhdGUob2JqLmluZGV4KSwgb2JqLmluZGV4KVwiXG4gICAgICAgICAgICBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX2RhdGVcIj5cbiAgICAgICAgICAgIHt7IGZvcm1hdHRlZFllYXIoZ2V0Vmlld0RhdGUob2JqLmluZGV4KSkgfX1cbiAgICAgICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGhlYWRlclxuICAgIGFyaWEtbGFiZWxsZWRieT1cImlneC1hcmlhLWNhbGVuZGFyLXRpdGxlLW1vbnRoIGlneC1hcmlhLWNhbGVuZGFyLXRpdGxlLXllYXJcIlxuICAgIGNsYXNzPVwiaWd4LWNhbGVuZGFyX19oZWFkZXJcIlxuICAgICpuZ0lmPVwic2VsZWN0aW9uID09PSAnc2luZ2xlJyAmJiBoYXNIZWFkZXJcIj5cblxuICAgIDxoNSBpZD1cImlneC1hcmlhLWNhbGVuZGFyLXRpdGxlLXllYXJcIiBjbGFzcz1cImlneC1jYWxlbmRhcl9faGVhZGVyLXllYXJcIj5cbiAgICAgICAge3sgZm9ybWF0dGVkWWVhcihoZWFkZXJEYXRlKSB9fVxuICAgIDwvaDU+XG5cbiAgICA8aDIgaWQ9XCJpZ3gtYXJpYS1jYWxlbmRhci10aXRsZS1tb250aFwiIGNsYXNzPVwiaWd4LWNhbGVuZGFyX19oZWFkZXItZGF0ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGUgPyBoZWFkZXJUZW1wbGF0ZSA6IGRlZmF1bHRIZWFkZXI7IGNvbnRleHQ6IGhlYWRlckNvbnRleHRcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9oMj5cbjwvaGVhZGVyPlxuXG48ZGl2ICpuZ0lmPVwiaXNEZWZhdWx0Vmlld1wiICBjbGFzcz1cImlneC1jYWxlbmRhcl9fYm9keVwiIFtAYW5pbWF0ZVZpZXddPVwiYWN0aXZlVmlld1wiIChAYW5pbWF0ZVZpZXcuZG9uZSk9XCJ2aWV3UmVuZGVyZWQoJGV2ZW50KVwiIChzd2lwZXJpZ2h0KT1cInByZXZpb3VzTW9udGgoKVwiXG4gICAgKHN3aXBlbGVmdCk9XCJuZXh0TW9udGgoKVwiIChwb2ludGVyZG93bik9XCJzdXBwcmVzc0JsdXIoKVwiPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlclwiPlxuICAgICAgICA8c3BhbiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cImlneC1jYWxlbmRhcl9fYXJpYS1vZmYtc2NyZWVuXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAnbXVsdGknXCI+XG4gICAgICAgICAgICAgICAge3sgbW9udGhzVmlld051bWJlciAmJiBtb250aHNWaWV3TnVtYmVyID4gMSA/ICByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX211bHRpX3NlbGVjdGlvbi5yZXBsYWNlKCd7MH0nLCBtb250aHNWaWV3TnVtYmVyLnRvU3RyaW5nKCkpIDogcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zaW5ndWxhcl9tdWx0aV9zZWxlY3Rpb259fVxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAncmFuZ2UnXCI+XG4gICAgICAgICAgICAgICAge3sgbW9udGhzVmlld051bWJlciAmJiBtb250aHNWaWV3TnVtYmVyID4gMSA/ICByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3JhbmdlX3NlbGVjdGlvbi5yZXBsYWNlKCd7MH0nLCBtb250aHNWaWV3TnVtYmVyLnRvU3RyaW5nKCkpIDogcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zaW5ndWxhcl9yYW5nZV9zZWxlY3Rpb259fVxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAnc2luZ2xlJ1wiPlxuICAgICAgICAgICAgICAgIHt7IG1vbnRoc1ZpZXdOdW1iZXIgJiYgbW9udGhzVmlld051bWJlciA+IDEgPyAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zaW5nbGVfc2VsZWN0aW9uLnJlcGxhY2UoJ3swfScsIG1vbnRoc1ZpZXdOdW1iZXIudG9TdHJpbmcoKSkgOiByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3Npbmd1bGFyX3NpbmdsZV9zZWxlY3Rpb259fVxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fcHJldlwiXG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9wcmV2aW91c19tb250aCArICcsICcgKyAoZ2V0UHJldk1vbnRoKHZpZXdEYXRlKSB8IGRhdGU6ICdMTExMJylcIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb249XCJwcmV2XCJcbiAgICAgICAgICAgICNwcmV2TW9udGhCdG5cbiAgICAgICAgICAgIGlneENhbGVuZGFyU2Nyb2xsTW9udGhcbiAgICAgICAgICAgIFtzdGFydFNjcm9sbF09XCJzdGFydFByZXZNb250aFNjcm9sbFwiXG4gICAgICAgICAgICBbc3RvcFNjcm9sbF09XCJzdG9wTW9udGhTY3JvbGxcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnbWluLXdpZHRoLiUnOiAxMDAvKG1vbnRoc1ZpZXdOdW1iZXIqNyl9XCI+XG4gICAgICAgICAgICA8aWd4LWljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCI+a2V5Ym9hcmRfYXJyb3dfbGVmdDwvaWd4LWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fZGF0ZXNcIlxuICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB2aWV3IG9mIG1vbnRoc1ZpZXdOdW1iZXIgfCBJZ3hNb250aFZpZXdTbG90czsgaW5kZXggYXMgaTtcIlxuICAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cIjEwMC9tb250aHNWaWV3TnVtYmVyXCJcbiAgICAgICAgICAgICBbYXR0ci5kYXRhLW1vbnRoXT1cImkgfCBJZ3hHZXRWaWV3RGF0ZTp2aWV3RGF0ZTpmYWxzZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN1YmhlYWRlclRlbXBsYXRlID8gc3ViaGVhZGVyVGVtcGxhdGUgOiBkZWZhdWx0TW9udGg7IGNvbnRleHQ6IGdldENvbnRleHQoaSlcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fbmV4dFwiXG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9uZXh0X21vbnRoICsgJywgJyArICAoZ2V0TmV4dE1vbnRoKHZpZXdEYXRlLCBtb250aHNWaWV3TnVtYmVyKSB8IGRhdGU6ICdMTExMJylcIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb249XCJuZXh0XCJcbiAgICAgICAgICAgICNuZXh0TW9udGhCdG5cbiAgICAgICAgICAgIGlneENhbGVuZGFyU2Nyb2xsTW9udGhcbiAgICAgICAgICAgIFtzdGFydFNjcm9sbF09XCJzdGFydE5leHRNb250aFNjcm9sbFwiXG4gICAgICAgICAgICBbc3RvcFNjcm9sbF09XCJzdG9wTW9udGhTY3JvbGxcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwieydtaW4td2lkdGguJSc6IDEwMC8obW9udGhzVmlld051bWJlcio3KX1cIj5cbiAgICAgICAgICAgIDxpZ3gtaWNvbiBhcmlhLWhpZGRlbj1cInRydWVcIj5rZXlib2FyZF9hcnJvd19yaWdodDwvaWd4LWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cblxuICAgIDxzZWN0aW9uIHN0eWxlPVwiZGlzcGxheTogZmxleFwiXG4gICAgICAgIFtAYW5pbWF0ZUNoYW5nZV09XCJhbmltYXRpb25BY3Rpb25cIlxuICAgICAgICAoQGFuaW1hdGVDaGFuZ2UuZG9uZSk9XCJhbmltYXRpb25Eb25lKCRldmVudClcIj5cbiAgICAgICAgPGlneC1kYXlzLXZpZXcgcm9sZT1cImdyaWRcIiAqbmdGb3I9XCJsZXQgdmlldyBvZiBtb250aHNWaWV3TnVtYmVyIHwgSWd4TW9udGhWaWV3U2xvdHM7IGluZGV4IGFzIGk7XCIgW2NoYW5nZURheXNWaWV3XT1cInRydWVcIiAjZGF5c1xuICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICBbKGFjdGl2ZURhdGUpXT1cImFjdGl2ZURhdGVcIlxuICAgICAgICAgICAgICAgIFt2aWV3RGF0ZV09XCJpIHwgSWd4R2V0Vmlld0RhdGU6dmlld0RhdGVcIlxuICAgICAgICAgICAgICAgIFt3ZWVrU3RhcnRdPVwid2Vla1N0YXJ0XCJcbiAgICAgICAgICAgICAgICBbZm9ybWF0T3B0aW9uc109XCJmb3JtYXRPcHRpb25zXCJcbiAgICAgICAgICAgICAgICBbZm9ybWF0Vmlld3NdPVwiZm9ybWF0Vmlld3NcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZERhdGVzXT1cImRpc2FibGVkRGF0ZXNcIlxuICAgICAgICAgICAgICAgIFtzcGVjaWFsRGF0ZXNdPVwic3BlY2lhbERhdGVzXCJcbiAgICAgICAgICAgICAgICBbaGlkZU91dHNpZGVEYXlzXT1cImhpZGVPdXRzaWRlRGF5c1wiXG4gICAgICAgICAgICAgICAgW3Nob3dXZWVrTnVtYmVyc109XCJzaG93V2Vla051bWJlcnNcIlxuICAgICAgICAgICAgICAgICh2aWV3Q2hhbmdpbmcpPVwidmlld0NoYW5naW5nKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChkYXRlU2VsZWN0aW9uKT1cImNoaWxkQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAobW9udGhzVmlld0JsdXIpPVwicmVzZXRBY3RpdmVEYXRlKClcIj5cbiAgICAgICAgPC9pZ3gtZGF5cy12aWV3PlxuICAgIDwvc2VjdGlvbj5cbjwvZGl2PlxuXG48aWd4LW1vbnRocy12aWV3ICpuZ0lmPVwiaXNZZWFyVmlld1wiXG4gICAgICAgICAgICAgICAgIFtAYW5pbWF0ZVZpZXddPVwiYWN0aXZlVmlld1wiXG4gICAgICAgICAgICAgICAgICNtb250aHNcbiAgICAgICAgICAgICAgICAgKEBhbmltYXRlVmlldy5kb25lKT1cInZpZXdSZW5kZXJlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgW2RhdGVdPVwidmlld0RhdGVcIlxuICAgICAgICAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgICAgICAgIFtmb3JtYXRWaWV3XT1cImZvcm1hdFZpZXdzLm1vbnRoXCJcbiAgICAgICAgICAgICAgICAgW21vbnRoRm9ybWF0XT1cImZvcm1hdE9wdGlvbnMubW9udGhcIlxuICAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwiY2hhbmdlTW9udGgoJGV2ZW50KVwiPlxuPC9pZ3gtbW9udGhzLXZpZXc+XG5cbjxpZ3gteWVhcnMtdmlldyAqbmdJZj1cImlzRGVjYWRlVmlld1wiXG4gICAgICAgICAgICAgICAgW0BhbmltYXRlVmlld109XCJhY3RpdmVWaWV3XCJcbiAgICAgICAgICAgICAgICAjZGVjYWRlXG4gICAgICAgICAgICAgICAgKEBhbmltYXRlVmlldy5kb25lKT1cInZpZXdSZW5kZXJlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbZGF0ZV09XCJ2aWV3RGF0ZVwiXG4gICAgICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICAgICAgICAgIFtmb3JtYXRWaWV3XT1cImZvcm1hdFZpZXdzLnllYXJcIlxuICAgICAgICAgICAgICAgIFt5ZWFyRm9ybWF0XT1cImZvcm1hdE9wdGlvbnMueWVhclwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImNoYW5nZVllYXIoJGV2ZW50KVwiPlxuPC9pZ3gteWVhcnMtdmlldz5cbiJdfQ==
|
|
@@ -40,9 +40,9 @@ export class IgxCalendarYearDirective {
|
|
|
40
40
|
this.yearSelection.emit(this.value);
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
-
IgxCalendarYearDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.
|
|
44
|
-
IgxCalendarYearDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.
|
|
45
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.
|
|
43
|
+
IgxCalendarYearDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: IgxCalendarYearDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
44
|
+
IgxCalendarYearDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.2", type: IgxCalendarYearDirective, selector: "[igxCalendarYear]", inputs: { value: ["igxCalendarYear", "value"], date: "date" }, outputs: { yearSelection: "yearSelection" }, host: { listeners: { "click": "onClick()" }, properties: { "class.igx-calendar__year--current": "this.currentCSS", "attr.role": "this.role", "attr.aria-valuenow": "this.valuenow", "attr.tabindex": "this.tabIndex" } }, ngImport: i0 });
|
|
45
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: IgxCalendarYearDirective, decorators: [{
|
|
46
46
|
type: Directive,
|
|
47
47
|
args: [{
|
|
48
48
|
selector: '[igxCalendarYear]'
|
|
@@ -89,9 +89,9 @@ export class IgxCalendarMonthDirective {
|
|
|
89
89
|
this.monthSelection.emit(date);
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
|
-
IgxCalendarMonthDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.
|
|
93
|
-
IgxCalendarMonthDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.
|
|
94
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.
|
|
92
|
+
IgxCalendarMonthDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: IgxCalendarMonthDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
93
|
+
IgxCalendarMonthDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.2", type: IgxCalendarMonthDirective, selector: "[igxCalendarMonth]", inputs: { value: ["igxCalendarMonth", "value"], date: "date", index: "index" }, outputs: { monthSelection: "monthSelection" }, host: { listeners: { "click": "onClick()" }, properties: { "class.igx-calendar__month--current": "this.currentCSS" } }, ngImport: i0 });
|
|
94
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: IgxCalendarMonthDirective, decorators: [{
|
|
95
95
|
type: Directive,
|
|
96
96
|
args: [{
|
|
97
97
|
selector: '[igxCalendarMonth]'
|
|
@@ -120,9 +120,9 @@ export class IgxCalendarHeaderTemplateDirective {
|
|
|
120
120
|
this.template = template;
|
|
121
121
|
}
|
|
122
122
|
}
|
|
123
|
-
IgxCalendarHeaderTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.
|
|
124
|
-
IgxCalendarHeaderTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.
|
|
125
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.
|
|
123
|
+
IgxCalendarHeaderTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: IgxCalendarHeaderTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
124
|
+
IgxCalendarHeaderTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.2", type: IgxCalendarHeaderTemplateDirective, selector: "[igxCalendarHeader]", ngImport: i0 });
|
|
125
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: IgxCalendarHeaderTemplateDirective, decorators: [{
|
|
126
126
|
type: Directive,
|
|
127
127
|
args: [{
|
|
128
128
|
selector: '[igxCalendarHeader]'
|
|
@@ -136,9 +136,9 @@ export class IgxCalendarSubheaderTemplateDirective {
|
|
|
136
136
|
this.template = template;
|
|
137
137
|
}
|
|
138
138
|
}
|
|
139
|
-
IgxCalendarSubheaderTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.
|
|
140
|
-
IgxCalendarSubheaderTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.
|
|
141
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.
|
|
139
|
+
IgxCalendarSubheaderTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: IgxCalendarSubheaderTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
140
|
+
IgxCalendarSubheaderTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.2", type: IgxCalendarSubheaderTemplateDirective, selector: "[igxCalendarSubheader]", ngImport: i0 });
|
|
141
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: IgxCalendarSubheaderTemplateDirective, decorators: [{
|
|
142
142
|
type: Directive,
|
|
143
143
|
args: [{
|
|
144
144
|
selector: '[igxCalendarSubheader]'
|
|
@@ -197,9 +197,9 @@ export class IgxCalendarScrollMonthDirective {
|
|
|
197
197
|
this.destroy$.complete();
|
|
198
198
|
}
|
|
199
199
|
}
|
|
200
|
-
IgxCalendarScrollMonthDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.
|
|
201
|
-
IgxCalendarScrollMonthDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.
|
|
202
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.
|
|
200
|
+
IgxCalendarScrollMonthDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: IgxCalendarScrollMonthDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i1.PlatformUtil }], target: i0.ɵɵFactoryTarget.Directive });
|
|
201
|
+
IgxCalendarScrollMonthDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.2", type: IgxCalendarScrollMonthDirective, selector: "[igxCalendarScrollMonth]", inputs: { startScroll: "startScroll", stopScroll: "stopScroll" }, host: { listeners: { "mousedown": "onMouseDown()", "mouseup": "onMouseUp($event)" } }, ngImport: i0 });
|
|
202
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: IgxCalendarScrollMonthDirective, decorators: [{
|
|
203
203
|
type: Directive,
|
|
204
204
|
args: [{
|
|
205
205
|
selector: '[igxCalendarScrollMonth]'
|
|
@@ -18,8 +18,8 @@ import * as i0 from "@angular/core";
|
|
|
18
18
|
*/
|
|
19
19
|
export class IgxCalendarModule {
|
|
20
20
|
}
|
|
21
|
-
IgxCalendarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.
|
|
22
|
-
IgxCalendarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.
|
|
21
|
+
IgxCalendarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: IgxCalendarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
22
|
+
IgxCalendarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: IgxCalendarModule, declarations: [IgxCalendarBaseDirective,
|
|
23
23
|
IgxMonthPickerBaseDirective,
|
|
24
24
|
IgxDayItemComponent,
|
|
25
25
|
IgxDaysViewComponent,
|
|
@@ -42,8 +42,8 @@ IgxCalendarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versi
|
|
|
42
42
|
IgxCalendarMonthDirective,
|
|
43
43
|
IgxCalendarYearDirective,
|
|
44
44
|
IgxCalendarSubheaderTemplateDirective] });
|
|
45
|
-
IgxCalendarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.
|
|
46
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.
|
|
45
|
+
IgxCalendarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: IgxCalendarModule, imports: [[CommonModule, FormsModule, IgxIconModule]] });
|
|
46
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: IgxCalendarModule, decorators: [{
|
|
47
47
|
type: NgModule,
|
|
48
48
|
args: [{
|
|
49
49
|
declarations: [
|
|
@@ -98,9 +98,9 @@ export class IgxDayItemComponent {
|
|
|
98
98
|
this.dateSelection.emit(this.date);
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
|
-
IgxDayItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.
|
|
102
|
-
IgxDayItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.
|
|
103
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.
|
|
101
|
+
IgxDayItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: IgxDayItemComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
102
|
+
IgxDayItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: IgxDayItemComponent, selector: "igx-day-item", inputs: { date: "date", selection: "selection", selected: "selected", disabledDates: "disabledDates", outOfRangeDates: "outOfRangeDates", specialDates: "specialDates", hideOutsideDays: "hideOutsideDays", isLastInRange: "isLastInRange", isFirstInRange: "isFirstInRange", isWithinRange: "isWithinRange" }, outputs: { dateSelection: "dateSelection" }, host: { listeners: { "click": "onSelect($event)", "keydown.enter": "onSelect($event)" }, properties: { "class.igx-calendar__date--last": "this.isLastInRange", "class.igx-calendar__date--first": "this.isFirstInRange", "class.igx-calendar__date--selected": "this.isSelectedCSS", "class.igx-calendar__date--inactive": "this.isInactive", "class.igx-calendar__date--hidden": "this.isHidden", "class.igx-calendar__date--current": "this.isToday", "class.igx-calendar__date--weekend": "this.isWeekend", "class.igx-calendar__date--range": "this.isWithinRangeCSS", "class.igx-calendar__date--special": "this.isSpecial", "class.igx-calendar__date--disabled": "this.isDisabledCSS", "class.igx-calendar__date--single": "this.isSingleSelection" } }, ngImport: i0, template: "<span aria-hidden=\"true\" class=\"igx-calendar__date-content\">\n <ng-content></ng-content>\n</span>\n" });
|
|
103
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: IgxDayItemComponent, decorators: [{
|
|
104
104
|
type: Component,
|
|
105
105
|
args: [{ selector: 'igx-day-item', template: "<span aria-hidden=\"true\" class=\"igx-calendar__date-content\">\n <ng-content></ng-content>\n</span>\n" }]
|
|
106
106
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { date: [{
|
|
@@ -332,8 +332,8 @@ export class IgxDaysViewComponent extends IgxCalendarBaseDirective {
|
|
|
332
332
|
return this.selection !== CalendarSelection.RANGE;
|
|
333
333
|
}
|
|
334
334
|
}
|
|
335
|
-
IgxDaysViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.
|
|
336
|
-
IgxDaysViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.
|
|
335
|
+
IgxDaysViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: IgxDaysViewComponent, deps: [{ token: i1.IgxDaysViewNavigationService }, { token: i2.PlatformUtil }], target: i0.ɵɵFactoryTarget.Component });
|
|
336
|
+
IgxDaysViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: IgxDaysViewComponent, selector: "igx-days-view", inputs: { id: "id", changeDaysView: "changeDaysView", showWeekNumbers: "showWeekNumbers", activeDate: "activeDate" }, outputs: { dateSelection: "dateSelection", viewChanging: "viewChanging", activeDateChange: "activeDateChange", monthsViewBlur: "monthsViewBlur" }, host: { listeners: { "focusout": "resetActiveMonth()", "keydown.pagedown": "pointerDown()", "keydown.pageup": "pointerDown()", "keydown.shift.pagedown": "pointerDown()", "keydown.shift.pageup": "pointerDown()", "pointerdown": "pointerDown()", "keydown.arrowleft": "onKeydownArrow($event)", "keydown.arrowright": "onKeydownArrow($event)", "keydown.arrowup": "onKeydownArrow($event)", "keydown.arrowdown": "onKeydownArrow($event)", "keydown.home": "onKeydownHome($event)", "keydown.end": "onKeydownEnd($event)" }, properties: { "attr.id": "this.id", "class.igx-calendar": "this.styleClass" } }, providers: [
|
|
337
337
|
{
|
|
338
338
|
multi: true,
|
|
339
339
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -341,7 +341,7 @@ IgxDaysViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
|
|
|
341
341
|
},
|
|
342
342
|
{ provide: IgxDaysViewNavigationService, useClass: IgxDaysViewNavigationService }
|
|
343
343
|
], viewQueries: [{ propertyName: "dates", predicate: IgxDayItemComponent, descendants: true, read: IgxDayItemComponent }], usesInheritance: true, ngImport: i0, template: "<div role=\"row\" class=\"igx-calendar__body-row\">\n <div role=\"columnheader\" *ngIf=\"showWeekNumbers\" class=\"igx-calendar__label igx-calendar__label--week-number\">\n <span>Wk</span>\n </div>\n <span role=\"columnheader\" [attr.aria-label]=\"dayName\" *ngFor=\"let dayName of generateWeekHeader()\" class=\"igx-calendar__label\">\n {{ dayName | titlecase }}\n </span>\n</div>\n\n<div *ngFor=\"let week of getCalendarMonth; last as isLast; index as i; trackBy: rowTracker\"\n class=\"igx-calendar__body-row\" role=\"row\">\n\n <div *ngIf=\"showWeekNumbers\" class=\"igx-calendar__date igx-calendar__date--week-number\">\n\n <span role=\"rowheader\" class=\"igx-calendar__date-content igx-calendar__date-content--week-number\">\n {{getWeekNumber(week[0].date)}}\n </span>\n\n </div>\n\n <!-- <igx-week-number-item *ngIf=\"showWeekNumbers\">{{getWeekNumber(week[0].date)}}</igx-week-number-item> -->\n <igx-day-item\n class=\"igx-calendar__date\"\n *ngFor=\"let day of week; trackBy: dateTracker\"\n [attr.aria-selected]=\"isSelected(day)\"\n role=\"gridcell\"\n [attr.aria-disabled]=\"isDateDisabled(day.date)\"\n [attr.aria-label]=\"isFirstInRange(day) ? day.date.toDateString() + ', ' + resourceStrings.igx_calendar_range_start : isLastInRange(day) ? day.date.toDateString() + ', ' + resourceStrings.igx_calendar_range_end : day.date.toDateString()\"\n [date]=\"day\"\n [selection]=\"selection\"\n [selected]=\"isSelected(day)\"\n [isLastInRange]=\"isLastInRange(day)\"\n [isFirstInRange]=\"isFirstInRange(day)\"\n [isWithinRange]=\"isWithinRange(day.date, true)\"\n [disabledDates]=\"disabledDates\"\n [specialDates]=\"specialDates\"\n [outOfRangeDates]=\"outOfRangeDates\"\n [hideOutsideDays]=\"hideOutsideDays\"\n [attr.tabindex]=\"tabIndex(day)\"\n (focus)=\"activeDate = day.date.toLocaleDateString()\"\n (dateSelection)=\"selectDay($event)\">\n {{ formattedDate(day.date) }}\n </igx-day-item>\n</div>\n\n", components: [{ type: i3.IgxDayItemComponent, selector: "igx-day-item", inputs: ["date", "selection", "selected", "disabledDates", "outOfRangeDates", "specialDates", "hideOutsideDays", "isLastInRange", "isFirstInRange", "isWithinRange"], outputs: ["dateSelection"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "titlecase": i4.TitleCasePipe } });
|
|
344
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.
|
|
344
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: IgxDaysViewComponent, decorators: [{
|
|
345
345
|
type: Component,
|
|
346
346
|
args: [{ providers: [
|
|
347
347
|
{
|