@onepercentio/one-ui 1.3.1 → 1.3.2
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/dist-ts/assets/styles/index.scss +2 -2
- package/dist-ts/assets/styles/mixins.scss +1 -0
- package/dist-ts/components/AdaptiveDialog/AdaptiveDialog.module.scss +1 -1
- package/dist-ts/components/AdaptiveSidebar/AdaptiveSidebar.module.scss +1 -1
- package/dist-ts/components/AnchoredTooltip/AnchoredTooltip.module.scss +1 -1
- package/dist-ts/components/Avatar/Avatar.module.scss +1 -1
- package/dist-ts/components/BucketFill/BucketFill.module.scss +1 -1
- package/dist-ts/components/Button/Button.module.scss +1 -1
- package/dist-ts/components/Card/Card.module.scss +1 -1
- package/dist-ts/components/CheckBox/CheckBox.module.scss +1 -1
- package/dist-ts/components/Collapsable/Collapsable.module.scss +1 -1
- package/dist-ts/components/Divider/Divider.module.scss +1 -1
- package/dist-ts/components/FadeIn/FadeIn.module.scss +1 -1
- package/dist-ts/components/FileInput/View/BigFactory/BigFactory.d.ts +1 -1
- package/dist-ts/components/FileInput/View/BigFactory/BigFactory.js +4 -2
- package/dist-ts/components/FileInput/View/BigFactory/BigFactory.js.map +1 -1
- package/dist-ts/components/FileInput/View/BigFactory/BigFactory.module.scss +1 -1
- package/dist-ts/components/FileInput/View/Compact/Compact.module.scss +1 -1
- package/dist-ts/components/FlowController/FlowController.module.scss +1 -1
- package/dist-ts/components/HeaderCloseBtn/HeaderCloseBtn.module.scss +1 -1
- package/dist-ts/components/Input/Input.module.scss +1 -1
- package/dist-ts/components/Loader/Loader.module.scss +1 -1
- package/dist-ts/components/MutableHamburgerButton/MutableHamburgerButton.module.scss +1 -1
- package/dist-ts/components/Notification/Notification.module.scss +1 -1
- package/dist-ts/components/Parallax/Parallax.module.scss +1 -1
- package/dist-ts/components/PixelatedScan/PixelatedScan.module.scss +1 -1
- package/dist-ts/components/ProgressBar/ProgressBar.module.scss +1 -1
- package/dist-ts/components/ProgressTexts/ProgressTexts.module.scss +1 -1
- package/dist-ts/components/Radio/Radio.module.scss +1 -1
- package/dist-ts/components/Radio/variants/Checkmark/Checkmark.module.scss +1 -1
- package/dist-ts/components/Radio/variants/Generic/Generic.module.scss +1 -1
- package/dist-ts/components/Select/Select.module.scss +1 -1
- package/dist-ts/components/Slider/Slider.module.scss +2 -2
- package/dist-ts/components/Switch/Switch.module.scss +1 -1
- package/dist-ts/components/Table/Table.module.scss +1 -1
- package/dist-ts/components/Tabs/Tabs.module.scss +1 -1
- package/dist-ts/components/Text/Text.module.scss +1 -1
- package/dist-ts/components/Transition/Transition.module.scss +1 -1
- package/dist-ts/context/OneUIProvider.d.ts +3 -0
- package/dist-ts/context/OneUIProvider.js.map +1 -1
- package/dist-ts/hooks/ui/useCustomScrollbar.module.scss +1 -1
- package/dist-ts/hooks/ui/useZoomable.module.scss +1 -1
- package/dist-ts/hooks/useHero.module.scss +1 -1
- package/package.json +2 -3
- package/WebpackConfigs/__fixtures__/bug_var_color/cenario.static.tsx +0 -37
- package/WebpackConfigs/__fixtures__/bug_var_color/style.module.scss +0 -28
- package/WebpackConfigs/__fixtures__/email_templates/assets/asset1.svg +0 -3
- package/WebpackConfigs/__fixtures__/email_templates/assets/asset2.svg +0 -3
- package/WebpackConfigs/__fixtures__/email_templates/email1.static.tsx +0 -10
- package/WebpackConfigs/__fixtures__/email_templates/email2.static.tsx +0 -10
- package/build/index.html +0 -10
- package/dist/assets/img/svg/checkbox.svg +0 -3
- package/dist/assets/styles/index.scss +0 -2
- package/dist/assets/styles/mixins.scss +0 -14
- package/dist/assets/styles/variables.scss +0 -49
- package/dist/components/AdaptiveButton/AdaptiveButton.d.ts +0 -9
- package/dist/components/AdaptiveButton/AdaptiveButton.js +0 -32
- package/dist/components/AdaptiveButton/AdaptiveButton.module.scss +0 -7
- package/dist/components/AdaptiveButton/index.d.ts +0 -2
- package/dist/components/AdaptiveButton/index.js +0 -26
- package/dist/components/AdaptiveContainer/AdaptiveContainer.d.ts +0 -25
- package/dist/components/AdaptiveContainer/AdaptiveContainer.js +0 -146
- package/dist/components/AdaptiveContainer/AdaptiveContainer.module.scss +0 -53
- package/dist/components/AdaptiveContainer/index.d.ts +0 -2
- package/dist/components/AdaptiveContainer/index.js +0 -26
- package/dist/components/AdaptiveDialog/AdaptiveDialog.d.ts +0 -20
- package/dist/components/AdaptiveDialog/AdaptiveDialog.js +0 -80
- package/dist/components/AdaptiveDialog/AdaptiveDialog.module.scss +0 -145
- package/dist/components/AdaptiveDialog/index.d.ts +0 -2
- package/dist/components/AdaptiveDialog/index.js +0 -26
- package/dist/components/AdaptiveSidebar/AdaptiveSidebar.d.ts +0 -25
- package/dist/components/AdaptiveSidebar/AdaptiveSidebar.js +0 -76
- package/dist/components/AdaptiveSidebar/AdaptiveSidebar.module.scss +0 -49
- package/dist/components/AdaptiveSidebar/AdaptiveSidebar.sample.d.ts +0 -1
- package/dist/components/AdaptiveSidebar/AdaptiveSidebar.sample.js +0 -13
- package/dist/components/AdaptiveSidebar/index.d.ts +0 -2
- package/dist/components/AdaptiveSidebar/index.js +0 -26
- package/dist/components/AnchoredTooltip/AnchoredTooltip.d.ts +0 -37
- package/dist/components/AnchoredTooltip/AnchoredTooltip.js +0 -167
- package/dist/components/AnchoredTooltip/AnchoredTooltip.module.scss +0 -64
- package/dist/components/AnchoredTooltip/index.d.ts +0 -2
- package/dist/components/AnchoredTooltip/index.js +0 -26
- package/dist/components/AnimatedEntrance/AnimatedEntrance.d.ts +0 -19
- package/dist/components/AnimatedEntrance/AnimatedEntrance.js +0 -165
- package/dist/components/AnimatedEntrance/AnimatedEntrance.module.scss +0 -108
- package/dist/components/AnimatedEntrance/index.d.ts +0 -2
- package/dist/components/AnimatedEntrance/index.js +0 -26
- package/dist/components/AsyncTriggerContainer/AsyncTriggerContainer.d.ts +0 -29
- package/dist/components/AsyncTriggerContainer/AsyncTriggerContainer.js +0 -95
- package/dist/components/AsyncTriggerContainer/AsyncTriggerContainer.module.scss +0 -22
- package/dist/components/AsyncTriggerContainer/index.d.ts +0 -2
- package/dist/components/AsyncTriggerContainer/index.js +0 -26
- package/dist/components/AsyncWrapper/AsyncWrapper.d.ts +0 -14
- package/dist/components/AsyncWrapper/AsyncWrapper.js +0 -42
- package/dist/components/AsyncWrapper/index.d.ts +0 -2
- package/dist/components/AsyncWrapper/index.js +0 -26
- package/dist/components/Avatar/Avatar.d.ts +0 -10
- package/dist/components/Avatar/Avatar.js +0 -39
- package/dist/components/Avatar/Avatar.module.scss +0 -22
- package/dist/components/Avatar/index.d.ts +0 -2
- package/dist/components/Avatar/index.js +0 -26
- package/dist/components/BucketFill/BucketFill.d.ts +0 -11
- package/dist/components/BucketFill/BucketFill.js +0 -55
- package/dist/components/BucketFill/BucketFill.module.scss +0 -36
- package/dist/components/BucketFill/index.d.ts +0 -2
- package/dist/components/BucketFill/index.js +0 -26
- package/dist/components/Button/Button.d.ts +0 -16
- package/dist/components/Button/Button.js +0 -38
- package/dist/components/Button/Button.module.scss +0 -45
- package/dist/components/Button/index.d.ts +0 -2
- package/dist/components/Button/index.js +0 -26
- package/dist/components/Card/Card.d.ts +0 -7
- package/dist/components/Card/Card.js +0 -22
- package/dist/components/Card/Card.module.scss +0 -12
- package/dist/components/Card/index.d.ts +0 -2
- package/dist/components/Card/index.js +0 -26
- package/dist/components/Chart/Chart.d.ts +0 -2
- package/dist/components/Chart/Chart.e2e.d.ts +0 -4
- package/dist/components/Chart/Chart.js +0 -26
- package/dist/components/Chart/Chart.logic.d.ts +0 -3
- package/dist/components/Chart/Chart.logic.js +0 -14
- package/dist/components/Chart/Chart.module.scss +0 -58
- package/dist/components/Chart/Chart.types.d.ts +0 -24
- package/dist/components/Chart/Chart.types.js +0 -6
- package/dist/components/Chart/Chart.view.d.ts +0 -5
- package/dist/components/Chart/Chart.view.js +0 -183
- package/dist/components/Chart/index.d.ts +0 -2
- package/dist/components/Chart/index.js +0 -26
- package/dist/components/CheckBox/CheckBox.d.ts +0 -16
- package/dist/components/CheckBox/CheckBox.js +0 -52
- package/dist/components/CheckBox/CheckBox.module.scss +0 -36
- package/dist/components/CheckBox/index.d.ts +0 -2
- package/dist/components/CheckBox/index.js +0 -26
- package/dist/components/CodeInput/CodeInput.d.ts +0 -8
- package/dist/components/CodeInput/CodeInput.js +0 -83
- package/dist/components/CodeInput/CodeInput.module.scss +0 -5
- package/dist/components/CodeInput/index.d.ts +0 -2
- package/dist/components/CodeInput/index.js +0 -26
- package/dist/components/Collapsable/Collapsable.d.ts +0 -54
- package/dist/components/Collapsable/Collapsable.js +0 -185
- package/dist/components/Collapsable/Collapsable.module.scss +0 -42
- package/dist/components/Collapsable/index.d.ts +0 -2
- package/dist/components/Collapsable/index.js +0 -26
- package/dist/components/Countdown/Countdown.d.ts +0 -28
- package/dist/components/Countdown/Countdown.js +0 -82
- package/dist/components/Countdown/index.d.ts +0 -2
- package/dist/components/Countdown/index.js +0 -26
- package/dist/components/CurrencyInput/CurrencyInput.d.ts +0 -11
- package/dist/components/CurrencyInput/CurrencyInput.hook.d.ts +0 -7
- package/dist/components/CurrencyInput/CurrencyInput.hook.js +0 -28
- package/dist/components/CurrencyInput/CurrencyInput.js +0 -54
- package/dist/components/CurrencyInput/index.d.ts +0 -2
- package/dist/components/CurrencyInput/index.js +0 -26
- package/dist/components/Divider/Divider.d.ts +0 -6
- package/dist/components/Divider/Divider.js +0 -21
- package/dist/components/Divider/Divider.module.scss +0 -7
- package/dist/components/Divider/index.d.ts +0 -2
- package/dist/components/Divider/index.js +0 -26
- package/dist/components/EmailInput/EmailInput.d.ts +0 -33
- package/dist/components/EmailInput/EmailInput.js +0 -47
- package/dist/components/EmailInput/EmailInput.module.scss +0 -0
- package/dist/components/EmailInput/index.d.ts +0 -2
- package/dist/components/EmailInput/index.js +0 -26
- package/dist/components/FadeIn/FadeIn.d.ts +0 -16
- package/dist/components/FadeIn/FadeIn.js +0 -63
- package/dist/components/FadeIn/FadeIn.module.scss +0 -9
- package/dist/components/FadeIn/index.d.ts +0 -2
- package/dist/components/FadeIn/index.js +0 -26
- package/dist/components/FileInput/FileInput.d.ts +0 -34
- package/dist/components/FileInput/FileInput.js +0 -52
- package/dist/components/FileInput/FileInput.module.scss +0 -6
- package/dist/components/FileInput/View/BigFactory/BigFactory.d.ts +0 -6
- package/dist/components/FileInput/View/BigFactory/BigFactory.js +0 -52
- package/dist/components/FileInput/View/BigFactory/BigFactory.module.scss +0 -20
- package/dist/components/FileInput/View/BigFactory/index.d.ts +0 -2
- package/dist/components/FileInput/View/BigFactory/index.js +0 -26
- package/dist/components/FileInput/View/Compact/Compact.d.ts +0 -11
- package/dist/components/FileInput/View/Compact/Compact.js +0 -119
- package/dist/components/FileInput/View/Compact/Compact.module.scss +0 -68
- package/dist/components/FileInput/View/Compact/index.d.ts +0 -2
- package/dist/components/FileInput/View/Compact/index.js +0 -26
- package/dist/components/FileInput/View/View.types.d.ts +0 -8
- package/dist/components/FileInput/View/View.types.js +0 -6
- package/dist/components/FileInput/index.d.ts +0 -2
- package/dist/components/FileInput/index.js +0 -26
- package/dist/components/FlowController/FlowController.d.ts +0 -27
- package/dist/components/FlowController/FlowController.js +0 -66
- package/dist/components/FlowController/FlowController.module.scss +0 -47
- package/dist/components/FlowController/index.d.ts +0 -2
- package/dist/components/FlowController/index.js +0 -26
- package/dist/components/Form/Form.d.ts +0 -30
- package/dist/components/Form/Form.hook.d.ts +0 -40
- package/dist/components/Form/Form.hook.js +0 -234
- package/dist/components/Form/Form.js +0 -114
- package/dist/components/Form/Form.module.scss +0 -0
- package/dist/components/Form/Form.types.d.ts +0 -98
- package/dist/components/Form/Form.types.js +0 -40
- package/dist/components/Form/FormField/Extensions/DateField/DateField.d.ts +0 -13
- package/dist/components/Form/FormField/Extensions/DateField/DateField.js +0 -75
- package/dist/components/Form/FormField/Extensions/DateField/DateField.module.scss +0 -0
- package/dist/components/Form/FormField/Extensions/DateField/index.d.ts +0 -2
- package/dist/components/Form/FormField/Extensions/DateField/index.js +0 -26
- package/dist/components/Form/FormField/Extensions/PhoneField/PhoneField.d.ts +0 -9
- package/dist/components/Form/FormField/Extensions/PhoneField/PhoneField.js +0 -90
- package/dist/components/Form/FormField/Extensions/PhoneField/PhoneField.module.scss +0 -0
- package/dist/components/Form/FormField/Extensions/PhoneField/index.d.ts +0 -2
- package/dist/components/Form/FormField/Extensions/PhoneField/index.js +0 -26
- package/dist/components/Form/FormField/FormField.d.ts +0 -5
- package/dist/components/Form/FormField/FormField.js +0 -297
- package/dist/components/Form/FormField/FormField.types.d.ts +0 -103
- package/dist/components/Form/FormField/FormField.types.js +0 -12
- package/dist/components/Form/FormField/index.d.ts +0 -2
- package/dist/components/Form/FormField/index.js +0 -26
- package/dist/components/Form/index.d.ts +0 -2
- package/dist/components/Form/index.js +0 -26
- package/dist/components/Freeze/Freeze.d.ts +0 -5
- package/dist/components/Freeze/Freeze.js +0 -18
- package/dist/components/Freeze/index.d.ts +0 -2
- package/dist/components/Freeze/index.js +0 -26
- package/dist/components/HSForms/HSForms.d.ts +0 -12
- package/dist/components/HSForms/HSForms.js +0 -54
- package/dist/components/HSForms/index.d.ts +0 -2
- package/dist/components/HSForms/index.js +0 -26
- package/dist/components/HeaderCloseBtn/HeaderCloseBtn.d.ts +0 -9
- package/dist/components/HeaderCloseBtn/HeaderCloseBtn.js +0 -25
- package/dist/components/HeaderCloseBtn/HeaderCloseBtn.module.scss +0 -44
- package/dist/components/HeaderCloseBtn/index.d.ts +0 -2
- package/dist/components/HeaderCloseBtn/index.js +0 -26
- package/dist/components/InfinityScroll/InfinityScroll.d.ts +0 -22
- package/dist/components/InfinityScroll/InfinityScroll.js +0 -127
- package/dist/components/InfinityScroll/InfinityScroll.module.scss +0 -30
- package/dist/components/InfinityScroll/index.d.ts +0 -2
- package/dist/components/InfinityScroll/index.js +0 -26
- package/dist/components/Input/Input.d.ts +0 -43
- package/dist/components/Input/Input.js +0 -109
- package/dist/components/Input/Input.module.scss +0 -31
- package/dist/components/Input/index.d.ts +0 -2
- package/dist/components/Input/index.js +0 -26
- package/dist/components/InstantCounter/InstantCounter.d.ts +0 -16
- package/dist/components/InstantCounter/InstantCounter.js +0 -54
- package/dist/components/InstantCounter/index.d.ts +0 -2
- package/dist/components/InstantCounter/index.js +0 -26
- package/dist/components/LavaLamp/LavaLamp.d.ts +0 -12
- package/dist/components/LavaLamp/LavaLamp.data.d.ts +0 -16
- package/dist/components/LavaLamp/LavaLamp.data.js +0 -89
- package/dist/components/LavaLamp/LavaLamp.js +0 -124
- package/dist/components/LavaLamp/LavaLamp.module.scss +0 -26
- package/dist/components/LavaLamp/index.d.ts +0 -2
- package/dist/components/LavaLamp/index.js +0 -26
- package/dist/components/LavaLamp/v2/LavaLamp.d.ts +0 -4
- package/dist/components/LavaLamp/v2/LavaLamp.js +0 -153
- package/dist/components/LavaLamp/v2/LavaLamp.module.scss +0 -23
- package/dist/components/LinkToId/LinkToId.d.ts +0 -11
- package/dist/components/LinkToId/LinkToId.js +0 -45
- package/dist/components/LinkToId/LinkToId.module.scss +0 -4
- package/dist/components/LinkToId/index.d.ts +0 -2
- package/dist/components/LinkToId/index.js +0 -26
- package/dist/components/Loader/Loader.d.ts +0 -8
- package/dist/components/Loader/Loader.js +0 -27
- package/dist/components/Loader/Loader.module.scss +0 -40
- package/dist/components/Loader/index.d.ts +0 -2
- package/dist/components/Loader/index.js +0 -26
- package/dist/components/LoaderDotsIndicator/LoaderDotsIndicator.d.ts +0 -12
- package/dist/components/LoaderDotsIndicator/LoaderDotsIndicator.js +0 -35
- package/dist/components/LoaderDotsIndicator/index.d.ts +0 -2
- package/dist/components/LoaderDotsIndicator/index.js +0 -26
- package/dist/components/LoopableVideo/LoopableVideo.d.ts +0 -12
- package/dist/components/LoopableVideo/LoopableVideo.js +0 -41
- package/dist/components/LoopableVideo/index.d.ts +0 -2
- package/dist/components/LoopableVideo/index.js +0 -26
- package/dist/components/MainGrid/MainGrid.d.ts +0 -17
- package/dist/components/MainGrid/MainGrid.js +0 -54
- package/dist/components/MainGrid/MainGrid.module.scss +0 -28
- package/dist/components/MainGrid/index.d.ts +0 -2
- package/dist/components/MainGrid/index.js +0 -26
- package/dist/components/MutableHamburgerButton/MutableHamburgerButton.d.ts +0 -8
- package/dist/components/MutableHamburgerButton/MutableHamburgerButton.js +0 -32
- package/dist/components/MutableHamburgerButton/MutableHamburgerButton.module.scss +0 -220
- package/dist/components/MutableHamburgerButton/index.d.ts +0 -2
- package/dist/components/MutableHamburgerButton/index.js +0 -26
- package/dist/components/Notification/Notification.d.ts +0 -8
- package/dist/components/Notification/Notification.js +0 -24
- package/dist/components/Notification/Notification.module.scss +0 -25
- package/dist/components/Notification/index.d.ts +0 -2
- package/dist/components/Notification/index.js +0 -26
- package/dist/components/NumberInput/NumberInput.d.ts +0 -11
- package/dist/components/NumberInput/NumberInput.js +0 -50
- package/dist/components/NumberInput/index.d.ts +0 -2
- package/dist/components/NumberInput/index.js +0 -26
- package/dist/components/OrderableList/OrderableList.d.ts +0 -40
- package/dist/components/OrderableList/OrderableList.js +0 -438
- package/dist/components/OrderableList/OrderableList.module.scss +0 -98
- package/dist/components/OrderableList/index.d.ts +0 -2
- package/dist/components/OrderableList/index.js +0 -26
- package/dist/components/PaginationIndicator/PaginationIndicator.d.ts +0 -45
- package/dist/components/PaginationIndicator/PaginationIndicator.js +0 -260
- package/dist/components/PaginationIndicator/index.d.ts +0 -2
- package/dist/components/PaginationIndicator/index.js +0 -26
- package/dist/components/Parallax/Parallax.d.ts +0 -20
- package/dist/components/Parallax/Parallax.js +0 -168
- package/dist/components/Parallax/Parallax.module.scss +0 -28
- package/dist/components/Parallax/index.d.ts +0 -2
- package/dist/components/Parallax/index.js +0 -26
- package/dist/components/Parallax/math/helpers.d.ts +0 -58
- package/dist/components/Parallax/math/helpers.js +0 -134
- package/dist/components/PasswordInput/PasswordInput.d.ts +0 -48
- package/dist/components/PasswordInput/PasswordInput.js +0 -96
- package/dist/components/PasswordInput/PasswordInput.module.scss +0 -17
- package/dist/components/PasswordInput/index.d.ts +0 -2
- package/dist/components/PasswordInput/index.js +0 -26
- package/dist/components/PingPongText/PingPongText.d.ts +0 -10
- package/dist/components/PingPongText/PingPongText.js +0 -75
- package/dist/components/PingPongText/PingPongText.module.scss +0 -4
- package/dist/components/PingPongText/index.d.ts +0 -2
- package/dist/components/PingPongText/index.js +0 -26
- package/dist/components/PixelatedScan/PixelatedScan.d.ts +0 -13
- package/dist/components/PixelatedScan/PixelatedScan.js +0 -138
- package/dist/components/PixelatedScan/PixelatedScan.module.scss +0 -86
- package/dist/components/PixelatedScan/index.d.ts +0 -2
- package/dist/components/PixelatedScan/index.js +0 -26
- package/dist/components/Portal/Portal.d.ts +0 -20
- package/dist/components/Portal/Portal.js +0 -61
- package/dist/components/Portal/Portal.module.scss +0 -3
- package/dist/components/Portal/index.d.ts +0 -2
- package/dist/components/Portal/index.js +0 -26
- package/dist/components/ProgressBar/ProgressBar.d.ts +0 -32
- package/dist/components/ProgressBar/ProgressBar.js +0 -112
- package/dist/components/ProgressBar/ProgressBar.module.scss +0 -44
- package/dist/components/ProgressBar/index.d.ts +0 -2
- package/dist/components/ProgressBar/index.js +0 -26
- package/dist/components/ProgressTexts/ProgressTexts.d.ts +0 -29
- package/dist/components/ProgressTexts/ProgressTexts.js +0 -52
- package/dist/components/ProgressTexts/ProgressTexts.module.scss +0 -37
- package/dist/components/ProgressTexts/index.d.ts +0 -2
- package/dist/components/ProgressTexts/index.js +0 -26
- package/dist/components/Radio/Radio.d.ts +0 -15
- package/dist/components/Radio/Radio.js +0 -53
- package/dist/components/Radio/Radio.module.scss +0 -20
- package/dist/components/Radio/index.d.ts +0 -2
- package/dist/components/Radio/index.js +0 -26
- package/dist/components/Radio/variants/Checkmark/Checkmark.d.ts +0 -7
- package/dist/components/Radio/variants/Checkmark/Checkmark.js +0 -20
- package/dist/components/Radio/variants/Checkmark/Checkmark.module.scss +0 -24
- package/dist/components/Radio/variants/Checkmark/index.d.ts +0 -2
- package/dist/components/Radio/variants/Checkmark/index.js +0 -26
- package/dist/components/Radio/variants/Generic/Generic.d.ts +0 -7
- package/dist/components/Radio/variants/Generic/Generic.js +0 -22
- package/dist/components/Radio/variants/Generic/Generic.module.scss +0 -38
- package/dist/components/Radio/variants/Generic/index.d.ts +0 -2
- package/dist/components/Radio/variants/Generic/index.js +0 -26
- package/dist/components/SectionContainer/SectionContainer.d.ts +0 -19
- package/dist/components/SectionContainer/SectionContainer.js +0 -48
- package/dist/components/SectionContainer/SectionContainer.module.scss +0 -30
- package/dist/components/SectionContainer/index.d.ts +0 -2
- package/dist/components/SectionContainer/index.js +0 -26
- package/dist/components/Select/Select.d.ts +0 -42
- package/dist/components/Select/Select.js +0 -137
- package/dist/components/Select/Select.module.scss +0 -60
- package/dist/components/Select/index.d.ts +0 -2
- package/dist/components/Select/index.js +0 -26
- package/dist/components/Skeleton/Skeleton.d.ts +0 -10
- package/dist/components/Skeleton/Skeleton.js +0 -30
- package/dist/components/Skeleton/Skeleton.module.scss +0 -21
- package/dist/components/Skeleton/index.d.ts +0 -2
- package/dist/components/Skeleton/index.js +0 -26
- package/dist/components/Slider/Slider.d.ts +0 -11
- package/dist/components/Slider/Slider.e2e.d.ts +0 -4
- package/dist/components/Slider/Slider.js +0 -70
- package/dist/components/Slider/Slider.module.scss +0 -7
- package/dist/components/Slider/index.d.ts +0 -2
- package/dist/components/Slider/index.js +0 -26
- package/dist/components/Spacing/Spacing.d.ts +0 -11
- package/dist/components/Spacing/Spacing.js +0 -33
- package/dist/components/Spacing/Spacing.module.scss +0 -13
- package/dist/components/Spacing/index.d.ts +0 -2
- package/dist/components/Spacing/index.js +0 -26
- package/dist/components/StaticScroller/StaticScroller.d.ts +0 -7
- package/dist/components/StaticScroller/StaticScroller.js +0 -71
- package/dist/components/StaticScroller/StaticScroller.module.scss +0 -14
- package/dist/components/StaticScroller/index.d.ts +0 -2
- package/dist/components/StaticScroller/index.js +0 -26
- package/dist/components/Switch/Switch.d.ts +0 -12
- package/dist/components/Switch/Switch.js +0 -47
- package/dist/components/Switch/Switch.module.scss +0 -46
- package/dist/components/Switch/index.d.ts +0 -2
- package/dist/components/Switch/index.js +0 -26
- package/dist/components/Table/Table.d.ts +0 -23
- package/dist/components/Table/Table.js +0 -114
- package/dist/components/Table/Table.module.scss +0 -74
- package/dist/components/Table/index.d.ts +0 -2
- package/dist/components/Table/index.js +0 -26
- package/dist/components/Tabs/Tabs.d.ts +0 -28
- package/dist/components/Tabs/Tabs.js +0 -66
- package/dist/components/Tabs/Tabs.module.scss +0 -40
- package/dist/components/Tabs/index.d.ts +0 -2
- package/dist/components/Tabs/index.js +0 -26
- package/dist/components/Text/Text.d.ts +0 -22
- package/dist/components/Text/Text.js +0 -43
- package/dist/components/Text/Text.module.scss +0 -13
- package/dist/components/Text/index.d.ts +0 -2
- package/dist/components/Text/index.js +0 -26
- package/dist/components/Transition/MasksFactory/DiagonalReveal.d.ts +0 -1
- package/dist/components/Transition/MasksFactory/DiagonalReveal.js +0 -49
- package/dist/components/Transition/MasksFactory/DiagonalSquareToBalls.d.ts +0 -5
- package/dist/components/Transition/MasksFactory/DiagonalSquareToBalls.js +0 -77
- package/dist/components/Transition/MasksFactory/PhysicsSquares.d.ts +0 -7
- package/dist/components/Transition/MasksFactory/PhysicsSquares.js +0 -96
- package/dist/components/Transition/MasksFactory/SquareToBalls.d.ts +0 -5
- package/dist/components/Transition/MasksFactory/SquareToBalls.js +0 -66
- package/dist/components/Transition/MasksFactory/utils.d.ts +0 -8
- package/dist/components/Transition/MasksFactory/utils.js +0 -30
- package/dist/components/Transition/Transition.d.ts +0 -114
- package/dist/components/Transition/Transition.js +0 -322
- package/dist/components/Transition/Transition.module.scss +0 -211
- package/dist/components/Transition/index.d.ts +0 -2
- package/dist/components/Transition/index.js +0 -26
- package/dist/components/UncontrolledTransition/UncontrolledTransition.ai.md +0 -9
- package/dist/components/UncontrolledTransition/UncontrolledTransition.d.ts +0 -17
- package/dist/components/UncontrolledTransition/UncontrolledTransition.js +0 -109
- package/dist/components/UncontrolledTransition/UncontrolledTransition.sample.d.ts +0 -1
- package/dist/components/UncontrolledTransition/UncontrolledTransition.sample.js +0 -31
- package/dist/components/UncontrolledTransition/index.d.ts +0 -2
- package/dist/components/UncontrolledTransition/index.js +0 -26
- package/dist/components/WalletConnectionWrapper/WalletConnectionWrapper.d.ts +0 -55
- package/dist/components/WalletConnectionWrapper/WalletConnectionWrapper.js +0 -114
- package/dist/components/WalletConnectionWrapper/index.d.ts +0 -2
- package/dist/components/WalletConnectionWrapper/index.js +0 -26
- package/dist/components/utilitary/ScrollAndFocusLock/ScrollAndFocusLock.d.ts +0 -7
- package/dist/components/utilitary/ScrollAndFocusLock/ScrollAndFocusLock.js +0 -58
- package/dist/components/utilitary/ScrollAndFocusLock/ScrollAndFocusLock.module.scss +0 -5
- package/dist/components/utilitary/ScrollAndFocusLock/index.d.ts +0 -2
- package/dist/components/utilitary/ScrollAndFocusLock/index.js +0 -26
- package/dist/context/AsyncProcess.d.ts +0 -23
- package/dist/context/AsyncProcess.js +0 -73
- package/dist/context/ContextAsyncControl.d.ts +0 -39
- package/dist/context/ContextAsyncControl.js +0 -91
- package/dist/context/CustomBrowserRouter.d.ts +0 -19
- package/dist/context/CustomBrowserRouter.js +0 -49
- package/dist/context/OneUIProvider.d.ts +0 -198
- package/dist/context/OneUIProvider.js +0 -128
- package/dist/hooks/logs/useDependencyChangeDetection.d.ts +0 -1
- package/dist/hooks/logs/useDependencyChangeDetection.js +0 -20
- package/dist/hooks/logs/useIsMounting.d.ts +0 -1
- package/dist/hooks/logs/useIsMounting.js +0 -13
- package/dist/hooks/persistence/useLocalStorage.d.ts +0 -2
- package/dist/hooks/persistence/useLocalStorage.js +0 -48
- package/dist/hooks/shims/ObjectWatchShim.d.ts +0 -1
- package/dist/hooks/shims/ObjectWatchShim.js +0 -54
- package/dist/hooks/ui/useAdaptiveImage.d.ts +0 -7
- package/dist/hooks/ui/useAdaptiveImage.js +0 -36
- package/dist/hooks/ui/useAlternating.d.ts +0 -4
- package/dist/hooks/ui/useAlternating.js +0 -24
- package/dist/hooks/ui/useBreakpoint.d.ts +0 -5
- package/dist/hooks/ui/useBreakpoint.js +0 -26
- package/dist/hooks/ui/useCustomScrollbar.d.ts +0 -8
- package/dist/hooks/ui/useCustomScrollbar.js +0 -28
- package/dist/hooks/ui/useCustomScrollbar.module.scss +0 -20
- package/dist/hooks/ui/useEffectIf.d.ts +0 -2
- package/dist/hooks/ui/useEffectIf.js +0 -14
- package/dist/hooks/ui/useMouseHover.d.ts +0 -11
- package/dist/hooks/ui/useMouseHover.js +0 -29
- package/dist/hooks/ui/usePaginationControls.d.ts +0 -14
- package/dist/hooks/ui/usePaginationControls.js +0 -135
- package/dist/hooks/ui/usePaginationControls.module.scss +0 -16
- package/dist/hooks/ui/useSnapToViewport.d.ts +0 -5
- package/dist/hooks/ui/useSnapToViewport.js +0 -26
- package/dist/hooks/ui/useSnapToViewport.module.scss +0 -6
- package/dist/hooks/ui/useTilt.d.ts +0 -46
- package/dist/hooks/ui/useTilt.js +0 -161
- package/dist/hooks/ui/useZoomable.d.ts +0 -6
- package/dist/hooks/ui/useZoomable.js +0 -134
- package/dist/hooks/ui/useZoomable.module.scss +0 -34
- package/dist/hooks/useAsyncControl.ai.md +0 -25
- package/dist/hooks/useAsyncControl.d.ts +0 -32
- package/dist/hooks/useAsyncControl.js +0 -79
- package/dist/hooks/useContainedRepositioning.d.ts +0 -15
- package/dist/hooks/useContainedRepositioning.js +0 -83
- package/dist/hooks/useCustomHistory.d.ts +0 -14
- package/dist/hooks/useCustomHistory.js +0 -24
- package/dist/hooks/useElementFit.d.ts +0 -18
- package/dist/hooks/useElementFit.js +0 -54
- package/dist/hooks/useFirestoreWatch.d.ts +0 -12
- package/dist/hooks/useFirestoreWatch.js +0 -45
- package/dist/hooks/useFreeze.d.ts +0 -5
- package/dist/hooks/useFreeze.js +0 -17
- package/dist/hooks/useHero.d.ts +0 -68
- package/dist/hooks/useHero.js +0 -273
- package/dist/hooks/useHero.module.scss +0 -41
- package/dist/hooks/useIntersection.d.ts +0 -8
- package/dist/hooks/useIntersection.js +0 -39
- package/dist/hooks/useMergeRefs.d.ts +0 -9
- package/dist/hooks/useMergeRefs.js +0 -37
- package/dist/hooks/useObserve.d.ts +0 -6
- package/dist/hooks/useObserve.js +0 -25
- package/dist/hooks/usePagination.d.ts +0 -57
- package/dist/hooks/usePagination.js +0 -163
- package/dist/hooks/usePooledOperation.d.ts +0 -19
- package/dist/hooks/usePooledOperation.js +0 -53
- package/dist/hooks/usePooling.d.ts +0 -22
- package/dist/hooks/usePooling.js +0 -52
- package/dist/hooks/useRebound.d.ts +0 -13
- package/dist/hooks/useRebound.js +0 -32
- package/dist/hooks/useShortIntl.ai.md +0 -5
- package/dist/hooks/useShortIntl.d.ts +0 -21
- package/dist/hooks/useShortIntl.js +0 -82
- package/dist/hooks/utility/useAsyncMemo.d.ts +0 -13
- package/dist/hooks/utility/useAsyncMemo.js +0 -45
- package/dist/hooks/utility/useDepChange.d.ts +0 -1
- package/dist/hooks/utility/useDepChange.js +0 -17
- package/dist/hooks/utility/useEvents.d.ts +0 -9
- package/dist/hooks/utility/useEvents.js +0 -33
- package/dist/hooks/utility/useImmediate.d.ts +0 -4
- package/dist/hooks/utility/useImmediate.js +0 -14
- package/dist/hooks/utility/useManualInit.d.ts +0 -4
- package/dist/hooks/utility/useManualInit.js +0 -25
- package/dist/hooks/utility/useModule.d.ts +0 -4
- package/dist/hooks/utility/useModule.js +0 -18
- package/dist/hooks/utility/useQuery.d.ts +0 -7
- package/dist/hooks/utility/useQuery.js +0 -20
- package/dist/hooks/utility/useUniqueEffect.d.ts +0 -1
- package/dist/hooks/utility/useUniqueEffect.js +0 -20
- package/dist/index.d.ts +0 -222
- package/dist/index.js +0 -2148
- package/dist/index.preprocess.d.ts +0 -1
- package/dist/index.preprocess.js +0 -42
- package/dist/models/DebugLogger.d.ts +0 -4
- package/dist/models/DebugLogger.js +0 -16
- package/dist/models/GenericContract.d.ts +0 -100
- package/dist/models/GenericContract.js +0 -51
- package/dist/models/Orbs.d.ts +0 -44
- package/dist/models/Orbs.js +0 -67
- package/dist/reac-app-env.d.js +0 -2
- package/dist/storybook/assets/video/txt-reversed.mp4 +0 -0
- package/dist/storybookUtils/index.d.ts +0 -5
- package/dist/storybookUtils/index.js +0 -44
- package/dist/type-utils.d.ts +0 -59
- package/dist/type-utils.js +0 -6
- package/dist/types.d.ts +0 -79
- package/dist/types.js +0 -6
- package/dist/utility.d.js +0 -2
- package/dist/utils/blockchain.d.ts +0 -8
- package/dist/utils/blockchain.js +0 -46
- package/dist/utils/e2e.d.ts +0 -19
- package/dist/utils/e2e.js +0 -33
- package/dist/utils/flatten.d.ts +0 -5
- package/dist/utils/flatten.js +0 -19
- package/dist/utils/formatters.d.ts +0 -21
- package/dist/utils/formatters.js +0 -63
- package/dist/utils/html.utils.d.ts +0 -2
- package/dist/utils/html.utils.js +0 -15
- package/dist/utils/ownEvent.d.ts +0 -4
- package/dist/utils/ownEvent.js +0 -16
- package/dist/utils/test.d.ts +0 -6
- package/dist/utils/test.js +0 -19
|
@@ -1,438 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.OrderableListReorderMode = void 0;
|
|
7
|
-
exports.default = OrderableList;
|
|
8
|
-
exports.useOrderableEvents = useOrderableEvents;
|
|
9
|
-
exports.useOrderableListAnchor = useOrderableListAnchor;
|
|
10
|
-
var _throttle = _interopRequireDefault(require("lodash/throttle"));
|
|
11
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
12
|
-
var _UncontrolledTransition = _interopRequireDefault(require("../UncontrolledTransition"));
|
|
13
|
-
var _TransitionModule = _interopRequireDefault(require("../Transition/Transition.module.scss"));
|
|
14
|
-
var _useHero = _interopRequireDefault(require("../../hooks/useHero"));
|
|
15
|
-
var _AnimatedEntrance = _interopRequireDefault(require("../AnimatedEntrance"));
|
|
16
|
-
var _Transition = require("../Transition");
|
|
17
|
-
var _OrderableListModule = _interopRequireDefault(require("./OrderableList.module.scss"));
|
|
18
|
-
var _useEvents = _interopRequireDefault(require("../../hooks/utility/useEvents"));
|
|
19
|
-
var _ownEvent = _interopRequireDefault(require("../../utils/ownEvent"));
|
|
20
|
-
const _excluded = ["children", "className", "mode", "shrinkToOnOrder", "reorderingClassName", "cloneClassName"];
|
|
21
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
22
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
23
|
-
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
24
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
25
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
26
|
-
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
27
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
28
|
-
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
29
|
-
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
|
|
30
|
-
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
|
|
31
|
-
const OrderableListContext = /*#__PURE__*/(0, _react.createContext)(null);
|
|
32
|
-
let OrderableListReorderMode = exports.OrderableListReorderMode = /*#__PURE__*/function (OrderableListReorderMode) {
|
|
33
|
-
OrderableListReorderMode["VERTICAL"] = "v";
|
|
34
|
-
OrderableListReorderMode["TWO_DIMENSIONS"] = "hv";
|
|
35
|
-
return OrderableListReorderMode;
|
|
36
|
-
}({});
|
|
37
|
-
function cleanKeys(keys) {
|
|
38
|
-
return keys.map(a => a.split(";")[0]);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* This component displays a list of items that can be reordered by dragging them with your mouse or touch.
|
|
43
|
-
* It supports simple vertical dragging and more advanced 2D reordering, with smooth animations
|
|
44
|
-
* when items move around.
|
|
45
|
-
*/
|
|
46
|
-
function OrderableList(_ref) {
|
|
47
|
-
let {
|
|
48
|
-
children,
|
|
49
|
-
className = "",
|
|
50
|
-
mode = OrderableListReorderMode.VERTICAL,
|
|
51
|
-
shrinkToOnOrder,
|
|
52
|
-
reorderingClassName,
|
|
53
|
-
cloneClassName
|
|
54
|
-
} = _ref,
|
|
55
|
-
props = _objectWithoutProperties(_ref, _excluded);
|
|
56
|
-
const availableKeys = children.map(a => a.key);
|
|
57
|
-
const availableKeysDep = availableKeys.join(",");
|
|
58
|
-
const initializeOrder = (0, _react.useCallback)(() => {
|
|
59
|
-
const missingOrderKeys = "keyOrder" in props && props.keyOrder ? availableKeys.filter(a => !props.keyOrder.includes(a)) : [];
|
|
60
|
-
return ("keyOrder" in props && props.keyOrder ? [...props.keyOrder, ...missingOrderKeys] : undefined) || availableKeys;
|
|
61
|
-
}, [availableKeysDep, props.keyOrder]);
|
|
62
|
-
const {
|
|
63
|
-
current: anchorsList
|
|
64
|
-
} = (0, _react.useRef)([]);
|
|
65
|
-
const eventEmitter = (0, _useEvents.default)();
|
|
66
|
-
const currentClone = (0, _react.useRef)(null);
|
|
67
|
-
const currentWorkingKey = (0, _react.useRef)(undefined);
|
|
68
|
-
const rootRef = (0, _react.useRef)(null);
|
|
69
|
-
const [_order, setOrder] = (0, _react.useState)(initializeOrder);
|
|
70
|
-
(0, _react.useEffect)(() => setOrder(initializeOrder()), [initializeOrder]);
|
|
71
|
-
const order = (0, _react.useMemo)(() => {
|
|
72
|
-
return ("currentOrder" in props ? props.currentOrder || _order : _order).filter(o => o.includes(";") || availableKeys.includes(o));
|
|
73
|
-
}, [props.currentOrder, _order, availableKeysDep]);
|
|
74
|
-
const cleanOrder = (0, _react.useMemo)(() => order.map(a => a.split(";")[0]), [order]);
|
|
75
|
-
const orderId = (0, _react.useMemo)(() => "key-" + cleanOrder.join(""), [cleanOrder]);
|
|
76
|
-
function rootEl() {
|
|
77
|
-
if (mode === OrderableListReorderMode.TWO_DIMENSIONS) return rootRef.current.lastElementChild.lastElementChild;
|
|
78
|
-
return rootRef.current;
|
|
79
|
-
}
|
|
80
|
-
const findParentElement = target => {
|
|
81
|
-
let parent = target;
|
|
82
|
-
while (parent.parentElement !== rootEl()) {
|
|
83
|
-
if (parent.parentElement === null) break;
|
|
84
|
-
parent = parent.parentElement;
|
|
85
|
-
}
|
|
86
|
-
if (process.env.NODE_ENV === "development" && parent === null) throw new Error("It seems like we could not find a relation between this element and the root list. Are you using portals maybe?");
|
|
87
|
-
return parent;
|
|
88
|
-
};
|
|
89
|
-
(0, _react.useLayoutEffect)(() => {
|
|
90
|
-
if (shrinkToOnOrder) rootEl().style.setProperty("--shrink-to", "".concat(shrinkToOnOrder, "px"));
|
|
91
|
-
}, [shrinkToOnOrder]);
|
|
92
|
-
const calculateReordering = (0, _react.useMemo)(() => {
|
|
93
|
-
return (0, _throttle.default)((e, els, currentOrder) => {
|
|
94
|
-
if (els.length > currentOrder.length || !currentWorkingKey.current) return;
|
|
95
|
-
const parent = findParentElement(e.target);
|
|
96
|
-
const indexOfKeyInCleanOrder = els.indexOf(parent);
|
|
97
|
-
const keyOfTheOverElement = currentOrder[indexOfKeyInCleanOrder];
|
|
98
|
-
const isDraggingOwnElement = currentWorkingKey.current === keyOfTheOverElement;
|
|
99
|
-
if (indexOfKeyInCleanOrder === -1 || keyOfTheOverElement === undefined) return;
|
|
100
|
-
if (!isDraggingOwnElement) {
|
|
101
|
-
const {
|
|
102
|
-
isAfter,
|
|
103
|
-
isBefore
|
|
104
|
-
} = (() => {
|
|
105
|
-
if (mode === OrderableListReorderMode.TWO_DIMENSIONS) {
|
|
106
|
-
const distanceFromLeft = e.offsetX;
|
|
107
|
-
const widthOfEl = parent.clientWidth;
|
|
108
|
-
const offset = widthOfEl * 0.25;
|
|
109
|
-
const isAfter = distanceFromLeft > widthOfEl - offset;
|
|
110
|
-
const isBefore = distanceFromLeft < offset;
|
|
111
|
-
return {
|
|
112
|
-
isAfter,
|
|
113
|
-
isBefore
|
|
114
|
-
};
|
|
115
|
-
} else {
|
|
116
|
-
const distanceFromTop = e.offsetY;
|
|
117
|
-
const heightOfEl = parent.clientHeight;
|
|
118
|
-
const offset = heightOfEl * 0.25;
|
|
119
|
-
const isAfter = distanceFromTop > heightOfEl - offset;
|
|
120
|
-
const isBefore = distanceFromTop < offset;
|
|
121
|
-
return {
|
|
122
|
-
isAfter,
|
|
123
|
-
isBefore
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
})();
|
|
127
|
-
const checkIfCanMove = keyOfOverElement => {
|
|
128
|
-
return keyOfOverElement === undefined || keyOfOverElement !== currentWorkingKey.current;
|
|
129
|
-
};
|
|
130
|
-
const indexOfTheNewElement = indexOfKeyInCleanOrder + (isAfter ? 1 : -1);
|
|
131
|
-
const shouldTriggerReordering = (isAfter || isBefore) && checkIfCanMove(currentOrder[indexOfTheNewElement]);
|
|
132
|
-
if (shouldTriggerReordering) {
|
|
133
|
-
setOrder(p => {
|
|
134
|
-
const previousIndex = currentOrder.indexOf(currentWorkingKey.current);
|
|
135
|
-
const indexOfKeyInProvidedOrder = cleanKeys(p).indexOf(keyOfTheOverElement);
|
|
136
|
-
let indexOfTheNewElement = indexOfKeyInProvidedOrder + (isBefore ? -1 : 0);
|
|
137
|
-
if (previousIndex > indexOfTheNewElement) indexOfTheNewElement++;
|
|
138
|
-
const orderWithoutCurrent = p.filter(a => {
|
|
139
|
-
if (a.startsWith("".concat(currentWorkingKey.current, ";"))) return false;
|
|
140
|
-
return a !== currentWorkingKey.current;
|
|
141
|
-
});
|
|
142
|
-
orderWithoutCurrent.splice(indexOfTheNewElement, 0, "".concat(currentWorkingKey.current, ";").concat(Date.now()));
|
|
143
|
-
return orderWithoutCurrent;
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}, 1000 / 60);
|
|
148
|
-
}, []);
|
|
149
|
-
(0, _react.useEffect)(() => {
|
|
150
|
-
function registerListeners() {
|
|
151
|
-
const els = Array.from(rootEl().children);
|
|
152
|
-
const calculateReorderingCall = e => {
|
|
153
|
-
const els = Array.from(rootEl().children);
|
|
154
|
-
calculateReordering(e, els, cleanOrder);
|
|
155
|
-
};
|
|
156
|
-
for (let el of els) el.addEventListener("mousemove", calculateReorderingCall);
|
|
157
|
-
return () => {
|
|
158
|
-
for (let el of els) el.removeEventListener("mousemove", calculateReorderingCall);
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
if (mode === OrderableListReorderMode.VERTICAL) {
|
|
162
|
-
return registerListeners();
|
|
163
|
-
} else {
|
|
164
|
-
let unsubscribe;
|
|
165
|
-
let timeout = setTimeout(() => {
|
|
166
|
-
unsubscribe = registerListeners();
|
|
167
|
-
}, 250);
|
|
168
|
-
return () => {
|
|
169
|
-
clearTimeout(timeout);
|
|
170
|
-
if (unsubscribe) unsubscribe();
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
}, [cleanOrder]);
|
|
174
|
-
(0, _react.useEffect)(() => {
|
|
175
|
-
if ("onChangeKeyOrder" in props) props.onChangeKeyOrder(cleanKeys(_order));
|
|
176
|
-
}, [_order]);
|
|
177
|
-
const cleanOrderRef = (0, _react.useRef)(cleanOrder);
|
|
178
|
-
(0, _react.useEffect)(() => {
|
|
179
|
-
cleanOrderRef.current = cleanOrder;
|
|
180
|
-
}, [cleanOrder]);
|
|
181
|
-
const onAnchorClick = (0, _react.useCallback)(_ref2 => {
|
|
182
|
-
let {
|
|
183
|
-
target: anchor
|
|
184
|
-
} = _ref2;
|
|
185
|
-
let offset;
|
|
186
|
-
const orderableListItemForAnchor = findParentElement(anchor);
|
|
187
|
-
const box = orderableListItemForAnchor.getBoundingClientRect();
|
|
188
|
-
const els = Array.from(rootEl().children);
|
|
189
|
-
const elIndex = els.indexOf(orderableListItemForAnchor);
|
|
190
|
-
const clone = orderableListItemForAnchor.cloneNode(true);
|
|
191
|
-
currentClone.current = clone;
|
|
192
|
-
if (process.env.NODE_ENV === "development") clone.setAttribute("data-testid", "orderable-list-clone");
|
|
193
|
-
clone.setAttribute("data-orderableid", "orderable-list-clone");
|
|
194
|
-
clone.style.width = "".concat(box.width, "px");
|
|
195
|
-
clone.style.height = "".concat(box.height, "px");
|
|
196
|
-
clone.style.top = "".concat(box.top, "px");
|
|
197
|
-
clone.style.left = "".concat(box.left, "px");
|
|
198
|
-
clone.classList.add(_OrderableListModule.default.clone);
|
|
199
|
-
if (shrinkToOnOrder) clone.style.maxHeight = "".concat(box.height, "px");
|
|
200
|
-
setTimeout(() => {
|
|
201
|
-
if (cloneClassName) clone.classList.add(cloneClassName);
|
|
202
|
-
if (shrinkToOnOrder) clone.style.maxHeight = "".concat(shrinkToOnOrder, "px");
|
|
203
|
-
}, 0);
|
|
204
|
-
orderableListItemForAnchor.classList.add(_OrderableListModule.default.currentOrdering);
|
|
205
|
-
orderableListItemForAnchor.classList.remove(_OrderableListModule.default.visible);
|
|
206
|
-
const movementControl = e => {
|
|
207
|
-
const {
|
|
208
|
-
x: x1,
|
|
209
|
-
y: y1
|
|
210
|
-
} = "touches" in e ? {
|
|
211
|
-
x: e.touches[0].pageX,
|
|
212
|
-
y: e.touches[0].pageY
|
|
213
|
-
} : e;
|
|
214
|
-
if (!offset) offset = [x1 - box.left, y1 - box.top];
|
|
215
|
-
const [offsetX, offsetY] = offset;
|
|
216
|
-
clone.style.top = "".concat(y1 - offsetY, "px");
|
|
217
|
-
clone.style.left = "".concat(x1 - offsetX, "px");
|
|
218
|
-
};
|
|
219
|
-
document.body.appendChild(clone);
|
|
220
|
-
const deleteClone = () => {
|
|
221
|
-
window.removeEventListener("mousemove", movementControl);
|
|
222
|
-
window.removeEventListener("touchmove", movementControl);
|
|
223
|
-
window.removeEventListener("touchend", deleteClone);
|
|
224
|
-
window.removeEventListener("mouseup", deleteClone);
|
|
225
|
-
orderableListItemForAnchor.style.visibility = "initial";
|
|
226
|
-
currentWorkingKey.current = undefined;
|
|
227
|
-
window.document.body.classList.remove(_OrderableListModule.default.unselectable);
|
|
228
|
-
{
|
|
229
|
-
const els = Array.from(rootEl().children);
|
|
230
|
-
const elInvisible = els.find(a => !a.classList.contains(_OrderableListModule.default.visible) && a.style.maxHeight !== "0px");
|
|
231
|
-
if (shrinkToOnOrder) {
|
|
232
|
-
const child = elInvisible.lastElementChild;
|
|
233
|
-
child.style.maxHeight = "".concat(child.scrollHeight, "px");
|
|
234
|
-
child.classList.add(_OrderableListModule.default.transitionHeight);
|
|
235
|
-
const onEnd = (0, _ownEvent.default)(() => {
|
|
236
|
-
child.removeEventListener("transitionend", onEnd);
|
|
237
|
-
child.style.maxHeight = "initial";
|
|
238
|
-
child.classList.remove(_OrderableListModule.default.transitionHeight);
|
|
239
|
-
});
|
|
240
|
-
child.addEventListener("transitionend", onEnd);
|
|
241
|
-
}
|
|
242
|
-
const box = elInvisible.getBoundingClientRect();
|
|
243
|
-
function cleanUp() {
|
|
244
|
-
if (shrinkToOnOrder) {
|
|
245
|
-
rootEl().style.removeProperty("padding-top");
|
|
246
|
-
rootEl().style.removeProperty("min-height");
|
|
247
|
-
}
|
|
248
|
-
eventEmitter.dispatcher("order-stop");
|
|
249
|
-
rootEl().classList.remove(_OrderableListModule.default.ordering);
|
|
250
|
-
if (reorderingClassName) rootEl().classList.remove(reorderingClassName);
|
|
251
|
-
for (let el of els) el.classList.remove(_OrderableListModule.default.visible);
|
|
252
|
-
clone.remove();
|
|
253
|
-
currentClone.current = null;
|
|
254
|
-
for (let el of Array.from(elInvisible.children)) el.style.height = "";
|
|
255
|
-
}
|
|
256
|
-
if (clone.style.top.startsWith(Math.floor(box.top).toString()) && clone.style.left.startsWith(Math.floor(box.left).toString())) {
|
|
257
|
-
cleanUp();
|
|
258
|
-
} else {
|
|
259
|
-
clone.style.top = "".concat(box.top, "px");
|
|
260
|
-
clone.style.left = "".concat(box.left, "px");
|
|
261
|
-
clone.style.transition = "top 500ms linear, left 500ms linear";
|
|
262
|
-
clone.addEventListener("transitionend", () => {
|
|
263
|
-
cleanUp();
|
|
264
|
-
});
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
};
|
|
268
|
-
for (let el of els) {
|
|
269
|
-
el.classList.add(_OrderableListModule.default.visible);
|
|
270
|
-
}
|
|
271
|
-
if (shrinkToOnOrder) {
|
|
272
|
-
for (let el of els) el.style.maxHeight = "".concat(el.scrollHeight, "px");
|
|
273
|
-
const targetHeight = elIndex * shrinkToOnOrder;
|
|
274
|
-
const currentHeight = orderableListItemForAnchor.offsetTop - els[0].offsetTop;
|
|
275
|
-
const paddingTop = currentHeight - targetHeight;
|
|
276
|
-
rootEl().style.paddingTop = "".concat(paddingTop, "px");
|
|
277
|
-
rootEl().style.minHeight = "".concat(rootEl().clientHeight, "px");
|
|
278
|
-
}
|
|
279
|
-
orderableListItemForAnchor.style.visibility = "hidden";
|
|
280
|
-
orderableListItemForAnchor.classList.remove(_OrderableListModule.default.visible);
|
|
281
|
-
rootEl().classList.add(_OrderableListModule.default.ordering);
|
|
282
|
-
if (reorderingClassName) rootEl().classList.add(reorderingClassName);
|
|
283
|
-
currentWorkingKey.current = cleanOrderRef.current[elIndex];
|
|
284
|
-
eventEmitter.dispatcher("order-start");
|
|
285
|
-
window.document.body.classList.add(_OrderableListModule.default.unselectable);
|
|
286
|
-
window.addEventListener("mouseup", deleteClone);
|
|
287
|
-
window.addEventListener("mousemove", movementControl);
|
|
288
|
-
window.addEventListener("touchend", deleteClone);
|
|
289
|
-
window.addEventListener("touchmove", movementControl);
|
|
290
|
-
}, []);
|
|
291
|
-
(0, _react.useLayoutEffect)(() => {
|
|
292
|
-
if (currentClone.current) {
|
|
293
|
-
const els = Array.from(rootEl().children);
|
|
294
|
-
const elInvisible = els.find(a => !a.classList.contains(_OrderableListModule.default.visible) && a.style.maxHeight !== "0px");
|
|
295
|
-
elInvisible.children[0].style.height = "".concat(currentClone.current.clientHeight, "px");
|
|
296
|
-
setTimeout(() => {
|
|
297
|
-
elInvisible.children[1].style.height = "".concat(currentClone.current.clientHeight, "px");
|
|
298
|
-
}, 150);
|
|
299
|
-
}
|
|
300
|
-
}, [cleanOrder]);
|
|
301
|
-
const toSpread = _objectSpread({}, props);
|
|
302
|
-
delete toSpread.keyOrder;
|
|
303
|
-
delete toSpread.onChangeKeyOrder;
|
|
304
|
-
const childrenToRender = [...children].filter(a => cleanOrder.includes(a.key)).sort((a, b) => cleanOrder.indexOf(a.key) - cleanOrder.indexOf(b.key)).map((a, i) => _objectSpread(_objectSpread({}, a), {}, {
|
|
305
|
-
key: order[i]
|
|
306
|
-
}));
|
|
307
|
-
(0, _react.useLayoutEffect)(() => {
|
|
308
|
-
rootEl().addEventListener("touchstart", e => {
|
|
309
|
-
const relatedAnchor = anchorsList.find(anchor => anchor.contains(e.target));
|
|
310
|
-
if (relatedAnchor) {
|
|
311
|
-
e.preventDefault();
|
|
312
|
-
onAnchorClick({
|
|
313
|
-
target: relatedAnchor
|
|
314
|
-
});
|
|
315
|
-
const moveCb = (0, _throttle.default)(e => {
|
|
316
|
-
const touch = e.touches[0];
|
|
317
|
-
const [x, y] = [touch.clientX, touch.clientY];
|
|
318
|
-
const els = Array.from(rootEl().children);
|
|
319
|
-
const currentElementIdx = els.findIndex((c, i) => {
|
|
320
|
-
const rect = c === null || c === void 0 ? void 0 : c.getBoundingClientRect();
|
|
321
|
-
if (!rect) return false;
|
|
322
|
-
return rect.top < y && rect.top + rect.height > y;
|
|
323
|
-
});
|
|
324
|
-
if (currentElementIdx !== -1) {
|
|
325
|
-
const el = els[currentElementIdx];
|
|
326
|
-
const rect = el.getBoundingClientRect();
|
|
327
|
-
calculateReordering({
|
|
328
|
-
target: el,
|
|
329
|
-
offsetY: y - rect.top
|
|
330
|
-
}, els, cleanOrderRef.current);
|
|
331
|
-
}
|
|
332
|
-
}, 500);
|
|
333
|
-
const t = e.target;
|
|
334
|
-
const touchMoveCb = e => {
|
|
335
|
-
e.stopPropagation();
|
|
336
|
-
window.dispatchEvent(new TouchEvent(e.type, e));
|
|
337
|
-
moveCb(e);
|
|
338
|
-
};
|
|
339
|
-
const removeCb = e => {
|
|
340
|
-
t.removeEventListener("touchmove", touchMoveCb);
|
|
341
|
-
t.removeEventListener("touchend", removeCb);
|
|
342
|
-
window.dispatchEvent(new TouchEvent(e.type, e));
|
|
343
|
-
};
|
|
344
|
-
t.addEventListener("touchmove", touchMoveCb);
|
|
345
|
-
t.addEventListener("touchend", removeCb);
|
|
346
|
-
}
|
|
347
|
-
});
|
|
348
|
-
}, []);
|
|
349
|
-
const e = (0, _react.useMemo)(() => ({
|
|
350
|
-
bindAnchor: el => {
|
|
351
|
-
el.addEventListener("mousedown", onAnchorClick);
|
|
352
|
-
anchorsList.push(el);
|
|
353
|
-
},
|
|
354
|
-
unbindAnchor: el => {
|
|
355
|
-
el.removeEventListener("mousedown", onAnchorClick);
|
|
356
|
-
anchorsList.splice(anchorsList.indexOf(el), 1);
|
|
357
|
-
},
|
|
358
|
-
on: eventEmitter.subscriber
|
|
359
|
-
}), []);
|
|
360
|
-
return /*#__PURE__*/_react.default.createElement(OrderableListContext.Provider, {
|
|
361
|
-
value: e
|
|
362
|
-
}, /*#__PURE__*/_react.default.createElement("div", _extends({
|
|
363
|
-
ref: rootRef,
|
|
364
|
-
className: "".concat(_OrderableListModule.default.root, " ").concat(className, " ").concat(shrinkToOnOrder ? _OrderableListModule.default.shrinkable : "")
|
|
365
|
-
}, toSpread), mode === OrderableListReorderMode.VERTICAL ? /*#__PURE__*/_react.default.createElement(_AnimatedEntrance.default, null, childrenToRender) : /*#__PURE__*/_react.default.createElement(_UncontrolledTransition.default, {
|
|
366
|
-
className: _OrderableListModule.default.transition,
|
|
367
|
-
transitionType: _Transition.TransitionAnimationTypes.CUSTOM,
|
|
368
|
-
config: {
|
|
369
|
-
backward: {
|
|
370
|
-
elementEntering: "",
|
|
371
|
-
elementExiting: ""
|
|
372
|
-
},
|
|
373
|
-
forward: {
|
|
374
|
-
elementEntering: _OrderableListModule.default.stubEntering,
|
|
375
|
-
elementExiting: _TransitionModule.default.fadeOut
|
|
376
|
-
}
|
|
377
|
-
},
|
|
378
|
-
contentClassName: "".concat(className)
|
|
379
|
-
}, /*#__PURE__*/_react.default.createElement(_react.Fragment, {
|
|
380
|
-
key: orderId
|
|
381
|
-
}, [...children].filter(a => cleanOrder.includes(a.key)).sort((a, b) => cleanOrder.indexOf(a.key) - cleanOrder.indexOf(b.key)).map((a, i) => /*#__PURE__*/_react.default.createElement(HeroWrapper, {
|
|
382
|
-
key: i,
|
|
383
|
-
id: a.key
|
|
384
|
-
}, a))))));
|
|
385
|
-
}
|
|
386
|
-
function HeroWrapper(_ref3) {
|
|
387
|
-
let {
|
|
388
|
-
children,
|
|
389
|
-
id
|
|
390
|
-
} = _ref3;
|
|
391
|
-
const {
|
|
392
|
-
heroRef
|
|
393
|
-
} = (0, _useHero.default)(id, undefined, {
|
|
394
|
-
onHeroStart: (_c, _o, t) => {
|
|
395
|
-
t.querySelectorAll("img").forEach(img => img.style.visibility = "hidden");
|
|
396
|
-
},
|
|
397
|
-
onHeroCloned(clone) {
|
|
398
|
-
// if (!clone.classList.contains(Styles.visible)) clone.style.opacity = "0";
|
|
399
|
-
},
|
|
400
|
-
onHeroEnd: () => {
|
|
401
|
-
if (heroRef.current) heroRef.current.querySelectorAll("img").forEach(img => img.style.visibility = "");
|
|
402
|
-
}
|
|
403
|
-
});
|
|
404
|
-
return /*#__PURE__*/_react.default.createElement("div", {
|
|
405
|
-
ref: heroRef
|
|
406
|
-
}, children);
|
|
407
|
-
}
|
|
408
|
-
function useOrderableListAnchor() {
|
|
409
|
-
const anchorRef = (0, _react.useRef)(null);
|
|
410
|
-
const ctx = (0, _react.useContext)(OrderableListContext);
|
|
411
|
-
(0, _react.useLayoutEffect)(() => {
|
|
412
|
-
if (!ctx) return;
|
|
413
|
-
const {
|
|
414
|
-
bindAnchor,
|
|
415
|
-
unbindAnchor
|
|
416
|
-
} = ctx;
|
|
417
|
-
bindAnchor(anchorRef.current);
|
|
418
|
-
return () => unbindAnchor(anchorRef.current);
|
|
419
|
-
}, []);
|
|
420
|
-
return {
|
|
421
|
-
anchorRef: ctx ? anchorRef : undefined
|
|
422
|
-
};
|
|
423
|
-
}
|
|
424
|
-
function useOrderableEvents(events) {
|
|
425
|
-
const {
|
|
426
|
-
on
|
|
427
|
-
} = (0, _react.useContext)(OrderableListContext);
|
|
428
|
-
(0, _react.useEffect)(() => {
|
|
429
|
-
const unsubscribers = [];
|
|
430
|
-
for (let eventName in events) {
|
|
431
|
-
unsubscribers.push(on(eventName, events[eventName]));
|
|
432
|
-
}
|
|
433
|
-
return () => {
|
|
434
|
-
unsubscribers.forEach(u => u());
|
|
435
|
-
};
|
|
436
|
-
}, [events]);
|
|
437
|
-
}
|
|
438
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdGhyb3R0bGUiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX1VuY29udHJvbGxlZFRyYW5zaXRpb24iLCJfVHJhbnNpdGlvbk1vZHVsZSIsIl91c2VIZXJvIiwiX0FuaW1hdGVkRW50cmFuY2UiLCJfVHJhbnNpdGlvbiIsIl9PcmRlcmFibGVMaXN0TW9kdWxlIiwiX3VzZUV2ZW50cyIsIl9vd25FdmVudCIsIl9leGNsdWRlZCIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl9leHRlbmRzIiwiYXNzaWduIiwiYmluZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFwcGx5Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfdG9Qcm9wZXJ0eUtleSIsInZhbHVlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiaW5kZXhPZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiT3JkZXJhYmxlTGlzdENvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiT3JkZXJhYmxlTGlzdFJlb3JkZXJNb2RlIiwiZXhwb3J0cyIsImNsZWFuS2V5cyIsIm1hcCIsImEiLCJzcGxpdCIsIk9yZGVyYWJsZUxpc3QiLCJfcmVmIiwiY2hpbGRyZW4iLCJjbGFzc05hbWUiLCJtb2RlIiwiVkVSVElDQUwiLCJzaHJpbmtUb09uT3JkZXIiLCJyZW9yZGVyaW5nQ2xhc3NOYW1lIiwiY2xvbmVDbGFzc05hbWUiLCJwcm9wcyIsImF2YWlsYWJsZUtleXMiLCJrZXkiLCJhdmFpbGFibGVLZXlzRGVwIiwiam9pbiIsImluaXRpYWxpemVPcmRlciIsInVzZUNhbGxiYWNrIiwibWlzc2luZ09yZGVyS2V5cyIsImtleU9yZGVyIiwiaW5jbHVkZXMiLCJ1bmRlZmluZWQiLCJjdXJyZW50IiwiYW5jaG9yc0xpc3QiLCJ1c2VSZWYiLCJldmVudEVtaXR0ZXIiLCJ1c2VFdmVudHMiLCJjdXJyZW50Q2xvbmUiLCJjdXJyZW50V29ya2luZ0tleSIsInJvb3RSZWYiLCJfb3JkZXIiLCJzZXRPcmRlciIsInVzZVN0YXRlIiwidXNlRWZmZWN0Iiwib3JkZXIiLCJ1c2VNZW1vIiwiY3VycmVudE9yZGVyIiwiY2xlYW5PcmRlciIsIm9yZGVySWQiLCJyb290RWwiLCJUV09fRElNRU5TSU9OUyIsImxhc3RFbGVtZW50Q2hpbGQiLCJmaW5kUGFyZW50RWxlbWVudCIsInRhcmdldCIsInBhcmVudCIsInBhcmVudEVsZW1lbnQiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJFcnJvciIsInVzZUxheW91dEVmZmVjdCIsInN0eWxlIiwic2V0UHJvcGVydHkiLCJjb25jYXQiLCJjYWxjdWxhdGVSZW9yZGVyaW5nIiwidGhyb3R0bGUiLCJlbHMiLCJpbmRleE9mS2V5SW5DbGVhbk9yZGVyIiwia2V5T2ZUaGVPdmVyRWxlbWVudCIsImlzRHJhZ2dpbmdPd25FbGVtZW50IiwiaXNBZnRlciIsImlzQmVmb3JlIiwiZGlzdGFuY2VGcm9tTGVmdCIsIm9mZnNldFgiLCJ3aWR0aE9mRWwiLCJjbGllbnRXaWR0aCIsIm9mZnNldCIsImRpc3RhbmNlRnJvbVRvcCIsIm9mZnNldFkiLCJoZWlnaHRPZkVsIiwiY2xpZW50SGVpZ2h0IiwiY2hlY2tJZkNhbk1vdmUiLCJrZXlPZk92ZXJFbGVtZW50IiwiaW5kZXhPZlRoZU5ld0VsZW1lbnQiLCJzaG91bGRUcmlnZ2VyUmVvcmRlcmluZyIsInAiLCJwcmV2aW91c0luZGV4IiwiaW5kZXhPZktleUluUHJvdmlkZWRPcmRlciIsIm9yZGVyV2l0aG91dEN1cnJlbnQiLCJzdGFydHNXaXRoIiwic3BsaWNlIiwiRGF0ZSIsIm5vdyIsInJlZ2lzdGVyTGlzdGVuZXJzIiwiQXJyYXkiLCJmcm9tIiwiY2FsY3VsYXRlUmVvcmRlcmluZ0NhbGwiLCJlbCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidW5zdWJzY3JpYmUiLCJ0aW1lb3V0Iiwic2V0VGltZW91dCIsImNsZWFyVGltZW91dCIsIm9uQ2hhbmdlS2V5T3JkZXIiLCJjbGVhbk9yZGVyUmVmIiwib25BbmNob3JDbGljayIsIl9yZWYyIiwiYW5jaG9yIiwib3JkZXJhYmxlTGlzdEl0ZW1Gb3JBbmNob3IiLCJib3giLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJlbEluZGV4IiwiY2xvbmUiLCJjbG9uZU5vZGUiLCJzZXRBdHRyaWJ1dGUiLCJ3aWR0aCIsImhlaWdodCIsInRvcCIsImxlZnQiLCJjbGFzc0xpc3QiLCJhZGQiLCJTdHlsZXMiLCJtYXhIZWlnaHQiLCJjdXJyZW50T3JkZXJpbmciLCJyZW1vdmUiLCJ2aXNpYmxlIiwibW92ZW1lbnRDb250cm9sIiwieCIsIngxIiwieSIsInkxIiwidG91Y2hlcyIsInBhZ2VYIiwicGFnZVkiLCJkb2N1bWVudCIsImJvZHkiLCJhcHBlbmRDaGlsZCIsImRlbGV0ZUNsb25lIiwid2luZG93IiwidmlzaWJpbGl0eSIsInVuc2VsZWN0YWJsZSIsImVsSW52aXNpYmxlIiwiZmluZCIsImNvbnRhaW5zIiwiY2hpbGQiLCJzY3JvbGxIZWlnaHQiLCJ0cmFuc2l0aW9uSGVpZ2h0Iiwib25FbmQiLCJvd25FdmVudCIsImNsZWFuVXAiLCJyZW1vdmVQcm9wZXJ0eSIsImRpc3BhdGNoZXIiLCJvcmRlcmluZyIsIk1hdGgiLCJmbG9vciIsInRvU3RyaW5nIiwidHJhbnNpdGlvbiIsInRhcmdldEhlaWdodCIsImN1cnJlbnRIZWlnaHQiLCJvZmZzZXRUb3AiLCJwYWRkaW5nVG9wIiwibWluSGVpZ2h0IiwidG9TcHJlYWQiLCJjaGlsZHJlblRvUmVuZGVyIiwic29ydCIsImIiLCJyZWxhdGVkQW5jaG9yIiwicHJldmVudERlZmF1bHQiLCJtb3ZlQ2IiLCJ0b3VjaCIsImNsaWVudFgiLCJjbGllbnRZIiwiY3VycmVudEVsZW1lbnRJZHgiLCJmaW5kSW5kZXgiLCJjIiwicmVjdCIsInRvdWNoTW92ZUNiIiwic3RvcFByb3BhZ2F0aW9uIiwiZGlzcGF0Y2hFdmVudCIsIlRvdWNoRXZlbnQiLCJ0eXBlIiwicmVtb3ZlQ2IiLCJiaW5kQW5jaG9yIiwidW5iaW5kQW5jaG9yIiwib24iLCJzdWJzY3JpYmVyIiwiY3JlYXRlRWxlbWVudCIsIlByb3ZpZGVyIiwicmVmIiwicm9vdCIsInNocmlua2FibGUiLCJ0cmFuc2l0aW9uVHlwZSIsIlRyYW5zaXRpb25BbmltYXRpb25UeXBlcyIsIkNVU1RPTSIsImNvbmZpZyIsImJhY2t3YXJkIiwiZWxlbWVudEVudGVyaW5nIiwiZWxlbWVudEV4aXRpbmciLCJmb3J3YXJkIiwic3R1YkVudGVyaW5nIiwiVHJhbnNpdGlvblN0eWxlcyIsImZhZGVPdXQiLCJjb250ZW50Q2xhc3NOYW1lIiwiRnJhZ21lbnQiLCJIZXJvV3JhcHBlciIsImlkIiwiX3JlZjMiLCJoZXJvUmVmIiwidXNlSGVybyIsIm9uSGVyb1N0YXJ0IiwiX2MiLCJfbyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJpbWciLCJvbkhlcm9DbG9uZWQiLCJvbkhlcm9FbmQiLCJ1c2VPcmRlcmFibGVMaXN0QW5jaG9yIiwiYW5jaG9yUmVmIiwiY3R4IiwidXNlQ29udGV4dCIsInVzZU9yZGVyYWJsZUV2ZW50cyIsImV2ZW50cyIsInVuc3Vic2NyaWJlcnMiLCJldmVudE5hbWUiLCJ1Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvT3JkZXJhYmxlTGlzdC9PcmRlcmFibGVMaXN0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdGhyb3R0bGUgZnJvbSBcImxvZGFzaC90aHJvdHRsZVwiO1xuaW1wb3J0IFJlYWN0LCB7XG4gIGNyZWF0ZUNvbnRleHQsXG4gIERldGFpbGVkSFRNTFByb3BzLFxuICBGcmFnbWVudCxcbiAgSFRNTEF0dHJpYnV0ZXMsXG4gIFByb3BzV2l0aENoaWxkcmVuLFxuICBSZWFjdEVsZW1lbnQsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VDb250ZXh0LFxuICB1c2VFZmZlY3QsXG4gIHVzZUxheW91dEVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgVW5jb250cm9sbGVkVHJhbnNpdGlvbiBmcm9tIFwiLi4vVW5jb250cm9sbGVkVHJhbnNpdGlvblwiO1xuaW1wb3J0IFRyYW5zaXRpb25TdHlsZXMgZnJvbSBcIi4uL1RyYW5zaXRpb24vVHJhbnNpdGlvbi5tb2R1bGUuc2Nzc1wiO1xuaW1wb3J0IHVzZUhlcm8gZnJvbSBcIi4uLy4uL2hvb2tzL3VzZUhlcm9cIjtcbmltcG9ydCBBbmltYXRlZEVudHJhbmNlIGZyb20gXCIuLi9BbmltYXRlZEVudHJhbmNlXCI7XG5pbXBvcnQgeyBUcmFuc2l0aW9uQW5pbWF0aW9uVHlwZXMgfSBmcm9tIFwiLi4vVHJhbnNpdGlvblwiO1xuaW1wb3J0IFN0eWxlcyBmcm9tIFwiLi9PcmRlcmFibGVMaXN0Lm1vZHVsZS5zY3NzXCI7XG5pbXBvcnQgdXNlRXZlbnRzIGZyb20gXCIuLi8uLi9ob29rcy91dGlsaXR5L3VzZUV2ZW50c1wiO1xuaW1wb3J0IG93bkV2ZW50IGZyb20gXCIuLi8uLi91dGlscy9vd25FdmVudFwiO1xuXG50eXBlIEV2ZW50cyA9IFwib3JkZXItc3RvcFwiIHwgXCJvcmRlci1zdGFydFwiO1xuXG5jb25zdCBPcmRlcmFibGVMaXN0Q29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8e1xuICBiaW5kQW5jaG9yOiAoYmluZEVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50KSA9PiB2b2lkO1xuICB1bmJpbmRBbmNob3I6IChiaW5kRWxlbWVudDogSFRNTERpdkVsZW1lbnQpID0+IHZvaWQ7XG4gIG9uOiAoZXZlbnROYW1lOiBFdmVudHMsIGNiOiAoKSA9PiB2b2lkKSA9PiAoKSA9PiB2b2lkO1xufT4obnVsbCBhcyBhbnkpO1xuXG5leHBvcnQgZW51bSBPcmRlcmFibGVMaXN0UmVvcmRlck1vZGUge1xuICBWRVJUSUNBTCA9IFwidlwiLFxuICBUV09fRElNRU5TSU9OUyA9IFwiaHZcIixcbn1cblxuZnVuY3Rpb24gY2xlYW5LZXlzKGtleXM6IHN0cmluZ1tdKSB7XG4gIHJldHVybiBrZXlzLm1hcCgoYSkgPT4gYS5zcGxpdChcIjtcIilbMF0pO1xufVxuXG4vKipcbiAqIFRoaXMgY29tcG9uZW50IGRpc3BsYXlzIGEgbGlzdCBvZiBpdGVtcyB0aGF0IGNhbiBiZSByZW9yZGVyZWQgYnkgZHJhZ2dpbmcgdGhlbSB3aXRoIHlvdXIgbW91c2Ugb3IgdG91Y2guXG4gKiBJdCBzdXBwb3J0cyBzaW1wbGUgdmVydGljYWwgZHJhZ2dpbmcgYW5kIG1vcmUgYWR2YW5jZWQgMkQgcmVvcmRlcmluZywgd2l0aCBzbW9vdGggYW5pbWF0aW9uc1xuICogd2hlbiBpdGVtcyBtb3ZlIGFyb3VuZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gT3JkZXJhYmxlTGlzdCh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUgPSBcIlwiLFxuICBtb2RlID0gT3JkZXJhYmxlTGlzdFJlb3JkZXJNb2RlLlZFUlRJQ0FMLFxuICBzaHJpbmtUb09uT3JkZXIsXG4gIHJlb3JkZXJpbmdDbGFzc05hbWUsXG4gIGNsb25lQ2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufToge1xuICBjaGlsZHJlbjogUmVhY3RFbGVtZW50W107XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgbW9kZT86IE9yZGVyYWJsZUxpc3RSZW9yZGVyTW9kZTtcbiAgLyoqXG4gICAqIElmIHByb3ZpZGVkLCBtYWtlcyB0aGUgZWxlbWVudHMgc2hyaW5rIHRvIHRoaXMgdmFsdWUgaW4gcHggd2hlbiBvcmRlcmluZyBlbGVtZW50c1xuICAgKi9cbiAgc2hyaW5rVG9Pbk9yZGVyPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIGNsYXNzIHRvIGFwcGx5IHdoZW4gcmVvcmRlcmluZ1xuICAgKi9cbiAgcmVvcmRlcmluZ0NsYXNzTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBjbGFzcyB0byBhcHBseSB0byB0aGUgY2xvbmUgZWxcbiAgICovXG4gIGNsb25lQ2xhc3NOYW1lPzogc3RyaW5nO1xufSAmIChcbiAgfCB7XG4gICAgICBrZXlPcmRlcj86IHN0cmluZ1tdO1xuICAgICAgb25DaGFuZ2VLZXlPcmRlcjogKG5ld09yZGVyOiBzdHJpbmdbXSkgPT4gdm9pZDtcbiAgICB9XG4gIHwge1xuICAgICAgY3VycmVudE9yZGVyPzogc3RyaW5nW107XG4gICAgfVxuKSAmXG4gIERldGFpbGVkSFRNTFByb3BzPEhUTUxBdHRyaWJ1dGVzPEhUTUxEaXZFbGVtZW50PiwgSFRNTERpdkVsZW1lbnQ+KSB7XG4gIGNvbnN0IGF2YWlsYWJsZUtleXMgPSBjaGlsZHJlbi5tYXAoKGEpID0+IGEua2V5IGFzIHN0cmluZyk7XG4gIGNvbnN0IGF2YWlsYWJsZUtleXNEZXAgPSBhdmFpbGFibGVLZXlzLmpvaW4oXCIsXCIpO1xuICBjb25zdCBpbml0aWFsaXplT3JkZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgbWlzc2luZ09yZGVyS2V5cyA9XG4gICAgICBcImtleU9yZGVyXCIgaW4gcHJvcHMgJiYgcHJvcHMua2V5T3JkZXJcbiAgICAgICAgPyBhdmFpbGFibGVLZXlzLmZpbHRlcigoYSkgPT4gIXByb3BzLmtleU9yZGVyIS5pbmNsdWRlcyhhKSlcbiAgICAgICAgOiBbXTtcblxuICAgIHJldHVybiAoXG4gICAgICAoXCJrZXlPcmRlclwiIGluIHByb3BzICYmIHByb3BzLmtleU9yZGVyXG4gICAgICAgID8gWy4uLnByb3BzLmtleU9yZGVyLCAuLi5taXNzaW5nT3JkZXJLZXlzXVxuICAgICAgICA6IHVuZGVmaW5lZCkgfHwgYXZhaWxhYmxlS2V5c1xuICAgICk7XG4gIH0sIFthdmFpbGFibGVLZXlzRGVwLCAocHJvcHMgYXMgYW55KS5rZXlPcmRlcl0pO1xuICBjb25zdCB7IGN1cnJlbnQ6IGFuY2hvcnNMaXN0IH0gPSB1c2VSZWY8SFRNTERpdkVsZW1lbnRbXT4oW10pO1xuICBjb25zdCBldmVudEVtaXR0ZXIgPSB1c2VFdmVudHM8RXZlbnRzLCB7IFtrIGluIEV2ZW50c106IFtdIH0+KCk7XG4gIGNvbnN0IGN1cnJlbnRDbG9uZSA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCBjdXJyZW50V29ya2luZ0tleSA9IHVzZVJlZjxzdHJpbmc+KHVuZGVmaW5lZCk7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwgYXMgYW55KTtcbiAgY29uc3QgW19vcmRlciwgc2V0T3JkZXJdID0gdXNlU3RhdGUoaW5pdGlhbGl6ZU9yZGVyKTtcbiAgdXNlRWZmZWN0KCgpID0+IHNldE9yZGVyKGluaXRpYWxpemVPcmRlcigpKSwgW2luaXRpYWxpemVPcmRlcl0pO1xuXG4gIGNvbnN0IG9yZGVyID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIFwiY3VycmVudE9yZGVyXCIgaW4gcHJvcHMgPyBwcm9wcy5jdXJyZW50T3JkZXIgfHwgX29yZGVyIDogX29yZGVyXG4gICAgKS5maWx0ZXIoKG8pID0+IG8uaW5jbHVkZXMoXCI7XCIpIHx8IGF2YWlsYWJsZUtleXMuaW5jbHVkZXMobykpO1xuICB9LCBbKHByb3BzIGFzIGFueSkuY3VycmVudE9yZGVyLCBfb3JkZXIsIGF2YWlsYWJsZUtleXNEZXBdKTtcbiAgY29uc3QgY2xlYW5PcmRlciA9IHVzZU1lbW8oKCkgPT4gb3JkZXIubWFwKChhKSA9PiBhLnNwbGl0KFwiO1wiKVswXSksIFtvcmRlcl0pO1xuICBjb25zdCBvcmRlcklkID0gdXNlTWVtbygoKSA9PiBcImtleS1cIiArIGNsZWFuT3JkZXIuam9pbihcIlwiKSwgW2NsZWFuT3JkZXJdKTtcbiAgZnVuY3Rpb24gcm9vdEVsKCkge1xuICAgIGlmIChtb2RlID09PSBPcmRlcmFibGVMaXN0UmVvcmRlck1vZGUuVFdPX0RJTUVOU0lPTlMpXG4gICAgICByZXR1cm4gcm9vdFJlZi5jdXJyZW50IS5sYXN0RWxlbWVudENoaWxkIVxuICAgICAgICAubGFzdEVsZW1lbnRDaGlsZCEgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgcmV0dXJuIHJvb3RSZWYuY3VycmVudCEgYXMgSFRNTERpdkVsZW1lbnQ7XG4gIH1cblxuICBjb25zdCBmaW5kUGFyZW50RWxlbWVudCA9ICh0YXJnZXQ6IEhUTUxEaXZFbGVtZW50KSA9PiB7XG4gICAgbGV0IHBhcmVudDogSFRNTERpdkVsZW1lbnQgPSB0YXJnZXQgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgd2hpbGUgKHBhcmVudC5wYXJlbnRFbGVtZW50ICE9PSByb290RWwoKSkge1xuICAgICAgaWYgKHBhcmVudC5wYXJlbnRFbGVtZW50ID09PSBudWxsKSBicmVhaztcbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50IGFzIGFueTtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIgJiYgcGFyZW50ID09PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkl0IHNlZW1zIGxpa2Ugd2UgY291bGQgbm90IGZpbmQgYSByZWxhdGlvbiBiZXR3ZWVuIHRoaXMgZWxlbWVudCBhbmQgdGhlIHJvb3QgbGlzdC4gQXJlIHlvdSB1c2luZyBwb3J0YWxzIG1heWJlP1wiXG4gICAgICApO1xuICAgIHJldHVybiBwYXJlbnQ7XG4gIH07XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2hyaW5rVG9Pbk9yZGVyKVxuICAgICAgcm9vdEVsKCkuc3R5bGUuc2V0UHJvcGVydHkoXCItLXNocmluay10b1wiLCBgJHtzaHJpbmtUb09uT3JkZXJ9cHhgKTtcbiAgfSwgW3Nocmlua1RvT25PcmRlcl0pO1xuXG4gIGNvbnN0IGNhbGN1bGF0ZVJlb3JkZXJpbmcgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gdGhyb3R0bGUoKGU6IGFueSwgZWxzOiBIVE1MRGl2RWxlbWVudFtdLCBjdXJyZW50T3JkZXI6IHN0cmluZ1tdKSA9PiB7XG4gICAgICBpZiAoZWxzLmxlbmd0aCA+IGN1cnJlbnRPcmRlci5sZW5ndGggfHwgIWN1cnJlbnRXb3JraW5nS2V5LmN1cnJlbnQpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGZpbmRQYXJlbnRFbGVtZW50KGUudGFyZ2V0KTtcbiAgICAgIGNvbnN0IGluZGV4T2ZLZXlJbkNsZWFuT3JkZXIgPSBlbHMuaW5kZXhPZihwYXJlbnQpO1xuICAgICAgY29uc3Qga2V5T2ZUaGVPdmVyRWxlbWVudCA9IGN1cnJlbnRPcmRlcltpbmRleE9mS2V5SW5DbGVhbk9yZGVyXTtcbiAgICAgIGNvbnN0IGlzRHJhZ2dpbmdPd25FbGVtZW50ID1cbiAgICAgICAgY3VycmVudFdvcmtpbmdLZXkuY3VycmVudCA9PT0ga2V5T2ZUaGVPdmVyRWxlbWVudDtcbiAgICAgIGlmIChpbmRleE9mS2V5SW5DbGVhbk9yZGVyID09PSAtMSB8fCBrZXlPZlRoZU92ZXJFbGVtZW50ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmICghaXNEcmFnZ2luZ093bkVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgeyBpc0FmdGVyLCBpc0JlZm9yZSB9ID0gKCgpID0+IHtcbiAgICAgICAgICBpZiAobW9kZSA9PT0gT3JkZXJhYmxlTGlzdFJlb3JkZXJNb2RlLlRXT19ESU1FTlNJT05TKSB7XG4gICAgICAgICAgICBjb25zdCBkaXN0YW5jZUZyb21MZWZ0ID0gZS5vZmZzZXRYO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGhPZkVsID0gcGFyZW50LmNsaWVudFdpZHRoO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gd2lkdGhPZkVsICogMC4yNTtcbiAgICAgICAgICAgIGNvbnN0IGlzQWZ0ZXIgPSBkaXN0YW5jZUZyb21MZWZ0ID4gd2lkdGhPZkVsIC0gb2Zmc2V0O1xuICAgICAgICAgICAgY29uc3QgaXNCZWZvcmUgPSBkaXN0YW5jZUZyb21MZWZ0IDwgb2Zmc2V0O1xuICAgICAgICAgICAgcmV0dXJuIHsgaXNBZnRlciwgaXNCZWZvcmUgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2VGcm9tVG9wID0gZS5vZmZzZXRZO1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0T2ZFbCA9IHBhcmVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBoZWlnaHRPZkVsICogMC4yNTtcbiAgICAgICAgICAgIGNvbnN0IGlzQWZ0ZXIgPSBkaXN0YW5jZUZyb21Ub3AgPiBoZWlnaHRPZkVsIC0gb2Zmc2V0O1xuICAgICAgICAgICAgY29uc3QgaXNCZWZvcmUgPSBkaXN0YW5jZUZyb21Ub3AgPCBvZmZzZXQ7XG4gICAgICAgICAgICByZXR1cm4geyBpc0FmdGVyLCBpc0JlZm9yZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcblxuICAgICAgICBjb25zdCBjaGVja0lmQ2FuTW92ZSA9IChrZXlPZk92ZXJFbGVtZW50Pzogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGtleU9mT3ZlckVsZW1lbnQgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAga2V5T2ZPdmVyRWxlbWVudCAhPT0gY3VycmVudFdvcmtpbmdLZXkuY3VycmVudFxuICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGluZGV4T2ZUaGVOZXdFbGVtZW50ID1cbiAgICAgICAgICBpbmRleE9mS2V5SW5DbGVhbk9yZGVyICsgKGlzQWZ0ZXIgPyAxIDogLTEpO1xuICAgICAgICBjb25zdCBzaG91bGRUcmlnZ2VyUmVvcmRlcmluZyA9XG4gICAgICAgICAgKGlzQWZ0ZXIgfHwgaXNCZWZvcmUpICYmXG4gICAgICAgICAgY2hlY2tJZkNhbk1vdmUoY3VycmVudE9yZGVyW2luZGV4T2ZUaGVOZXdFbGVtZW50XSk7XG4gICAgICAgIGlmIChzaG91bGRUcmlnZ2VyUmVvcmRlcmluZykge1xuICAgICAgICAgIHNldE9yZGVyKChwKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c0luZGV4ID0gY3VycmVudE9yZGVyLmluZGV4T2YoXG4gICAgICAgICAgICAgIGN1cnJlbnRXb3JraW5nS2V5LmN1cnJlbnQhXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgaW5kZXhPZktleUluUHJvdmlkZWRPcmRlciA9XG4gICAgICAgICAgICAgIGNsZWFuS2V5cyhwKS5pbmRleE9mKGtleU9mVGhlT3ZlckVsZW1lbnQpO1xuICAgICAgICAgICAgbGV0IGluZGV4T2ZUaGVOZXdFbGVtZW50ID1cbiAgICAgICAgICAgICAgaW5kZXhPZktleUluUHJvdmlkZWRPcmRlciArIChpc0JlZm9yZSA/IC0xIDogMCk7XG4gICAgICAgICAgICBpZiAocHJldmlvdXNJbmRleCA+IGluZGV4T2ZUaGVOZXdFbGVtZW50KSBpbmRleE9mVGhlTmV3RWxlbWVudCsrO1xuICAgICAgICAgICAgY29uc3Qgb3JkZXJXaXRob3V0Q3VycmVudCA9IHAuZmlsdGVyKChhKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChhLnN0YXJ0c1dpdGgoYCR7Y3VycmVudFdvcmtpbmdLZXkuY3VycmVudH07YCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIGEgIT09IGN1cnJlbnRXb3JraW5nS2V5LmN1cnJlbnQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG9yZGVyV2l0aG91dEN1cnJlbnQuc3BsaWNlKFxuICAgICAgICAgICAgICBpbmRleE9mVGhlTmV3RWxlbWVudCxcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgYCR7Y3VycmVudFdvcmtpbmdLZXkuY3VycmVudH07JHtEYXRlLm5vdygpfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gb3JkZXJXaXRob3V0Q3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDEwMDAgLyA2MCk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGZ1bmN0aW9uIHJlZ2lzdGVyTGlzdGVuZXJzKCkge1xuICAgICAgY29uc3QgZWxzID0gQXJyYXkuZnJvbShyb290RWwoKSEuY2hpbGRyZW4pIGFzIEhUTUxEaXZFbGVtZW50W107XG4gICAgICBjb25zdCBjYWxjdWxhdGVSZW9yZGVyaW5nQ2FsbCA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgZWxzID0gQXJyYXkuZnJvbShyb290RWwoKSEuY2hpbGRyZW4pIGFzIEhUTUxEaXZFbGVtZW50W107XG4gICAgICAgIGNhbGN1bGF0ZVJlb3JkZXJpbmcoZSwgZWxzLCBjbGVhbk9yZGVyKTtcbiAgICAgIH07XG4gICAgICBmb3IgKGxldCBlbCBvZiBlbHMpXG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgY2FsY3VsYXRlUmVvcmRlcmluZ0NhbGwpO1xuXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBmb3IgKGxldCBlbCBvZiBlbHMpXG4gICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCBjYWxjdWxhdGVSZW9yZGVyaW5nQ2FsbCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChtb2RlID09PSBPcmRlcmFibGVMaXN0UmVvcmRlck1vZGUuVkVSVElDQUwpIHtcbiAgICAgIHJldHVybiByZWdpc3Rlckxpc3RlbmVycygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdW5zdWJzY3JpYmU6ICgpID0+IHZvaWQ7XG4gICAgICBsZXQgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB1bnN1YnNjcmliZSA9IHJlZ2lzdGVyTGlzdGVuZXJzKCk7XG4gICAgICB9LCAyNTApO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICBpZiAodW5zdWJzY3JpYmUpIHVuc3Vic2NyaWJlKCk7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW2NsZWFuT3JkZXJdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChcIm9uQ2hhbmdlS2V5T3JkZXJcIiBpbiBwcm9wcykgcHJvcHMub25DaGFuZ2VLZXlPcmRlcihjbGVhbktleXMoX29yZGVyKSk7XG4gIH0sIFtfb3JkZXJdKTtcblxuICBjb25zdCBjbGVhbk9yZGVyUmVmID0gdXNlUmVmKGNsZWFuT3JkZXIpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNsZWFuT3JkZXJSZWYuY3VycmVudCA9IGNsZWFuT3JkZXI7XG4gIH0sIFtjbGVhbk9yZGVyXSk7XG4gIGNvbnN0IG9uQW5jaG9yQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoeyB0YXJnZXQ6IGFuY2hvciB9OiBQaWNrPE1vdXNlRXZlbnQsIFwidGFyZ2V0XCI+KSA9PiB7XG4gICAgICBsZXQgb2Zmc2V0OiBbeDogbnVtYmVyLCB5OiBudW1iZXJdO1xuICAgICAgY29uc3Qgb3JkZXJhYmxlTGlzdEl0ZW1Gb3JBbmNob3IgPSBmaW5kUGFyZW50RWxlbWVudChcbiAgICAgICAgYW5jaG9yIGFzIEhUTUxEaXZFbGVtZW50XG4gICAgICApO1xuICAgICAgY29uc3QgYm94ID0gb3JkZXJhYmxlTGlzdEl0ZW1Gb3JBbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBlbHMgPSBBcnJheS5mcm9tKHJvb3RFbCgpIS5jaGlsZHJlbikgYXMgSFRNTERpdkVsZW1lbnRbXTtcbiAgICAgIGNvbnN0IGVsSW5kZXggPSBlbHMuaW5kZXhPZihvcmRlcmFibGVMaXN0SXRlbUZvckFuY2hvcik7XG5cbiAgICAgIGNvbnN0IGNsb25lID0gb3JkZXJhYmxlTGlzdEl0ZW1Gb3JBbmNob3IuY2xvbmVOb2RlKFxuICAgICAgICB0cnVlXG4gICAgICApIGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgY3VycmVudENsb25lLmN1cnJlbnQgPSBjbG9uZTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKVxuICAgICAgICBjbG9uZS5zZXRBdHRyaWJ1dGUoXCJkYXRhLXRlc3RpZFwiLCBcIm9yZGVyYWJsZS1saXN0LWNsb25lXCIpO1xuICAgICAgY2xvbmUuc2V0QXR0cmlidXRlKFwiZGF0YS1vcmRlcmFibGVpZFwiLCBcIm9yZGVyYWJsZS1saXN0LWNsb25lXCIpO1xuICAgICAgY2xvbmUuc3R5bGUud2lkdGggPSBgJHtib3gud2lkdGh9cHhgO1xuICAgICAgY2xvbmUuc3R5bGUuaGVpZ2h0ID0gYCR7Ym94LmhlaWdodH1weGA7XG4gICAgICBjbG9uZS5zdHlsZS50b3AgPSBgJHtib3gudG9wfXB4YDtcbiAgICAgIGNsb25lLnN0eWxlLmxlZnQgPSBgJHtib3gubGVmdH1weGA7XG4gICAgICBjbG9uZS5jbGFzc0xpc3QuYWRkKFN0eWxlcy5jbG9uZSk7XG4gICAgICBpZiAoc2hyaW5rVG9Pbk9yZGVyKSBjbG9uZS5zdHlsZS5tYXhIZWlnaHQgPSBgJHtib3guaGVpZ2h0fXB4YDtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoY2xvbmVDbGFzc05hbWUpIGNsb25lLmNsYXNzTGlzdC5hZGQoY2xvbmVDbGFzc05hbWUpO1xuICAgICAgICBpZiAoc2hyaW5rVG9Pbk9yZGVyKSBjbG9uZS5zdHlsZS5tYXhIZWlnaHQgPSBgJHtzaHJpbmtUb09uT3JkZXJ9cHhgO1xuICAgICAgfSwgMCk7XG5cbiAgICAgIG9yZGVyYWJsZUxpc3RJdGVtRm9yQW5jaG9yLmNsYXNzTGlzdC5hZGQoU3R5bGVzLmN1cnJlbnRPcmRlcmluZyk7XG4gICAgICBvcmRlcmFibGVMaXN0SXRlbUZvckFuY2hvci5jbGFzc0xpc3QucmVtb3ZlKFN0eWxlcy52aXNpYmxlKTtcblxuICAgICAgY29uc3QgbW92ZW1lbnRDb250cm9sID0gKGU6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgeDogeDEsIHk6IHkxIH0gPVxuICAgICAgICAgIFwidG91Y2hlc1wiIGluIGUgPyB7IHg6IGUudG91Y2hlc1swXS5wYWdlWCwgeTogZS50b3VjaGVzWzBdLnBhZ2VZIH0gOiBlO1xuICAgICAgICBpZiAoIW9mZnNldCkgb2Zmc2V0ID0gW3gxIC0gYm94LmxlZnQsIHkxIC0gYm94LnRvcF07XG5cbiAgICAgICAgY29uc3QgW29mZnNldFgsIG9mZnNldFldID0gb2Zmc2V0O1xuICAgICAgICBjbG9uZS5zdHlsZS50b3AgPSBgJHt5MSAtIG9mZnNldFl9cHhgO1xuICAgICAgICBjbG9uZS5zdHlsZS5sZWZ0ID0gYCR7eDEgLSBvZmZzZXRYfXB4YDtcbiAgICAgIH07XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY2xvbmUpO1xuICAgICAgY29uc3QgZGVsZXRlQ2xvbmUgPSAoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIG1vdmVtZW50Q29udHJvbCk7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsIG1vdmVtZW50Q29udHJvbCk7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgZGVsZXRlQ2xvbmUpO1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgZGVsZXRlQ2xvbmUpO1xuICAgICAgICBvcmRlcmFibGVMaXN0SXRlbUZvckFuY2hvci5zdHlsZS52aXNpYmlsaXR5ID0gXCJpbml0aWFsXCI7XG4gICAgICAgIGN1cnJlbnRXb3JraW5nS2V5LmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoU3R5bGVzLnVuc2VsZWN0YWJsZSk7XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCBlbHMgPSBBcnJheS5mcm9tKHJvb3RFbCgpIS5jaGlsZHJlbikgYXMgSFRNTERpdkVsZW1lbnRbXTtcbiAgICAgICAgICBjb25zdCBlbEludmlzaWJsZSA9IGVscy5maW5kKFxuICAgICAgICAgICAgKGEpID0+XG4gICAgICAgICAgICAgICFhLmNsYXNzTGlzdC5jb250YWlucyhTdHlsZXMudmlzaWJsZSkgJiZcbiAgICAgICAgICAgICAgYS5zdHlsZS5tYXhIZWlnaHQgIT09IFwiMHB4XCJcbiAgICAgICAgICApITtcbiAgICAgICAgICBpZiAoc2hyaW5rVG9Pbk9yZGVyKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IGVsSW52aXNpYmxlLmxhc3RFbGVtZW50Q2hpbGQgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICAgICAgICBjaGlsZC5zdHlsZS5tYXhIZWlnaHQgPSBgJHtjaGlsZC5zY3JvbGxIZWlnaHR9cHhgO1xuICAgICAgICAgICAgY2hpbGQuY2xhc3NMaXN0LmFkZChTdHlsZXMudHJhbnNpdGlvbkhlaWdodCk7XG4gICAgICAgICAgICBjb25zdCBvbkVuZCA9IG93bkV2ZW50KCgpID0+IHtcbiAgICAgICAgICAgICAgY2hpbGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgb25FbmQpO1xuICAgICAgICAgICAgICBjaGlsZC5zdHlsZS5tYXhIZWlnaHQgPSBgaW5pdGlhbGA7XG4gICAgICAgICAgICAgIGNoaWxkLmNsYXNzTGlzdC5yZW1vdmUoU3R5bGVzLnRyYW5zaXRpb25IZWlnaHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjaGlsZC5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLCBvbkVuZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGJveCA9IGVsSW52aXNpYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgIGZ1bmN0aW9uIGNsZWFuVXAoKSB7XG4gICAgICAgICAgICBpZiAoc2hyaW5rVG9Pbk9yZGVyKSB7XG4gICAgICAgICAgICAgIHJvb3RFbCgpLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwicGFkZGluZy10b3BcIik7XG4gICAgICAgICAgICAgIHJvb3RFbCgpLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwibWluLWhlaWdodFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXZlbnRFbWl0dGVyLmRpc3BhdGNoZXIoXCJvcmRlci1zdG9wXCIpO1xuICAgICAgICAgICAgcm9vdEVsKCkuY2xhc3NMaXN0LnJlbW92ZShTdHlsZXMub3JkZXJpbmcpO1xuICAgICAgICAgICAgaWYgKHJlb3JkZXJpbmdDbGFzc05hbWUpXG4gICAgICAgICAgICAgIHJvb3RFbCgpLmNsYXNzTGlzdC5yZW1vdmUocmVvcmRlcmluZ0NsYXNzTmFtZSk7XG4gICAgICAgICAgICBmb3IgKGxldCBlbCBvZiBlbHMpIGVsLmNsYXNzTGlzdC5yZW1vdmUoU3R5bGVzLnZpc2libGUpO1xuICAgICAgICAgICAgY2xvbmUucmVtb3ZlKCk7XG4gICAgICAgICAgICBjdXJyZW50Q2xvbmUuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgICBmb3IgKGxldCBlbCBvZiBBcnJheS5mcm9tKGVsSW52aXNpYmxlLmNoaWxkcmVuKSBhcyBIVE1MRGl2RWxlbWVudFtdKVxuICAgICAgICAgICAgICBlbC5zdHlsZS5oZWlnaHQgPSBcIlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjbG9uZS5zdHlsZS50b3Auc3RhcnRzV2l0aChNYXRoLmZsb29yKGJveC50b3ApLnRvU3RyaW5nKCkpICYmXG4gICAgICAgICAgICBjbG9uZS5zdHlsZS5sZWZ0LnN0YXJ0c1dpdGgoTWF0aC5mbG9vcihib3gubGVmdCkudG9TdHJpbmcoKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNsZWFuVXAoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xvbmUuc3R5bGUudG9wID0gYCR7Ym94LnRvcH1weGA7XG4gICAgICAgICAgICBjbG9uZS5zdHlsZS5sZWZ0ID0gYCR7Ym94LmxlZnR9cHhgO1xuICAgICAgICAgICAgY2xvbmUuc3R5bGUudHJhbnNpdGlvbiA9IGB0b3AgNTAwbXMgbGluZWFyLCBsZWZ0IDUwMG1zIGxpbmVhcmA7XG4gICAgICAgICAgICBjbG9uZS5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgIGNsZWFuVXAoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGZvciAobGV0IGVsIG9mIGVscykge1xuICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKFN0eWxlcy52aXNpYmxlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzaHJpbmtUb09uT3JkZXIpIHtcbiAgICAgICAgZm9yIChsZXQgZWwgb2YgZWxzKSBlbC5zdHlsZS5tYXhIZWlnaHQgPSBgJHtlbC5zY3JvbGxIZWlnaHR9cHhgO1xuICAgICAgICBjb25zdCB0YXJnZXRIZWlnaHQgPSBlbEluZGV4ICogc2hyaW5rVG9Pbk9yZGVyO1xuICAgICAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID1cbiAgICAgICAgICBvcmRlcmFibGVMaXN0SXRlbUZvckFuY2hvci5vZmZzZXRUb3AgLSBlbHNbMF0ub2Zmc2V0VG9wO1xuICAgICAgICBjb25zdCBwYWRkaW5nVG9wID0gY3VycmVudEhlaWdodCAtIHRhcmdldEhlaWdodDtcbiAgICAgICAgcm9vdEVsKCkuc3R5bGUucGFkZGluZ1RvcCA9IGAke3BhZGRpbmdUb3B9cHhgO1xuICAgICAgICByb290RWwoKS5zdHlsZS5taW5IZWlnaHQgPSBgJHtyb290RWwoKS5jbGllbnRIZWlnaHR9cHhgO1xuICAgICAgfVxuICAgICAgb3JkZXJhYmxlTGlzdEl0ZW1Gb3JBbmNob3Iuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gICAgICBvcmRlcmFibGVMaXN0SXRlbUZvckFuY2hvci5jbGFzc0xpc3QucmVtb3ZlKFN0eWxlcy52aXNpYmxlKTtcbiAgICAgIHJvb3RFbCgpLmNsYXNzTGlzdC5hZGQoU3R5bGVzLm9yZGVyaW5nKTtcbiAgICAgIGlmIChyZW9yZGVyaW5nQ2xhc3NOYW1lKSByb290RWwoKS5jbGFzc0xpc3QuYWRkKHJlb3JkZXJpbmdDbGFzc05hbWUpO1xuICAgICAgY3VycmVudFdvcmtpbmdLZXkuY3VycmVudCA9IGNsZWFuT3JkZXJSZWYuY3VycmVudFtlbEluZGV4XTtcbiAgICAgIGV2ZW50RW1pdHRlci5kaXNwYXRjaGVyKFwib3JkZXItc3RhcnRcIik7XG4gICAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFN0eWxlcy51bnNlbGVjdGFibGUpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGRlbGV0ZUNsb25lKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIG1vdmVtZW50Q29udHJvbCk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIGRlbGV0ZUNsb25lKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsIG1vdmVtZW50Q29udHJvbCk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGN1cnJlbnRDbG9uZS5jdXJyZW50KSB7XG4gICAgICBjb25zdCBlbHMgPSBBcnJheS5mcm9tKHJvb3RFbCgpIS5jaGlsZHJlbikgYXMgSFRNTERpdkVsZW1lbnRbXTtcbiAgICAgIGNvbnN0IGVsSW52aXNpYmxlID0gZWxzLmZpbmQoXG4gICAgICAgIChhKSA9PlxuICAgICAgICAgICFhLmNsYXNzTGlzdC5jb250YWlucyhTdHlsZXMudmlzaWJsZSkgJiYgYS5zdHlsZS5tYXhIZWlnaHQgIT09IFwiMHB4XCJcbiAgICAgICkhO1xuICAgICAgKGVsSW52aXNpYmxlLmNoaWxkcmVuWzBdIGFzIEhUTUxEaXZFbGVtZW50KS5zdHlsZS5oZWlnaHQgPSBgJHtcbiAgICAgICAgY3VycmVudENsb25lLmN1cnJlbnQhLmNsaWVudEhlaWdodFxuICAgICAgfXB4YDtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAoZWxJbnZpc2libGUuY2hpbGRyZW5bMV0gYXMgSFRNTERpdkVsZW1lbnQpLnN0eWxlLmhlaWdodCA9IGAke1xuICAgICAgICAgIGN1cnJlbnRDbG9uZS5jdXJyZW50IS5jbGllbnRIZWlnaHRcbiAgICAgICAgfXB4YDtcbiAgICAgIH0sIDE1MCk7XG4gICAgfVxuICB9LCBbY2xlYW5PcmRlcl0pO1xuXG4gIGNvbnN0IHRvU3ByZWFkID0geyAuLi5wcm9wcyB9IGFzIGFueTtcbiAgZGVsZXRlIHRvU3ByZWFkLmtleU9yZGVyO1xuICBkZWxldGUgdG9TcHJlYWQub25DaGFuZ2VLZXlPcmRlcjtcblxuICBjb25zdCBjaGlsZHJlblRvUmVuZGVyID0gWy4uLmNoaWxkcmVuXVxuICAgIC5maWx0ZXIoKGEpID0+IGNsZWFuT3JkZXIuaW5jbHVkZXMoYS5rZXkgYXMgc3RyaW5nKSlcbiAgICAuc29ydChcbiAgICAgIChhLCBiKSA9PlxuICAgICAgICBjbGVhbk9yZGVyLmluZGV4T2YoYS5rZXkgYXMgc3RyaW5nKSAtXG4gICAgICAgIGNsZWFuT3JkZXIuaW5kZXhPZihiLmtleSBhcyBzdHJpbmcpXG4gICAgKVxuICAgIC5tYXAoKGE6IFJlYWN0RWxlbWVudCwgaSkgPT4gKHtcbiAgICAgIC4uLmEsXG4gICAgICBrZXk6IG9yZGVyW2ldLFxuICAgIH0pKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIHJvb3RFbCgpIS5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLCAoZSkgPT4ge1xuICAgICAgY29uc3QgcmVsYXRlZEFuY2hvciA9IGFuY2hvcnNMaXN0LmZpbmQoKGFuY2hvcikgPT5cbiAgICAgICAgYW5jaG9yLmNvbnRhaW5zKGUudGFyZ2V0IGFzIGFueSlcbiAgICAgICk7XG4gICAgICBpZiAocmVsYXRlZEFuY2hvcikge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIG9uQW5jaG9yQ2xpY2soe1xuICAgICAgICAgIHRhcmdldDogcmVsYXRlZEFuY2hvcixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgbW92ZUNiID0gdGhyb3R0bGUoKGU6IFRvdWNoRXZlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCB0b3VjaCA9IGUudG91Y2hlc1swXTtcbiAgICAgICAgICBjb25zdCBbeCwgeV0gPSBbdG91Y2guY2xpZW50WCwgdG91Y2guY2xpZW50WV07XG4gICAgICAgICAgY29uc3QgZWxzID0gQXJyYXkuZnJvbShyb290RWwoKS5jaGlsZHJlbikgYXMgSFRNTERpdkVsZW1lbnRbXTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudElkeCA9IGVscy5maW5kSW5kZXgoKGMsIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSBjPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIGlmICghcmVjdCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHJlY3QudG9wIDwgeSAmJiByZWN0LnRvcCArIHJlY3QuaGVpZ2h0ID4geTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoY3VycmVudEVsZW1lbnRJZHggIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBlbCA9IGVsc1tjdXJyZW50RWxlbWVudElkeF07XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICBjYWxjdWxhdGVSZW9yZGVyaW5nKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBlbCxcbiAgICAgICAgICAgICAgICBvZmZzZXRZOiB5IC0gcmVjdC50b3AsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGVscyxcbiAgICAgICAgICAgICAgY2xlYW5PcmRlclJlZi5jdXJyZW50XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgY29uc3QgdCA9IGUudGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgICBjb25zdCB0b3VjaE1vdmVDYiA9IChlOiBUb3VjaEV2ZW50KSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgVG91Y2hFdmVudChlLnR5cGUsIGUgYXMgYW55KSk7XG4gICAgICAgICAgbW92ZUNiKGUpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZW1vdmVDYiA9IChlOiBUb3VjaEV2ZW50KSA9PiB7XG4gICAgICAgICAgdC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsIHRvdWNoTW92ZUNiKTtcbiAgICAgICAgICB0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCByZW1vdmVDYik7XG4gICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IFRvdWNoRXZlbnQoZS50eXBlLCBlIGFzIGFueSkpO1xuICAgICAgICB9O1xuICAgICAgICB0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIiwgdG91Y2hNb3ZlQ2IpO1xuICAgICAgICB0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCByZW1vdmVDYik7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgYmluZEFuY2hvcjogKGVsOiBIVE1MRGl2RWxlbWVudCkgPT4ge1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIG9uQW5jaG9yQ2xpY2spO1xuICAgICAgICBhbmNob3JzTGlzdC5wdXNoKGVsKTtcbiAgICAgIH0sXG4gICAgICB1bmJpbmRBbmNob3I6IChlbDogSFRNTERpdkVsZW1lbnQpID0+IHtcbiAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCBvbkFuY2hvckNsaWNrKTtcbiAgICAgICAgYW5jaG9yc0xpc3Quc3BsaWNlKGFuY2hvcnNMaXN0LmluZGV4T2YoZWwpLCAxKTtcbiAgICAgIH0sXG4gICAgICBvbjogZXZlbnRFbWl0dGVyLnN1YnNjcmliZXIsXG4gICAgfSksXG4gICAgW11cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxPcmRlcmFibGVMaXN0Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17ZX0+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17cm9vdFJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXtgJHtTdHlsZXMucm9vdH0gJHtjbGFzc05hbWV9ICR7XG4gICAgICAgICAgc2hyaW5rVG9Pbk9yZGVyID8gU3R5bGVzLnNocmlua2FibGUgOiBcIlwiXG4gICAgICAgIH1gfVxuICAgICAgICB7Li4udG9TcHJlYWR9XG4gICAgICA+XG4gICAgICAgIHttb2RlID09PSBPcmRlcmFibGVMaXN0UmVvcmRlck1vZGUuVkVSVElDQUwgPyAoXG4gICAgICAgICAgPEFuaW1hdGVkRW50cmFuY2U+e2NoaWxkcmVuVG9SZW5kZXJ9PC9BbmltYXRlZEVudHJhbmNlPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxVbmNvbnRyb2xsZWRUcmFuc2l0aW9uXG4gICAgICAgICAgICBjbGFzc05hbWU9e1N0eWxlcy50cmFuc2l0aW9ufVxuICAgICAgICAgICAgdHJhbnNpdGlvblR5cGU9e1RyYW5zaXRpb25BbmltYXRpb25UeXBlcy5DVVNUT019XG4gICAgICAgICAgICBjb25maWc9e3tcbiAgICAgICAgICAgICAgYmFja3dhcmQ6IHtcbiAgICAgICAgICAgICAgICBlbGVtZW50RW50ZXJpbmc6IFwiXCIsXG4gICAgICAgICAgICAgICAgZWxlbWVudEV4aXRpbmc6IFwiXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGZvcndhcmQ6IHtcbiAgICAgICAgICAgICAgICBlbGVtZW50RW50ZXJpbmc6IFN0eWxlcy5zdHViRW50ZXJpbmcsXG4gICAgICAgICAgICAgICAgZWxlbWVudEV4aXRpbmc6IFRyYW5zaXRpb25TdHlsZXMuZmFkZU91dCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBjb250ZW50Q2xhc3NOYW1lPXtgJHtjbGFzc05hbWV9YH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8RnJhZ21lbnQga2V5PXtvcmRlcklkfT5cbiAgICAgICAgICAgICAge1suLi5jaGlsZHJlbl1cbiAgICAgICAgICAgICAgICAuZmlsdGVyKChhKSA9PiBjbGVhbk9yZGVyLmluY2x1ZGVzKGEua2V5IGFzIHN0cmluZykpXG4gICAgICAgICAgICAgICAgLnNvcnQoXG4gICAgICAgICAgICAgICAgICAoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgICAgY2xlYW5PcmRlci5pbmRleE9mKGEua2V5IGFzIHN0cmluZykgLVxuICAgICAgICAgICAgICAgICAgICBjbGVhbk9yZGVyLmluZGV4T2YoYi5rZXkgYXMgc3RyaW5nKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAubWFwKChhLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8SGVyb1dyYXBwZXIga2V5PXtpfSBpZD17YS5rZXkgYXMgc3RyaW5nfT5cbiAgICAgICAgICAgICAgICAgICAge2F9XG4gICAgICAgICAgICAgICAgICA8L0hlcm9XcmFwcGVyPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICA8L1VuY29udHJvbGxlZFRyYW5zaXRpb24+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8L09yZGVyYWJsZUxpc3RDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufVxuXG5mdW5jdGlvbiBIZXJvV3JhcHBlcih7IGNoaWxkcmVuLCBpZCB9OiBQcm9wc1dpdGhDaGlsZHJlbjx7IGlkOiBzdHJpbmcgfT4pIHtcbiAgY29uc3QgeyBoZXJvUmVmIH0gPSB1c2VIZXJvKGlkLCB1bmRlZmluZWQsIHtcbiAgICBvbkhlcm9TdGFydDogKF9jLCBfbywgdCkgPT4ge1xuICAgICAgdC5xdWVyeVNlbGVjdG9yQWxsKFwiaW1nXCIpLmZvckVhY2goXG4gICAgICAgIChpbWcpID0+IChpbWcuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCIpXG4gICAgICApO1xuICAgIH0sXG4gICAgb25IZXJvQ2xvbmVkKGNsb25lKSB7XG4gICAgICAvLyBpZiAoIWNsb25lLmNsYXNzTGlzdC5jb250YWlucyhTdHlsZXMudmlzaWJsZSkpIGNsb25lLnN0eWxlLm9wYWNpdHkgPSBcIjBcIjtcbiAgICB9LFxuICAgIG9uSGVyb0VuZDogKCkgPT4ge1xuICAgICAgaWYgKGhlcm9SZWYuY3VycmVudClcbiAgICAgICAgaGVyb1JlZi5jdXJyZW50XG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwoXCJpbWdcIilcbiAgICAgICAgICAuZm9yRWFjaCgoaW1nKSA9PiAoaW1nLnN0eWxlLnZpc2liaWxpdHkgPSBcIlwiKSk7XG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiA8ZGl2IHJlZj17aGVyb1JlZn0+e2NoaWxkcmVufTwvZGl2Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZU9yZGVyYWJsZUxpc3RBbmNob3IoKSB7XG4gIGNvbnN0IGFuY2hvclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCBhcyBhbnkpO1xuICBjb25zdCBjdHggPSB1c2VDb250ZXh0KE9yZGVyYWJsZUxpc3RDb250ZXh0KTtcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWN0eCkgcmV0dXJuO1xuICAgIGNvbnN0IHsgYmluZEFuY2hvciwgdW5iaW5kQW5jaG9yIH0gPSBjdHg7XG4gICAgYmluZEFuY2hvcihhbmNob3JSZWYuY3VycmVudCEpO1xuICAgIHJldHVybiAoKSA9PiB1bmJpbmRBbmNob3IoYW5jaG9yUmVmLmN1cnJlbnQhKTtcbiAgfSwgW10pO1xuICByZXR1cm4ge1xuICAgIGFuY2hvclJlZjogY3R4ID8gYW5jaG9yUmVmIDogdW5kZWZpbmVkLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlT3JkZXJhYmxlRXZlbnRzKFxuICBldmVudHM6IHtcbiAgICBbayBpbiBFdmVudHNdOiAoKSA9PiB2b2lkO1xuICB9XG4pIHtcbiAgY29uc3QgeyBvbiB9ID0gdXNlQ29udGV4dChPcmRlcmFibGVMaXN0Q29udGV4dCk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdW5zdWJzY3JpYmVyczogYW55W10gPSBbXTtcbiAgICBmb3IgKGxldCBldmVudE5hbWUgaW4gZXZlbnRzKSB7XG4gICAgICB1bnN1YnNjcmliZXJzLnB1c2gob24oZXZlbnROYW1lIGFzIEV2ZW50cywgZXZlbnRzW2V2ZW50TmFtZSBhcyBFdmVudHNdKSk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB1bnN1YnNjcmliZXJzLmZvckVhY2goKHUpID0+IHUoKSk7XG4gICAgfTtcbiAgfSwgW2V2ZW50c10pO1xufVxuIl0sIm1hcHBp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
|