@tetacom/ng-components 1.1.43 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +16 -10
- package/README.md +3 -20
- package/component/accordion/accordion/accordion.component.d.ts +1 -1
- package/component/accordion/accordion-content.directive.d.ts +1 -1
- package/component/accordion/accordion-head/accordion-head.component.d.ts +1 -1
- package/component/accordion/accordion-item/accordion-item.component.d.ts +1 -1
- package/component/accordion/public-api.d.ts +0 -1
- package/component/autocomplete/autocomplete/autocomplete.component.d.ts +1 -1
- package/component/autocomplete/public-api.d.ts +0 -1
- package/component/avatar/avatar/avatar.component.d.ts +1 -1
- package/component/avatar/public-api.d.ts +0 -1
- package/component/button/button/button.component.d.ts +1 -1
- package/component/button/public-api.d.ts +0 -1
- package/component/chart-3d/chart3d/chart3d.component.d.ts +1 -1
- package/component/chart-3d/public-api.d.ts +0 -1
- package/component/checkbox/checkbox/checkbox.component.d.ts +1 -1
- package/component/checkbox/public-api.d.ts +0 -1
- package/component/date-picker/base-picker.d.ts +1 -1
- package/component/date-picker/date-picker/date-calendar/date-calendar.component.d.ts +1 -1
- package/component/date-picker/date-picker/date-picker.component.d.ts +1 -1
- package/component/date-picker/date-range/date-range.component.d.ts +1 -1
- package/component/date-picker/date-range/range-calendar/range-calendar.component.d.ts +3 -3
- package/component/date-picker/day-picker/day-item/day-item.component.d.ts +1 -1
- package/component/date-picker/day-picker/day-picker.component.d.ts +2 -2
- package/component/date-picker/month-picker/month-picker.component.d.ts +1 -1
- package/component/date-picker/public-api.d.ts +0 -1
- package/component/date-picker/year-picker/scroll-to-selected-year.directive.d.ts +1 -1
- package/component/date-picker/year-picker/year-picker.component.d.ts +1 -1
- package/component/delimiter/delimiter/delimiter.component.d.ts +1 -1
- package/component/delimiter/public-api.d.ts +0 -1
- package/component/divider/divider/divider.component.d.ts +1 -1
- package/component/divider/public-api.d.ts +0 -1
- package/component/dropdown/dropdown/dropdown.component.d.ts +1 -1
- package/component/dropdown/dropdown-content.directive.d.ts +1 -1
- package/component/dropdown/dropdown-head.directive.d.ts +1 -1
- package/component/dropdown/dropdown.directive.d.ts +1 -1
- package/component/dropdown/public-api.d.ts +0 -1
- package/component/dynamic-component/popup-content/popup-content.component.d.ts +1 -1
- package/component/dynamic-component/public-api.d.ts +0 -1
- package/component/expand-card/expand-card/expand-card.component.d.ts +1 -1
- package/component/expand-card/expand-item/expand-item.component.d.ts +1 -1
- package/component/expand-card/public-api.d.ts +0 -1
- package/component/expand-panel/expand-panel/expand-panel.component.d.ts +1 -1
- package/component/expand-panel/expand-panel-content.directive.d.ts +1 -1
- package/component/expand-panel/expand-panel-head.directive.d.ts +1 -1
- package/component/expand-panel/public-api.d.ts +0 -1
- package/component/file-upload/file-item/file-item.component.d.ts +1 -1
- package/component/file-upload/file-upload-area/file-upload-area.component.d.ts +1 -1
- package/component/file-upload/public-api.d.ts +0 -1
- package/component/filter/boolean-filter/boolean-filter.component.d.ts +1 -1
- package/component/filter/date-filter/date-filter.component.d.ts +1 -1
- package/component/filter/filter-host/filter-host.component.d.ts +1 -1
- package/component/filter/list-filter/list-filter.component.d.ts +1 -1
- package/component/filter/numeric-filter/numeric-filter.component.d.ts +1 -1
- package/component/filter/public-api.d.ts +0 -1
- package/component/filter/string-filter/string-filter.component.d.ts +1 -1
- package/component/icon/icon/icon.component.d.ts +1 -1
- package/component/icon/icon-file/icon-file.component.d.ts +1 -1
- package/component/icon/icon-sprite.directive.d.ts +1 -1
- package/component/icon/public-api.d.ts +0 -2
- package/component/input/color-input/color-input.component.d.ts +1 -1
- package/component/input/form-group-title/form-group-title.component.d.ts +1 -1
- package/component/input/input/input.component.d.ts +1 -1
- package/component/input/public-api.d.ts +1 -1
- package/component/input/text-field/text-field.component.d.ts +1 -1
- package/component/message/message/message.component.d.ts +1 -1
- package/component/message/message-host/message-host.component.d.ts +1 -1
- package/component/message/public-api.d.ts +0 -1
- package/component/modal/dialog/dialog.component.d.ts +1 -1
- package/component/modal/modal-container/modal-container.component.d.ts +1 -1
- package/component/modal/modal.module.d.ts +5 -8
- package/component/pager/pager/pager.component.d.ts +1 -1
- package/component/pager/public-api.d.ts +0 -1
- package/component/panel/panel/panel.component.d.ts +1 -1
- package/component/panel/public-api.d.ts +0 -1
- package/component/progress-bar/progress-bar/progress-bar.component.d.ts +1 -1
- package/component/progress-bar/public-api.d.ts +0 -1
- package/component/property-grid/property-grid/property-grid-group/property-grid-group.component.d.ts +1 -1
- package/component/property-grid/property-grid/property-grid-item/property-grid-item.component.d.ts +1 -1
- package/component/property-grid/property-grid/property-grid-item-description.directive.d.ts +1 -1
- package/component/property-grid/property-grid/property-grid.component.d.ts +1 -1
- package/component/property-grid/property-grid.module.d.ts +8 -16
- package/component/public-api.d.ts +0 -1
- package/component/radio/public-api.d.ts +0 -1
- package/component/radio/radio/radio.component.d.ts +3 -4
- package/component/radio/radio-button/radio-button.component.d.ts +1 -1
- package/component/resize-panel/public-api.d.ts +0 -1
- package/component/resize-panel/resize-panel/resize-panel.component.d.ts +1 -1
- package/component/select/public-api.d.ts +0 -1
- package/component/select/select/select.component.d.ts +1 -1
- package/component/select/select-option.directive.d.ts +1 -1
- package/component/select/select-value.directive.d.ts +1 -1
- package/component/sidebar/public-api.d.ts +0 -1
- package/component/sidebar/sidebar/sidebar.component.d.ts +1 -1
- package/component/switch/public-api.d.ts +0 -1
- package/component/switch/switch/switch.component.d.ts +1 -1
- package/component/switch/switch-button/switch-button.component.d.ts +1 -1
- package/component/table/cell/cell.component.d.ts +1 -1
- package/component/table/cell-host/cell-host.component.d.ts +1 -1
- package/component/table/default/boolean-cell/boolean-cell.component.d.ts +1 -1
- package/component/table/default/date-cell/date-cell.component.d.ts +1 -1
- package/component/table/default/date-time-cell/date-time-cell.component.d.ts +1 -1
- package/component/table/default/default-head-cell/default-head-cell.component.d.ts +1 -1
- package/component/table/default/list-cell/list-cell.component.d.ts +1 -1
- package/component/table/default/numeric-cell/numeric-cell.component.d.ts +1 -1
- package/component/table/default/string-cell/string-cell.component.d.ts +1 -1
- package/component/table/head-cell/head-cell.component.d.ts +1 -1
- package/component/table/head-cell-dropdown/head-cell-dropdown.component.d.ts +1 -1
- package/component/table/head-cell-host/head-cell-host.component.d.ts +1 -1
- package/component/table/public-api.d.ts +0 -1
- package/component/table/selection-cell/selection-cell.component.d.ts +1 -1
- package/component/table/selection-head-cell/selection-head-cell.component.d.ts +1 -1
- package/component/table/table/table.component.d.ts +1 -1
- package/component/table/table-body/table-body.component.d.ts +1 -1
- package/component/table/table-head/filter-dropdown-tab/filter-dropdown-tab.component.d.ts +1 -1
- package/component/table/table-head/main-dropdown-tab/main-dropdown-tab.component.d.ts +1 -1
- package/component/table/table-head/table-head.component.d.ts +1 -1
- package/component/table/table-head/visibility-dropdown-tab/visibility-dropdown-tab.component.d.ts +2 -2
- package/component/table/table-head-group/table-head-group.component.d.ts +1 -1
- package/component/tabs/public-api.d.ts +0 -1
- package/component/tabs/tab/tab.component.d.ts +1 -1
- package/component/tabs/tab-content.directive.d.ts +1 -1
- package/component/tabs/tab-title.directive.d.ts +1 -1
- package/component/tabs/tabs/tabs.component.d.ts +1 -1
- package/component/theme-switch/public-api.d.ts +0 -1
- package/component/theme-switch/theme-switch/theme-switch.component.d.ts +1 -1
- package/component/toggle/public-api.d.ts +0 -1
- package/component/toggle/toggle/toggle.component.d.ts +1 -1
- package/component/toolbar/public-api.d.ts +0 -1
- package/component/toolbar/toolbar/toolbar.component.d.ts +1 -1
- package/component/tree/public-api.d.ts +0 -1
- package/component/tree/tree/tree.component.d.ts +1 -1
- package/component/tree/tree-item/tree-item.component.d.ts +1 -1
- package/component/tree/tree-item-toggle/tree-item-toggle.component.d.ts +1 -1
- package/directive/auto-position/auto-position.directive.d.ts +1 -1
- package/directive/auto-position/public-api.d.ts +0 -1
- package/directive/click-outside/click-outside.directive.d.ts +1 -1
- package/directive/click-outside/public-api.d.ts +0 -1
- package/directive/context-menu/context-menu.directive.d.ts +1 -1
- package/directive/context-menu/public-api.d.ts +0 -1
- package/directive/disable-control/disable-control.directive.d.ts +1 -1
- package/directive/disable-control/public-api.d.ts +0 -1
- package/directive/drag-drop/drag-container.directive.d.ts +1 -1
- package/directive/drag-drop/drag-placeholder.directive.d.ts +1 -1
- package/directive/drag-drop/drag-preview.directive.d.ts +1 -1
- package/directive/drag-drop/drag.directive.d.ts +1 -1
- package/directive/drag-drop/public-api.d.ts +0 -1
- package/directive/drag-sort/drag-sort-container.directive.d.ts +1 -1
- package/directive/drag-sort/drag-sort-item.directive.d.ts +1 -1
- package/directive/drag-sort/public-api.d.ts +0 -1
- package/directive/highlight/highlight.directive.d.ts +1 -1
- package/directive/highlight/public-api.d.ts +0 -1
- package/directive/hint/hint.directive.d.ts +1 -1
- package/directive/hint/public-api.d.ts +0 -1
- package/directive/let/let.directive.d.ts +1 -1
- package/directive/let/public-api.d.ts +0 -1
- package/directive/loader/loader.directive.d.ts +1 -1
- package/directive/loader/public-api.d.ts +0 -1
- package/directive/no-autofill/no-autofill.directive.d.ts +1 -1
- package/directive/no-autofill/public-api.d.ts +0 -1
- package/directive/only-number/only-number.directive.d.ts +1 -1
- package/directive/only-number/public-api.d.ts +0 -1
- package/directive/resize-drag/public-api.d.ts +0 -1
- package/directive/resize-drag/resize-drag.directive.d.ts +1 -1
- package/directive/scroll-into-view/public-api.d.ts +0 -1
- package/directive/scroll-into-view/scroll-into-view.directive.d.ts +1 -1
- package/directive/scrollable/public-api.d.ts +0 -1
- package/directive/scrollable/scrollable/scrollable.component.d.ts +1 -1
- package/directive/scrollable/scrollable.directive.d.ts +1 -1
- package/directive/teta-template/public-api.d.ts +0 -1
- package/directive/teta-template/teta-template.directive.d.ts +1 -1
- package/directive/tooltip/public-api.d.ts +0 -1
- package/directive/tooltip/tooltip.directive.d.ts +1 -1
- package/docs/datePickerDocs.mdx +14 -59
- package/docs/dateRangeDocs.mdx +172 -0
- package/esm2022/common/contract/dynamic-data.mjs +1 -1
- package/esm2022/common/contract/teta-content-ref.mjs +1 -4
- package/esm2022/common/service/click.service.mjs +6 -9
- package/esm2022/common/service/dynamic-component.service.mjs +6 -10
- package/esm2022/common/service/overlay-container.service.mjs +7 -9
- package/esm2022/common/util/array-util.mjs +1 -1
- package/esm2022/common/util/dom-util.mjs +1 -1
- package/esm2022/common/util/position-util.mjs +1 -1
- package/esm2022/component/accordion/accordion/accordion.component.mjs +8 -6
- package/esm2022/component/accordion/accordion-content.directive.mjs +8 -8
- package/esm2022/component/accordion/accordion-head/accordion-head.component.mjs +13 -13
- package/esm2022/component/accordion/accordion-item/accordion-item.component.mjs +14 -17
- package/esm2022/component/accordion/public-api.mjs +1 -2
- package/esm2022/component/autocomplete/autocomplete/autocomplete.component.mjs +6 -6
- package/esm2022/component/autocomplete/public-api.mjs +1 -2
- package/esm2022/component/avatar/avatar/avatar.component.mjs +28 -32
- package/esm2022/component/avatar/public-api.mjs +1 -2
- package/esm2022/component/button/button/button.component.mjs +10 -12
- package/esm2022/component/button/public-api.mjs +1 -2
- package/esm2022/component/chart-3d/chart3d/chart3d.component.mjs +11 -20
- package/esm2022/component/chart-3d/model/chart-3d-options.mjs +1 -3
- package/esm2022/component/chart-3d/model/series-3d.mjs +1 -3
- package/esm2022/component/chart-3d/public-api.mjs +1 -2
- package/esm2022/component/checkbox/checkbox/checkbox.component.mjs +16 -33
- package/esm2022/component/checkbox/public-api.mjs +1 -2
- package/esm2022/component/date-picker/base-calendar.mjs +23 -24
- package/esm2022/component/date-picker/base-picker.mjs +10 -15
- package/esm2022/component/date-picker/date-picker/date-calendar/date-calendar.component.mjs +23 -23
- package/esm2022/component/date-picker/date-picker/date-picker.component.mjs +47 -46
- package/esm2022/component/date-picker/date-range/date-range.component.mjs +44 -39
- package/esm2022/component/date-picker/date-range/range-calendar/range-calendar.component.mjs +25 -27
- package/esm2022/component/date-picker/day-picker/day-item/day-item.component.mjs +6 -6
- package/esm2022/component/date-picker/day-picker/day-picker.component.mjs +12 -19
- package/esm2022/component/date-picker/model/date-period.mjs +1 -3
- package/esm2022/component/date-picker/model/day-model.mjs +1 -7
- package/esm2022/component/date-picker/month-picker/month-picker.component.mjs +13 -16
- package/esm2022/component/date-picker/public-api.mjs +1 -2
- package/esm2022/component/date-picker/year-picker/scroll-to-selected-year.directive.mjs +9 -9
- package/esm2022/component/date-picker/year-picker/year-picker.component.mjs +9 -14
- package/esm2022/component/delimiter/delimiter/delimiter.component.mjs +13 -13
- package/esm2022/component/delimiter/public-api.mjs +1 -2
- package/esm2022/component/divider/divider/divider.component.mjs +8 -10
- package/esm2022/component/divider/public-api.mjs +1 -2
- package/esm2022/component/dropdown/dropdown/dropdown.component.mjs +8 -13
- package/esm2022/component/dropdown/dropdown-base.mjs +26 -35
- package/esm2022/component/dropdown/dropdown-content.directive.mjs +8 -9
- package/esm2022/component/dropdown/dropdown-head.directive.mjs +9 -9
- package/esm2022/component/dropdown/dropdown.directive.mjs +9 -13
- package/esm2022/component/dropdown/public-api.mjs +1 -2
- package/esm2022/component/dynamic-component/popup-content/popup-content.component.mjs +10 -10
- package/esm2022/component/dynamic-component/public-api.mjs +1 -2
- package/esm2022/component/expand-card/expand-card/expand-card.component.mjs +14 -15
- package/esm2022/component/expand-card/expand-item/expand-item.component.mjs +11 -10
- package/esm2022/component/expand-card/public-api.mjs +1 -2
- package/esm2022/component/expand-panel/expand-panel/expand-panel.component.mjs +20 -18
- package/esm2022/component/expand-panel/expand-panel-content.directive.mjs +7 -7
- package/esm2022/component/expand-panel/expand-panel-head.directive.mjs +7 -7
- package/esm2022/component/expand-panel/public-api.mjs +1 -2
- package/esm2022/component/file-upload/file-item/file-item.component.mjs +6 -6
- package/esm2022/component/file-upload/file-upload-area/file-upload-area.component.mjs +24 -19
- package/esm2022/component/file-upload/public-api.mjs +1 -2
- package/esm2022/component/filter/base/filter-base.mjs +1 -4
- package/esm2022/component/filter/boolean-filter/boolean-filter.component.mjs +22 -20
- package/esm2022/component/filter/contarct/date-filter-value.mjs +1 -9
- package/esm2022/component/filter/contarct/date-filter.mjs +1 -1
- package/esm2022/component/filter/contarct/filter-item.mjs +13 -57
- package/esm2022/component/filter/contarct/filter-state.mjs +7 -7
- package/esm2022/component/filter/contarct/list-filter.mjs +1 -2
- package/esm2022/component/filter/contarct/numeric-filter-value.mjs +1 -13
- package/esm2022/component/filter/contarct/numeric-filter.mjs +1 -2
- package/esm2022/component/filter/contarct/sort-param.mjs +1 -13
- package/esm2022/component/filter/contarct/string-filter.mjs +1 -2
- package/esm2022/component/filter/date-filter/date-filter.component.mjs +22 -20
- package/esm2022/component/filter/filter-host/filter-host.component.mjs +11 -16
- package/esm2022/component/filter/list-filter/list-filter.component.mjs +25 -23
- package/esm2022/component/filter/numeric-filter/numeric-filter.component.mjs +22 -20
- package/esm2022/component/filter/public-api.mjs +1 -2
- package/esm2022/component/filter/string-filter/string-filter.component.mjs +19 -18
- package/esm2022/component/icon/icon/icon.component.mjs +9 -9
- package/esm2022/component/icon/icon-file/icon-file.component.mjs +6 -8
- package/esm2022/component/icon/icon-sprite.directive.mjs +9 -9
- package/esm2022/component/icon/icon.service.mjs +10 -15
- package/esm2022/component/icon/public-api.mjs +1 -3
- package/esm2022/component/input/color-input/color-input.component.mjs +11 -13
- package/esm2022/component/input/form-group-title/form-group-title.component.mjs +9 -8
- package/esm2022/component/input/input/input.component.mjs +12 -13
- package/esm2022/component/input/public-api.mjs +2 -2
- package/esm2022/component/input/text-field/text-field.component.mjs +25 -25
- package/esm2022/component/message/message/message.component.mjs +15 -14
- package/esm2022/component/message/message-host/message-host.component.mjs +22 -25
- package/esm2022/component/message/message.service.mjs +7 -9
- package/esm2022/component/message/model/message.mjs +4 -10
- package/esm2022/component/message/public-api.mjs +1 -2
- package/esm2022/component/modal/dialog/dialog.component.mjs +18 -18
- package/esm2022/component/modal/dialog.service.mjs +6 -6
- package/esm2022/component/modal/modal-container/modal-container.component.mjs +11 -13
- package/esm2022/component/modal/modal.module.mjs +8 -18
- package/esm2022/component/modal/modal.service.mjs +16 -19
- package/esm2022/component/modal/model/current-modal.mjs +1 -2
- package/esm2022/component/modal/model/modal-instance.mjs +7 -10
- package/esm2022/component/pager/model/pager-state.mjs +9 -29
- package/esm2022/component/pager/pager/pager.component.mjs +6 -6
- package/esm2022/component/pager/public-api.mjs +1 -2
- package/esm2022/component/panel/panel/panel.component.mjs +12 -11
- package/esm2022/component/panel/public-api.mjs +1 -2
- package/esm2022/component/progress-bar/progress-bar/progress-bar.component.mjs +37 -45
- package/esm2022/component/progress-bar/public-api.mjs +1 -2
- package/esm2022/component/property-grid/property-grid/property-grid-group/property-grid-group.component.mjs +13 -21
- package/esm2022/component/property-grid/property-grid/property-grid-item/property-grid-item.component.mjs +31 -29
- package/esm2022/component/property-grid/property-grid/property-grid-item-description.directive.mjs +8 -9
- package/esm2022/component/property-grid/property-grid/property-grid.component.mjs +19 -23
- package/esm2022/component/property-grid/property-grid.module.mjs +16 -46
- package/esm2022/component/public-api.mjs +1 -3
- package/esm2022/component/radio/public-api.mjs +1 -2
- package/esm2022/component/radio/radio/radio.component.mjs +17 -23
- package/esm2022/component/radio/radio-button/radio-button.component.mjs +10 -16
- package/esm2022/component/resize-panel/public-api.mjs +1 -2
- package/esm2022/component/resize-panel/resize-panel/resize-panel.component.mjs +24 -29
- package/esm2022/component/select/public-api.mjs +1 -2
- package/esm2022/component/select/select/select.component.mjs +49 -53
- package/esm2022/component/select/select-option.directive.mjs +8 -8
- package/esm2022/component/select/select-value.directive.mjs +8 -8
- package/esm2022/component/sidebar/public-api.mjs +1 -2
- package/esm2022/component/sidebar/sidebar/sidebar.component.mjs +14 -16
- package/esm2022/component/switch/public-api.mjs +1 -2
- package/esm2022/component/switch/switch/switch.component.mjs +10 -13
- package/esm2022/component/switch/switch-button/switch-button.component.mjs +9 -13
- package/esm2022/component/switch/switch.service.mjs +6 -7
- package/esm2022/component/table/base/cell-component-base.mjs +14 -18
- package/esm2022/component/table/base/head-cell-component-base.mjs +5 -4
- package/esm2022/component/table/cell/cell.component.mjs +11 -11
- package/esm2022/component/table/cell-host/cell-host.component.mjs +10 -14
- package/esm2022/component/table/contract/column-reorder-event.mjs +1 -3
- package/esm2022/component/table/contract/column-resize-event.mjs +1 -3
- package/esm2022/component/table/contract/sort-event.mjs +1 -3
- package/esm2022/component/table/contract/table-column-store.mjs +1 -6
- package/esm2022/component/table/contract/table-column.mjs +13 -83
- package/esm2022/component/table/contract/table-row.mjs +1 -3
- package/esm2022/component/table/default/boolean-cell/boolean-cell.component.mjs +15 -13
- package/esm2022/component/table/default/date-cell/date-cell.component.mjs +17 -13
- package/esm2022/component/table/default/date-time-cell/date-time-cell.component.mjs +17 -13
- package/esm2022/component/table/default/default-head-cell/default-head-cell.component.mjs +9 -13
- package/esm2022/component/table/default/list-cell/list-cell.component.mjs +16 -14
- package/esm2022/component/table/default/numeric-cell/numeric-cell.component.mjs +17 -14
- package/esm2022/component/table/default/string-cell/string-cell.component.mjs +16 -14
- package/esm2022/component/table/head-cell/head-cell.component.mjs +38 -41
- package/esm2022/component/table/head-cell-dropdown/head-cell-dropdown.component.mjs +29 -27
- package/esm2022/component/table/head-cell-host/head-cell-host.component.mjs +8 -13
- package/esm2022/component/table/public-api.mjs +1 -2
- package/esm2022/component/table/selection-cell/selection-cell.component.mjs +13 -14
- package/esm2022/component/table/selection-head-cell/selection-head-cell.component.mjs +12 -12
- package/esm2022/component/table/service/table.service.mjs +35 -58
- package/esm2022/component/table/table/table.component.mjs +53 -67
- package/esm2022/component/table/table-body/table-body.component.mjs +47 -51
- package/esm2022/component/table/table-head/filter-dropdown-tab/filter-dropdown-tab.component.mjs +15 -23
- package/esm2022/component/table/table-head/main-dropdown-tab/main-dropdown-tab.component.mjs +12 -19
- package/esm2022/component/table/table-head/table-head.component.mjs +15 -23
- package/esm2022/component/table/table-head/visibility-dropdown-tab/visibility-dropdown-tab.component.mjs +54 -51
- package/esm2022/component/table/table-head-group/table-head-group.component.mjs +11 -16
- package/esm2022/component/table/util/state-util.mjs +2 -2
- package/esm2022/component/table/util/table-util.mjs +1 -1
- package/esm2022/component/tabs/public-api.mjs +1 -2
- package/esm2022/component/tabs/tab/tab.component.mjs +15 -19
- package/esm2022/component/tabs/tab-content.directive.mjs +8 -8
- package/esm2022/component/tabs/tab-title.directive.mjs +8 -8
- package/esm2022/component/tabs/tabs/tabs.component.mjs +19 -23
- package/esm2022/component/theme-switch/public-api.mjs +1 -2
- package/esm2022/component/theme-switch/theme-switch/theme-switch.component.mjs +11 -12
- package/esm2022/component/theme-switch/theme-switch.service.mjs +5 -7
- package/esm2022/component/toggle/public-api.mjs +1 -2
- package/esm2022/component/toggle/toggle/toggle.component.mjs +12 -21
- package/esm2022/component/toolbar/public-api.mjs +1 -2
- package/esm2022/component/toolbar/toolbar/toolbar.component.mjs +5 -7
- package/esm2022/component/tree/public-api.mjs +1 -2
- package/esm2022/component/tree/tree/tree.component.mjs +31 -38
- package/esm2022/component/tree/tree-item/tree-item.component.mjs +17 -21
- package/esm2022/component/tree/tree-item-toggle/tree-item-toggle.component.mjs +10 -13
- package/esm2022/component/tree/tree.service.mjs +8 -10
- package/esm2022/directive/auto-position/auto-position.directive.mjs +12 -13
- package/esm2022/directive/auto-position/public-api.mjs +1 -2
- package/esm2022/directive/click-outside/click-outside.directive.mjs +19 -20
- package/esm2022/directive/click-outside/public-api.mjs +1 -2
- package/esm2022/directive/context-menu/context-menu.directive.mjs +20 -29
- package/esm2022/directive/context-menu/public-api.mjs +1 -2
- package/esm2022/directive/disable-control/disable-control.directive.mjs +7 -6
- package/esm2022/directive/disable-control/public-api.mjs +1 -2
- package/esm2022/directive/drag-drop/drag-container.directive.mjs +14 -21
- package/esm2022/directive/drag-drop/drag-drop.service.mjs +10 -20
- package/esm2022/directive/drag-drop/drag-placeholder.directive.mjs +7 -6
- package/esm2022/directive/drag-drop/drag-preview.directive.mjs +8 -8
- package/esm2022/directive/drag-drop/drag.directive.mjs +14 -20
- package/esm2022/directive/drag-drop/model/drag-container-instance.mjs +1 -4
- package/esm2022/directive/drag-drop/model/drag-instance.mjs +1 -3
- package/esm2022/directive/drag-drop/public-api.mjs +1 -2
- package/esm2022/directive/drag-sort/drag-sort-container.directive.mjs +9 -7
- package/esm2022/directive/drag-sort/drag-sort-item.directive.mjs +12 -16
- package/esm2022/directive/drag-sort/public-api.mjs +1 -2
- package/esm2022/directive/dynamic-content-base.directive.mjs +13 -22
- package/esm2022/directive/highlight/highlight.directive.mjs +8 -8
- package/esm2022/directive/highlight/public-api.mjs +1 -2
- package/esm2022/directive/hint/hint.directive.mjs +14 -24
- package/esm2022/directive/hint/public-api.mjs +1 -2
- package/esm2022/directive/let/let.directive.mjs +8 -9
- package/esm2022/directive/let/public-api.mjs +1 -2
- package/esm2022/directive/loader/loader.directive.mjs +12 -18
- package/esm2022/directive/loader/public-api.mjs +1 -2
- package/esm2022/directive/no-autofill/no-autofill.directive.mjs +7 -8
- package/esm2022/directive/no-autofill/public-api.mjs +1 -2
- package/esm2022/directive/only-number/only-number.directive.mjs +19 -19
- package/esm2022/directive/only-number/public-api.mjs +1 -2
- package/esm2022/directive/resize-drag/public-api.mjs +1 -2
- package/esm2022/directive/resize-drag/resize-drag.directive.mjs +18 -19
- package/esm2022/directive/scroll-into-view/public-api.mjs +1 -2
- package/esm2022/directive/scroll-into-view/scroll-into-view.directive.mjs +11 -13
- package/esm2022/directive/scrollable/public-api.mjs +1 -2
- package/esm2022/directive/scrollable/scrollable/scrollable.component.mjs +20 -24
- package/esm2022/directive/scrollable/scrollable.directive.mjs +8 -5
- package/esm2022/directive/teta-template/public-api.mjs +1 -2
- package/esm2022/directive/teta-template/teta-template.directive.mjs +8 -9
- package/esm2022/directive/tooltip/public-api.mjs +1 -2
- package/esm2022/directive/tooltip/tooltip.directive.mjs +16 -21
- package/esm2022/index.mjs +22 -0
- package/esm2022/locale/teta-config.service.mjs +8 -8
- package/esm2022/observable/animation-frame.mjs +1 -1
- package/esm2022/observable/public-api.mjs +1 -2
- package/esm2022/pipe/date-pipe/public-api.mjs +1 -2
- package/esm2022/pipe/date-pipe/teta-date.pipe.mjs +22 -14
- package/esm2022/pipe/number-pipe/number.pipe.mjs +6 -5
- package/esm2022/pipe/number-pipe/public-api.mjs +1 -2
- package/esm2022/pipe/util/number-helper.mjs +1 -1
- package/esm2022/tetacom-ng-components.mjs +2 -2
- package/esm2022/util/bool-or-func.mjs +1 -1
- package/esm2022/util/date-util.mjs +1 -1
- package/esm2022/util/forms-util.mjs +3 -3
- package/fesm2022/tetacom-ng-components.mjs +6034 -8435
- package/fesm2022/tetacom-ng-components.mjs.map +1 -1
- package/index.d.ts +17 -3
- package/observable/public-api.d.ts +0 -1
- package/package.json +5 -24
- package/pipe/date-pipe/public-api.d.ts +0 -1
- package/pipe/date-pipe/teta-date.pipe.d.ts +3 -3
- package/pipe/number-pipe/number.pipe.d.ts +1 -1
- package/pipe/number-pipe/public-api.d.ts +0 -1
- package/style/accordion.scss +3 -1
- package/style/checkbox.scss +1 -1
- package/style/icon.scss +1 -1
- package/style/message.scss +1 -1
- package/style/navigation.scss +3 -3
- package/style/switch.scss +1 -3
- package/style/toggle.scss +1 -1
- package/style/toolbar.scss +1 -1
- package/.browserslistrc +0 -16
- package/component/accordion/accordion.module.d.ts +0 -12
- package/component/autocomplete/autocomplete.module.d.ts +0 -8
- package/component/avatar/avatar.module.d.ts +0 -9
- package/component/button/button.module.d.ts +0 -8
- package/component/chart-3d/chart-3d.module.d.ts +0 -8
- package/component/checkbox/checkbox.module.d.ts +0 -9
- package/component/date-picker/date-picker.module.d.ts +0 -24
- package/component/delimiter/delimiter.module.d.ts +0 -8
- package/component/divider/divider.module.d.ts +0 -8
- package/component/dropdown/dropdown.module.d.ts +0 -11
- package/component/dynamic-component/dynamic-component.module.d.ts +0 -8
- package/component/expand-card/expand-card.module.d.ts +0 -13
- package/component/expand-panel/expand-panel.module.d.ts +0 -14
- package/component/file-upload/file-upload.module.d.ts +0 -12
- package/component/filter/filter.module.d.ts +0 -21
- package/component/icon/icon-file/icon-file.module.d.ts +0 -9
- package/component/icon/icon.module.d.ts +0 -10
- package/component/input/input.module.d.ts +0 -16
- package/component/message/message.module.d.ts +0 -11
- package/component/pager/pager.module.d.ts +0 -9
- package/component/panel/panel.module.d.ts +0 -8
- package/component/progress-bar/progress-bar.module.d.ts +0 -8
- package/component/radio/radio.module.d.ts +0 -10
- package/component/resize-panel/resize-panel.module.d.ts +0 -10
- package/component/select/select.module.d.ts +0 -18
- package/component/sidebar/sidebar.module.d.ts +0 -10
- package/component/switch/switch.module.d.ts +0 -9
- package/component/table/table.module.d.ts +0 -47
- package/component/tabs/tabs.module.d.ts +0 -11
- package/component/theme-switch/theme-switch.module.d.ts +0 -10
- package/component/three/custom-series/custom-series.component.d.ts +0 -20
- package/component/three/public-api.d.ts +0 -11
- package/component/three/three-chart/area-3d/area-3d.component.d.ts +0 -14
- package/component/three/three-chart/axes-3d/axes-3d.component.d.ts +0 -37
- package/component/three/three-chart/base-3d-series/base3d-series.component.d.ts +0 -15
- package/component/three/three-chart/block-3d/block-3d.component.d.ts +0 -28
- package/component/three/three-chart/canvas/canvas.component.d.ts +0 -11
- package/component/three/three-chart/directive/canvas-3d-host.d.ts +0 -19
- package/component/three/three-chart/directive/public-api.d.ts +0 -2
- package/component/three/three-chart/directive/series-3d-host.d.ts +0 -16
- package/component/three/three-chart/line-3d/line-3d.component.d.ts +0 -19
- package/component/three/three-chart/model/axes-3d-min-max.d.ts +0 -5
- package/component/three/three-chart/model/axis-3d-point.d.ts +0 -4
- package/component/three/three-chart/model/base-3d-series.d.ts +0 -11
- package/component/three/three-chart/model/base-3d-three-point.d.ts +0 -8
- package/component/three/three-chart/model/block-3d-series.d.ts +0 -6
- package/component/three/three-chart/model/block3d-point.d.ts +0 -5
- package/component/three/three-chart/model/enum/public-api.d.ts +0 -1
- package/component/three/three-chart/model/enum/series-3d-type.d.ts +0 -4
- package/component/three/three-chart/model/i-3d-chart-config.d.ts +0 -14
- package/component/three/three-chart/model/line-3d-point.d.ts +0 -5
- package/component/three/three-chart/model/line-3d-series.d.ts +0 -6
- package/component/three/three-chart/model/public-api.d.ts +0 -10
- package/component/three/three-chart/scene/scene.component.d.ts +0 -20
- package/component/three/three-chart/service/chart-3d.service.d.ts +0 -21
- package/component/three/three-chart/three-chart.component.d.ts +0 -19
- package/component/toggle/toggle.module.d.ts +0 -9
- package/component/toolbar/toolbar.module.d.ts +0 -8
- package/component/tree/tree.module.d.ts +0 -14
- package/directive/auto-position/auto-position.module.d.ts +0 -8
- package/directive/click-outside/click-outside.module.d.ts +0 -8
- package/directive/context-menu/context-menu.module.d.ts +0 -9
- package/directive/disable-control/disable-control.module.d.ts +0 -8
- package/directive/drag-drop/drag-drop.module.d.ts +0 -11
- package/directive/drag-sort/drag-sort.module.d.ts +0 -9
- package/directive/highlight/highlight.module.d.ts +0 -8
- package/directive/hint/hint.module.d.ts +0 -9
- package/directive/let/let.module.d.ts +0 -8
- package/directive/loader/loader.module.d.ts +0 -8
- package/directive/no-autofill/no-autofill.module.d.ts +0 -8
- package/directive/only-number/only-number.module.d.ts +0 -8
- package/directive/resize-drag/resize-drag.module.d.ts +0 -8
- package/directive/scroll-into-view/scroll-into-view.module.d.ts +0 -8
- package/directive/scrollable/scrollable.module.d.ts +0 -10
- package/directive/teta-template/teta-template.module.d.ts +0 -8
- package/directive/tooltip/tooltip.module.d.ts +0 -10
- package/docs/chartDocs.mdx +0 -153
- package/docs/threeDocs.mdx +0 -65
- package/esm2022/component/accordion/accordion.module.mjs +0 -27
- package/esm2022/component/autocomplete/autocomplete.module.mjs +0 -24
- package/esm2022/component/avatar/avatar.module.mjs +0 -28
- package/esm2022/component/button/button.module.mjs +0 -22
- package/esm2022/component/chart-3d/chart-3d.module.mjs +0 -18
- package/esm2022/component/checkbox/checkbox.module.mjs +0 -26
- package/esm2022/component/date-picker/date-picker.module.mjs +0 -91
- package/esm2022/component/delimiter/delimiter.module.mjs +0 -20
- package/esm2022/component/divider/divider.module.mjs +0 -20
- package/esm2022/component/dropdown/dropdown.module.mjs +0 -39
- package/esm2022/component/dynamic-component/dynamic-component.module.mjs +0 -20
- package/esm2022/component/expand-card/expand-card.module.mjs +0 -45
- package/esm2022/component/expand-panel/expand-panel.module.mjs +0 -50
- package/esm2022/component/file-upload/file-upload.module.mjs +0 -22
- package/esm2022/component/filter/filter.module.mjs +0 -81
- package/esm2022/component/icon/icon-file/icon-file.module.mjs +0 -28
- package/esm2022/component/icon/icon.module.mjs +0 -33
- package/esm2022/component/input/input.module.mjs +0 -26
- package/esm2022/component/message/message.module.mjs +0 -29
- package/esm2022/component/pager/pager.module.mjs +0 -24
- package/esm2022/component/panel/panel.module.mjs +0 -20
- package/esm2022/component/progress-bar/progress-bar.module.mjs +0 -20
- package/esm2022/component/radio/radio.module.mjs +0 -20
- package/esm2022/component/resize-panel/resize-panel.module.mjs +0 -20
- package/esm2022/component/select/select.module.mjs +0 -54
- package/esm2022/component/sidebar/sidebar.module.mjs +0 -28
- package/esm2022/component/switch/switch.module.mjs +0 -21
- package/esm2022/component/table/table.module.mjs +0 -185
- package/esm2022/component/tabs/tabs.module.mjs +0 -39
- package/esm2022/component/theme-switch/theme-switch.module.mjs +0 -28
- package/esm2022/component/three/custom-series/custom-series.component.mjs +0 -34
- package/esm2022/component/three/public-api.mjs +0 -12
- package/esm2022/component/three/three-chart/area-3d/area-3d.component.mjs +0 -53
- package/esm2022/component/three/three-chart/axes-3d/axes-3d.component.mjs +0 -60
- package/esm2022/component/three/three-chart/base-3d-series/base3d-series.component.mjs +0 -29
- package/esm2022/component/three/three-chart/block-3d/block-3d.component.mjs +0 -77
- package/esm2022/component/three/three-chart/canvas/canvas.component.mjs +0 -24
- package/esm2022/component/three/three-chart/directive/canvas-3d-host.mjs +0 -49
- package/esm2022/component/three/three-chart/directive/public-api.mjs +0 -3
- package/esm2022/component/three/three-chart/directive/series-3d-host.mjs +0 -48
- package/esm2022/component/three/three-chart/line-3d/line-3d.component.mjs +0 -42
- package/esm2022/component/three/three-chart/model/axes-3d-min-max.mjs +0 -2
- package/esm2022/component/three/three-chart/model/axis-3d-point.mjs +0 -2
- package/esm2022/component/three/three-chart/model/base-3d-series.mjs +0 -2
- package/esm2022/component/three/three-chart/model/base-3d-three-point.mjs +0 -2
- package/esm2022/component/three/three-chart/model/block-3d-series.mjs +0 -2
- package/esm2022/component/three/three-chart/model/block3d-point.mjs +0 -2
- package/esm2022/component/three/three-chart/model/enum/public-api.mjs +0 -2
- package/esm2022/component/three/three-chart/model/enum/series-3d-type.mjs +0 -6
- package/esm2022/component/three/three-chart/model/i-3d-chart-config.mjs +0 -2
- package/esm2022/component/three/three-chart/model/line-3d-point.mjs +0 -2
- package/esm2022/component/three/three-chart/model/line-3d-series.mjs +0 -2
- package/esm2022/component/three/three-chart/model/public-api.mjs +0 -11
- package/esm2022/component/three/three-chart/scene/scene.component.mjs +0 -47
- package/esm2022/component/three/three-chart/service/chart-3d.service.mjs +0 -86
- package/esm2022/component/three/three-chart/three-chart.component.mjs +0 -46
- package/esm2022/component/toggle/toggle.module.mjs +0 -19
- package/esm2022/component/toolbar/toolbar.module.mjs +0 -20
- package/esm2022/component/tree/tree.module.mjs +0 -24
- package/esm2022/directive/auto-position/auto-position.module.mjs +0 -24
- package/esm2022/directive/click-outside/click-outside.module.mjs +0 -20
- package/esm2022/directive/context-menu/context-menu.module.mjs +0 -24
- package/esm2022/directive/disable-control/disable-control.module.mjs +0 -22
- package/esm2022/directive/drag-drop/drag-drop.module.mjs +0 -39
- package/esm2022/directive/drag-sort/drag-sort.module.mjs +0 -19
- package/esm2022/directive/highlight/highlight.module.mjs +0 -20
- package/esm2022/directive/hint/hint.module.mjs +0 -24
- package/esm2022/directive/let/let.module.mjs +0 -23
- package/esm2022/directive/loader/loader.module.mjs +0 -20
- package/esm2022/directive/no-autofill/no-autofill.module.mjs +0 -18
- package/esm2022/directive/only-number/only-number.module.mjs +0 -18
- package/esm2022/directive/resize-drag/resize-drag.module.mjs +0 -18
- package/esm2022/directive/scroll-into-view/scroll-into-view.module.mjs +0 -23
- package/esm2022/directive/scrollable/scrollable.module.mjs +0 -33
- package/esm2022/directive/teta-template/teta-template.module.mjs +0 -24
- package/esm2022/directive/tooltip/tooltip.module.mjs +0 -20
- package/esm2022/observable/zoneObservable.mjs +0 -15
- package/esm2022/pipe/date-pipe/teta-date-pipe.module.mjs +0 -18
- package/esm2022/pipe/number-pipe/number-pipe.module.mjs +0 -22
- package/esm2022/public-api.mjs +0 -25
- package/observable/zoneObservable.d.ts +0 -5
- package/pipe/date-pipe/teta-date-pipe.module.d.ts +0 -8
- package/pipe/number-pipe/number-pipe.module.d.ts +0 -8
- package/public-api.d.ts +0 -22
|
@@ -1,81 +1,66 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, HostListener, Input, Output, ViewChild, } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, TemplateRef, Type, ViewChild, } from '@angular/core';
|
|
2
2
|
import { filter, takeWhile } from 'rxjs/operators';
|
|
3
3
|
import { Align } from '../../../common/enum/align.enum';
|
|
4
4
|
import { VerticalAlign } from '../../../common/enum/vertical-align.enum';
|
|
5
|
+
import { FilterState } from '../../filter/contarct/filter-state';
|
|
5
6
|
import { FilterType } from '../../filter/enum/filter-type.enum';
|
|
6
7
|
import { EditEvent } from '../enum/edit-event.enum';
|
|
7
8
|
import { EditType } from '../enum/edit-type.enum';
|
|
8
9
|
import { SelectType } from '../enum/select-type.enum';
|
|
9
10
|
import { TableService } from '../service/table.service';
|
|
11
|
+
import { TableBodyComponent } from '../table-body/table-body.component';
|
|
12
|
+
import { ContextMenuDirective } from '../../../directive/context-menu/context-menu.directive';
|
|
13
|
+
import { TableHeadComponent } from '../table-head/table-head.component';
|
|
10
14
|
import * as i0 from "@angular/core";
|
|
11
15
|
import * as i1 from "../service/table.service";
|
|
12
|
-
import * as i2 from "../../../directive/context-menu/context-menu.directive";
|
|
13
|
-
import * as i3 from "../table-head/table-head.component";
|
|
14
|
-
import * as i4 from "../table-body/table-body.component";
|
|
15
16
|
export class TableComponent {
|
|
16
|
-
_svc;
|
|
17
|
-
_elementRef;
|
|
18
|
-
data = [];
|
|
19
|
-
columns = [];
|
|
20
|
-
dict;
|
|
21
|
-
filterOptions;
|
|
22
17
|
set state(state) {
|
|
23
18
|
this._state = state;
|
|
24
19
|
}
|
|
25
|
-
cookieName;
|
|
26
|
-
virtual;
|
|
27
|
-
detailComponent;
|
|
28
|
-
activeRow;
|
|
29
|
-
selectedRows;
|
|
30
|
-
selectType = SelectType.mouse;
|
|
31
|
-
aggregate;
|
|
32
|
-
trackRow = (index, row) => {
|
|
33
|
-
if (row['id']) {
|
|
34
|
-
return row['id'];
|
|
35
|
-
}
|
|
36
|
-
return index;
|
|
37
|
-
};
|
|
38
|
-
trackColumns = (index, column) => {
|
|
39
|
-
return column.name;
|
|
40
|
-
};
|
|
41
|
-
editType = EditType.cell;
|
|
42
|
-
editEvent = EditEvent.doubleClick;
|
|
43
|
-
rowEditable;
|
|
44
|
-
rowClass;
|
|
45
20
|
set scrollToIndex(index) {
|
|
46
21
|
this._svc.scrollToIndex(index);
|
|
47
22
|
}
|
|
48
|
-
showHeadCellMenu = true;
|
|
49
|
-
contextMenu;
|
|
50
|
-
contextMenuOpen;
|
|
51
|
-
contextMenuOpenChange = new EventEmitter();
|
|
52
|
-
stateChange = new EventEmitter();
|
|
53
|
-
bodyLeft = new EventEmitter();
|
|
54
|
-
activeRowChange = new EventEmitter();
|
|
55
|
-
selectedRowsChange = new EventEmitter();
|
|
56
|
-
cellClick = new EventEmitter();
|
|
57
|
-
cellDoubleClick = new EventEmitter();
|
|
58
|
-
cellFocus = new EventEmitter();
|
|
59
|
-
cellKeyDown = new EventEmitter();
|
|
60
|
-
rowLeft = new EventEmitter();
|
|
61
|
-
rowEditStart = new EventEmitter();
|
|
62
|
-
rowEditEnd = new EventEmitter();
|
|
63
|
-
cellEditStart = new EventEmitter();
|
|
64
|
-
cellEditEnd = new EventEmitter();
|
|
65
|
-
valueChange = new EventEmitter();
|
|
66
|
-
tableService = new EventEmitter();
|
|
67
|
-
menu;
|
|
68
|
-
tableClass = true;
|
|
69
|
-
selectedRowsList;
|
|
70
|
-
contextMenuRow;
|
|
71
|
-
verticalAlign = VerticalAlign;
|
|
72
|
-
align = Align;
|
|
73
|
-
_alive = true;
|
|
74
|
-
_headElement;
|
|
75
|
-
_state;
|
|
76
23
|
constructor(_svc, _elementRef) {
|
|
77
24
|
this._svc = _svc;
|
|
78
25
|
this._elementRef = _elementRef;
|
|
26
|
+
this.data = [];
|
|
27
|
+
this.columns = [];
|
|
28
|
+
this.selectType = SelectType.mouse;
|
|
29
|
+
this.trackRow = (index, row) => {
|
|
30
|
+
if (row['id']) {
|
|
31
|
+
return row['id'];
|
|
32
|
+
}
|
|
33
|
+
return index;
|
|
34
|
+
};
|
|
35
|
+
this.trackColumns = (index, column) => {
|
|
36
|
+
return column.name;
|
|
37
|
+
};
|
|
38
|
+
this.editType = EditType.cell;
|
|
39
|
+
this.editEvent = EditEvent.doubleClick;
|
|
40
|
+
this.showHeadCellMenu = true;
|
|
41
|
+
this.contextMenuOpenChange = new EventEmitter();
|
|
42
|
+
this.stateChange = new EventEmitter();
|
|
43
|
+
this.bodyLeft = new EventEmitter();
|
|
44
|
+
this.activeRowChange = new EventEmitter();
|
|
45
|
+
this.selectedRowsChange = new EventEmitter();
|
|
46
|
+
this.cellClick = new EventEmitter();
|
|
47
|
+
this.cellDoubleClick = new EventEmitter();
|
|
48
|
+
this.cellFocus = new EventEmitter();
|
|
49
|
+
this.cellKeyDown = new EventEmitter();
|
|
50
|
+
this.rowLeft = new EventEmitter();
|
|
51
|
+
this.rowEditStart = new EventEmitter();
|
|
52
|
+
this.rowEditEnd = new EventEmitter();
|
|
53
|
+
this.cellEditStart = new EventEmitter();
|
|
54
|
+
this.cellEditEnd = new EventEmitter();
|
|
55
|
+
this.valueChange = new EventEmitter();
|
|
56
|
+
this.tableService = new EventEmitter();
|
|
57
|
+
this.tableClass = true;
|
|
58
|
+
this.verticalAlign = VerticalAlign;
|
|
59
|
+
this.align = Align;
|
|
60
|
+
this._alive = true;
|
|
61
|
+
this.onScroll = event => {
|
|
62
|
+
this._headElement.scrollLeft = event.target.scrollLeft;
|
|
63
|
+
};
|
|
79
64
|
this._svc.state
|
|
80
65
|
.pipe(takeWhile(() => this._alive), filter(state => state !== this._state))
|
|
81
66
|
.subscribe((state) => this.stateChange.next(state));
|
|
@@ -385,16 +370,17 @@ export class TableComponent {
|
|
|
385
370
|
}
|
|
386
371
|
return null;
|
|
387
372
|
}
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
};
|
|
391
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: TableComponent, deps: [{ token: i1.TableService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
392
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: TableComponent, selector: "teta-table", inputs: { data: "data", columns: "columns", dict: "dict", filterOptions: "filterOptions", state: "state", cookieName: "cookieName", virtual: "virtual", detailComponent: "detailComponent", activeRow: "activeRow", selectedRows: "selectedRows", selectType: "selectType", aggregate: "aggregate", trackRow: "trackRow", trackColumns: "trackColumns", editType: "editType", editEvent: "editEvent", rowEditable: "rowEditable", rowClass: "rowClass", scrollToIndex: "scrollToIndex", showHeadCellMenu: "showHeadCellMenu", contextMenu: "contextMenu", contextMenuOpen: "contextMenuOpen" }, outputs: { contextMenuOpenChange: "contextMenuOpenChange", stateChange: "stateChange", bodyLeft: "bodyLeft", activeRowChange: "activeRowChange", selectedRowsChange: "selectedRowsChange", cellClick: "cellClick", cellDoubleClick: "cellDoubleClick", cellFocus: "cellFocus", cellKeyDown: "cellKeyDown", rowLeft: "rowLeft", rowEditStart: "rowEditStart", rowEditEnd: "rowEditEnd", cellEditStart: "cellEditStart", cellEditEnd: "cellEditEnd", valueChange: "valueChange", tableService: "tableService" }, host: { listeners: { "document:click": "handleClickOutsideAnyRow($event)", "focusin": "focusIn($event)", "dblclick": "dblclick($event)", "keydown": "keydown($event)", "mousedown": "mousedown($event)" }, properties: { "class.table": "this.tableClass" } }, providers: [TableService], viewQueries: [{ propertyName: "menu", first: true, predicate: ["contextMenu"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class='column column_auto'>\n <teta-table-head\n style='z-index: 1'\n [selectType]='selectType'\n [showHeadCellMenu]='showHeadCellMenu'></teta-table-head>\n <div class='column column_auto position-relative'\n style='z-index: 0'\n [tetaContextMenu]='contextMenu'\n [verticalAlign]='verticalAlign.auto'\n [align]='align.auto'\n [appendToBody]='true'\n [data]='contextMenuRow'\n [open]='contextMenuOpen'\n (openChange)='setContextMenuOpen($event)'>\n <teta-table-body\n (contextmenu)='setContextMenuRow($event)'\n (scrollChange)='onScroll($event)'\n [aggregate]='aggregate'\n [virtual]='virtual'\n [activeRow]='activeRow'\n [trackRow]='trackRow'\n [trackColumns]='trackColumns'\n [selectedRows]='selectedRowsList'\n [additionalComponent]='detailComponent'\n [selectType]='selectType'\n [rowClass]='rowClass'>\n <ng-content></ng-content>\n </teta-table-body>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.ContextMenuDirective, selector: "[tetaContextMenu]", inputs: ["tetaContextMenu", "autoCloseIgnore"] }, { kind: "component", type: i3.TableHeadComponent, selector: "teta-table-head", inputs: ["selectType", "showHeadCellMenu"] }, { kind: "component", type: i4.TableBodyComponent, selector: "teta-table-body", inputs: ["virtual", "activeRow", "selectedRows", "additionalComponent", "aggregate", "selectType", "rowClass", "trackRow", "trackColumns"], outputs: ["scrollChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
373
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: TableComponent, deps: [{ token: i1.TableService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
374
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: TableComponent, isStandalone: true, selector: "teta-table", inputs: { data: "data", columns: "columns", dict: "dict", filterOptions: "filterOptions", state: "state", cookieName: "cookieName", virtual: "virtual", detailComponent: "detailComponent", activeRow: "activeRow", selectedRows: "selectedRows", selectType: "selectType", aggregate: "aggregate", trackRow: "trackRow", trackColumns: "trackColumns", editType: "editType", editEvent: "editEvent", rowEditable: "rowEditable", rowClass: "rowClass", scrollToIndex: "scrollToIndex", showHeadCellMenu: "showHeadCellMenu", contextMenu: "contextMenu", contextMenuOpen: "contextMenuOpen" }, outputs: { contextMenuOpenChange: "contextMenuOpenChange", stateChange: "stateChange", bodyLeft: "bodyLeft", activeRowChange: "activeRowChange", selectedRowsChange: "selectedRowsChange", cellClick: "cellClick", cellDoubleClick: "cellDoubleClick", cellFocus: "cellFocus", cellKeyDown: "cellKeyDown", rowLeft: "rowLeft", rowEditStart: "rowEditStart", rowEditEnd: "rowEditEnd", cellEditStart: "cellEditStart", cellEditEnd: "cellEditEnd", valueChange: "valueChange", tableService: "tableService" }, host: { listeners: { "document:click": "handleClickOutsideAnyRow($event)", "focusin": "focusIn($event)", "dblclick": "dblclick($event)", "keydown": "keydown($event)", "mousedown": "mousedown($event)" }, properties: { "class.table": "this.tableClass" } }, providers: [TableService], viewQueries: [{ propertyName: "menu", first: true, predicate: ["contextMenu"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class='column column_auto'>\n <teta-table-head\n style='z-index: 1'\n [selectType]='selectType'\n [showHeadCellMenu]='showHeadCellMenu'></teta-table-head>\n <div class='column column_auto position-relative'\n style='z-index: 0'\n [tetaContextMenu]='contextMenu'\n [verticalAlign]='verticalAlign.auto'\n [align]='align.auto'\n [appendToBody]='true'\n [data]='contextMenuRow'\n [open]='contextMenuOpen'\n (openChange)='setContextMenuOpen($event)'>\n <teta-table-body\n (contextmenu)='setContextMenuRow($event)'\n (scrollChange)='onScroll($event)'\n [aggregate]='aggregate'\n [virtual]='virtual'\n [activeRow]='activeRow'\n [trackRow]='trackRow'\n [trackColumns]='trackColumns'\n [selectedRows]='selectedRowsList'\n [additionalComponent]='detailComponent'\n [selectType]='selectType'\n [rowClass]='rowClass'>\n <ng-content></ng-content>\n </teta-table-body>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: TableHeadComponent, selector: "teta-table-head", inputs: ["selectType", "showHeadCellMenu"] }, { kind: "directive", type: ContextMenuDirective, selector: "[tetaContextMenu]", inputs: ["tetaContextMenu", "autoCloseIgnore"] }, { kind: "component", type: TableBodyComponent, selector: "teta-table-body", inputs: ["virtual", "activeRow", "selectedRows", "additionalComponent", "aggregate", "selectType", "rowClass", "trackRow", "trackColumns"], outputs: ["scrollChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
393
375
|
}
|
|
394
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
376
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: TableComponent, decorators: [{
|
|
395
377
|
type: Component,
|
|
396
|
-
args: [{ selector: 'teta-table', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableService],
|
|
397
|
-
|
|
378
|
+
args: [{ selector: 'teta-table', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableService], standalone: true, imports: [
|
|
379
|
+
TableHeadComponent,
|
|
380
|
+
ContextMenuDirective,
|
|
381
|
+
TableBodyComponent,
|
|
382
|
+
], template: "<div class='column column_auto'>\n <teta-table-head\n style='z-index: 1'\n [selectType]='selectType'\n [showHeadCellMenu]='showHeadCellMenu'></teta-table-head>\n <div class='column column_auto position-relative'\n style='z-index: 0'\n [tetaContextMenu]='contextMenu'\n [verticalAlign]='verticalAlign.auto'\n [align]='align.auto'\n [appendToBody]='true'\n [data]='contextMenuRow'\n [open]='contextMenuOpen'\n (openChange)='setContextMenuOpen($event)'>\n <teta-table-body\n (contextmenu)='setContextMenuRow($event)'\n (scrollChange)='onScroll($event)'\n [aggregate]='aggregate'\n [virtual]='virtual'\n [activeRow]='activeRow'\n [trackRow]='trackRow'\n [trackColumns]='trackColumns'\n [selectedRows]='selectedRowsList'\n [additionalComponent]='detailComponent'\n [selectType]='selectType'\n [rowClass]='rowClass'>\n <ng-content></ng-content>\n </teta-table-body>\n </div>\n</div>\n" }]
|
|
383
|
+
}], ctorParameters: () => [{ type: i1.TableService }, { type: i0.ElementRef }], propDecorators: { data: [{
|
|
398
384
|
type: Input
|
|
399
385
|
}], columns: [{
|
|
400
386
|
type: Input
|
|
@@ -492,4 +478,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
|
|
|
492
478
|
type: HostListener,
|
|
493
479
|
args: ['mousedown', ['$event']]
|
|
494
480
|
}] } });
|
|
495
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC90YWJsZS90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBSU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJbkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUV6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFPaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7QUFTeEQsTUFBTSxPQUFPLGNBQWM7SUE2RWY7SUFDQTtJQTNFRCxJQUFJLEdBQVEsRUFBRSxDQUFDO0lBQ2YsT0FBTyxHQUFrQixFQUFFLENBQUM7SUFDNUIsSUFBSSxDQUE4QjtJQUNsQyxhQUFhLENBQThCO0lBRXBELElBQ0ksS0FBSyxDQUFDLEtBQWtCO1FBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFUSxVQUFVLENBQVM7SUFD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QU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDcUMsSUFBSTtzQkFBL0MsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNHLFVBQVU7c0JBQXRELFdBQVc7dUJBQUMsYUFBYTtnQkFrRWtCLHdCQUF3QjtzQkFBbkUsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkEyQ0wsT0FBTztzQkFBM0MsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBY25DLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBaUJwQyxPQUFPO3NCQUROLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQTJGSSxTQUFTO3NCQUEvQyxZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFR5cGUsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgSURpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1kaWN0aW9uYXJ5JztcbmltcG9ydCB7IElJZE5hbWUgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1pZC1uYW1lJztcbmltcG9ydCB7IEFsaWduIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2VudW0vYWxpZ24uZW51bSc7XG5pbXBvcnQgeyBWZXJ0aWNhbEFsaWduIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2VudW0vdmVydGljYWwtYWxpZ24uZW51bSc7XG5pbXBvcnQgeyBGaWx0ZXJTdGF0ZSB9IGZyb20gJy4uLy4uL2ZpbHRlci9jb250YXJjdC9maWx0ZXItc3RhdGUnO1xuaW1wb3J0IHsgRmlsdGVyVHlwZSB9IGZyb20gJy4uLy4uL2ZpbHRlci9lbnVtL2ZpbHRlci10eXBlLmVudW0nO1xuaW1wb3J0IHsgRGV0YWlsQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uL2Jhc2UvZGV0YWlsLWNvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7IElDZWxsQ29vcmRpbmF0ZXMgfSBmcm9tICcuLi9jb250cmFjdC9pLWNlbGwtY29vcmRpbmF0ZXMnO1xuaW1wb3J0IHsgSUNlbGxFdmVudCB9IGZyb20gJy4uL2NvbnRyYWN0L2ktY2VsbC1ldmVudCc7XG5pbXBvcnQgeyBJQ2VsbEluc3RhbmNlLCBJQ2VsbEluc3RhbmNlRXZlbnQgfSBmcm9tICcuLi9jb250cmFjdC9pLWNlbGwtaW5zdGFuY2UnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW4gfSBmcm9tICcuLi9jb250cmFjdC90YWJsZS1jb2x1bW4nO1xuaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tICcuLi9jb250cmFjdC90YWJsZS1yb3cnO1xuaW1wb3J0IHsgRWRpdEV2ZW50IH0gZnJvbSAnLi4vZW51bS9lZGl0LWV2ZW50LmVudW0nO1xuaW1wb3J0IHsgRWRpdFR5cGUgfSBmcm9tICcuLi9lbnVtL2VkaXQtdHlwZS5lbnVtJztcbmltcG9ydCB7IFNlbGVjdFR5cGUgfSBmcm9tICcuLi9lbnVtL3NlbGVjdC10eXBlLmVudW0nO1xuaW1wb3J0IHsgVGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS90YWJsZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGV0YS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtUYWJsZVNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudDxUPlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXNcbntcbiAgQElucHV0KCkgZGF0YTogVFtdID0gW107XG4gIEBJbnB1dCgpIGNvbHVtbnM6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgQElucHV0KCkgZGljdDogSURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+O1xuICBASW5wdXQoKSBmaWx0ZXJPcHRpb25zOiBJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT47XG5cbiAgQElucHV0KClcbiAgc2V0IHN0YXRlKHN0YXRlOiBGaWx0ZXJTdGF0ZSkge1xuICAgIHRoaXMuX3N0YXRlID0gc3RhdGU7XG4gIH1cblxuICBASW5wdXQoKSBjb29raWVOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHZpcnR1YWw6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRldGFpbENvbXBvbmVudDogVHlwZTxEZXRhaWxDb21wb25lbnRCYXNlPFQ+PjtcbiAgQElucHV0KCkgYWN0aXZlUm93OiBUO1xuICBASW5wdXQoKSBzZWxlY3RlZFJvd3M6IFRbXTtcbiAgQElucHV0KCkgc2VsZWN0VHlwZTogU2VsZWN0VHlwZSA9IFNlbGVjdFR5cGUubW91c2U7XG4gIEBJbnB1dCgpIGFnZ3JlZ2F0ZTogYm9vbGVhbjtcbiAgQElucHV0KCkgdHJhY2tSb3c6IChpbmRleDogbnVtYmVyLCByb3c6IFQpID0+IGFueSA9IChcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHJvdzogVFxuICApID0+IHtcbiAgICBpZiAocm93WydpZCddKSB7XG4gICAgICByZXR1cm4gcm93WydpZCddO1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXg7XG4gIH07XG4gIEBJbnB1dCgpIHRyYWNrQ29sdW1uczogKGluZGV4OiBudW1iZXIsIGNvbHVtbjogVGFibGVDb2x1bW4pID0+IGFueSA9IChcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGNvbHVtbjogVGFibGVDb2x1bW5cbiAgKSA9PiB7XG4gICAgcmV0dXJuIGNvbHVtbi5uYW1lO1xuICB9O1xuICBASW5wdXQoKSBlZGl0VHlwZTogRWRpdFR5cGUgPSBFZGl0VHlwZS5jZWxsO1xuICBASW5wdXQoKSBlZGl0RXZlbnQ6IEVkaXRFdmVudCA9IEVkaXRFdmVudC5kb3VibGVDbGljaztcbiAgQElucHV0KCkgcm93RWRpdGFibGU6IGJvb2xlYW4gfCAoKHJvdzogVCkgPT4gYm9vbGVhbik7XG4gIEBJbnB1dCgpIHJvd0NsYXNzOiAocm93OiBULCBpbmRleD86IG51bWJlcikgPT4gc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHNldCBzY3JvbGxUb0luZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLl9zdmMuc2Nyb2xsVG9JbmRleChpbmRleCk7XG4gIH1cblxuICBASW5wdXQoKSBzaG93SGVhZENlbGxNZW51ID0gdHJ1ZTtcbiAgQElucHV0KCkgY29udGV4dE1lbnU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIGNvbnRleHRNZW51T3BlbjogYm9vbGVhbjtcbiAgQE91dHB1dCgpIGNvbnRleHRNZW51T3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBAT3V0cHV0KClcbiAgc3RhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxGaWx0ZXJTdGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlclN0YXRlPigpO1xuICBAT3V0cHV0KCkgYm9keUxlZnQgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBPdXRwdXQoKSBhY3RpdmVSb3dDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNlbGVjdGVkUm93c0NoYW5nZTogRXZlbnRFbWl0dGVyPFRbXT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBjZWxsQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2VFdmVudDxUPj4oKTtcbiAgQE91dHB1dCgpIGNlbGxEb3VibGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZUV2ZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgY2VsbEZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2VsbEluc3RhbmNlRXZlbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBjZWxsS2V5RG93biA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZUV2ZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgcm93TGVmdCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcbiAgQE91dHB1dCgpIHJvd0VkaXRTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZTxUPj4oKTtcbiAgQE91dHB1dCgpIHJvd0VkaXRFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlUm93PFQ+PigpO1xuICBAT3V0cHV0KCkgY2VsbEVkaXRTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZTxUPj4oKTtcbiAgQE91dHB1dCgpIGNlbGxFZGl0RW5kID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2VsbEluc3RhbmNlPFQ+PigpO1xuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2U8VD4+KCk7XG4gIEBPdXRwdXQoKSB0YWJsZVNlcnZpY2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlU2VydmljZTxUPj4oKTtcbiAgQFZpZXdDaGlsZCgnY29udGV4dE1lbnUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBtZW51OiBFbGVtZW50UmVmO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRhYmxlJykgcHJpdmF0ZSByZWFkb25seSB0YWJsZUNsYXNzID0gdHJ1ZTtcblxuICBzZWxlY3RlZFJvd3NMaXN0OiBUW107XG4gIGNvbnRleHRNZW51Um93OiBUO1xuICB2ZXJ0aWNhbEFsaWduID0gVmVydGljYWxBbGlnbjtcbiAgYWxpZ24gPSBBbGlnbjtcbiAgcHJpdmF0ZSBfYWxpdmUgPSB0cnVlO1xuICBwcml2YXRlIF9oZWFkRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3N0YXRlOiBGaWx0ZXJTdGF0ZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9zdmM6IFRhYmxlU2VydmljZTxUPixcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmXG4gICkge1xuICAgIHRoaXMuX3N2Yy5zdGF0ZVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSksXG4gICAgICAgIGZpbHRlcihzdGF0ZSA9PiBzdGF0ZSAhPT0gdGhpcy5fc3RhdGUpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChzdGF0ZTogRmlsdGVyU3RhdGUpID0+IHRoaXMuc3RhdGVDaGFuZ2UubmV4dChzdGF0ZSkpO1xuXG4gICAgdGhpcy5fc3ZjLmVkaXRDZWxsU3RhcnRcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKChpdGVtOiBJQ2VsbEV2ZW50KSA9PlxuICAgICAgICB0aGlzLmNlbGxFZGl0U3RhcnQuZW1pdCh0aGlzLl9zdmMuZ2V0Q2VsbEluc3RhbmNlKGl0ZW0pKVxuICAgICAgKTtcblxuICAgIHRoaXMuX3N2Yy5lZGl0Q2VsbFN0b3BcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKChpdGVtOiBJQ2VsbENvb3JkaW5hdGVzKSA9PlxuICAgICAgICB0aGlzLmNlbGxFZGl0RW5kLmVtaXQodGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShpdGVtKSlcbiAgICAgICk7XG5cbiAgICB0aGlzLl9zdmMuZWRpdFJvd1N0YXJ0XG4gICAgICAucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoaXRlbTogSUNlbGxFdmVudCkgPT5cbiAgICAgICAgdGhpcy5yb3dFZGl0U3RhcnQuZW1pdCh0aGlzLl9zdmMuZ2V0Q2VsbEluc3RhbmNlKGl0ZW0pKVxuICAgICAgKTtcblxuICAgIHRoaXMuX3N2Yy5lZGl0Um93U3RvcFxuICAgICAgLnBpcGUodGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW06IElDZWxsQ29vcmRpbmF0ZXMpID0+XG4gICAgICAgIHRoaXMucm93RWRpdEVuZC5lbWl0KHRoaXMuX3N2Yy5nZXRSb3dCeUluZGV4KGl0ZW0/LnJvdykpXG4gICAgICApO1xuXG4gICAgdGhpcy5fc3ZjLnNlbGVjdGVkUm93c1xuICAgICAgLnBpcGUodGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW1zOiBUW10pID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NMaXN0ID0gaXRlbXM7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLmVtaXQoaXRlbXMpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuYWN0aXZlUm93XG4gICAgICAucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoaXRlbTogVCkgPT4ge1xuICAgICAgICB0aGlzLmFjdGl2ZVJvdyA9IGl0ZW07XG4gICAgICAgIHRoaXMuYWN0aXZlUm93Q2hhbmdlLmVtaXQoaXRlbSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX3N2Yy52YWx1ZUNoYW5nZWRcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKChjb29yZGluYXRlczogSUNlbGxDb29yZGluYXRlcykgPT4ge1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShjb29yZGluYXRlcykpO1xuICAgICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pIGhhbmRsZUNsaWNrT3V0c2lkZUFueVJvdyhcbiAgICBldmVudDogTW91c2VFdmVudFxuICApIHtcbiAgICBjb25zdCBjb29yZGluYXRlcyA9IHRoaXMuZ2V0Q29vcmRpbmF0ZXMoZXZlbnQpO1xuICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Um93KGV2ZW50KTtcbiAgICBjb25zdCBldmVudElzT25Sb3cgPSB0aGlzLmV2ZW50SXNPblJvdyhldmVudCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoY29vcmRpbmF0ZXMpIHtcbiAgICAgICAgdGhpcy5jZWxsQ2xpY2suZW1pdCh7XG4gICAgICAgICAgLi4udGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShjb29yZGluYXRlcyksXG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5lZGl0RXZlbnQgPT09IEVkaXRFdmVudC5jbGljaykge1xuICAgICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl9zdmMuY3VycmVudEVkaXRDZWxsICYmXG4gICAgICAgICAgICAoY29vcmRpbmF0ZXMucm93ICE9PSB0aGlzLl9zdmMuY3VycmVudEVkaXRDZWxsLnJvdyB8fFxuICAgICAgICAgICAgICBjb29yZGluYXRlcy5jb2x1bW4gIT09IHRoaXMuX3N2Yy5jdXJyZW50RWRpdENlbGwuY29sdW1uKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zdGFydEVkaXRSb3dPckNlbGwobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocm93KSB7XG4gICAgICAgIGlmIChldmVudC5jdHJsS2V5KSB7XG4gICAgICAgICAgdGhpcy5fc3ZjLnNlbGVjdE9yRGVzZWxlY3RSb3cocm93LmRhdGEpO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgdGhpcy5fc3ZjLnNlbGVjdFJhbmdlKHJvdy5kYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9zdmMuc2VsZWN0Um93cyhbcm93LmRhdGFdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFldmVudElzT25Sb3cgJiYgIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuZWRpdFR5cGUgPT09IEVkaXRUeXBlLnJvdykge1xuICAgICAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRSb3cobnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fc3ZjLnN0YXJ0RWRpdENlbGwobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzaW4nLCBbJyRldmVudCddKSBmb2N1c0luKGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgY29uc3QgY29vcmRpbmF0ZXMgPSB0aGlzLmdldENvb3JkaW5hdGVzKGV2ZW50KTtcbiAgICBpZiAoY29vcmRpbmF0ZXMpIHtcbiAgICAgIHRoaXMuY2VsbEZvY3VzLmVtaXQoe1xuICAgICAgICAuLi50aGlzLl9zdmMuZ2V0Q2VsbEluc3RhbmNlKGNvb3JkaW5hdGVzKSxcbiAgICAgICAgZXZlbnQsXG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmVkaXRFdmVudCA9PT0gRWRpdEV2ZW50LmZvY3VzKSB7XG4gICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkYmxjbGljaycsIFsnJGV2ZW50J10pXG4gIGRibGNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgY29uc3QgY29vcmRpbmF0ZXMgPSB0aGlzLmdldENvb3JkaW5hdGVzKGV2ZW50KTtcbiAgICBpZiAoY29vcmRpbmF0ZXMpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNlbGxEb3VibGVDbGljay5lbWl0KHtcbiAgICAgICAgICAuLi50aGlzLl9zdmMuZ2V0Q2VsbEluc3RhbmNlKGNvb3JkaW5hdGVzKSxcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmVkaXRFdmVudCA9PT0gRWRpdEV2ZW50LmRvdWJsZUNsaWNrKSB7XG4gICAgICAgICAgdGhpcy5zdGFydEVkaXRSb3dPckNlbGwoY29vcmRpbmF0ZXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAga2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldmVudC5jdHJsS2V5KSB7XG4gICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0tleUEnKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX3N2Yy5zZWxlY3RBbGwoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIHRoaXMuX3N2Yy5kZXNlbGVjdEFsbCgpO1xuICAgICAgaWYgKHRoaXMuZWRpdFR5cGUgPT09IEVkaXRUeXBlLnJvdykge1xuICAgICAgICB0aGlzLl9zdmMuc3RhcnRFZGl0Um93KG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc3ZjLnN0YXJ0RWRpdENlbGwobnVsbCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gdGhpcy5nZXRDb29yZGluYXRlcyhldmVudCk7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgaWYgKHRoaXMuZWRpdFR5cGUgPT09IEVkaXRUeXBlLnJvdykge1xuICAgICAgICB0aGlzLl9zdmMuc3RhcnRFZGl0Um93KG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuX3N2Yy5jdXJyZW50RWRpdENlbGwpIHtcbiAgICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0TmV4dFJvd0NlbGwoY29vcmRpbmF0ZXMpO1xuICAgICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKHtcbiAgICAgICAgICAgICAgcm93OiB0YXJnZXQucm93LFxuICAgICAgICAgICAgICBjb2x1bW46IHRhcmdldC5jb2x1bW4sXG4gICAgICAgICAgICAgIGV2ZW50OiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc3ZjLnN0YXJ0RWRpdENlbGwobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb29yZGluYXRlcykge1xuICAgICAgdGhpcy5jZWxsS2V5RG93bi5lbWl0KHtcbiAgICAgICAgLi4udGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShjb29yZGluYXRlcyksXG4gICAgICAgIGV2ZW50LFxuICAgICAgfSk7XG4gICAgICBpZiAoZXZlbnQua2V5ICYmIChldmVudC5rZXkubGVuZ3RoID09PSAxIHx8IGV2ZW50LmtleSA9PT0gJ0RlbGV0ZScpKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuX3N2Yy5nZXRDb2x1bW5CeU5hbWUoY29vcmRpbmF0ZXMuY29sdW1uKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbHVtbi5maWx0ZXJUeXBlICE9PSBGaWx0ZXJUeXBlLm51bWJlciB8fFxuICAgICAgICAgIGlzRmluaXRlKGV2ZW50LmtleSBhcyBhbnkpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKHtcbiAgICAgICAgICAgIHJvdzogY29vcmRpbmF0ZXMucm93LFxuICAgICAgICAgICAgY29sdW1uOiBjb29yZGluYXRlcy5jb2x1bW4sXG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInICYmIHRoaXMuX3N2Yy5jdXJyZW50RWRpdENlbGwpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgbGV0IHRhcmdldCA9IHRoaXMuX3N2Yy5nZXROZXh0RWRpdGFibGVDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fc3ZjLmdldFByZXZpb3VzRWRpdGFibGVDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgdGhpcy5zdGFydEVkaXRSb3dPckNlbGwoe1xuICAgICAgICAgICAgcm93OiB0YXJnZXQucm93LFxuICAgICAgICAgICAgY29sdW1uOiB0YXJnZXQuY29sdW1uLFxuICAgICAgICAgICAgZXZlbnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLl9zdmMuY3VycmVudEVkaXRDZWxsKSB7XG4gICAgICAgIGxldCB0YXJnZXQ7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgIHRhcmdldCA9IHRoaXMuX3N2Yy5nZXROZXh0Q2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0UHJldmlvdXNDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0UHJldmlvdXNSb3dDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAgIHRhcmdldCA9IHRoaXMuX3N2Yy5nZXROZXh0Um93Q2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ2V0Q2VsbEVsZW1lbnQodGFyZ2V0KTtcbiAgICAgICAgICBlbGVtZW50Py5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSkgbW91c2Vkb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmJ1dHRvbiA9PT0gMikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdmMucmVzdG9yZVN0YXRlKCk7XG4gICAgdGhpcy5fc3ZjLnJlc3RvcmVIaWRkZW5Db2x1bW5zKCk7XG4gICAgdGhpcy50YWJsZVNlcnZpY2UuZW1pdCh0aGlzLl9zdmMpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2hlYWRFbGVtZW50ID1cbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudGFibGUtaGVhZCcpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fYWxpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdlZGl0VHlwZScpKSB7XG4gICAgICB0aGlzLl9zdmMuZWRpdFR5cGUgPSB0aGlzLmVkaXRUeXBlO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdzZWxlY3RUeXBlJykpIHtcbiAgICAgIHRoaXMuX3N2Yy5zZWxlY3RUeXBlID0gdGhpcy5zZWxlY3RUeXBlO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdzZWxlY3RlZFJvd3MnKSkge1xuICAgICAgdGhpcy5fc3ZjLnNlbGVjdFJvd3ModGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdyb3dFZGl0YWJsZScpKSB7XG4gICAgICB0aGlzLl9zdmMucm93RWRpdGFibGUgPSB0aGlzLnJvd0VkaXRhYmxlO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdjb29raWVOYW1lJykpIHtcbiAgICAgIHRoaXMuX3N2Yy5zZXRDb29raWVOYW1lKHRoaXMuY29va2llTmFtZSk7XG4gICAgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2NvbHVtbnMnKSkge1xuICAgICAgaWYgKHRoaXMuY29sdW1ucyAhPT0gbnVsbCAmJiB0aGlzLmNvbHVtbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9zdmMuc2V0Q29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdkYXRhJykpIHtcbiAgICAgIHRoaXMuX3N2Yy5zZXREYXRhKHRoaXMuZGF0YSk7XG4gICAgICB0aGlzLl9zdmMuc2VsZWN0Um93cyhcbiAgICAgICAgdGhpcy5kYXRhPy5maWx0ZXIocm93ID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFJvd3M/LnNvbWUoXG4gICAgICAgICAgICBzZWxlY3RlZFJvdyA9PlxuICAgICAgICAgICAgICB0aGlzLnRyYWNrUm93KHRoaXMuX3N2Yy5nZXRSb3dJbmRleChzZWxlY3RlZFJvdyksIHNlbGVjdGVkUm93KSA9PT1cbiAgICAgICAgICAgICAgdGhpcy50cmFja1Jvdyh0aGlzLl9zdmMuZ2V0Um93SW5kZXgocm93KSwgcm93KVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdkaWN0JykpIHtcbiAgICAgIHRoaXMuX3N2Yy5zZXREaWN0KHRoaXMuZGljdCk7XG4gICAgICB0aGlzLl9zdmMuc2V0RmlsdGVyT3B0aW9ucyh0aGlzLmRpY3QpO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdmaWx0ZXJPcHRpb25zJykpIHtcbiAgICAgIHRoaXMuX3N2Yy5zZXRGaWx0ZXJPcHRpb25zKHRoaXMuZmlsdGVyT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ3RyYWNrUm93JykpIHtcbiAgICAgIHRoaXMuX3N2Yy50cmFja1JvdyA9IHRoaXMudHJhY2tSb3c7XG4gICAgfVxuICB9XG5cbiAgc2V0Q29udGV4dE1lbnVPcGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5jb250ZXh0TWVudU9wZW4gPSB2YWx1ZTtcbiAgICB0aGlzLmNvbnRleHRNZW51T3BlbkNoYW5nZS5lbWl0KHRoaXMuY29udGV4dE1lbnVPcGVuKTtcbiAgfVxuXG4gIHNldENvbnRleHRNZW51Um93KGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5jb250ZXh0TWVudVJvdyA9IG51bGw7XG4gICAgY29uc3Qgcm93RWxlbWVudCA9IHRoaXMuX3N2Yy5nZXRFdmVudFJvdyhldmVudCk7XG4gICAgaWYgKHJvd0VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHJvd0luZGV4ID0gcGFyc2VJbnQocm93RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm93JyksIDEwKTtcbiAgICAgIGlmIChyb3dJbmRleCA+PSAwKSB7XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnVSb3cgPSB0aGlzLl9zdmMuZ2V0Um93QnlJbmRleChyb3dJbmRleCkuZGF0YTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0RWRpdFJvd09yQ2VsbChjb29yZGluYXRlczogSUNlbGxFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVkaXRUeXBlID09PSBFZGl0VHlwZS5yb3cpIHtcbiAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRSb3coY29vcmRpbmF0ZXMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5lZGl0VHlwZSA9PT0gRWRpdFR5cGUuY2VsbCkge1xuICAgICAgdGhpcy5fc3ZjLnN0YXJ0RWRpdENlbGwoY29vcmRpbmF0ZXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2VsbEVsZW1lbnQoY29vcmRpbmF0ZXM6IElDZWxsQ29vcmRpbmF0ZXMpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgIGB0ZXRhLWNlbGxbZGF0YS1yb3c9XCIke2Nvb3JkaW5hdGVzLnJvd31cIl1bZGF0YS1jb2x1bW49XCIke2Nvb3JkaW5hdGVzLmNvbHVtbn1cIl1gXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXZlbnRJc09uUm93KGV2ZW50OiBFdmVudCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJvdyA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpLmZpbmQoKHRhcmdldDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgIHJldHVybiB0YXJnZXQ/LmdldEF0dHJpYnV0ZSAmJiB0YXJnZXQ/LmdldEF0dHJpYnV0ZSgnZGF0YS1yb3cnKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcm93ICYmIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhyb3cpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb29yZGluYXRlcyhldmVudDogRXZlbnQpOiBJQ2VsbEV2ZW50IHwgbnVsbCB7XG4gICAgaWYgKGV2ZW50LmNvbXBvc2VkUGF0aCgpLmluZGV4T2YodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSA8IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBjZWxsID0gdGhpcy5fc3ZjLmdldEV2ZW50Q2VsbChldmVudCk7XG4gICAgaWYgKGNlbGwpIHtcbiAgICAgIGNvbnN0IHJvd0luZGV4ID0gcGFyc2VJbnQoY2VsbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm93JyksIDEwKTtcbiAgICAgIGNvbnN0IGNvbHVtbk5hbWUgPSBjZWxsLmdldEF0dHJpYnV0ZSgnZGF0YS1jb2x1bW4nKTtcbiAgICAgIGlmIChyb3dJbmRleCA+PSAwICYmIGNvbHVtbk5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByb3c6IHJvd0luZGV4LFxuICAgICAgICAgIGNvbHVtbjogY29sdW1uTmFtZSxcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldFJvdyhldmVudDogRXZlbnQpOiBUYWJsZVJvdzxUPiB8IG51bGwge1xuICAgIGlmIChldmVudC5jb21wb3NlZFBhdGgoKS5pbmRleE9mKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkgPCAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgcm93RWxlbWVudCA9IHRoaXMuX3N2Yy5nZXRFdmVudFJvdyhldmVudCk7XG4gICAgaWYgKHJvd0VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHJvd0luZGV4ID0gcGFyc2VJbnQocm93RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm93JyksIDEwKTtcbiAgICAgIGlmIChyb3dJbmRleCA+PSAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdmMuZ2V0Um93QnlJbmRleChyb3dJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgb25TY3JvbGwgPSBldmVudCA9PiB7XG4gICAgdGhpcy5faGVhZEVsZW1lbnQuc2Nyb2xsTGVmdCA9IGV2ZW50LnRhcmdldC5zY3JvbGxMZWZ0O1xuICB9O1xuXG4gIC8vIHByaXZhdGUgZ2V0U2VsZWN0ZWRUZXh0KCkge1xuICAvLyAgIGxldCB0ZXh0ID0gJyc7XG4gIC8vICAgaWYgKHR5cGVvZiB3aW5kb3cuZ2V0U2VsZWN0aW9uICE9ICd1bmRlZmluZWQnKSB7XG4gIC8vICAgICB0ZXh0ID0gd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCk7XG4gIC8vICAgfVxuICAvLyAgIHJldHVybiB0ZXh0O1xuICAvLyB9XG59XG4iLCI8ZGl2IGNsYXNzPSdjb2x1bW4gY29sdW1uX2F1dG8nPlxuICA8dGV0YS10YWJsZS1oZWFkXG4gICAgc3R5bGU9J3otaW5kZXg6IDEnXG4gICAgW3NlbGVjdFR5cGVdPSdzZWxlY3RUeXBlJ1xuICAgIFtzaG93SGVhZENlbGxNZW51XT0nc2hvd0hlYWRDZWxsTWVudSc+PC90ZXRhLXRhYmxlLWhlYWQ+XG4gIDxkaXYgY2xhc3M9J2NvbHVtbiBjb2x1bW5fYXV0byBwb3NpdGlvbi1yZWxhdGl2ZSdcbiAgICAgICBzdHlsZT0nei1pbmRleDogMCdcbiAgICAgICBbdGV0YUNvbnRleHRNZW51XT0nY29udGV4dE1lbnUnXG4gICAgICAgW3ZlcnRpY2FsQWxpZ25dPSd2ZXJ0aWNhbEFsaWduLmF1dG8nXG4gICAgICAgW2FsaWduXT0nYWxpZ24uYXV0bydcbiAgICAgICBbYXBwZW5kVG9Cb2R5XT0ndHJ1ZSdcbiAgICAgICBbZGF0YV09J2NvbnRleHRNZW51Um93J1xuICAgICAgIFtvcGVuXT0nY29udGV4dE1lbnVPcGVuJ1xuICAgICAgIChvcGVuQ2hhbmdlKT0nc2V0Q29udGV4dE1lbnVPcGVuKCRldmVudCknPlxuICAgIDx0ZXRhLXRhYmxlLWJvZHlcbiAgICAgIChjb250ZXh0bWVudSk9J3NldENvbnRleHRNZW51Um93KCRldmVudCknXG4gICAgICAoc2Nyb2xsQ2hhbmdlKT0nb25TY3JvbGwoJGV2ZW50KSdcbiAgICAgIFthZ2dyZWdhdGVdPSdhZ2dyZWdhdGUnXG4gICAgICBbdmlydHVhbF09J3ZpcnR1YWwnXG4gICAgICBbYWN0aXZlUm93XT0nYWN0aXZlUm93J1xuICAgICAgW3RyYWNrUm93XT0ndHJhY2tSb3cnXG4gICAgICBbdHJhY2tDb2x1bW5zXT0ndHJhY2tDb2x1bW5zJ1xuICAgICAgW3NlbGVjdGVkUm93c109J3NlbGVjdGVkUm93c0xpc3QnXG4gICAgICBbYWRkaXRpb25hbENvbXBvbmVudF09J2RldGFpbENvbXBvbmVudCdcbiAgICAgIFtzZWxlY3RUeXBlXT0nc2VsZWN0VHlwZSdcbiAgICAgIFtyb3dDbGFzc109J3Jvd0NsYXNzJz5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L3RldGEtdGFibGUtYm9keT5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
481
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC90YWJsZS90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVOLFdBQVcsRUFDWCxJQUFJLEVBQ0osU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJbkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDakUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBT2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7O0FBZXhF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LENBQUM7Z0JBMkNMLE9BQU87c0JBQTNDLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWNuQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWlCcEMsT0FBTztzQkFETixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkEyRkksU0FBUztzQkFBL0MsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBUeXBlLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlV2hpbGUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IElEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2NvbnRyYWN0L2ktZGljdGlvbmFyeSc7XG5pbXBvcnQgeyBJSWROYW1lIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2NvbnRyYWN0L2ktaWQtbmFtZSc7XG5pbXBvcnQgeyBBbGlnbiB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9lbnVtL2FsaWduLmVudW0nO1xuaW1wb3J0IHsgVmVydGljYWxBbGlnbiB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9lbnVtL3ZlcnRpY2FsLWFsaWduLmVudW0nO1xuaW1wb3J0IHsgRmlsdGVyU3RhdGUgfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3QvZmlsdGVyLXN0YXRlJztcbmltcG9ydCB7IEZpbHRlclR5cGUgfSBmcm9tICcuLi8uLi9maWx0ZXIvZW51bS9maWx0ZXItdHlwZS5lbnVtJztcbmltcG9ydCB7IERldGFpbENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi9iYXNlL2RldGFpbC1jb21wb25lbnQtYmFzZSc7XG5pbXBvcnQgeyBJQ2VsbENvb3JkaW5hdGVzIH0gZnJvbSAnLi4vY29udHJhY3QvaS1jZWxsLWNvb3JkaW5hdGVzJztcbmltcG9ydCB7IElDZWxsRXZlbnQgfSBmcm9tICcuLi9jb250cmFjdC9pLWNlbGwtZXZlbnQnO1xuaW1wb3J0IHsgSUNlbGxJbnN0YW5jZSwgSUNlbGxJbnN0YW5jZUV2ZW50IH0gZnJvbSAnLi4vY29udHJhY3QvaS1jZWxsLWluc3RhbmNlJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtY29sdW1uJztcbmltcG9ydCB7IFRhYmxlUm93IH0gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtcm93JztcbmltcG9ydCB7IEVkaXRFdmVudCB9IGZyb20gJy4uL2VudW0vZWRpdC1ldmVudC5lbnVtJztcbmltcG9ydCB7IEVkaXRUeXBlIH0gZnJvbSAnLi4vZW51bS9lZGl0LXR5cGUuZW51bSc7XG5pbXBvcnQgeyBTZWxlY3RUeXBlIH0gZnJvbSAnLi4vZW51bS9zZWxlY3QtdHlwZS5lbnVtJztcbmltcG9ydCB7IFRhYmxlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvdGFibGUuc2VydmljZSc7XG5pbXBvcnQgeyBUYWJsZUJvZHlDb21wb25lbnQgfSBmcm9tICcuLi90YWJsZS1ib2R5L3RhYmxlLWJvZHkuY29tcG9uZW50JztcbmltcG9ydCB7IENvbnRleHRNZW51RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRhYmxlSGVhZENvbXBvbmVudCB9IGZyb20gJy4uL3RhYmxlLWhlYWQvdGFibGUtaGVhZC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RldGEtdGFibGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtUYWJsZVNlcnZpY2VdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBUYWJsZUhlYWRDb21wb25lbnQsXG4gICAgICAgIENvbnRleHRNZW51RGlyZWN0aXZlLFxuICAgICAgICBUYWJsZUJvZHlDb21wb25lbnQsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8VD5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzXG57XG4gIEBJbnB1dCgpIGRhdGE6IFRbXSA9IFtdO1xuICBASW5wdXQoKSBjb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gW107XG4gIEBJbnB1dCgpIGRpY3Q6IElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPjtcbiAgQElucHV0KCkgZmlsdGVyT3B0aW9uczogSURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+O1xuXG4gIEBJbnB1dCgpXG4gIHNldCBzdGF0ZShzdGF0ZTogRmlsdGVyU3RhdGUpIHtcbiAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlO1xuICB9XG5cbiAgQElucHV0KCkgY29va2llTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSB2aXJ0dWFsOiBib29sZWFuO1xuICBASW5wdXQoKSBkZXRhaWxDb21wb25lbnQ6IFR5cGU8RGV0YWlsQ29tcG9uZW50QmFzZTxUPj47XG4gIEBJbnB1dCgpIGFjdGl2ZVJvdzogVDtcbiAgQElucHV0KCkgc2VsZWN0ZWRSb3dzOiBUW107XG4gIEBJbnB1dCgpIHNlbGVjdFR5cGU6IFNlbGVjdFR5cGUgPSBTZWxlY3RUeXBlLm1vdXNlO1xuICBASW5wdXQoKSBhZ2dyZWdhdGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHRyYWNrUm93OiAoaW5kZXg6IG51bWJlciwgcm93OiBUKSA9PiBhbnkgPSAoXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICByb3c6IFRcbiAgKSA9PiB7XG4gICAgaWYgKHJvd1snaWQnXSkge1xuICAgICAgcmV0dXJuIHJvd1snaWQnXTtcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9O1xuICBASW5wdXQoKSB0cmFja0NvbHVtbnM6IChpbmRleDogbnVtYmVyLCBjb2x1bW46IFRhYmxlQ29sdW1uKSA9PiBhbnkgPSAoXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBjb2x1bW46IFRhYmxlQ29sdW1uXG4gICkgPT4ge1xuICAgIHJldHVybiBjb2x1bW4ubmFtZTtcbiAgfTtcbiAgQElucHV0KCkgZWRpdFR5cGU6IEVkaXRUeXBlID0gRWRpdFR5cGUuY2VsbDtcbiAgQElucHV0KCkgZWRpdEV2ZW50OiBFZGl0RXZlbnQgPSBFZGl0RXZlbnQuZG91YmxlQ2xpY2s7XG4gIEBJbnB1dCgpIHJvd0VkaXRhYmxlOiBib29sZWFuIHwgKChyb3c6IFQpID0+IGJvb2xlYW4pO1xuICBASW5wdXQoKSByb3dDbGFzczogKHJvdzogVCwgaW5kZXg/OiBudW1iZXIpID0+IHN0cmluZztcblxuICBASW5wdXQoKSBzZXQgc2Nyb2xsVG9JbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3ZjLnNjcm9sbFRvSW5kZXgoaW5kZXgpO1xuICB9XG5cbiAgQElucHV0KCkgc2hvd0hlYWRDZWxsTWVudSA9IHRydWU7XG4gIEBJbnB1dCgpIGNvbnRleHRNZW51OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBjb250ZXh0TWVudU9wZW46IGJvb2xlYW47XG4gIEBPdXRwdXQoKSBjb250ZXh0TWVudU9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHN0YXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RmlsdGVyU3RhdGU+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJTdGF0ZT4oKTtcbiAgQE91dHB1dCgpIGJvZHlMZWZ0ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuICBAT3V0cHV0KCkgYWN0aXZlUm93Q2hhbmdlOiBFdmVudEVtaXR0ZXI8VD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzZWxlY3RlZFJvd3NDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgY2VsbENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2VsbEluc3RhbmNlRXZlbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBjZWxsRG91YmxlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2VFdmVudDxUPj4oKTtcbiAgQE91dHB1dCgpIGNlbGxGb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZUV2ZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgY2VsbEtleURvd24gPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2VFdmVudDxUPj4oKTtcbiAgQE91dHB1dCgpIHJvd0xlZnQgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBPdXRwdXQoKSByb3dFZGl0U3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2U8VD4+KCk7XG4gIEBPdXRwdXQoKSByb3dFZGl0RW5kID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVJvdzxUPj4oKTtcbiAgQE91dHB1dCgpIGNlbGxFZGl0U3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2U8VD4+KCk7XG4gIEBPdXRwdXQoKSBjZWxsRWRpdEVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZTxUPj4oKTtcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2VsbEluc3RhbmNlPFQ+PigpO1xuICBAT3V0cHV0KCkgdGFibGVTZXJ2aWNlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVNlcnZpY2U8VD4+KCk7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRleHRNZW51JywgeyBzdGF0aWM6IHRydWUgfSkgbWVudTogRWxlbWVudFJlZjtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy50YWJsZScpIHByaXZhdGUgcmVhZG9ubHkgdGFibGVDbGFzcyA9IHRydWU7XG5cbiAgc2VsZWN0ZWRSb3dzTGlzdDogVFtdO1xuICBjb250ZXh0TWVudVJvdzogVDtcbiAgdmVydGljYWxBbGlnbiA9IFZlcnRpY2FsQWxpZ247XG4gIGFsaWduID0gQWxpZ247XG4gIHByaXZhdGUgX2FsaXZlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfaGVhZEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF9zdGF0ZTogRmlsdGVyU3RhdGU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfc3ZjOiBUYWJsZVNlcnZpY2U8VD4sXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZlxuICApIHtcbiAgICB0aGlzLl9zdmMuc3RhdGVcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpLFxuICAgICAgICBmaWx0ZXIoc3RhdGUgPT4gc3RhdGUgIT09IHRoaXMuX3N0YXRlKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoc3RhdGU6IEZpbHRlclN0YXRlKSA9PiB0aGlzLnN0YXRlQ2hhbmdlLm5leHQoc3RhdGUpKTtcblxuICAgIHRoaXMuX3N2Yy5lZGl0Q2VsbFN0YXJ0XG4gICAgICAucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoaXRlbTogSUNlbGxFdmVudCkgPT5cbiAgICAgICAgdGhpcy5jZWxsRWRpdFN0YXJ0LmVtaXQodGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShpdGVtKSlcbiAgICAgICk7XG5cbiAgICB0aGlzLl9zdmMuZWRpdENlbGxTdG9wXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoaXRlbTogSUNlbGxDb29yZGluYXRlcykgPT5cbiAgICAgICAgdGhpcy5jZWxsRWRpdEVuZC5lbWl0KHRoaXMuX3N2Yy5nZXRDZWxsSW5zdGFuY2UoaXRlbSkpXG4gICAgICApO1xuXG4gICAgdGhpcy5fc3ZjLmVkaXRSb3dTdGFydFxuICAgICAgLnBpcGUodGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW06IElDZWxsRXZlbnQpID0+XG4gICAgICAgIHRoaXMucm93RWRpdFN0YXJ0LmVtaXQodGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShpdGVtKSlcbiAgICAgICk7XG5cbiAgICB0aGlzLl9zdmMuZWRpdFJvd1N0b3BcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKChpdGVtOiBJQ2VsbENvb3JkaW5hdGVzKSA9PlxuICAgICAgICB0aGlzLnJvd0VkaXRFbmQuZW1pdCh0aGlzLl9zdmMuZ2V0Um93QnlJbmRleChpdGVtPy5yb3cpKVxuICAgICAgKTtcblxuICAgIHRoaXMuX3N2Yy5zZWxlY3RlZFJvd3NcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKChpdGVtczogVFtdKSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzTGlzdCA9IGl0ZW1zO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5lbWl0KGl0ZW1zKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fc3ZjLmFjdGl2ZVJvd1xuICAgICAgLnBpcGUodGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW06IFQpID0+IHtcbiAgICAgICAgdGhpcy5hY3RpdmVSb3cgPSBpdGVtO1xuICAgICAgICB0aGlzLmFjdGl2ZVJvd0NoYW5nZS5lbWl0KGl0ZW0pO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9zdmMudmFsdWVDaGFuZ2VkXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoY29vcmRpbmF0ZXM6IElDZWxsQ29vcmRpbmF0ZXMpID0+IHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuX3N2Yy5nZXRDZWxsSW5zdGFuY2UoY29vcmRpbmF0ZXMpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKSBoYW5kbGVDbGlja091dHNpZGVBbnlSb3coXG4gICAgZXZlbnQ6IE1vdXNlRXZlbnRcbiAgKSB7XG4gICAgY29uc3QgY29vcmRpbmF0ZXMgPSB0aGlzLmdldENvb3JkaW5hdGVzKGV2ZW50KTtcbiAgICBjb25zdCByb3cgPSB0aGlzLmdldFJvdyhldmVudCk7XG4gICAgY29uc3QgZXZlbnRJc09uUm93ID0gdGhpcy5ldmVudElzT25Sb3coZXZlbnQpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKGNvb3JkaW5hdGVzKSB7XG4gICAgICAgIHRoaXMuY2VsbENsaWNrLmVtaXQoe1xuICAgICAgICAgIC4uLnRoaXMuX3N2Yy5nZXRDZWxsSW5zdGFuY2UoY29vcmRpbmF0ZXMpLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuZWRpdEV2ZW50ID09PSBFZGl0RXZlbnQuY2xpY2spIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0RWRpdFJvd09yQ2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5fc3ZjLmN1cnJlbnRFZGl0Q2VsbCAmJlxuICAgICAgICAgICAgKGNvb3JkaW5hdGVzLnJvdyAhPT0gdGhpcy5fc3ZjLmN1cnJlbnRFZGl0Q2VsbC5yb3cgfHxcbiAgICAgICAgICAgICAgY29vcmRpbmF0ZXMuY29sdW1uICE9PSB0aGlzLl9zdmMuY3VycmVudEVkaXRDZWxsLmNvbHVtbilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJvdykge1xuICAgICAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgICAgIHRoaXMuX3N2Yy5zZWxlY3RPckRlc2VsZWN0Um93KHJvdy5kYXRhKTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIHRoaXMuX3N2Yy5zZWxlY3RSYW5nZShyb3cuZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fc3ZjLnNlbGVjdFJvd3MoW3Jvdy5kYXRhXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghZXZlbnRJc09uUm93ICYmICFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRUeXBlID09PSBFZGl0VHlwZS5yb3cpIHtcbiAgICAgICAgICB0aGlzLl9zdmMuc3RhcnRFZGl0Um93KG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRDZWxsKG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdmb2N1c2luJywgWyckZXZlbnQnXSkgZm9jdXNJbihldmVudDogRm9jdXNFdmVudCkge1xuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gdGhpcy5nZXRDb29yZGluYXRlcyhldmVudCk7XG4gICAgaWYgKGNvb3JkaW5hdGVzKSB7XG4gICAgICB0aGlzLmNlbGxGb2N1cy5lbWl0KHtcbiAgICAgICAgLi4udGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShjb29yZGluYXRlcyksXG4gICAgICAgIGV2ZW50LFxuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5lZGl0RXZlbnQgPT09IEVkaXRFdmVudC5mb2N1cykge1xuICAgICAgICB0aGlzLnN0YXJ0RWRpdFJvd09yQ2VsbChjb29yZGluYXRlcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZGJsY2xpY2snLCBbJyRldmVudCddKVxuICBkYmxjbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gdGhpcy5nZXRDb29yZGluYXRlcyhldmVudCk7XG4gICAgaWYgKGNvb3JkaW5hdGVzKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5jZWxsRG91YmxlQ2xpY2suZW1pdCh7XG4gICAgICAgICAgLi4udGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShjb29yZGluYXRlcyksXG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5lZGl0RXZlbnQgPT09IEVkaXRFdmVudC5kb3VibGVDbGljaykge1xuICAgICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIGtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdLZXlBJykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9zdmMuc2VsZWN0QWxsKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLl9zdmMuZGVzZWxlY3RBbGwoKTtcbiAgICAgIGlmICh0aGlzLmVkaXRUeXBlID09PSBFZGl0VHlwZS5yb3cpIHtcbiAgICAgICAgdGhpcy5fc3ZjLnN0YXJ0RWRpdFJvdyhudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRDZWxsKG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb29yZGluYXRlcyA9IHRoaXMuZ2V0Q29vcmRpbmF0ZXMoZXZlbnQpO1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIGlmICh0aGlzLmVkaXRUeXBlID09PSBFZGl0VHlwZS5yb3cpIHtcbiAgICAgICAgdGhpcy5fc3ZjLnN0YXJ0RWRpdFJvdyhudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLl9zdmMuY3VycmVudEVkaXRDZWxsKSB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5fc3ZjLmdldE5leHRSb3dDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0RWRpdFJvd09yQ2VsbCh7XG4gICAgICAgICAgICAgIHJvdzogdGFyZ2V0LnJvdyxcbiAgICAgICAgICAgICAgY29sdW1uOiB0YXJnZXQuY29sdW1uLFxuICAgICAgICAgICAgICBldmVudDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRDZWxsKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29vcmRpbmF0ZXMpIHtcbiAgICAgIHRoaXMuY2VsbEtleURvd24uZW1pdCh7XG4gICAgICAgIC4uLnRoaXMuX3N2Yy5nZXRDZWxsSW5zdGFuY2UoY29vcmRpbmF0ZXMpLFxuICAgICAgICBldmVudCxcbiAgICAgIH0pO1xuICAgICAgaWYgKGV2ZW50LmtleSAmJiAoZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSB8fCBldmVudC5rZXkgPT09ICdEZWxldGUnKSkge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLl9zdmMuZ2V0Q29sdW1uQnlOYW1lKGNvb3JkaW5hdGVzLmNvbHVtbik7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyVHlwZSAhPT0gRmlsdGVyVHlwZS5udW1iZXIgfHxcbiAgICAgICAgICBpc0Zpbml0ZShldmVudC5rZXkgYXMgYW55KVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0RWRpdFJvd09yQ2VsbCh7XG4gICAgICAgICAgICByb3c6IGNvb3JkaW5hdGVzLnJvdyxcbiAgICAgICAgICAgIGNvbHVtbjogY29vcmRpbmF0ZXMuY29sdW1uLFxuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJyAmJiB0aGlzLl9zdmMuY3VycmVudEVkaXRDZWxsKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGxldCB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0TmV4dEVkaXRhYmxlQ2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIHRhcmdldCA9IHRoaXMuX3N2Yy5nZXRQcmV2aW91c0VkaXRhYmxlQ2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKHtcbiAgICAgICAgICAgIHJvdzogdGFyZ2V0LnJvdyxcbiAgICAgICAgICAgIGNvbHVtbjogdGFyZ2V0LmNvbHVtbixcbiAgICAgICAgICAgIGV2ZW50OiB1bmRlZmluZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5fc3ZjLmN1cnJlbnRFZGl0Q2VsbCkge1xuICAgICAgICBsZXQgdGFyZ2V0O1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0TmV4dENlbGwoY29vcmRpbmF0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fc3ZjLmdldFByZXZpb3VzQ2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fc3ZjLmdldFByZXZpb3VzUm93Q2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0TmV4dFJvd0NlbGwoY29vcmRpbmF0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmdldENlbGxFbGVtZW50KHRhcmdldCk7XG4gICAgICAgICAgZWxlbWVudD8uZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pIG1vdXNlZG93bihldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmIChldmVudC5idXR0b24gPT09IDIpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fc3ZjLnJlc3RvcmVTdGF0ZSgpO1xuICAgIHRoaXMuX3N2Yy5yZXN0b3JlSGlkZGVuQ29sdW1ucygpO1xuICAgIHRoaXMudGFibGVTZXJ2aWNlLmVtaXQodGhpcy5fc3ZjKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9oZWFkRWxlbWVudCA9XG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnRhYmxlLWhlYWQnKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2FsaXZlID0gZmFsc2U7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnZWRpdFR5cGUnKSkge1xuICAgICAgdGhpcy5fc3ZjLmVkaXRUeXBlID0gdGhpcy5lZGl0VHlwZTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnc2VsZWN0VHlwZScpKSB7XG4gICAgICB0aGlzLl9zdmMuc2VsZWN0VHlwZSA9IHRoaXMuc2VsZWN0VHlwZTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnc2VsZWN0ZWRSb3dzJykpIHtcbiAgICAgIHRoaXMuX3N2Yy5zZWxlY3RSb3dzKHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAncm93RWRpdGFibGUnKSkge1xuICAgICAgdGhpcy5fc3ZjLnJvd0VkaXRhYmxlID0gdGhpcy5yb3dFZGl0YWJsZTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnY29va2llTmFtZScpKSB7XG4gICAgICB0aGlzLl9zdmMuc2V0Q29va2llTmFtZSh0aGlzLmNvb2tpZU5hbWUpO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdjb2x1bW5zJykpIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbnMgIT09IG51bGwgJiYgdGhpcy5jb2x1bW5zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fc3ZjLnNldENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnZGF0YScpKSB7XG4gICAgICB0aGlzLl9zdmMuc2V0RGF0YSh0aGlzLmRhdGEpO1xuICAgICAgdGhpcy5fc3ZjLnNlbGVjdFJvd3MoXG4gICAgICAgIHRoaXMuZGF0YT8uZmlsdGVyKHJvdyA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRSb3dzPy5zb21lKFxuICAgICAgICAgICAgc2VsZWN0ZWRSb3cgPT5cbiAgICAgICAgICAgICAgdGhpcy50cmFja1Jvdyh0aGlzLl9zdmMuZ2V0Um93SW5kZXgoc2VsZWN0ZWRSb3cpLCBzZWxlY3RlZFJvdykgPT09XG4gICAgICAgICAgICAgIHRoaXMudHJhY2tSb3codGhpcy5fc3ZjLmdldFJvd0luZGV4KHJvdyksIHJvdylcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnZGljdCcpKSB7XG4gICAgICB0aGlzLl9zdmMuc2V0RGljdCh0aGlzLmRpY3QpO1xuICAgICAgdGhpcy5fc3ZjLnNldEZpbHRlck9wdGlvbnModGhpcy5kaWN0KTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnZmlsdGVyT3B0aW9ucycpKSB7XG4gICAgICB0aGlzLl9zdmMuc2V0RmlsdGVyT3B0aW9ucyh0aGlzLmZpbHRlck9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICd0cmFja1JvdycpKSB7XG4gICAgICB0aGlzLl9zdmMudHJhY2tSb3cgPSB0aGlzLnRyYWNrUm93O1xuICAgIH1cbiAgfVxuXG4gIHNldENvbnRleHRNZW51T3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuY29udGV4dE1lbnVPcGVuID0gdmFsdWU7XG4gICAgdGhpcy5jb250ZXh0TWVudU9wZW5DaGFuZ2UuZW1pdCh0aGlzLmNvbnRleHRNZW51T3Blbik7XG4gIH1cblxuICBzZXRDb250ZXh0TWVudVJvdyhldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuY29udGV4dE1lbnVSb3cgPSBudWxsO1xuICAgIGNvbnN0IHJvd0VsZW1lbnQgPSB0aGlzLl9zdmMuZ2V0RXZlbnRSb3coZXZlbnQpO1xuICAgIGlmIChyb3dFbGVtZW50KSB7XG4gICAgICBjb25zdCByb3dJbmRleCA9IHBhcnNlSW50KHJvd0VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXJvdycpLCAxMCk7XG4gICAgICBpZiAocm93SW5kZXggPj0gMCkge1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51Um93ID0gdGhpcy5fc3ZjLmdldFJvd0J5SW5kZXgocm93SW5kZXgpLmRhdGE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGFydEVkaXRSb3dPckNlbGwoY29vcmRpbmF0ZXM6IElDZWxsRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZGl0VHlwZSA9PT0gRWRpdFR5cGUucm93KSB7XG4gICAgICB0aGlzLl9zdmMuc3RhcnRFZGl0Um93KGNvb3JkaW5hdGVzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZWRpdFR5cGUgPT09IEVkaXRUeXBlLmNlbGwpIHtcbiAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENlbGxFbGVtZW50KGNvb3JkaW5hdGVzOiBJQ2VsbENvb3JkaW5hdGVzKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBgdGV0YS1jZWxsW2RhdGEtcm93PVwiJHtjb29yZGluYXRlcy5yb3d9XCJdW2RhdGEtY29sdW1uPVwiJHtjb29yZGluYXRlcy5jb2x1bW59XCJdYFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV2ZW50SXNPblJvdyhldmVudDogRXZlbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCByb3cgPSBldmVudC5jb21wb3NlZFBhdGgoKS5maW5kKCh0YXJnZXQpID0+IHtcbiAgICAgIHJldHVybiAodGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8uZ2V0QXR0cmlidXRlICYmICh0YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm93Jyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJvdyAmJiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMocm93KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29vcmRpbmF0ZXMoZXZlbnQ6IEV2ZW50KTogSUNlbGxFdmVudCB8IG51bGwge1xuICAgIGlmIChldmVudC5jb21wb3NlZFBhdGgoKS5pbmRleE9mKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkgPCAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgY2VsbCA9IHRoaXMuX3N2Yy5nZXRFdmVudENlbGwoZXZlbnQpO1xuICAgIGlmIChjZWxsKSB7XG4gICAgICBjb25zdCByb3dJbmRleCA9IHBhcnNlSW50KGNlbGwuZ2V0QXR0cmlidXRlKCdkYXRhLXJvdycpLCAxMCk7XG4gICAgICBjb25zdCBjb2x1bW5OYW1lID0gY2VsbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29sdW1uJyk7XG4gICAgICBpZiAocm93SW5kZXggPj0gMCAmJiBjb2x1bW5OYW1lKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcm93OiByb3dJbmRleCxcbiAgICAgICAgICBjb2x1bW46IGNvbHVtbk5hbWUsXG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSb3coZXZlbnQ6IEV2ZW50KTogVGFibGVSb3c8VD4gfCBudWxsIHtcbiAgICBpZiAoZXZlbnQuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpIDwgMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHJvd0VsZW1lbnQgPSB0aGlzLl9zdmMuZ2V0RXZlbnRSb3coZXZlbnQpO1xuICAgIGlmIChyb3dFbGVtZW50KSB7XG4gICAgICBjb25zdCByb3dJbmRleCA9IHBhcnNlSW50KHJvd0VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXJvdycpLCAxMCk7XG4gICAgICBpZiAocm93SW5kZXggPj0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3ZjLmdldFJvd0J5SW5kZXgocm93SW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG9uU2Nyb2xsID0gZXZlbnQgPT4ge1xuICAgIHRoaXMuX2hlYWRFbGVtZW50LnNjcm9sbExlZnQgPSBldmVudC50YXJnZXQuc2Nyb2xsTGVmdDtcbiAgfTtcblxuICAvLyBwcml2YXRlIGdldFNlbGVjdGVkVGV4dCgpIHtcbiAgLy8gICBsZXQgdGV4dCA9ICcnO1xuICAvLyAgIGlmICh0eXBlb2Ygd2luZG93LmdldFNlbGVjdGlvbiAhPSAndW5kZWZpbmVkJykge1xuICAvLyAgICAgdGV4dCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpO1xuICAvLyAgIH1cbiAgLy8gICByZXR1cm4gdGV4dDtcbiAgLy8gfVxufVxuIiwiPGRpdiBjbGFzcz0nY29sdW1uIGNvbHVtbl9hdXRvJz5cbiAgPHRldGEtdGFibGUtaGVhZFxuICAgIHN0eWxlPSd6LWluZGV4OiAxJ1xuICAgIFtzZWxlY3RUeXBlXT0nc2VsZWN0VHlwZSdcbiAgICBbc2hvd0hlYWRDZWxsTWVudV09J3Nob3dIZWFkQ2VsbE1lbnUnPjwvdGV0YS10YWJsZS1oZWFkPlxuICA8ZGl2IGNsYXNzPSdjb2x1bW4gY29sdW1uX2F1dG8gcG9zaXRpb24tcmVsYXRpdmUnXG4gICAgICAgc3R5bGU9J3otaW5kZXg6IDAnXG4gICAgICAgW3RldGFDb250ZXh0TWVudV09J2NvbnRleHRNZW51J1xuICAgICAgIFt2ZXJ0aWNhbEFsaWduXT0ndmVydGljYWxBbGlnbi5hdXRvJ1xuICAgICAgIFthbGlnbl09J2FsaWduLmF1dG8nXG4gICAgICAgW2FwcGVuZFRvQm9keV09J3RydWUnXG4gICAgICAgW2RhdGFdPSdjb250ZXh0TWVudVJvdydcbiAgICAgICBbb3Blbl09J2NvbnRleHRNZW51T3BlbidcbiAgICAgICAob3BlbkNoYW5nZSk9J3NldENvbnRleHRNZW51T3BlbigkZXZlbnQpJz5cbiAgICA8dGV0YS10YWJsZS1ib2R5XG4gICAgICAoY29udGV4dG1lbnUpPSdzZXRDb250ZXh0TWVudVJvdygkZXZlbnQpJ1xuICAgICAgKHNjcm9sbENoYW5nZSk9J29uU2Nyb2xsKCRldmVudCknXG4gICAgICBbYWdncmVnYXRlXT0nYWdncmVnYXRlJ1xuICAgICAgW3ZpcnR1YWxdPSd2aXJ0dWFsJ1xuICAgICAgW2FjdGl2ZVJvd109J2FjdGl2ZVJvdydcbiAgICAgIFt0cmFja1Jvd109J3RyYWNrUm93J1xuICAgICAgW3RyYWNrQ29sdW1uc109J3RyYWNrQ29sdW1ucydcbiAgICAgIFtzZWxlY3RlZFJvd3NdPSdzZWxlY3RlZFJvd3NMaXN0J1xuICAgICAgW2FkZGl0aW9uYWxDb21wb25lbnRdPSdkZXRhaWxDb21wb25lbnQnXG4gICAgICBbc2VsZWN0VHlwZV09J3NlbGVjdFR5cGUnXG4gICAgICBbcm93Q2xhc3NdPSdyb3dDbGFzcyc+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC90ZXRhLXRhYmxlLWJvZHk+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|