@ethlete/cdk 2.4.0 → 2.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/esm2022/lib/components/accordion/components/accordion/accordion.component.mjs +3 -3
- package/esm2022/lib/components/accordion/components/accordion-group/accordion-group.component.mjs +3 -3
- package/esm2022/lib/components/accordion/partials/accordion-hint/accordion-hint.directive.mjs +3 -3
- package/esm2022/lib/components/accordion/partials/accordion-hint-wrapper/accordion-hint-wrapper.directive.mjs +3 -3
- package/esm2022/lib/components/accordion/partials/accordion-label/accordion-label.directive.mjs +3 -3
- package/esm2022/lib/components/accordion/partials/accordion-label-wrapper/accordion-label-wrapper.directive.mjs +3 -3
- package/esm2022/lib/components/bracket/components/bracket/bracket.component.mjs +3 -3
- package/esm2022/lib/components/bracket/directives/bracket-match/bracket-match.directive.mjs +3 -3
- package/esm2022/lib/components/bracket/directives/bracket-round/bracket-round.directive.mjs +3 -3
- package/esm2022/lib/components/bracket/partials/bracket-match/bracket-match.component.mjs +3 -3
- package/esm2022/lib/components/bracket/partials/bracket-round-header/bracket-round-header.component.mjs +3 -3
- package/esm2022/lib/components/button/components/button/button.component.mjs +3 -3
- package/esm2022/lib/components/button/components/query-button/query-button.component.mjs +3 -3
- package/esm2022/lib/components/button/directives/button/button.directive.mjs +3 -3
- package/esm2022/lib/components/button/directives/query-button/query-button.directive.mjs +3 -3
- package/esm2022/lib/components/forms/components/checkbox/components/checkbox/checkbox.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/checkbox/components/checkbox-field/checkbox-field.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/checkbox/components/checkbox-group/checkbox-group.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/checkbox/directives/checkbox/checkbox.directive.mjs +3 -3
- package/esm2022/lib/components/forms/components/checkbox/directives/checkbox-field/checkbox-field.directive.mjs +3 -3
- package/esm2022/lib/components/forms/components/checkbox/directives/checkbox-group/checkbox-group.directive.mjs +3 -3
- package/esm2022/lib/components/forms/components/checkbox/directives/checkbox-group-control/checkbox-group-control.directive.mjs +3 -3
- package/esm2022/lib/components/forms/components/error/components/error/error.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/input/components/email-input/email-input.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/input/components/input-field/input-field.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/input/components/number-input/number-input.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/input/components/password-input/password-input.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/input/components/search-input/search-input.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/input/components/text-input/text-input.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/input/components/textarea-input/textarea-input.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/input/directives/autosize-textarea/autosize-textarea.directive.mjs +3 -3
- package/esm2022/lib/components/forms/components/input/directives/email-input/email-input.directive.mjs +3 -3
- package/esm2022/lib/components/forms/components/input/directives/number-input/number-input.directive.mjs +3 -3
- package/esm2022/lib/components/forms/components/input/directives/password-input/password-input.directive.mjs +3 -3
- package/esm2022/lib/components/forms/components/input/directives/search-input/search-input.directive.mjs +3 -3
- package/esm2022/lib/components/forms/components/input/directives/text-input/text-input.directive.mjs +3 -3
- package/esm2022/lib/components/forms/components/input/directives/textarea-input/textarea-input.directive.mjs +3 -3
- package/esm2022/lib/components/forms/components/input/partials/password-input-toggle/password-input-toggle.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/input/partials/search-input-clear/search-input-clear.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/label/components/label/label.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/label/directives/label-suffix/label-suffix.directive.mjs +3 -3
- package/esm2022/lib/components/forms/components/radio/components/radio/radio.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/radio/components/radio-field/radio-field.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/radio/components/radio-group/radio-group.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/radio/directives/radio/radio.directive.mjs +3 -3
- package/esm2022/lib/components/forms/components/radio/directives/radio-field/radio-field.directive.mjs +3 -3
- package/esm2022/lib/components/forms/components/radio/directives/radio-group/radio-group.directive.mjs +3 -3
- package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button/segmented-button.component.mjs +4 -5
- package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button-field/segmented-button-field.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button-group/segmented-button-group.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button/segmented-button.directive.mjs +3 -3
- package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button-field/segmented-button-field.directive.mjs +3 -3
- package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button-group/segmented-button-group.directive.mjs +3 -3
- package/esm2022/lib/components/forms/components/select/components/combobox/combobox.imports.mjs +12 -0
- package/esm2022/lib/components/forms/components/select/components/combobox/components/combobox/combobox.component.mjs +486 -0
- package/esm2022/lib/components/forms/components/select/components/combobox/components/combobox/public-api.mjs +2 -0
- package/esm2022/lib/components/forms/components/select/components/combobox/components/index.mjs +2 -0
- package/esm2022/lib/components/forms/components/select/components/combobox/components/public-api.mjs +2 -0
- package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox/combobox.directive.mjs +26 -0
- package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox/public-api.mjs +2 -0
- package/esm2022/lib/components/forms/components/select/components/combobox/directives/public-api.mjs +2 -0
- package/esm2022/lib/components/forms/components/select/components/combobox/partials/combobox-body/combobox-body.component.mjs +49 -0
- package/esm2022/lib/components/forms/components/select/components/combobox/partials/combobox-body/public-api.mjs +2 -0
- package/esm2022/lib/components/forms/components/select/components/combobox/partials/combobox-option/combobox-option.component.mjs +64 -0
- package/esm2022/lib/components/forms/components/select/components/combobox/partials/combobox-option/index.mjs +2 -0
- package/esm2022/lib/components/forms/components/select/components/combobox/partials/combobox-option/public-api.mjs +2 -0
- package/esm2022/lib/components/forms/components/select/components/combobox/partials/index.mjs +2 -0
- package/esm2022/lib/components/forms/components/select/components/combobox/partials/public-api.mjs +3 -0
- package/esm2022/lib/components/forms/components/select/components/combobox/public-api.mjs +4 -0
- package/esm2022/lib/components/forms/components/select/components/native-select/components/native-select/native-select.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/select/components/native-select/directives/native-select-input/native-select-input.directive.mjs +3 -3
- package/esm2022/lib/components/forms/components/select/components/native-select/directives/native-select-option/native-select-option.directive.mjs +3 -3
- package/esm2022/lib/components/forms/components/select/components/native-select/partials/native-select-option/native-select-option.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/select/components/public-api.mjs +2 -1
- package/esm2022/lib/components/forms/components/select/components/select/components/select/select.component.mjs +18 -31
- package/esm2022/lib/components/forms/components/select/components/select/directives/index.mjs +2 -0
- package/esm2022/lib/components/forms/components/select/components/select/directives/public-api.mjs +4 -0
- package/esm2022/lib/components/forms/components/select/components/select/directives/select/index.mjs +2 -0
- package/esm2022/lib/components/forms/components/select/components/select/directives/select/public-api.mjs +2 -0
- package/esm2022/lib/components/forms/components/select/components/select/directives/select/select.directive.mjs +455 -0
- package/esm2022/lib/components/forms/components/select/components/select/directives/select-body/index.mjs +2 -0
- package/esm2022/lib/components/forms/components/select/components/select/directives/select-body/public-api.mjs +2 -0
- package/esm2022/lib/components/forms/components/select/components/select/directives/select-body/select-body.directive.mjs +61 -0
- package/esm2022/lib/components/forms/components/select/components/select/directives/select-option/index.mjs +2 -0
- package/esm2022/lib/components/forms/components/select/components/select/directives/select-option/public-api.mjs +2 -0
- package/esm2022/lib/components/forms/components/select/components/select/directives/select-option/select-option.directive.mjs +121 -0
- package/esm2022/lib/components/forms/components/select/components/select/partials/public-api.mjs +1 -2
- package/esm2022/lib/components/forms/components/select/components/select/partials/select-body/select-body.component.mjs +22 -7
- package/esm2022/lib/components/forms/components/select/components/select/partials/select-option/select-option.component.mjs +14 -8
- package/esm2022/lib/components/forms/components/select/components/select/public-api.mjs +2 -1
- package/esm2022/lib/components/forms/components/select/components/select/select.imports.mjs +2 -3
- package/esm2022/lib/components/forms/components/select/components/select-field/select-field.component.mjs +10 -7
- package/esm2022/lib/components/forms/components/select/directives/index.mjs +2 -0
- package/esm2022/lib/components/forms/components/select/directives/public-api.mjs +2 -0
- package/esm2022/lib/components/forms/components/select/directives/select-field/public-api.mjs +2 -0
- package/esm2022/lib/components/forms/components/select/directives/select-field/select-field.directive.mjs +21 -0
- package/esm2022/lib/components/forms/components/select/public-api.mjs +2 -1
- package/esm2022/lib/components/forms/components/slide-toggle/components/slide-toggle/slide-toggle.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/slide-toggle/components/slide-toggle-field/slide-toggle-field.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/slide-toggle/directives/slide-toggle/slide-toggle.directive.mjs +3 -3
- package/esm2022/lib/components/forms/components/slider/components/slider/slider.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/slider/components/slider-field/slider-field.component.mjs +3 -3
- package/esm2022/lib/components/forms/directives/dynamic-form-field/dynamic-form-field.directive.mjs +3 -3
- package/esm2022/lib/components/forms/directives/dynamic-form-group/dynamic-form-group.directive.mjs +3 -3
- package/esm2022/lib/components/forms/directives/if-input-empty/if-input-empty.directive.mjs +3 -3
- package/esm2022/lib/components/forms/directives/if-input-filled/if-input-filled.directive.mjs +3 -3
- package/esm2022/lib/components/forms/directives/input/input.directive.mjs +47 -32
- package/esm2022/lib/components/forms/directives/input-prefix/input-prefix.directive.mjs +3 -3
- package/esm2022/lib/components/forms/directives/input-suffix/input-suffix.directive.mjs +3 -3
- package/esm2022/lib/components/forms/directives/native-input-ref/native-input-ref.directive.mjs +3 -3
- package/esm2022/lib/components/forms/directives/static-form-field/static-form-field.directive.mjs +3 -3
- package/esm2022/lib/components/forms/directives/static-form-group/static-form-group.directive.mjs +3 -3
- package/esm2022/lib/components/forms/directives/writeable-input/writeable-input.directive.mjs +3 -3
- package/esm2022/lib/components/forms/services/default-validator-errors.service.mjs +3 -3
- package/esm2022/lib/components/forms/services/form-field-state.service.mjs +3 -3
- package/esm2022/lib/components/forms/services/form-group-state.service.mjs +3 -3
- package/esm2022/lib/components/forms/services/input-state.service.mjs +3 -3
- package/esm2022/lib/components/forms/utils/decorated-form-field.base.mjs +3 -3
- package/esm2022/lib/components/forms/utils/decorated-input.base.mjs +4 -4
- package/esm2022/lib/components/forms/utils/input.base.mjs +8 -8
- package/esm2022/lib/components/icons/chevron-icon/chevron-icon.component.mjs +3 -3
- package/esm2022/lib/components/masonry/components/masonry/masonry.component.mjs +3 -3
- package/esm2022/lib/components/masonry/partials/masonry-item/masonry-item.component.mjs +3 -3
- package/esm2022/lib/components/overlay/components/bottom-sheet/components/bottom-sheet-container/bottom-sheet-container.component.mjs +3 -3
- package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-container-base/bottom-sheet-container-base.component.mjs +3 -3
- package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-drag-handle/bottom-sheet-drag-handle.component.mjs +3 -3
- package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-title/bottom-sheet-title.directive.mjs +3 -3
- package/esm2022/lib/components/overlay/components/bottom-sheet/services/bottom-sheet-base.service.mjs +3 -3
- package/esm2022/lib/components/overlay/components/bottom-sheet/services/bottom-sheet-swipe-handler.service.mjs +3 -3
- package/esm2022/lib/components/overlay/components/bottom-sheet/services/bottom-sheet.service.mjs +3 -3
- package/esm2022/lib/components/overlay/components/dialog/components/dialog-container/dialog-container.component.mjs +3 -3
- package/esm2022/lib/components/overlay/components/dialog/partials/dialog-close/dialog-close.directive.mjs +3 -3
- package/esm2022/lib/components/overlay/components/dialog/partials/dialog-container-base/dialog-container-base.component.mjs +3 -3
- package/esm2022/lib/components/overlay/components/dialog/partials/dialog-title/dialog-title.directive.mjs +3 -3
- package/esm2022/lib/components/overlay/components/dialog/services/dialog-base.service.mjs +3 -3
- package/esm2022/lib/components/overlay/components/dialog/services/dialog.service.mjs +3 -3
- package/esm2022/lib/components/overlay/components/toggletip/components/toggletip/toggletip.component.mjs +3 -3
- package/esm2022/lib/components/overlay/components/toggletip/directives/toggletip/toggletip.directive.mjs +3 -3
- package/esm2022/lib/components/overlay/components/tooltip/components/tooltip/tooltip.component.mjs +3 -3
- package/esm2022/lib/components/overlay/components/tooltip/directives/tooltip/tooltip.directive.mjs +3 -3
- package/esm2022/lib/components/overlay/services/dynamic-overlay.service.mjs +3 -3
- package/esm2022/lib/components/pagination/components/pagination/pagination.component.mjs +3 -3
- package/esm2022/lib/components/pagination/partials/pagination-link/pagination-link.directive.mjs +3 -3
- package/esm2022/lib/components/pagination/services/pagination-head.service.mjs +3 -3
- package/esm2022/lib/components/picture/picture-data.directive.mjs +3 -3
- package/esm2022/lib/components/picture/picture.component.mjs +3 -3
- package/esm2022/lib/components/progress-spinner/progress-spinner.component.mjs +3 -3
- package/esm2022/lib/components/scrollable/components/scrollable/scrollable.component.mjs +3 -3
- package/esm2022/lib/components/skeleton/components/skeleton/skeleton.component.mjs +3 -3
- package/esm2022/lib/components/skeleton/partials/skeleton-item/skeleton-item.component.mjs +3 -3
- package/esm2022/lib/components/sort/components/sort-header/sort-header.component.mjs +3 -3
- package/esm2022/lib/components/sort/partials/sort/sort.directive.mjs +3 -3
- package/esm2022/lib/components/sort/services/sort-header-intl.mjs +3 -3
- package/esm2022/lib/components/table/components/table/table.component.mjs +3 -3
- package/esm2022/lib/components/table/partials/cells/cell/cell.directive.mjs +3 -3
- package/esm2022/lib/components/table/partials/cells/cell-def/cell-def.directive.mjs +3 -3
- package/esm2022/lib/components/table/partials/cells/column-def/column-def.directive.mjs +3 -3
- package/esm2022/lib/components/table/partials/cells/footer-cell/footer-cell.directive.mjs +3 -3
- package/esm2022/lib/components/table/partials/cells/footer-cell-def/footer-cell-def.directive.mjs +3 -3
- package/esm2022/lib/components/table/partials/cells/header-cell/header-cell.directive.mjs +3 -3
- package/esm2022/lib/components/table/partials/cells/header-cell-def/header-cell-def.directive.mjs +3 -3
- package/esm2022/lib/components/table/partials/cells/text-column/text-column.component.mjs +3 -3
- package/esm2022/lib/components/table/partials/rows/footer-row/footer-row.component.mjs +3 -3
- package/esm2022/lib/components/table/partials/rows/footer-row-def/footer-row-def.directive.mjs +3 -3
- package/esm2022/lib/components/table/partials/rows/header-row/header-row.component.mjs +3 -3
- package/esm2022/lib/components/table/partials/rows/header-row-def/header-row-def.directive.mjs +3 -3
- package/esm2022/lib/components/table/partials/rows/no-data-row/no-data-row.directive.mjs +3 -3
- package/esm2022/lib/components/table/partials/rows/recycle-rows/recycle-rows.directive.mjs +3 -3
- package/esm2022/lib/components/table/partials/rows/row/row.component.mjs +3 -3
- package/esm2022/lib/components/table/partials/rows/row-def/row-def.directive.mjs +3 -3
- package/esm2022/lib/components/table/partials/table-busy/table-busy.directive.mjs +3 -3
- package/esm2022/lib/components/table/partials/table-busy-outlet/table-busy-outlet.directive.mjs +3 -3
- package/esm2022/lib/components/tabs/components/inline-tabs/inline-tabs.component.mjs +3 -3
- package/esm2022/lib/components/tabs/components/nav-tabs/nav-tabs.component.mjs +3 -3
- package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab/inline-tab.component.mjs +3 -3
- package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-body/inline-tab-body.component.mjs +3 -3
- package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-body-host/inline-tab-body-host.directive.mjs +3 -3
- package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-content/inline-tab-content.directive.mjs +3 -3
- package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-header/inline-tab-header.component.mjs +3 -3
- package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-label/inline-tab-label.directive.mjs +3 -3
- package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-label-wrapper/inline-tab-label-wrapper.directive.mjs +3 -3
- package/esm2022/lib/components/tabs/partials/nav-tabs/nav-tab-link/nav-tab-link.directive.mjs +3 -3
- package/esm2022/lib/components/tabs/partials/nav-tabs/nav-tabs-outlet/nav-tabs-outlet.component.mjs +3 -3
- package/esm2022/lib/components/tabs/utils/active-tab-underline.util.mjs +3 -3
- package/esm2022/lib/components/tabs/utils/paginated-tab-header.directive.mjs +3 -3
- package/esm2022/lib/services/swipe-handler.service.mjs +3 -3
- package/fesm2022/ethlete-cdk.mjs +1941 -719
- package/fesm2022/ethlete-cdk.mjs.map +1 -1
- package/lib/components/forms/components/select/components/combobox/combobox.imports.d.ts +5 -0
- package/lib/components/forms/components/select/components/combobox/components/combobox/combobox.component.d.ts +63 -0
- package/lib/components/forms/components/select/components/combobox/components/combobox/public-api.d.ts +1 -0
- package/lib/components/forms/components/select/components/combobox/components/index.d.ts +1 -0
- package/lib/components/forms/components/select/components/combobox/components/public-api.d.ts +1 -0
- package/lib/components/forms/components/select/components/combobox/directives/combobox/combobox.directive.d.ts +7 -0
- package/lib/components/forms/components/select/components/combobox/directives/combobox/public-api.d.ts +1 -0
- package/lib/components/forms/components/select/components/combobox/directives/public-api.d.ts +1 -0
- package/lib/components/forms/components/select/components/combobox/partials/combobox-body/combobox-body.component.d.ts +16 -0
- package/lib/components/forms/components/select/components/combobox/partials/combobox-body/public-api.d.ts +1 -0
- package/lib/components/forms/components/select/components/combobox/partials/combobox-option/combobox-option.component.d.ts +16 -0
- package/lib/components/forms/components/select/components/combobox/partials/combobox-option/index.d.ts +1 -0
- package/lib/components/forms/components/select/components/combobox/partials/combobox-option/public-api.d.ts +1 -0
- package/lib/components/forms/components/select/components/combobox/partials/index.d.ts +1 -0
- package/lib/components/forms/components/select/components/combobox/partials/public-api.d.ts +2 -0
- package/lib/components/forms/components/select/components/combobox/public-api.d.ts +3 -0
- package/lib/components/forms/components/select/components/public-api.d.ts +1 -0
- package/lib/components/forms/components/select/components/select/components/select/select.component.d.ts +8 -11
- package/lib/components/forms/components/select/components/select/directives/index.d.ts +1 -0
- package/lib/components/forms/components/select/components/select/directives/public-api.d.ts +3 -0
- package/lib/components/forms/components/select/components/select/directives/select/index.d.ts +1 -0
- package/lib/components/forms/components/select/components/select/directives/select/public-api.d.ts +1 -0
- package/lib/components/forms/components/select/components/select/directives/select/select.directive.d.ts +96 -0
- package/lib/components/forms/components/select/components/select/directives/select-body/index.d.ts +1 -0
- package/lib/components/forms/components/select/components/select/directives/select-body/public-api.d.ts +1 -0
- package/lib/components/forms/components/select/components/select/directives/select-body/select-body.directive.d.ts +14 -0
- package/lib/components/forms/components/select/components/select/directives/select-option/index.d.ts +1 -0
- package/lib/components/forms/components/select/components/select/directives/select-option/public-api.d.ts +1 -0
- package/lib/components/forms/components/select/components/select/directives/select-option/select-option.directive.d.ts +29 -0
- package/lib/components/forms/components/select/components/select/partials/public-api.d.ts +0 -1
- package/lib/components/forms/components/select/components/select/partials/select-body/select-body.component.d.ts +6 -1
- package/lib/components/forms/components/select/components/select/partials/select-option/select-option.component.d.ts +4 -1
- package/lib/components/forms/components/select/components/select/public-api.d.ts +1 -0
- package/lib/components/forms/components/select/components/select/select.imports.d.ts +2 -2
- package/lib/components/forms/components/select/components/select-field/select-field.component.d.ts +5 -4
- package/lib/components/forms/components/select/directives/index.d.ts +1 -0
- package/lib/components/forms/components/select/directives/public-api.d.ts +1 -0
- package/lib/components/forms/components/select/directives/select-field/public-api.d.ts +1 -0
- package/lib/components/forms/components/select/directives/select-field/select-field.directive.d.ts +8 -0
- package/lib/components/forms/components/select/public-api.d.ts +1 -0
- package/lib/components/forms/components/slider/components/slider/slider.component.d.ts +1 -1
- package/lib/components/forms/directives/input/input.directive.d.ts +3 -1
- package/lib/components/forms/utils/decorated-input.base.d.ts +1 -1
- package/lib/components/forms/utils/input.base.d.ts +2 -4
- package/package.json +5 -5
- package/esm2022/lib/components/forms/components/select/components/select/partials/tree-select-option/public-api.mjs +0 -2
- package/esm2022/lib/components/forms/components/select/components/select/partials/tree-select-option/tree-select-option.component.mjs +0 -23
- package/lib/components/forms/components/select/components/select/partials/tree-select-option/public-api.d.ts +0 -1
- package/lib/components/forms/components/select/components/select/partials/tree-select-option/tree-select-option.component.d.ts +0 -5
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
import { LiveAnnouncer } from '@angular/cdk/a11y';
|
|
2
|
+
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
3
|
+
import { A, DOWN_ARROW, END, ENTER, ESCAPE, HOME, LEFT_ARROW, PAGE_DOWN, PAGE_UP, RIGHT_ARROW, SPACE, UP_ARROW, hasModifierKey, } from '@angular/cdk/keycodes';
|
|
4
|
+
import { ContentChildren, Directive, InjectionToken, Input, inject, } from '@angular/core';
|
|
5
|
+
import { AnimatedOverlayDirective, TypedQueryList, createDestroy, createReactiveBindings, } from '@ethlete/core';
|
|
6
|
+
import { BehaviorSubject, combineLatest, firstValueFrom, map, of, startWith, switchMap, takeUntil, tap } from 'rxjs';
|
|
7
|
+
import { INPUT_TOKEN } from '../../../../../../directives';
|
|
8
|
+
import { SELECT_FIELD_TOKEN } from '../../../../directives';
|
|
9
|
+
import { SELECT_OPTION_TOKEN } from '../select-option';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "@ethlete/core";
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
13
|
+
export const SELECT_TOKEN = new InjectionToken('ET_SELECT_INPUT_TOKEN');
|
|
14
|
+
let uniqueId = 0;
|
|
15
|
+
class SelectDirective {
|
|
16
|
+
get multiple() {
|
|
17
|
+
return this._multiple$.value;
|
|
18
|
+
}
|
|
19
|
+
set multiple(value) {
|
|
20
|
+
this._multiple$.next(coerceBooleanProperty(value));
|
|
21
|
+
this._migrateSelectValue();
|
|
22
|
+
}
|
|
23
|
+
set _selectOptionsQueryList(value) {
|
|
24
|
+
this._selectOptionsQueryList$.next(value);
|
|
25
|
+
}
|
|
26
|
+
constructor() {
|
|
27
|
+
this._selectBodyConfig = null;
|
|
28
|
+
this._animatedOverlay = inject(AnimatedOverlayDirective);
|
|
29
|
+
this._destroy$ = createDestroy();
|
|
30
|
+
this._liveAnnouncer = inject(LiveAnnouncer);
|
|
31
|
+
this._selectField = inject(SELECT_FIELD_TOKEN);
|
|
32
|
+
this.input = inject(INPUT_TOKEN);
|
|
33
|
+
this._selectBodyId$ = new BehaviorSubject(null);
|
|
34
|
+
this._isOpen$ = new BehaviorSubject(false);
|
|
35
|
+
this._multiple$ = new BehaviorSubject(false);
|
|
36
|
+
this._selectOptionsQueryList$ = new BehaviorSubject(null);
|
|
37
|
+
this.selectOptions$ = this._selectOptionsQueryList$.pipe(switchMap((queryList) => queryList?.changes.pipe(startWith(queryList)) ?? of(null)), switchMap((queryList) => {
|
|
38
|
+
if (!queryList)
|
|
39
|
+
return of(null);
|
|
40
|
+
const items = queryList
|
|
41
|
+
.filter((i) => !!i)
|
|
42
|
+
.map((opt) => combineLatest([opt.isSelected$, opt.isActive$]).pipe(map(([selected, active]) => ({ opt, selected, active }))));
|
|
43
|
+
return combineLatest(items ?? of(null));
|
|
44
|
+
}));
|
|
45
|
+
this.activeOption$ = this.selectOptions$.pipe(map((options) => {
|
|
46
|
+
if (!options)
|
|
47
|
+
return null;
|
|
48
|
+
return options.find((option) => option.active) ?? null;
|
|
49
|
+
}));
|
|
50
|
+
this.selectedOptions$ = this.selectOptions$.pipe(map((options) => {
|
|
51
|
+
if (!options)
|
|
52
|
+
return null;
|
|
53
|
+
const selectedOptions = options.filter((option) => option.selected);
|
|
54
|
+
if (!selectedOptions.length)
|
|
55
|
+
return null;
|
|
56
|
+
const inputValue = this.input.value;
|
|
57
|
+
if (this.multiple && Array.isArray(inputValue)) {
|
|
58
|
+
// sort selected options by the order of the input value
|
|
59
|
+
const selectedOptionsMap = new Map(selectedOptions.map((option) => [option.opt.value, option]));
|
|
60
|
+
return inputValue
|
|
61
|
+
.map((value) => selectedOptionsMap.get(value))
|
|
62
|
+
.filter((option) => !!option);
|
|
63
|
+
}
|
|
64
|
+
return selectedOptions;
|
|
65
|
+
}));
|
|
66
|
+
this.selectedOption$ = this.selectedOptions$.pipe(map((options) => options?.[0] ?? null));
|
|
67
|
+
this.selectBodyId$ = this._selectBodyId$.asObservable();
|
|
68
|
+
this.isOpen$ = this._isOpen$.asObservable();
|
|
69
|
+
this.multiple$ = this._multiple$.asObservable();
|
|
70
|
+
this.selectCurrentValueId = `et-select-current-value-${uniqueId++}`;
|
|
71
|
+
this.ariaViewValue$ = this.selectedOptions$.pipe(switchMap((options) => {
|
|
72
|
+
if (!options?.length)
|
|
73
|
+
return of(null);
|
|
74
|
+
const viewValues = options.map((option) => option.opt.viewValue$);
|
|
75
|
+
return combineLatest(viewValues);
|
|
76
|
+
}), map((viewValues) => {
|
|
77
|
+
if (!viewValues)
|
|
78
|
+
return null;
|
|
79
|
+
return viewValues.join(', ');
|
|
80
|
+
}));
|
|
81
|
+
this.activeDescendant$ = combineLatest([this.isOpen$, this.activeOption$]).pipe(map(([isOpen, activeOption]) => {
|
|
82
|
+
if (!isOpen || !activeOption)
|
|
83
|
+
return null;
|
|
84
|
+
return activeOption.opt.id;
|
|
85
|
+
}));
|
|
86
|
+
this.owns$ = combineLatest([this.isOpen$, this.selectBodyId$]).pipe(map(([isOpen, selectBodyId]) => {
|
|
87
|
+
if (!isOpen || !selectBodyId) {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
return selectBodyId;
|
|
91
|
+
}));
|
|
92
|
+
this.labelledBy$ = this.input.labelId$.pipe(map((labelId) => {
|
|
93
|
+
const ids = [labelId, this.selectCurrentValueId];
|
|
94
|
+
return ids.filter((id) => !!id).join(' ');
|
|
95
|
+
}));
|
|
96
|
+
this._bindings = createReactiveBindings({
|
|
97
|
+
attribute: 'class.et-select--is-open',
|
|
98
|
+
observable: this.isOpen$,
|
|
99
|
+
}, {
|
|
100
|
+
attribute: 'class.et-select--disabled',
|
|
101
|
+
observable: this.input.disabled$,
|
|
102
|
+
});
|
|
103
|
+
this.trackByFn = (_, item) => item.id;
|
|
104
|
+
this._animatedOverlay.placement = 'bottom';
|
|
105
|
+
this._selectField._bindings.push({
|
|
106
|
+
attribute: 'class.et-select-field--open',
|
|
107
|
+
observable: this._isOpen$,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
ngOnInit() {
|
|
111
|
+
this._unmountSelectBodyOnDisable();
|
|
112
|
+
this._migrateSelectValue();
|
|
113
|
+
}
|
|
114
|
+
ngAfterContentInit() {
|
|
115
|
+
this._setSelectedOptionActive();
|
|
116
|
+
}
|
|
117
|
+
mountSelectBody() {
|
|
118
|
+
if (!this._selectBodyConfig)
|
|
119
|
+
return;
|
|
120
|
+
if (this._animatedOverlay.isMounted || this.input.disabled)
|
|
121
|
+
return;
|
|
122
|
+
this._setSelectedOptionActive();
|
|
123
|
+
const instance = this._animatedOverlay.mount({
|
|
124
|
+
component: this._selectBodyConfig.component,
|
|
125
|
+
mirrorWidth: true,
|
|
126
|
+
data: { _bodyTemplate: this._selectBodyConfig.template },
|
|
127
|
+
});
|
|
128
|
+
if (!instance)
|
|
129
|
+
return;
|
|
130
|
+
this._selectBodyId$.next(instance.selectBody.id);
|
|
131
|
+
this._isOpen$.next(true);
|
|
132
|
+
}
|
|
133
|
+
unmountSelectBody() {
|
|
134
|
+
if (!this._animatedOverlay.isMounted)
|
|
135
|
+
return;
|
|
136
|
+
this._animatedOverlay.unmount();
|
|
137
|
+
this._selectBodyId$.next(null);
|
|
138
|
+
this._isOpen$.next(false);
|
|
139
|
+
}
|
|
140
|
+
setValue(value) {
|
|
141
|
+
this.input._updateValue(value);
|
|
142
|
+
this.input._markAsTouched();
|
|
143
|
+
this.input._setShouldDisplayError(true);
|
|
144
|
+
}
|
|
145
|
+
handleKeyDown(event) {
|
|
146
|
+
if (this._isOpen$.value) {
|
|
147
|
+
this._handleKeyDownInOpenState(event);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
this._handleKeyDownInClosedState(event);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
setSelectBody(config) {
|
|
154
|
+
this._selectBodyConfig = config;
|
|
155
|
+
}
|
|
156
|
+
removeOptionFromSelection(option) {
|
|
157
|
+
if (!this.multiple || !Array.isArray(this.input.value))
|
|
158
|
+
return;
|
|
159
|
+
const value = this.input.value.filter((v) => v !== option.value);
|
|
160
|
+
this.setValue(value);
|
|
161
|
+
}
|
|
162
|
+
_controlTouched() {
|
|
163
|
+
this.input._markAsTouched();
|
|
164
|
+
this.input._setShouldDisplayError(true);
|
|
165
|
+
}
|
|
166
|
+
_unmountSelectBodyOnDisable() {
|
|
167
|
+
this.input.disabled$
|
|
168
|
+
.pipe(tap((disabled) => {
|
|
169
|
+
if (!disabled)
|
|
170
|
+
return;
|
|
171
|
+
this.unmountSelectBody();
|
|
172
|
+
}), takeUntil(this._destroy$))
|
|
173
|
+
.subscribe();
|
|
174
|
+
}
|
|
175
|
+
_handleKeyDownInClosedState(event) {
|
|
176
|
+
const keyCode = event.keyCode;
|
|
177
|
+
const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW || keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW;
|
|
178
|
+
const isOpenKey = keyCode === ENTER || keyCode === SPACE;
|
|
179
|
+
if ((isOpenKey && !hasModifierKey(event)) || ((this.multiple || event.altKey) && isArrowKey)) {
|
|
180
|
+
event.preventDefault();
|
|
181
|
+
this.mountSelectBody();
|
|
182
|
+
}
|
|
183
|
+
else if (!this.multiple) {
|
|
184
|
+
switch (keyCode) {
|
|
185
|
+
case DOWN_ARROW:
|
|
186
|
+
this._selectOptionByOffset(1, true);
|
|
187
|
+
break;
|
|
188
|
+
case UP_ARROW:
|
|
189
|
+
this._selectOptionByOffset(-1, true);
|
|
190
|
+
break;
|
|
191
|
+
case HOME:
|
|
192
|
+
this._selectFirstOption(true);
|
|
193
|
+
break;
|
|
194
|
+
case END:
|
|
195
|
+
this._selectLastOption(true);
|
|
196
|
+
break;
|
|
197
|
+
case PAGE_UP:
|
|
198
|
+
this._selectOptionByOffset(-10, true);
|
|
199
|
+
break;
|
|
200
|
+
case PAGE_DOWN:
|
|
201
|
+
this._selectOptionByOffset(10, true);
|
|
202
|
+
break;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
else if (this.multiple && isArrowKey) {
|
|
206
|
+
event.preventDefault();
|
|
207
|
+
this.mountSelectBody();
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
async _handleKeyDownInOpenState(event) {
|
|
211
|
+
const keyCode = event.keyCode;
|
|
212
|
+
const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW;
|
|
213
|
+
if (isArrowKey && event.altKey) {
|
|
214
|
+
event.preventDefault();
|
|
215
|
+
this.unmountSelectBody();
|
|
216
|
+
}
|
|
217
|
+
else if (keyCode === ESCAPE && !hasModifierKey(event)) {
|
|
218
|
+
event.preventDefault();
|
|
219
|
+
this.unmountSelectBody();
|
|
220
|
+
}
|
|
221
|
+
else if (keyCode === ENTER || keyCode === SPACE) {
|
|
222
|
+
if (this.multiple) {
|
|
223
|
+
this._toggleActiveOptionSelection();
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
this._setActiveOptionSelected();
|
|
227
|
+
}
|
|
228
|
+
event.preventDefault();
|
|
229
|
+
}
|
|
230
|
+
else if (this.multiple && keyCode === A && event.ctrlKey) {
|
|
231
|
+
event.preventDefault();
|
|
232
|
+
this._toggleSelectionOfAllOptions();
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
switch (keyCode) {
|
|
236
|
+
case DOWN_ARROW:
|
|
237
|
+
this._activateOptionByOffset(1);
|
|
238
|
+
break;
|
|
239
|
+
case UP_ARROW:
|
|
240
|
+
this._activateOptionByOffset(-1);
|
|
241
|
+
break;
|
|
242
|
+
case HOME:
|
|
243
|
+
this._activateFirstOption();
|
|
244
|
+
break;
|
|
245
|
+
case END:
|
|
246
|
+
this._activateLastOption();
|
|
247
|
+
break;
|
|
248
|
+
case PAGE_UP:
|
|
249
|
+
this._activateOptionByOffset(-10);
|
|
250
|
+
break;
|
|
251
|
+
case PAGE_DOWN:
|
|
252
|
+
this._activateOptionByOffset(10);
|
|
253
|
+
break;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
async _setActiveOption(option) {
|
|
258
|
+
const currentActiveOption = await firstValueFrom(this.activeOption$);
|
|
259
|
+
if (currentActiveOption?.opt === option)
|
|
260
|
+
return false;
|
|
261
|
+
currentActiveOption?.opt._setActive(false);
|
|
262
|
+
if (option) {
|
|
263
|
+
option._setActive(true);
|
|
264
|
+
}
|
|
265
|
+
return true;
|
|
266
|
+
}
|
|
267
|
+
async _addActiveOptionToSelection() {
|
|
268
|
+
const activeOption = await firstValueFrom(this.activeOption$);
|
|
269
|
+
if (!activeOption || activeOption.opt.disabled || activeOption.selected)
|
|
270
|
+
return;
|
|
271
|
+
if (!Array.isArray(this.input.value)) {
|
|
272
|
+
this.setValue([activeOption.opt.value]);
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
this.setValue([...this.input.value, activeOption.opt.value]);
|
|
276
|
+
}
|
|
277
|
+
async _removeActiveOptionFromSelection() {
|
|
278
|
+
const activeOption = await firstValueFrom(this.activeOption$);
|
|
279
|
+
if (!activeOption || activeOption.opt.disabled || !activeOption.selected)
|
|
280
|
+
return;
|
|
281
|
+
if (!Array.isArray(this.input.value)) {
|
|
282
|
+
this.setValue([]);
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
this.setValue(this.input.value.filter((value) => value !== activeOption.opt.value));
|
|
286
|
+
}
|
|
287
|
+
async _toggleSelectionOfAllOptions() {
|
|
288
|
+
const allOptions = await firstValueFrom(this.selectOptions$);
|
|
289
|
+
const hasDeselectedOption = allOptions?.some((opt) => !opt.opt.disabled && !opt.selected);
|
|
290
|
+
if (hasDeselectedOption) {
|
|
291
|
+
this._selectAllOptions();
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
this._deselectAllOptions();
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
async _selectAllOptions() {
|
|
298
|
+
const allOptions = await firstValueFrom(this.selectOptions$);
|
|
299
|
+
if (!allOptions)
|
|
300
|
+
return;
|
|
301
|
+
const selectedOptions = allOptions.filter((opt) => !opt.opt.disabled).map((opt) => opt.opt.value);
|
|
302
|
+
this.setValue(selectedOptions);
|
|
303
|
+
}
|
|
304
|
+
async _deselectAllOptions() {
|
|
305
|
+
this.setValue([]);
|
|
306
|
+
}
|
|
307
|
+
async _toggleActiveOptionSelection() {
|
|
308
|
+
const activeOption = await firstValueFrom(this.activeOption$);
|
|
309
|
+
if (!activeOption)
|
|
310
|
+
return;
|
|
311
|
+
if (activeOption.selected) {
|
|
312
|
+
this._removeActiveOptionFromSelection();
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
this._addActiveOptionToSelection();
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
async _setActiveOptionSelected() {
|
|
319
|
+
const activeOption = await firstValueFrom(this.activeOption$);
|
|
320
|
+
if (!activeOption || activeOption.opt.disabled)
|
|
321
|
+
return;
|
|
322
|
+
this._setSelectedOption(activeOption.opt);
|
|
323
|
+
this.unmountSelectBody();
|
|
324
|
+
}
|
|
325
|
+
async _setSelectedOptionActive() {
|
|
326
|
+
const selectedOption = await firstValueFrom(this.selectedOption$);
|
|
327
|
+
if (!selectedOption)
|
|
328
|
+
return;
|
|
329
|
+
this._setActiveOption(selectedOption.opt);
|
|
330
|
+
}
|
|
331
|
+
async _setSelectedOption(option) {
|
|
332
|
+
const selectedOption = await firstValueFrom(this.selectedOption$);
|
|
333
|
+
if (selectedOption === option)
|
|
334
|
+
return false;
|
|
335
|
+
this._setActiveOption(option);
|
|
336
|
+
this.setValue(option?.value ?? null);
|
|
337
|
+
return true;
|
|
338
|
+
}
|
|
339
|
+
async _selectFirstOption(announce) {
|
|
340
|
+
const options = await firstValueFrom(this.selectOptions$);
|
|
341
|
+
if (!options)
|
|
342
|
+
return;
|
|
343
|
+
const firstOption = options[0]?.opt;
|
|
344
|
+
if (!firstOption)
|
|
345
|
+
return;
|
|
346
|
+
if (!this._setSelectedOption(firstOption))
|
|
347
|
+
return;
|
|
348
|
+
if (announce) {
|
|
349
|
+
const text = await firstValueFrom(firstOption.viewValue$);
|
|
350
|
+
this._liveAnnouncer.announce(text, 10000);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
async _selectLastOption(announce) {
|
|
354
|
+
const options = await firstValueFrom(this.selectOptions$);
|
|
355
|
+
if (!options)
|
|
356
|
+
return;
|
|
357
|
+
const lastOption = options[options.length - 1]?.opt;
|
|
358
|
+
if (!lastOption)
|
|
359
|
+
return;
|
|
360
|
+
if (!this._setSelectedOption(lastOption))
|
|
361
|
+
return;
|
|
362
|
+
if (announce) {
|
|
363
|
+
const text = await firstValueFrom(lastOption.viewValue$);
|
|
364
|
+
this._liveAnnouncer.announce(text, 10000);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
async _selectOptionByOffset(offset, announce) {
|
|
368
|
+
const options = await firstValueFrom(this.selectOptions$);
|
|
369
|
+
if (!options)
|
|
370
|
+
return;
|
|
371
|
+
const selectedOption = await firstValueFrom(this.selectedOption$);
|
|
372
|
+
const selectedOptionIndex = options.findIndex((o) => o.opt === selectedOption?.opt);
|
|
373
|
+
const nextOptionIndex = selectedOptionIndex + offset;
|
|
374
|
+
const nextOption = options[nextOptionIndex];
|
|
375
|
+
if (!nextOption)
|
|
376
|
+
return;
|
|
377
|
+
if (nextOption.opt.disabled) {
|
|
378
|
+
return this._selectOptionByOffset(offset + (offset < 0 ? -1 : 1), announce);
|
|
379
|
+
}
|
|
380
|
+
if (!this._setSelectedOption(nextOption.opt))
|
|
381
|
+
return;
|
|
382
|
+
if (announce) {
|
|
383
|
+
const text = await firstValueFrom(nextOption.opt.viewValue$);
|
|
384
|
+
this._liveAnnouncer.announce(text, 10000);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
async _activateFirstOption() {
|
|
388
|
+
const options = await firstValueFrom(this.selectOptions$);
|
|
389
|
+
if (!options)
|
|
390
|
+
return;
|
|
391
|
+
const firstOption = options[0]?.opt;
|
|
392
|
+
if (!firstOption)
|
|
393
|
+
return;
|
|
394
|
+
await this._setActiveOption(firstOption);
|
|
395
|
+
}
|
|
396
|
+
async _activateLastOption() {
|
|
397
|
+
const options = await firstValueFrom(this.selectOptions$);
|
|
398
|
+
if (!options)
|
|
399
|
+
return;
|
|
400
|
+
const lastOption = options[options.length - 1]?.opt;
|
|
401
|
+
if (!lastOption)
|
|
402
|
+
return;
|
|
403
|
+
await this._setActiveOption(lastOption);
|
|
404
|
+
}
|
|
405
|
+
async _activateOptionByOffset(offset) {
|
|
406
|
+
const options = await firstValueFrom(this.selectOptions$);
|
|
407
|
+
if (!options)
|
|
408
|
+
return;
|
|
409
|
+
const activatedOption = await firstValueFrom(this.activeOption$);
|
|
410
|
+
const activatedOptionIndex = options.findIndex((o) => o.opt === activatedOption?.opt);
|
|
411
|
+
const nextOptionIndex = activatedOptionIndex + offset;
|
|
412
|
+
const nextOption = options[nextOptionIndex];
|
|
413
|
+
if (!nextOption)
|
|
414
|
+
return;
|
|
415
|
+
await this._setActiveOption(nextOption.opt);
|
|
416
|
+
}
|
|
417
|
+
async _migrateSelectValue() {
|
|
418
|
+
if (this.multiple && !Array.isArray(this.input.value)) {
|
|
419
|
+
this.setValue([]);
|
|
420
|
+
}
|
|
421
|
+
else if (!this.multiple && Array.isArray(this.input.value)) {
|
|
422
|
+
this.setValue(null);
|
|
423
|
+
}
|
|
424
|
+
this._setActiveOption(null);
|
|
425
|
+
}
|
|
426
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: SelectDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
427
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.2", type: SelectDirective, isStandalone: true, inputs: { multiple: "multiple", emptyText: "emptyText" }, providers: [
|
|
428
|
+
{
|
|
429
|
+
provide: SELECT_TOKEN,
|
|
430
|
+
useExisting: SelectDirective,
|
|
431
|
+
},
|
|
432
|
+
], queries: [{ propertyName: "_selectOptionsQueryList", predicate: SELECT_OPTION_TOKEN, descendants: true }], hostDirectives: [{ directive: i1.AnimatedOverlayDirective }], ngImport: i0 }); }
|
|
433
|
+
}
|
|
434
|
+
export { SelectDirective };
|
|
435
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: SelectDirective, decorators: [{
|
|
436
|
+
type: Directive,
|
|
437
|
+
args: [{
|
|
438
|
+
standalone: true,
|
|
439
|
+
hostDirectives: [AnimatedOverlayDirective],
|
|
440
|
+
providers: [
|
|
441
|
+
{
|
|
442
|
+
provide: SELECT_TOKEN,
|
|
443
|
+
useExisting: SelectDirective,
|
|
444
|
+
},
|
|
445
|
+
],
|
|
446
|
+
}]
|
|
447
|
+
}], ctorParameters: function () { return []; }, propDecorators: { multiple: [{
|
|
448
|
+
type: Input
|
|
449
|
+
}], emptyText: [{
|
|
450
|
+
type: Input
|
|
451
|
+
}], _selectOptionsQueryList: [{
|
|
452
|
+
type: ContentChildren,
|
|
453
|
+
args: [SELECT_OPTION_TOKEN, { descendants: true }]
|
|
454
|
+
}] } });
|
|
455
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL3NyYy9saWIvY29tcG9uZW50cy9mb3Jtcy9jb21wb25lbnRzL3NlbGVjdC9jb21wb25lbnRzL3NlbGVjdC9kaXJlY3RpdmVzL3NlbGVjdC9zZWxlY3QuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQWdCLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUNMLENBQUMsRUFDRCxVQUFVLEVBQ1YsR0FBRyxFQUNILEtBQUssRUFDTCxNQUFNLEVBQ04sSUFBSSxFQUNKLFVBQVUsRUFDVixTQUFTLEVBQ1QsT0FBTyxFQUNQLFdBQVcsRUFDWCxLQUFLLEVBQ0wsUUFBUSxFQUNSLGNBQWMsR0FDZixNQUFNLHVCQUF1QixDQUFDO0FBRS9CLE9BQU8sRUFFTCxlQUFlLEVBQ2YsU0FBUyxFQUNULGNBQWMsRUFDZCxLQUFLLEVBSUwsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFTCx3QkFBd0IsRUFDeEIsY0FBYyxFQUNkLGFBQWEsRUFDYixzQkFBc0IsR0FDdkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQXlCLE1BQU0sa0JBQWtCLENBQUM7OztBQUU5RSw4REFBOEQ7QUFDOUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLElBQUksY0FBYyxDQUF1Qix1QkFBdUIsQ0FBQyxDQUFDO0FBTzlGLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQU9qQixNQVVhLGVBQWU7SUFZMUIsSUFDSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsS0FBbUI7UUFDOUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBTUQsSUFDWSx1QkFBdUIsQ0FBQyxLQUE0QztRQUM5RSxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFzSEQ7UUFsSlEsc0JBQWlCLEdBQStCLElBQUksQ0FBQztRQUU1QyxxQkFBZ0IsR0FBRyxNQUFNLENBQThCLHdCQUF3QixDQUFDLENBQUM7UUFDakYsY0FBUyxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBQzVCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZDLGlCQUFZLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDbEQsVUFBSyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVwQixtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFnQixJQUFJLENBQUMsQ0FBQztRQUMxRCxhQUFRLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFXL0MsZUFBVSxHQUFHLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBUy9CLDZCQUF3QixHQUFHLElBQUksZUFBZSxDQUErQyxJQUFJLENBQUMsQ0FBQztRQUUzRyxtQkFBYyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQzFELFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ25GLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxTQUFTO2dCQUFFLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWhDLE1BQU0sS0FBSyxHQUFHLFNBQVM7aUJBQ3BCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBOEIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzlDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ1gsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQ3pELENBQ0YsQ0FBQztZQUVKLE9BQU8sYUFBYSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRU8sa0JBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDL0MsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDZCxJQUFJLENBQUMsT0FBTztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUUxQixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUM7UUFDekQsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVPLHFCQUFnQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUNsRCxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNkLElBQUksQ0FBQyxPQUFPO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBRTFCLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVwRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFFekMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFFcEMsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQzlDLHdEQUF3RDtnQkFDeEQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEcsT0FBTyxVQUFVO3FCQUNkLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUM3QyxNQUFNLENBQ0wsQ0FDRSxNQUFNLEVBS04sRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQ2QsQ0FBQzthQUNMO1lBRUQsT0FBTyxlQUFlLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVPLG9CQUFlLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFckYsa0JBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ25ELFlBQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLGNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTNDLHlCQUFvQixHQUFHLDJCQUEyQixRQUFRLEVBQUUsRUFBRSxDQUFDO1FBRS9ELG1CQUFjLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDbEQsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDcEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNO2dCQUFFLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXRDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFbEUsT0FBTyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDakIsSUFBSSxDQUFDLFVBQVU7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFFN0IsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFTyxzQkFBaUIsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDakYsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBWTtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUUxQyxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFTyxVQUFLLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3JFLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUU7WUFDN0IsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDNUIsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUVELE9BQU8sWUFBWSxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFTyxnQkFBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDN0MsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDZCxNQUFNLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUVqRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVPLGNBQVMsR0FBRyxzQkFBc0IsQ0FDekM7WUFDRSxTQUFTLEVBQUUsMEJBQTBCO1lBQ3JDLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTztTQUN6QixFQUNEO1lBQ0UsU0FBUyxFQUFFLDJCQUEyQjtZQUN0QyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTO1NBQ2pDLENBQ0YsQ0FBQztRQW9CRixjQUFTLEdBQTJDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQWpCdkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFFM0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQy9CLFNBQVMsRUFBRSw2QkFBNkI7WUFDeEMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQzFCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBSUQsZUFBZTtRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCO1lBQUUsT0FBTztRQUVwQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUVuRSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUVoQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1lBQzNDLFNBQVMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUztZQUMzQyxXQUFXLEVBQUUsSUFBSTtZQUNqQixJQUFJLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBZ0I7U0FDdkUsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBRXRCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUztZQUFFLE9BQU87UUFFN0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRWhDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBYztRQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUvQixJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFvQjtRQUNoQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2QzthQUFNO1lBQ0wsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUEyQjtRQUN2QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDO0lBQ2xDLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxNQUE2QjtRQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPO1FBRS9ELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTywyQkFBMkI7UUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTO2FBQ2pCLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksQ0FBQyxRQUFRO2dCQUFFLE9BQU87WUFFdEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUI7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU8sMkJBQTJCLENBQUMsS0FBb0I7UUFDdEQsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM5QixNQUFNLFVBQVUsR0FDZCxPQUFPLEtBQUssVUFBVSxJQUFJLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLFVBQVUsSUFBSSxPQUFPLEtBQUssV0FBVyxDQUFDO1FBRXRHLE1BQU0sU0FBUyxHQUFHLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssQ0FBQztRQUV6RCxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxFQUFFO1lBQzVGLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDeEI7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUN6QixRQUFRLE9BQU8sRUFBRTtnQkFDZixLQUFLLFVBQVU7b0JBQ2IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDcEMsTUFBTTtnQkFDUixLQUFLLFFBQVE7b0JBQ1gsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNyQyxNQUFNO2dCQUNSLEtBQUssSUFBSTtvQkFDUCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzlCLE1BQU07Z0JBQ1IsS0FBSyxHQUFHO29CQUNOLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDN0IsTUFBTTtnQkFDUixLQUFLLE9BQU87b0JBQ1YsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUN0QyxNQUFNO2dCQUNSLEtBQUssU0FBUztvQkFDWixJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNyQyxNQUFNO2FBQ1Q7U0FDRjthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxVQUFVLEVBQUU7WUFDdEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFTyxLQUFLLENBQUMseUJBQXlCLENBQUMsS0FBb0I7UUFDMUQsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM5QixNQUFNLFVBQVUsR0FBRyxPQUFPLEtBQUssVUFBVSxJQUFJLE9BQU8sS0FBSyxRQUFRLENBQUM7UUFFbEUsSUFBSSxVQUFVLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUM5QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDMUI7YUFBTSxJQUFJLE9BQU8sS0FBSyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdkQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQzFCO2FBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLEVBQUU7WUFDakQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNqQixJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQzthQUNyQztpQkFBTTtnQkFDTCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQzthQUNqQztZQUVELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN4QjthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7WUFDMUQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1NBQ3JDO2FBQU07WUFDTCxRQUFRLE9BQU8sRUFBRTtnQkFDZixLQUFLLFVBQVU7b0JBQ2IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNoQyxNQUFNO2dCQUNSLEtBQUssUUFBUTtvQkFDWCxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDakMsTUFBTTtnQkFDUixLQUFLLElBQUk7b0JBQ1AsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7b0JBQzVCLE1BQU07Z0JBQ1IsS0FBSyxHQUFHO29CQUNOLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO29CQUMzQixNQUFNO2dCQUNSLEtBQUssT0FBTztvQkFDVixJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDbEMsTUFBTTtnQkFDUixLQUFLLFNBQVM7b0JBQ1osSUFBSSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNqQyxNQUFNO2FBQ1Q7U0FDRjtJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBb0M7UUFDakUsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFckUsSUFBSSxtQkFBbUIsRUFBRSxHQUFHLEtBQUssTUFBTTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRXRELG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0MsSUFBSSxNQUFNLEVBQUU7WUFDVixNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pCO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sS0FBSyxDQUFDLDJCQUEyQjtRQUN2QyxNQUFNLFlBQVksR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFOUQsSUFBSSxDQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxZQUFZLENBQUMsUUFBUTtZQUFFLE9BQU87UUFFaEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRU8sS0FBSyxDQUFDLGdDQUFnQztRQUM1QyxNQUFNLFlBQVksR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFOUQsSUFBSSxDQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUVqRixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVPLEtBQUssQ0FBQyw0QkFBNEI7UUFDeEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTdELE1BQU0sbUJBQW1CLEdBQUcsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUxRixJQUFJLG1CQUFtQixFQUFFO1lBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQzFCO2FBQU07WUFDTCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsaUJBQWlCO1FBQzdCLE1BQU0sVUFBVSxHQUFHLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUU3RCxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFFeEIsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsRyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTyxLQUFLLENBQUMsbUJBQW1CO1FBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVPLEtBQUssQ0FBQyw0QkFBNEI7UUFDeEMsTUFBTSxZQUFZLEdBQUcsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTlELElBQUksQ0FBQyxZQUFZO1lBQUUsT0FBTztRQUUxQixJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUU7WUFDekIsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7U0FDekM7YUFBTTtZQUNMLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1NBQ3BDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyx3QkFBd0I7UUFDcEMsTUFBTSxZQUFZLEdBQUcsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTlELElBQUksQ0FBQyxZQUFZLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUV2RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTyxLQUFLLENBQUMsd0JBQXdCO1FBQ3BDLE1BQU0sY0FBYyxHQUFHLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVsRSxJQUFJLENBQUMsY0FBYztZQUFFLE9BQU87UUFFNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU8sS0FBSyxDQUFDLGtCQUFrQixDQUFDLE1BQW9DO1FBQ25FLE1BQU0sY0FBYyxHQUFHLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVsRSxJQUFJLGNBQWMsS0FBSyxNQUFNO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFNUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTlCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQztRQUVyQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxLQUFLLENBQUMsa0JBQWtCLENBQUMsUUFBaUI7UUFDaEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUVyQixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO1FBRXBDLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUV6QixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQztZQUFFLE9BQU87UUFFbEQsSUFBSSxRQUFRLEVBQUU7WUFDWixNQUFNLElBQUksR0FBRyxNQUFNLGNBQWMsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzNDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxRQUFpQjtRQUMvQyxNQUFNLE9BQU8sR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFMUQsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBRXJCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztRQUVwRCxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFFeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUM7WUFBRSxPQUFPO1FBRWpELElBQUksUUFBUSxFQUFFO1lBQ1osTUFBTSxJQUFJLEdBQUcsTUFBTSxjQUFjLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUMzQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMscUJBQXFCLENBQUMsTUFBYyxFQUFFLFFBQWlCO1FBQ25FLE1BQU0sT0FBTyxHQUFHLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUUxRCxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFFckIsTUFBTSxjQUFjLEdBQUcsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDcEYsTUFBTSxlQUFlLEdBQUcsbUJBQW1CLEdBQUcsTUFBTSxDQUFDO1FBQ3JELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFFeEIsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRTtZQUMzQixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDN0U7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPO1FBRXJELElBQUksUUFBUSxFQUFFO1lBQ1osTUFBTSxJQUFJLEdBQUcsTUFBTSxjQUFjLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDM0M7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLG9CQUFvQjtRQUNoQyxNQUFNLE9BQU8sR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFMUQsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBRXJCLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7UUFFcEMsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBRXpCLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTyxLQUFLLENBQUMsbUJBQW1CO1FBQy9CLE1BQU0sT0FBTyxHQUFHLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUUxRCxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFFckIsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO1FBRXBELElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUV4QixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU8sS0FBSyxDQUFDLHVCQUF1QixDQUFDLE1BQWM7UUFDbEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUVyQixNQUFNLGVBQWUsR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakUsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLGVBQWUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0RixNQUFNLGVBQWUsR0FBRyxvQkFBb0IsR0FBRyxNQUFNLENBQUM7UUFDdEQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRTVDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUV4QixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVPLEtBQUssQ0FBQyxtQkFBbUI7UUFDL0IsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3JELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDbkI7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDNUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNyQjtRQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDOzhHQXZoQlUsZUFBZTtrR0FBZixlQUFlLDJGQVBmO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLFlBQVk7Z0JBQ3JCLFdBQVcsRUFBRSxlQUFlO2FBQzdCO1NBQ0Ysa0VBNEJnQixtQkFBbUI7O1NBMUJ6QixlQUFlOzJGQUFmLGVBQWU7a0JBVjNCLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLGNBQWMsRUFBRSxDQUFDLHdCQUF3QixDQUFDO29CQUMxQyxTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLFlBQVk7NEJBQ3JCLFdBQVcsaUJBQWlCO3lCQUM3QjtxQkFDRjtpQkFDRjswRUFjSyxRQUFRO3NCQURYLEtBQUs7Z0JBWU4sU0FBUztzQkFEUixLQUFLO2dCQUlNLHVCQUF1QjtzQkFEbEMsZUFBZTt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMaXZlQW5ub3VuY2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgQSxcbiAgRE9XTl9BUlJPVyxcbiAgRU5ELFxuICBFTlRFUixcbiAgRVNDQVBFLFxuICBIT01FLFxuICBMRUZUX0FSUk9XLFxuICBQQUdFX0RPV04sXG4gIFBBR0VfVVAsXG4gIFJJR0hUX0FSUk9XLFxuICBTUEFDRSxcbiAgVVBfQVJST1csXG4gIGhhc01vZGlmaWVyS2V5LFxufSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBEaXJlY3RpdmUsXG4gIEluamVjdGlvblRva2VuLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBUZW1wbGF0ZVJlZixcbiAgVHJhY2tCeUZ1bmN0aW9uLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQW5pbWF0ZWRPdmVybGF5Q29tcG9uZW50QmFzZSxcbiAgQW5pbWF0ZWRPdmVybGF5RGlyZWN0aXZlLFxuICBUeXBlZFF1ZXJ5TGlzdCxcbiAgY3JlYXRlRGVzdHJveSxcbiAgY3JlYXRlUmVhY3RpdmVCaW5kaW5ncyxcbn0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZpcnN0VmFsdWVGcm9tLCBtYXAsIG9mLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElOUFVUX1RPS0VOIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBTRUxFQ1RfRklFTERfVE9LRU4gfSBmcm9tICcuLi8uLi8uLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IFNlbGVjdEJvZHlEaXJlY3RpdmUgfSBmcm9tICcuLi9zZWxlY3QtYm9keSc7XG5pbXBvcnQgeyBTRUxFQ1RfT1BUSU9OX1RPS0VOLCBTZWxlY3RPcHRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi9zZWxlY3Qtb3B0aW9uJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBjb25zdCBTRUxFQ1RfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48U2VsZWN0RGlyZWN0aXZlPGFueT4+KCdFVF9TRUxFQ1RfSU5QVVRfVE9LRU4nKTtcblxudHlwZSBTZWxlY3REaXJlY3RpdmVCb2R5Q29tcG9uZW50QmFzZSA9IEFuaW1hdGVkT3ZlcmxheUNvbXBvbmVudEJhc2UgJiB7XG4gIF9ib2R5VGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgbnVsbDtcbiAgc2VsZWN0Qm9keTogU2VsZWN0Qm9keURpcmVjdGl2ZTtcbn07XG5cbmxldCB1bmlxdWVJZCA9IDA7XG5cbmludGVyZmFjZSBTZWxlY3RCb2R5Q29uZmlnPFQgZXh0ZW5kcyBTZWxlY3REaXJlY3RpdmVCb2R5Q29tcG9uZW50QmFzZT4ge1xuICBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8VD47XG4gIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcbn1cblxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGhvc3REaXJlY3RpdmVzOiBbQW5pbWF0ZWRPdmVybGF5RGlyZWN0aXZlXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogU0VMRUNUX1RPS0VOLFxuICAgICAgdXNlRXhpc3Rpbmc6IFNlbGVjdERpcmVjdGl2ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3REaXJlY3RpdmU8VCBleHRlbmRzIFNlbGVjdERpcmVjdGl2ZUJvZHlDb21wb25lbnRCYXNlPiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCB7XG4gIHByaXZhdGUgX3NlbGVjdEJvZHlDb25maWc6IFNlbGVjdEJvZHlDb25maWc8VD4gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9hbmltYXRlZE92ZXJsYXkgPSBpbmplY3Q8QW5pbWF0ZWRPdmVybGF5RGlyZWN0aXZlPFQ+PihBbmltYXRlZE92ZXJsYXlEaXJlY3RpdmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IGNyZWF0ZURlc3Ryb3koKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGl2ZUFubm91bmNlciA9IGluamVjdChMaXZlQW5ub3VuY2VyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2VsZWN0RmllbGQgPSBpbmplY3QoU0VMRUNUX0ZJRUxEX1RPS0VOKTtcbiAgcmVhZG9ubHkgaW5wdXQgPSBpbmplY3QoSU5QVVRfVE9LRU4pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdEJvZHlJZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc09wZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgQElucHV0KClcbiAgZ2V0IG11bHRpcGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9tdWx0aXBsZSQudmFsdWU7XG4gIH1cbiAgc2V0IG11bHRpcGxlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9tdWx0aXBsZSQubmV4dChjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpKTtcblxuICAgIHRoaXMuX21pZ3JhdGVTZWxlY3RWYWx1ZSgpO1xuICB9XG4gIHByaXZhdGUgX211bHRpcGxlJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIEBJbnB1dCgpXG4gIGVtcHR5VGV4dD86IHN0cmluZztcblxuICBAQ29udGVudENoaWxkcmVuKFNFTEVDVF9PUFRJT05fVE9LRU4sIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgcHJpdmF0ZSBzZXQgX3NlbGVjdE9wdGlvbnNRdWVyeUxpc3QodmFsdWU6IFR5cGVkUXVlcnlMaXN0PFNlbGVjdE9wdGlvbkRpcmVjdGl2ZT4pIHtcbiAgICB0aGlzLl9zZWxlY3RPcHRpb25zUXVlcnlMaXN0JC5uZXh0KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3RPcHRpb25zUXVlcnlMaXN0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VHlwZWRRdWVyeUxpc3Q8U2VsZWN0T3B0aW9uRGlyZWN0aXZlPiB8IG51bGw+KG51bGwpO1xuXG4gIHJlYWRvbmx5IHNlbGVjdE9wdGlvbnMkID0gdGhpcy5fc2VsZWN0T3B0aW9uc1F1ZXJ5TGlzdCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKHF1ZXJ5TGlzdCkgPT4gcXVlcnlMaXN0Py5jaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHF1ZXJ5TGlzdCkpID8/IG9mKG51bGwpKSxcbiAgICBzd2l0Y2hNYXAoKHF1ZXJ5TGlzdCkgPT4ge1xuICAgICAgaWYgKCFxdWVyeUxpc3QpIHJldHVybiBvZihudWxsKTtcblxuICAgICAgY29uc3QgaXRlbXMgPSBxdWVyeUxpc3RcbiAgICAgICAgLmZpbHRlcigoaSk6IGkgaXMgU2VsZWN0T3B0aW9uRGlyZWN0aXZlID0+ICEhaSlcbiAgICAgICAgLm1hcCgob3B0KSA9PlxuICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW29wdC5pc1NlbGVjdGVkJCwgb3B0LmlzQWN0aXZlJF0pLnBpcGUoXG4gICAgICAgICAgICBtYXAoKFtzZWxlY3RlZCwgYWN0aXZlXSkgPT4gKHsgb3B0LCBzZWxlY3RlZCwgYWN0aXZlIH0pKSxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuXG4gICAgICByZXR1cm4gY29tYmluZUxhdGVzdChpdGVtcyA/PyBvZihudWxsKSk7XG4gICAgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgYWN0aXZlT3B0aW9uJCA9IHRoaXMuc2VsZWN0T3B0aW9ucyQucGlwZShcbiAgICBtYXAoKG9wdGlvbnMpID0+IHtcbiAgICAgIGlmICghb3B0aW9ucykgcmV0dXJuIG51bGw7XG5cbiAgICAgIHJldHVybiBvcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLmFjdGl2ZSkgPz8gbnVsbDtcbiAgICB9KSxcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3RlZE9wdGlvbnMkID0gdGhpcy5zZWxlY3RPcHRpb25zJC5waXBlKFxuICAgIG1hcCgob3B0aW9ucykgPT4ge1xuICAgICAgaWYgKCFvcHRpb25zKSByZXR1cm4gbnVsbDtcblxuICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb25zID0gb3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLnNlbGVjdGVkKTtcblxuICAgICAgaWYgKCFzZWxlY3RlZE9wdGlvbnMubGVuZ3RoKSByZXR1cm4gbnVsbDtcblxuICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IHRoaXMuaW5wdXQudmFsdWU7XG5cbiAgICAgIGlmICh0aGlzLm11bHRpcGxlICYmIEFycmF5LmlzQXJyYXkoaW5wdXRWYWx1ZSkpIHtcbiAgICAgICAgLy8gc29ydCBzZWxlY3RlZCBvcHRpb25zIGJ5IHRoZSBvcmRlciBvZiB0aGUgaW5wdXQgdmFsdWVcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb25zTWFwID0gbmV3IE1hcChzZWxlY3RlZE9wdGlvbnMubWFwKChvcHRpb24pID0+IFtvcHRpb24ub3B0LnZhbHVlLCBvcHRpb25dKSk7XG4gICAgICAgIHJldHVybiBpbnB1dFZhbHVlXG4gICAgICAgICAgLm1hcCgodmFsdWUpID0+IHNlbGVjdGVkT3B0aW9uc01hcC5nZXQodmFsdWUpKVxuICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgIG9wdGlvbixcbiAgICAgICAgICAgICk6IG9wdGlvbiBpcyB7XG4gICAgICAgICAgICAgIG9wdDogU2VsZWN0T3B0aW9uRGlyZWN0aXZlO1xuICAgICAgICAgICAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgICAgICAgICAgICAgYWN0aXZlOiBib29sZWFuO1xuICAgICAgICAgICAgfSA9PiAhIW9wdGlvbixcbiAgICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zO1xuICAgIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkT3B0aW9uJCA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zJC5waXBlKG1hcCgob3B0aW9ucykgPT4gb3B0aW9ucz8uWzBdID8/IG51bGwpKTtcblxuICByZWFkb25seSBzZWxlY3RCb2R5SWQkID0gdGhpcy5fc2VsZWN0Qm9keUlkJC5hc09ic2VydmFibGUoKTtcbiAgcmVhZG9ubHkgaXNPcGVuJCA9IHRoaXMuX2lzT3BlbiQuYXNPYnNlcnZhYmxlKCk7XG4gIHJlYWRvbmx5IG11bHRpcGxlJCA9IHRoaXMuX211bHRpcGxlJC5hc09ic2VydmFibGUoKTtcblxuICByZWFkb25seSBzZWxlY3RDdXJyZW50VmFsdWVJZCA9IGBldC1zZWxlY3QtY3VycmVudC12YWx1ZS0ke3VuaXF1ZUlkKyt9YDtcblxuICByZWFkb25seSBhcmlhVmlld1ZhbHVlJCA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zJC5waXBlKFxuICAgIHN3aXRjaE1hcCgob3B0aW9ucykgPT4ge1xuICAgICAgaWYgKCFvcHRpb25zPy5sZW5ndGgpIHJldHVybiBvZihudWxsKTtcblxuICAgICAgY29uc3Qgdmlld1ZhbHVlcyA9IG9wdGlvbnMubWFwKChvcHRpb24pID0+IG9wdGlvbi5vcHQudmlld1ZhbHVlJCk7XG5cbiAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KHZpZXdWYWx1ZXMpO1xuICAgIH0pLFxuICAgIG1hcCgodmlld1ZhbHVlcykgPT4ge1xuICAgICAgaWYgKCF2aWV3VmFsdWVzKSByZXR1cm4gbnVsbDtcblxuICAgICAgcmV0dXJuIHZpZXdWYWx1ZXMuam9pbignLCAnKTtcbiAgICB9KSxcbiAgKTtcblxuICByZWFkb25seSBhY3RpdmVEZXNjZW5kYW50JCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuaXNPcGVuJCwgdGhpcy5hY3RpdmVPcHRpb24kXSkucGlwZShcbiAgICBtYXAoKFtpc09wZW4sIGFjdGl2ZU9wdGlvbl0pID0+IHtcbiAgICAgIGlmICghaXNPcGVuIHx8ICFhY3RpdmVPcHRpb24pIHJldHVybiBudWxsO1xuXG4gICAgICByZXR1cm4gYWN0aXZlT3B0aW9uLm9wdC5pZDtcbiAgICB9KSxcbiAgKTtcblxuICByZWFkb25seSBvd25zJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuaXNPcGVuJCwgdGhpcy5zZWxlY3RCb2R5SWQkXSkucGlwZShcbiAgICBtYXAoKFtpc09wZW4sIHNlbGVjdEJvZHlJZF0pID0+IHtcbiAgICAgIGlmICghaXNPcGVuIHx8ICFzZWxlY3RCb2R5SWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZWxlY3RCb2R5SWQ7XG4gICAgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgbGFiZWxsZWRCeSQgPSB0aGlzLmlucHV0LmxhYmVsSWQkLnBpcGUoXG4gICAgbWFwKChsYWJlbElkKSA9PiB7XG4gICAgICBjb25zdCBpZHMgPSBbbGFiZWxJZCwgdGhpcy5zZWxlY3RDdXJyZW50VmFsdWVJZF07XG5cbiAgICAgIHJldHVybiBpZHMuZmlsdGVyKChpZCkgPT4gISFpZCkuam9pbignICcpO1xuICAgIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IF9iaW5kaW5ncyA9IGNyZWF0ZVJlYWN0aXZlQmluZGluZ3MoXG4gICAge1xuICAgICAgYXR0cmlidXRlOiAnY2xhc3MuZXQtc2VsZWN0LS1pcy1vcGVuJyxcbiAgICAgIG9ic2VydmFibGU6IHRoaXMuaXNPcGVuJCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGF0dHJpYnV0ZTogJ2NsYXNzLmV0LXNlbGVjdC0tZGlzYWJsZWQnLFxuICAgICAgb2JzZXJ2YWJsZTogdGhpcy5pbnB1dC5kaXNhYmxlZCQsXG4gICAgfSxcbiAgKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9hbmltYXRlZE92ZXJsYXkucGxhY2VtZW50ID0gJ2JvdHRvbSc7XG5cbiAgICB0aGlzLl9zZWxlY3RGaWVsZC5fYmluZGluZ3MucHVzaCh7XG4gICAgICBhdHRyaWJ1dGU6ICdjbGFzcy5ldC1zZWxlY3QtZmllbGQtLW9wZW4nLFxuICAgICAgb2JzZXJ2YWJsZTogdGhpcy5faXNPcGVuJCxcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3VubW91bnRTZWxlY3RCb2R5T25EaXNhYmxlKCk7XG4gICAgdGhpcy5fbWlncmF0ZVNlbGVjdFZhbHVlKCk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fc2V0U2VsZWN0ZWRPcHRpb25BY3RpdmUoKTtcbiAgfVxuXG4gIHRyYWNrQnlGbjogVHJhY2tCeUZ1bmN0aW9uPFNlbGVjdE9wdGlvbkRpcmVjdGl2ZT4gPSAoXywgaXRlbSkgPT4gaXRlbS5pZDtcblxuICBtb3VudFNlbGVjdEJvZHkoKSB7XG4gICAgaWYgKCF0aGlzLl9zZWxlY3RCb2R5Q29uZmlnKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5fYW5pbWF0ZWRPdmVybGF5LmlzTW91bnRlZCB8fCB0aGlzLmlucHV0LmRpc2FibGVkKSByZXR1cm47XG5cbiAgICB0aGlzLl9zZXRTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpO1xuXG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLl9hbmltYXRlZE92ZXJsYXkubW91bnQoe1xuICAgICAgY29tcG9uZW50OiB0aGlzLl9zZWxlY3RCb2R5Q29uZmlnLmNvbXBvbmVudCxcbiAgICAgIG1pcnJvcldpZHRoOiB0cnVlLFxuICAgICAgZGF0YTogeyBfYm9keVRlbXBsYXRlOiB0aGlzLl9zZWxlY3RCb2R5Q29uZmlnLnRlbXBsYXRlIH0gYXMgUGFydGlhbDxUPixcbiAgICB9KTtcblxuICAgIGlmICghaW5zdGFuY2UpIHJldHVybjtcblxuICAgIHRoaXMuX3NlbGVjdEJvZHlJZCQubmV4dChpbnN0YW5jZS5zZWxlY3RCb2R5LmlkKTtcbiAgICB0aGlzLl9pc09wZW4kLm5leHQodHJ1ZSk7XG4gIH1cblxuICB1bm1vdW50U2VsZWN0Qm9keSgpIHtcbiAgICBpZiAoIXRoaXMuX2FuaW1hdGVkT3ZlcmxheS5pc01vdW50ZWQpIHJldHVybjtcblxuICAgIHRoaXMuX2FuaW1hdGVkT3ZlcmxheS51bm1vdW50KCk7XG5cbiAgICB0aGlzLl9zZWxlY3RCb2R5SWQkLm5leHQobnVsbCk7XG4gICAgdGhpcy5faXNPcGVuJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHNldFZhbHVlKHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5pbnB1dC5fdXBkYXRlVmFsdWUodmFsdWUpO1xuXG4gICAgdGhpcy5pbnB1dC5fbWFya0FzVG91Y2hlZCgpO1xuICAgIHRoaXMuaW5wdXQuX3NldFNob3VsZERpc3BsYXlFcnJvcih0cnVlKTtcbiAgfVxuXG4gIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5faXNPcGVuJC52YWx1ZSkge1xuICAgICAgdGhpcy5faGFuZGxlS2V5RG93bkluT3BlblN0YXRlKGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faGFuZGxlS2V5RG93bkluQ2xvc2VkU3RhdGUoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHNldFNlbGVjdEJvZHkoY29uZmlnOiBTZWxlY3RCb2R5Q29uZmlnPFQ+KSB7XG4gICAgdGhpcy5fc2VsZWN0Qm9keUNvbmZpZyA9IGNvbmZpZztcbiAgfVxuXG4gIHJlbW92ZU9wdGlvbkZyb21TZWxlY3Rpb24ob3B0aW9uOiBTZWxlY3RPcHRpb25EaXJlY3RpdmUpIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUgfHwgIUFycmF5LmlzQXJyYXkodGhpcy5pbnB1dC52YWx1ZSkpIHJldHVybjtcblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pbnB1dC52YWx1ZS5maWx0ZXIoKHYpID0+IHYgIT09IG9wdGlvbi52YWx1ZSk7XG5cbiAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIF9jb250cm9sVG91Y2hlZCgpIHtcbiAgICB0aGlzLmlucHV0Ll9tYXJrQXNUb3VjaGVkKCk7XG4gICAgdGhpcy5pbnB1dC5fc2V0U2hvdWxkRGlzcGxheUVycm9yKHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdW5tb3VudFNlbGVjdEJvZHlPbkRpc2FibGUoKSB7XG4gICAgdGhpcy5pbnB1dC5kaXNhYmxlZCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKGRpc2FibGVkKSA9PiB7XG4gICAgICAgICAgaWYgKCFkaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgdGhpcy51bm1vdW50U2VsZWN0Qm9keSgpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUtleURvd25JbkNsb3NlZFN0YXRlKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3Qga2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7XG4gICAgY29uc3QgaXNBcnJvd0tleSA9XG4gICAgICBrZXlDb2RlID09PSBET1dOX0FSUk9XIHx8IGtleUNvZGUgPT09IFVQX0FSUk9XIHx8IGtleUNvZGUgPT09IExFRlRfQVJST1cgfHwga2V5Q29kZSA9PT0gUklHSFRfQVJST1c7XG5cbiAgICBjb25zdCBpc09wZW5LZXkgPSBrZXlDb2RlID09PSBFTlRFUiB8fCBrZXlDb2RlID09PSBTUEFDRTtcblxuICAgIGlmICgoaXNPcGVuS2V5ICYmICFoYXNNb2RpZmllcktleShldmVudCkpIHx8ICgodGhpcy5tdWx0aXBsZSB8fCBldmVudC5hbHRLZXkpICYmIGlzQXJyb3dLZXkpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5tb3VudFNlbGVjdEJvZHkoKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICBzd2l0Y2ggKGtleUNvZGUpIHtcbiAgICAgICAgY2FzZSBET1dOX0FSUk9XOlxuICAgICAgICAgIHRoaXMuX3NlbGVjdE9wdGlvbkJ5T2Zmc2V0KDEsIHRydWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFVQX0FSUk9XOlxuICAgICAgICAgIHRoaXMuX3NlbGVjdE9wdGlvbkJ5T2Zmc2V0KC0xLCB0cnVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBIT01FOlxuICAgICAgICAgIHRoaXMuX3NlbGVjdEZpcnN0T3B0aW9uKHRydWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVORDpcbiAgICAgICAgICB0aGlzLl9zZWxlY3RMYXN0T3B0aW9uKHRydWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFBBR0VfVVA6XG4gICAgICAgICAgdGhpcy5fc2VsZWN0T3B0aW9uQnlPZmZzZXQoLTEwLCB0cnVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBQQUdFX0RPV046XG4gICAgICAgICAgdGhpcy5fc2VsZWN0T3B0aW9uQnlPZmZzZXQoMTAsIHRydWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5tdWx0aXBsZSAmJiBpc0Fycm93S2V5KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5tb3VudFNlbGVjdEJvZHkoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9oYW5kbGVLZXlEb3duSW5PcGVuU3RhdGUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcbiAgICBjb25zdCBpc0Fycm93S2V5ID0ga2V5Q29kZSA9PT0gRE9XTl9BUlJPVyB8fCBrZXlDb2RlID09PSBVUF9BUlJPVztcblxuICAgIGlmIChpc0Fycm93S2V5ICYmIGV2ZW50LmFsdEtleSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMudW5tb3VudFNlbGVjdEJvZHkoKTtcbiAgICB9IGVsc2UgaWYgKGtleUNvZGUgPT09IEVTQ0FQRSAmJiAhaGFzTW9kaWZpZXJLZXkoZXZlbnQpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy51bm1vdW50U2VsZWN0Qm9keSgpO1xuICAgIH0gZWxzZSBpZiAoa2V5Q29kZSA9PT0gRU5URVIgfHwga2V5Q29kZSA9PT0gU1BBQ0UpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIHRoaXMuX3RvZ2dsZUFjdGl2ZU9wdGlvblNlbGVjdGlvbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc2V0QWN0aXZlT3B0aW9uU2VsZWN0ZWQoKTtcbiAgICAgIH1cblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubXVsdGlwbGUgJiYga2V5Q29kZSA9PT0gQSAmJiBldmVudC5jdHJsS2V5KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5fdG9nZ2xlU2VsZWN0aW9uT2ZBbGxPcHRpb25zKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXRjaCAoa2V5Q29kZSkge1xuICAgICAgICBjYXNlIERPV05fQVJST1c6XG4gICAgICAgICAgdGhpcy5fYWN0aXZhdGVPcHRpb25CeU9mZnNldCgxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBVUF9BUlJPVzpcbiAgICAgICAgICB0aGlzLl9hY3RpdmF0ZU9wdGlvbkJ5T2Zmc2V0KC0xKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBIT01FOlxuICAgICAgICAgIHRoaXMuX2FjdGl2YXRlRmlyc3RPcHRpb24oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFTkQ6XG4gICAgICAgICAgdGhpcy5fYWN0aXZhdGVMYXN0T3B0aW9uKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUEFHRV9VUDpcbiAgICAgICAgICB0aGlzLl9hY3RpdmF0ZU9wdGlvbkJ5T2Zmc2V0KC0xMCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUEFHRV9ET1dOOlxuICAgICAgICAgIHRoaXMuX2FjdGl2YXRlT3B0aW9uQnlPZmZzZXQoMTApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3NldEFjdGl2ZU9wdGlvbihvcHRpb246IFNlbGVjdE9wdGlvbkRpcmVjdGl2ZSB8IG51bGwpIHtcbiAgICBjb25zdCBjdXJyZW50QWN0aXZlT3B0aW9uID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5hY3RpdmVPcHRpb24kKTtcblxuICAgIGlmIChjdXJyZW50QWN0aXZlT3B0aW9uPy5vcHQgPT09IG9wdGlvbikgcmV0dXJuIGZhbHNlO1xuXG4gICAgY3VycmVudEFjdGl2ZU9wdGlvbj8ub3B0Ll9zZXRBY3RpdmUoZmFsc2UpO1xuXG4gICAgaWYgKG9wdGlvbikge1xuICAgICAgb3B0aW9uLl9zZXRBY3RpdmUodHJ1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9hZGRBY3RpdmVPcHRpb25Ub1NlbGVjdGlvbigpIHtcbiAgICBjb25zdCBhY3RpdmVPcHRpb24gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmFjdGl2ZU9wdGlvbiQpO1xuXG4gICAgaWYgKCFhY3RpdmVPcHRpb24gfHwgYWN0aXZlT3B0aW9uLm9wdC5kaXNhYmxlZCB8fCBhY3RpdmVPcHRpb24uc2VsZWN0ZWQpIHJldHVybjtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLmlucHV0LnZhbHVlKSkge1xuICAgICAgdGhpcy5zZXRWYWx1ZShbYWN0aXZlT3B0aW9uLm9wdC52YWx1ZV0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0VmFsdWUoWy4uLnRoaXMuaW5wdXQudmFsdWUsIGFjdGl2ZU9wdGlvbi5vcHQudmFsdWVdKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3JlbW92ZUFjdGl2ZU9wdGlvbkZyb21TZWxlY3Rpb24oKSB7XG4gICAgY29uc3QgYWN0aXZlT3B0aW9uID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5hY3RpdmVPcHRpb24kKTtcblxuICAgIGlmICghYWN0aXZlT3B0aW9uIHx8IGFjdGl2ZU9wdGlvbi5vcHQuZGlzYWJsZWQgfHwgIWFjdGl2ZU9wdGlvbi5zZWxlY3RlZCkgcmV0dXJuO1xuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuaW5wdXQudmFsdWUpKSB7XG4gICAgICB0aGlzLnNldFZhbHVlKFtdKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldFZhbHVlKHRoaXMuaW5wdXQudmFsdWUuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgIT09IGFjdGl2ZU9wdGlvbi5vcHQudmFsdWUpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3RvZ2dsZVNlbGVjdGlvbk9mQWxsT3B0aW9ucygpIHtcbiAgICBjb25zdCBhbGxPcHRpb25zID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5zZWxlY3RPcHRpb25zJCk7XG5cbiAgICBjb25zdCBoYXNEZXNlbGVjdGVkT3B0aW9uID0gYWxsT3B0aW9ucz8uc29tZSgob3B0KSA9PiAhb3B0Lm9wdC5kaXNhYmxlZCAmJiAhb3B0LnNlbGVjdGVkKTtcblxuICAgIGlmIChoYXNEZXNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICB0aGlzLl9zZWxlY3RBbGxPcHRpb25zKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2Rlc2VsZWN0QWxsT3B0aW9ucygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3NlbGVjdEFsbE9wdGlvbnMoKSB7XG4gICAgY29uc3QgYWxsT3B0aW9ucyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuc2VsZWN0T3B0aW9ucyQpO1xuXG4gICAgaWYgKCFhbGxPcHRpb25zKSByZXR1cm47XG5cbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvbnMgPSBhbGxPcHRpb25zLmZpbHRlcigob3B0KSA9PiAhb3B0Lm9wdC5kaXNhYmxlZCkubWFwKChvcHQpID0+IG9wdC5vcHQudmFsdWUpO1xuXG4gICAgdGhpcy5zZXRWYWx1ZShzZWxlY3RlZE9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfZGVzZWxlY3RBbGxPcHRpb25zKCkge1xuICAgIHRoaXMuc2V0VmFsdWUoW10pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfdG9nZ2xlQWN0aXZlT3B0aW9uU2VsZWN0aW9uKCkge1xuICAgIGNvbnN0IGFjdGl2ZU9wdGlvbiA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuYWN0aXZlT3B0aW9uJCk7XG5cbiAgICBpZiAoIWFjdGl2ZU9wdGlvbikgcmV0dXJuO1xuXG4gICAgaWYgKGFjdGl2ZU9wdGlvbi5zZWxlY3RlZCkge1xuICAgICAgdGhpcy5fcmVtb3ZlQWN0aXZlT3B0aW9uRnJvbVNlbGVjdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9hZGRBY3RpdmVPcHRpb25Ub1NlbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3NldEFjdGl2ZU9wdGlvblNlbGVjdGVkKCkge1xuICAgIGNvbnN0IGFjdGl2ZU9wdGlvbiA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuYWN0aXZlT3B0aW9uJCk7XG5cbiAgICBpZiAoIWFjdGl2ZU9wdGlvbiB8fCBhY3RpdmVPcHRpb24ub3B0LmRpc2FibGVkKSByZXR1cm47XG5cbiAgICB0aGlzLl9zZXRTZWxlY3RlZE9wdGlvbihhY3RpdmVPcHRpb24ub3B0KTtcblxuICAgIHRoaXMudW5tb3VudFNlbGVjdEJvZHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3NldFNlbGVjdGVkT3B0aW9uQWN0aXZlKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5zZWxlY3RlZE9wdGlvbiQpO1xuXG4gICAgaWYgKCFzZWxlY3RlZE9wdGlvbikgcmV0dXJuO1xuXG4gICAgdGhpcy5fc2V0QWN0aXZlT3B0aW9uKHNlbGVjdGVkT3B0aW9uLm9wdCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9zZXRTZWxlY3RlZE9wdGlvbihvcHRpb246IFNlbGVjdE9wdGlvbkRpcmVjdGl2ZSB8IG51bGwpIHtcbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuc2VsZWN0ZWRPcHRpb24kKTtcblxuICAgIGlmIChzZWxlY3RlZE9wdGlvbiA9PT0gb3B0aW9uKSByZXR1cm4gZmFsc2U7XG5cbiAgICB0aGlzLl9zZXRBY3RpdmVPcHRpb24ob3B0aW9uKTtcblxuICAgIHRoaXMuc2V0VmFsdWUob3B0aW9uPy52YWx1ZSA/PyBudWxsKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfc2VsZWN0Rmlyc3RPcHRpb24oYW5ub3VuY2U6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5zZWxlY3RPcHRpb25zJCk7XG5cbiAgICBpZiAoIW9wdGlvbnMpIHJldHVybjtcblxuICAgIGNvbnN0IGZpcnN0T3B0aW9uID0gb3B0aW9uc1swXT8ub3B0O1xuXG4gICAgaWYgKCFmaXJzdE9wdGlvbikgcmV0dXJuO1xuXG4gICAgaWYgKCF0aGlzLl9zZXRTZWxlY3RlZE9wdGlvbihmaXJzdE9wdGlvbikpIHJldHVybjtcblxuICAgIGlmIChhbm5vdW5jZSkge1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKGZpcnN0T3B0aW9uLnZpZXdWYWx1ZSQpO1xuICAgICAgdGhpcy5fbGl2ZUFubm91bmNlci5hbm5vdW5jZSh0ZXh0LCAxMDAwMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfc2VsZWN0TGFzdE9wdGlvbihhbm5vdW5jZTogYm9vbGVhbikge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnNlbGVjdE9wdGlvbnMkKTtcblxuICAgIGlmICghb3B0aW9ucykgcmV0dXJuO1xuXG4gICAgY29uc3QgbGFzdE9wdGlvbiA9IG9wdGlvbnNbb3B0aW9ucy5sZW5ndGggLSAxXT8ub3B0O1xuXG4gICAgaWYgKCFsYXN0T3B0aW9uKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMuX3NldFNlbGVjdGVkT3B0aW9uKGxhc3RPcHRpb24pKSByZXR1cm47XG5cbiAgICBpZiAoYW5ub3VuY2UpIHtcbiAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShsYXN0T3B0aW9uLnZpZXdWYWx1ZSQpO1xuICAgICAgdGhpcy5fbGl2ZUFubm91bmNlci5hbm5vdW5jZSh0ZXh0LCAxMDAwMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfc2VsZWN0T3B0aW9uQnlPZmZzZXQob2Zmc2V0OiBudW1iZXIsIGFubm91bmNlOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuc2VsZWN0T3B0aW9ucyQpO1xuXG4gICAgaWYgKCFvcHRpb25zKSByZXR1cm47XG5cbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuc2VsZWN0ZWRPcHRpb24kKTtcbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvbkluZGV4ID0gb3B0aW9ucy5maW5kSW5kZXgoKG8pID0+IG8ub3B0ID09PSBzZWxlY3RlZE9wdGlvbj8ub3B0KTtcbiAgICBjb25zdCBuZXh0T3B0aW9uSW5kZXggPSBzZWxlY3RlZE9wdGlvbkluZGV4ICsgb2Zmc2V0O1xuICAgIGNvbnN0IG5leHRPcHRpb24gPSBvcHRpb25zW25leHRPcHRpb25JbmRleF07XG5cbiAgICBpZiAoIW5leHRPcHRpb24pIHJldHVybjtcblxuICAgIGlmIChuZXh0T3B0aW9uLm9wdC5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdE9wdGlvbkJ5T2Zmc2V0KG9mZnNldCArIChvZmZzZXQgPCAwID8gLTEgOiAxKSwgYW5ub3VuY2UpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fc2V0U2VsZWN0ZWRPcHRpb24obmV4dE9wdGlvbi5vcHQpKSByZXR1cm47XG5cbiAgICBpZiAoYW5ub3VuY2UpIHtcbiAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShuZXh0T3B0aW9uLm9wdC52aWV3VmFsdWUkKTtcbiAgICAgIHRoaXMuX2xpdmVBbm5vdW5jZXIuYW5ub3VuY2UodGV4dCwgMTAwMDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2FjdGl2YXRlRmlyc3RPcHRpb24oKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuc2VsZWN0T3B0aW9ucyQpO1xuXG4gICAgaWYgKCFvcHRpb25zKSByZXR1cm47XG5cbiAgICBjb25zdCBmaXJzdE9wdGlvbiA9IG9wdGlvbnNbMF0/Lm9wdDtcblxuICAgIGlmICghZmlyc3RPcHRpb24pIHJldHVybjtcblxuICAgIGF3YWl0IHRoaXMuX3NldEFjdGl2ZU9wdGlvbihmaXJzdE9wdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9hY3RpdmF0ZUxhc3RPcHRpb24oKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuc2VsZWN0T3B0aW9ucyQpO1xuXG4gICAgaWYgKCFvcHRpb25zKSByZXR1cm47XG5cbiAgICBjb25zdCBsYXN0T3B0aW9uID0gb3B0aW9uc1tvcHRpb25zLmxlbmd0aCAtIDFdPy5vcHQ7XG5cbiAgICBpZiAoIWxhc3RPcHRpb24pIHJldHVybjtcblxuICAgIGF3YWl0IHRoaXMuX3NldEFjdGl2ZU9wdGlvbihsYXN0T3B0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2FjdGl2YXRlT3B0aW9uQnlPZmZzZXQob2Zmc2V0OiBudW1iZXIpIHtcbiAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5zZWxlY3RPcHRpb25zJCk7XG5cbiAgICBpZiAoIW9wdGlvbnMpIHJldHVybjtcblxuICAgIGNvbnN0IGFjdGl2YXRlZE9wdGlvbiA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuYWN0aXZlT3B0aW9uJCk7XG4gICAgY29uc3QgYWN0aXZhdGVkT3B0aW9uSW5kZXggPSBvcHRpb25zLmZpbmRJbmRleCgobykgPT4gby5vcHQgPT09IGFjdGl2YXRlZE9wdGlvbj8ub3B0KTtcbiAgICBjb25zdCBuZXh0T3B0aW9uSW5kZXggPSBhY3RpdmF0ZWRPcHRpb25JbmRleCArIG9mZnNldDtcbiAgICBjb25zdCBuZXh0T3B0aW9uID0gb3B0aW9uc1tuZXh0T3B0aW9uSW5kZXhdO1xuXG4gICAgaWYgKCFuZXh0T3B0aW9uKSByZXR1cm47XG5cbiAgICBhd2FpdCB0aGlzLl9zZXRBY3RpdmVPcHRpb24obmV4dE9wdGlvbi5vcHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfbWlncmF0ZVNlbGVjdFZhbHVlKCkge1xuICAgIGlmICh0aGlzLm11bHRpcGxlICYmICFBcnJheS5pc0FycmF5KHRoaXMuaW5wdXQudmFsdWUpKSB7XG4gICAgICB0aGlzLnNldFZhbHVlKFtdKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLm11bHRpcGxlICYmIEFycmF5LmlzQXJyYXkodGhpcy5pbnB1dC52YWx1ZSkpIHtcbiAgICAgIHRoaXMuc2V0VmFsdWUobnVsbCk7XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0QWN0aXZlT3B0aW9uKG51bGwpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './public-api';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvY29tcG9uZW50cy9zZWxlY3QvY29tcG9uZW50cy9zZWxlY3QvZGlyZWN0aXZlcy9zZWxlY3QtYm9keS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './select-body.directive';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL3NyYy9saWIvY29tcG9uZW50cy9mb3Jtcy9jb21wb25lbnRzL3NlbGVjdC9jb21wb25lbnRzL3NlbGVjdC9kaXJlY3RpdmVzL3NlbGVjdC1ib2R5L3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc2VsZWN0LWJvZHkuZGlyZWN0aXZlJztcbiJdfQ==
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Directive, InjectionToken, inject } from '@angular/core';
|
|
2
|
+
import { ClickOutsideDirective, createDestroy, createReactiveBindings } from '@ethlete/core';
|
|
3
|
+
import { map, takeUntil, tap } from 'rxjs';
|
|
4
|
+
import { SELECT_TOKEN } from '../select';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@ethlete/core";
|
|
7
|
+
export const SELECT_BODY_TOKEN = new InjectionToken('ET_SELECT_BODY_TOKEN');
|
|
8
|
+
let uniqueId = 0;
|
|
9
|
+
class SelectBodyDirective {
|
|
10
|
+
constructor() {
|
|
11
|
+
this._destroy$ = createDestroy();
|
|
12
|
+
this._select = inject(SELECT_TOKEN);
|
|
13
|
+
this._clickOutside = inject(ClickOutsideDirective);
|
|
14
|
+
this.id = `et-select-body-${uniqueId++}`;
|
|
15
|
+
this._bindings = createReactiveBindings({
|
|
16
|
+
attribute: 'aria-multiselectable',
|
|
17
|
+
observable: this._select.multiple$.pipe(map((multiple) => ({
|
|
18
|
+
render: true,
|
|
19
|
+
value: multiple,
|
|
20
|
+
}))),
|
|
21
|
+
}, {
|
|
22
|
+
attribute: 'aria-labelledby',
|
|
23
|
+
observable: this._select.input.labelId$.pipe(map((labelId) => ({
|
|
24
|
+
render: !!labelId,
|
|
25
|
+
value: labelId,
|
|
26
|
+
}))),
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
ngOnInit() {
|
|
30
|
+
this._clickOutside.etClickOutside
|
|
31
|
+
.pipe(takeUntil(this._destroy$), tap(() => this._select.unmountSelectBody()))
|
|
32
|
+
.subscribe();
|
|
33
|
+
}
|
|
34
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: SelectBodyDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
35
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.2", type: SelectBodyDirective, isStandalone: true, host: { attributes: { "tabindex": "-1", "role": "listbox" }, properties: { "attr.id": "id" } }, providers: [
|
|
36
|
+
{
|
|
37
|
+
provide: SELECT_BODY_TOKEN,
|
|
38
|
+
useExisting: SelectBodyDirective,
|
|
39
|
+
},
|
|
40
|
+
], hostDirectives: [{ directive: i1.ClickOutsideDirective }], ngImport: i0 }); }
|
|
41
|
+
}
|
|
42
|
+
export { SelectBodyDirective };
|
|
43
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: SelectBodyDirective, decorators: [{
|
|
44
|
+
type: Directive,
|
|
45
|
+
args: [{
|
|
46
|
+
standalone: true,
|
|
47
|
+
providers: [
|
|
48
|
+
{
|
|
49
|
+
provide: SELECT_BODY_TOKEN,
|
|
50
|
+
useExisting: SelectBodyDirective,
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
host: {
|
|
54
|
+
'[attr.id]': 'id',
|
|
55
|
+
tabindex: '-1',
|
|
56
|
+
role: 'listbox',
|
|
57
|
+
},
|
|
58
|
+
hostDirectives: [ClickOutsideDirective],
|
|
59
|
+
}]
|
|
60
|
+
}] });
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWJvZHkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL2NvbXBvbmVudHMvc2VsZWN0L2NvbXBvbmVudHMvc2VsZWN0L2RpcmVjdGl2ZXMvc2VsZWN0LWJvZHkvc2VsZWN0LWJvZHkuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdGLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7QUFFekMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQXNCLHNCQUFzQixDQUFDLENBQUM7QUFFakcsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBRWpCLE1BZWEsbUJBQW1CO0lBZmhDO1FBZ0JtQixjQUFTLEdBQUcsYUFBYSxFQUFFLENBQUM7UUFFNUIsWUFBTyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMvQixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBRXRELE9BQUUsR0FBRyxrQkFBa0IsUUFBUSxFQUFFLEVBQUUsQ0FBQztRQUVwQyxjQUFTLEdBQUcsc0JBQXNCLENBQ3pDO1lBQ0UsU0FBUyxFQUFFLHNCQUFzQjtZQUNqQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUNyQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2pCLE1BQU0sRUFBRSxJQUFJO2dCQUNaLEtBQUssRUFBRSxRQUFRO2FBQ2hCLENBQUMsQ0FBQyxDQUNKO1NBQ0YsRUFDRDtZQUNFLFNBQVMsRUFBRSxpQkFBaUI7WUFDNUIsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQzFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDaEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxPQUFPO2dCQUNqQixLQUFLLEVBQUUsT0FBaUI7YUFDekIsQ0FBQyxDQUFDLENBQ0o7U0FDRixDQUNGLENBQUM7S0FVSDtJQVJDLFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWM7YUFDOUIsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQ3pCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FDNUM7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDOzhHQXBDVSxtQkFBbUI7a0dBQW5CLG1CQUFtQixpSUFibkI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsbUJBQW1CO2FBQ2pDO1NBQ0Y7O1NBUVUsbUJBQW1COzJGQUFuQixtQkFBbUI7a0JBZi9CLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLHFCQUFxQjt5QkFDakM7cUJBQ0Y7b0JBQ0QsSUFBSSxFQUFFO3dCQUNKLFdBQVcsRUFBRSxJQUFJO3dCQUNqQixRQUFRLEVBQUUsSUFBSTt3QkFDZCxJQUFJLEVBQUUsU0FBUztxQkFDaEI7b0JBQ0QsY0FBYyxFQUFFLENBQUMscUJBQXFCLENBQUM7aUJBQ3hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbmplY3Rpb25Ub2tlbiwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENsaWNrT3V0c2lkZURpcmVjdGl2ZSwgY3JlYXRlRGVzdHJveSwgY3JlYXRlUmVhY3RpdmVCaW5kaW5ncyB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU0VMRUNUX1RPS0VOIH0gZnJvbSAnLi4vc2VsZWN0JztcblxuZXhwb3J0IGNvbnN0IFNFTEVDVF9CT0RZX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPFNlbGVjdEJvZHlEaXJlY3RpdmU+KCdFVF9TRUxFQ1RfQk9EWV9UT0tFTicpO1xuXG5sZXQgdW5pcXVlSWQgPSAwO1xuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogU0VMRUNUX0JPRFlfVE9LRU4sXG4gICAgICB1c2VFeGlzdGluZzogU2VsZWN0Qm9keURpcmVjdGl2ZSxcbiAgICB9LFxuICBdLFxuICBob3N0OiB7XG4gICAgJ1thdHRyLmlkXSc6ICdpZCcsXG4gICAgdGFiaW5kZXg6ICctMScsXG4gICAgcm9sZTogJ2xpc3Rib3gnLFxuICB9LFxuICBob3N0RGlyZWN0aXZlczogW0NsaWNrT3V0c2lkZURpcmVjdGl2ZV0sXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdEJvZHlEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IGNyZWF0ZURlc3Ryb3koKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3QgPSBpbmplY3QoU0VMRUNUX1RPS0VOKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2xpY2tPdXRzaWRlID0gaW5qZWN0KENsaWNrT3V0c2lkZURpcmVjdGl2ZSk7XG5cbiAgcmVhZG9ubHkgaWQgPSBgZXQtc2VsZWN0LWJvZHktJHt1bmlxdWVJZCsrfWA7XG5cbiAgcmVhZG9ubHkgX2JpbmRpbmdzID0gY3JlYXRlUmVhY3RpdmVCaW5kaW5ncyhcbiAgICB7XG4gICAgICBhdHRyaWJ1dGU6ICdhcmlhLW11bHRpc2VsZWN0YWJsZScsXG4gICAgICBvYnNlcnZhYmxlOiB0aGlzLl9zZWxlY3QubXVsdGlwbGUkLnBpcGUoXG4gICAgICAgIG1hcCgobXVsdGlwbGUpID0+ICh7XG4gICAgICAgICAgcmVuZGVyOiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiBtdWx0aXBsZSxcbiAgICAgICAgfSkpLFxuICAgICAgKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGF0dHJpYnV0ZTogJ2FyaWEtbGFiZWxsZWRieScsXG4gICAgICBvYnNlcnZhYmxlOiB0aGlzLl9zZWxlY3QuaW5wdXQubGFiZWxJZCQucGlwZShcbiAgICAgICAgbWFwKChsYWJlbElkKSA9PiAoe1xuICAgICAgICAgIHJlbmRlcjogISFsYWJlbElkLFxuICAgICAgICAgIHZhbHVlOiBsYWJlbElkIGFzIHN0cmluZyxcbiAgICAgICAgfSkpLFxuICAgICAgKSxcbiAgICB9LFxuICApO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2NsaWNrT3V0c2lkZS5ldENsaWNrT3V0c2lkZVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLl9zZWxlY3QudW5tb3VudFNlbGVjdEJvZHkoKSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './public-api';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvY29tcG9uZW50cy9zZWxlY3QvY29tcG9uZW50cy9zZWxlY3QvZGlyZWN0aXZlcy9zZWxlY3Qtb3B0aW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './select-option.directive';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL3NyYy9saWIvY29tcG9uZW50cy9mb3Jtcy9jb21wb25lbnRzL3NlbGVjdC9jb21wb25lbnRzL3NlbGVjdC9kaXJlY3RpdmVzL3NlbGVjdC1vcHRpb24vcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zZWxlY3Qtb3B0aW9uLmRpcmVjdGl2ZSc7XG4iXX0=
|