{"version":3,"file":"static/js/main.493cfecc.js","mappings":"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ACA,SAAQ,EACR,aAAQ,UACV,YACA,gBAEE,CACE,WACE,aAAW,UACX,sBACA,KAAQ,YAEV,KACA,0BACE,SACgB,CACR,WACA,SACV,CACF,CACA,SAAQ,EACR,aAAQ,UACV,YACA,gBAEE,CACE,WACE,aAAW,UACX,WACA,KAAQ,WAEV,CACA,WACE,aAAW,UACX,cACA,KAAQ,YAEV,KACA,gBACE,SACgB,CACR,OACR,GAAQ,KACV,gBACF,SACA,CACA,aAAQ,UACV,QACA,iBAGE,gBAAW,YACT,YACkB,CACR,OACR,GAAQ,KACV,oBACF,SACA,CACA,aAAQ,UACV,QACA,iBAGE,gBAAW,YACT,YACkB,CACR,OACR,GAAQ,KACV,QACF,SACA,CACA,aAAQ,UACV,QACA,iBAGE,gBAAW,YACT,YACkB,CACR,OACR,GAAQ,KACV,OACF,SACA,CACA,aAAQ,kBACV,QACA,iBAGE,gBAAW,YACT,YACkB,CACR,OACR,CACF,CACF,uBACA,QACA,KAAQ,YAGR,gBAAU,QACR,EAEE,aAAQ,kBACR,KAAQ,cACV,gBAEF,CACA,aAAW,UACT,uBACE,gBACQ,CAEV,uBACA,sBACE,gBACQ,CAEV,uBACA,wBACE,gBACQ,CAEV,uBACA,sBACE,gBACQ,CAEV,uBACA,yBACE,gBACQ,CAEV,uBACA,eACE,gBACQ,CAEV,uBACA,iBACE,gBACQ,CAEV,uBACA,wBACE,gBACQ,CAEV,uBACA,4BACE,iBAEQ,gBACV,YACA,YACkB,CACR,OACR,GAAQ,KACV,oBACF,WACA,gBAAmB,aACnB,KAAQ,YAEV,CACE,OAAU,CACV,CACA,aAAY,UACZ,gBACA,KAAQ,YAGR,yBAAU,QACR,mBACE,aAAgB,KAChB,YACQ,CAEZ,QACA,CACA,aAAY,UACZ,QACA,KAAQ,WAEV,CACE,aAAU,UACR,QACE,iBAEQ,KACV,mBACA,EAEE,aAAQ,UACR,KAAQ,SACV,gBAEF,CACA,aAAW,UACT,kBACE,iBAEQ,gBACV,YACA,YACkB,CACR,OACR,GAAQ,KACV,aACF,SACA,CACA,aAAQ,UACV,QACA,iBAGE,gBAAW,YACT,YACkB,CACR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","sources":["../../packages/farms/constants/index.ts","../../packages/farms/constants/priceHelperLps/369.ts","../../packages/farms/constants/priceHelperLps/943.ts","../../packages/farms/constants/priceHelperLps/getFarmsPriceHelperLpFiles.ts","../../packages/hooks/src/usePreviousValue.ts","../../packages/hooks/src/useLastUpdated.ts","../../packages/hooks/src/useIsWindowVisible.ts","../../packages/hooks/src/useDebounce.ts","../../packages/utils/uriToHttp.ts","../../packages/hooks/src/useHttpLocations.ts","../../packages/hooks/src/usePreloadImage.ts","../../packages/hooks/src/useIntersectionObserver.ts","../../packages/hooks/src/useDelayedUnmount.ts","../../packages/hooks/src/useTheme.ts","../../packages/utils/isUndefinedOrNull.ts","../../packages/localization/src/config/languages.ts","../../packages/localization/src/helpers.ts","../../packages/localization/src/Provider.tsx","../../packages/localization/src/useTranslation.ts","../../packages/uikit/src/tokens/colors.ts","../../packages/uikit/src/css/vars.css.ts","../../packages/uikit/src/css/breakpoints.ts","../../packages/uikit/src/css/responsiveStyle.ts","../../packages/uikit/src/css/reset.css.ts","../../packages/uikit/src/css/sprinkles.css.ts","../../packages/uikit/src/css/swap.css.ts","../../packages/uikit/src/util/getThemeValue.ts","../../packages/uikit/src/components/Svg/Svg.tsx","../../packages/uikit/src/components/Svg/Icons/CheckmarkCircle.tsx","../../packages/uikit/src/components/Svg/Icons/Error.tsx","../../packages/uikit/src/components/Svg/Icons/Block.tsx","../../packages/uikit/src/components/Svg/Icons/Info.tsx","../../packages/uikit/src/components/Text/Text.tsx","../../packages/uikit/src/components/Text/TooltipText.tsx","../../packages/uikit/src/util/externalLinkProps.ts","../../packages/uikit/src/components/Button/types.ts","../../packages/uikit/src/components/Button/theme.ts","../../packages/uikit/src/components/Button/StyledButton.tsx","../../packages/uikit/src/components/Button/Button.tsx","../../packages/uikit/src/components/Button/IconButton.tsx","../../packages/uikit/src/components/Svg/Icons/AccountFilled.tsx","../../packages/uikit/src/components/Svg/Icons/Account.tsx","../../packages/uikit/src/components/Svg/Icons/Add.tsx","../../packages/uikit/src/components/Svg/Icons/ArrowBack.tsx","../../packages/uikit/src/components/Svg/Icons/ArrowDown.tsx","../../packages/uikit/src/components/Svg/Icons/ArrowDropDown.tsx","../../packages/uikit/src/components/Svg/Icons/ArrowDropUp.tsx","../../packages/uikit/src/components/Svg/Icons/ArrowFirst.tsx","../../packages/uikit/src/components/Svg/Icons/ArrowForward.tsx","../../packages/uikit/src/components/Svg/Icons/ArrowLast.tsx","../../packages/uikit/src/components/Svg/Icons/ArrowUp.tsx","../../packages/uikit/src/components/Svg/Icons/ArrowUpDown.tsx","../../packages/uikit/src/components/Svg/Icons/AutoRenew.tsx","../../packages/uikit/src/components/Svg/Icons/AutoRouter.tsx","../../packages/uikit/src/components/Svg/Icons/BinanceChain.tsx","../../packages/uikit/src/components/Svg/Icons/Binance.tsx","../../packages/uikit/src/components/Svg/Icons/BnbUsdtPairToken.tsx","../../packages/uikit/src/components/Svg/Icons/PulseLogo.tsx","../../packages/uikit/src/components/Svg/Icons/BunnyCards.tsx","../../packages/uikit/src/components/Svg/Icons/BunnyPlaceholder.tsx","../../packages/uikit/src/components/Svg/Icons/Calculate.tsx","../../packages/uikit/src/components/Svg/Icons/Camera.tsx","../../packages/uikit/src/components/Svg/Icons/Cards.tsx","../../packages/uikit/src/components/Svg/Icons/CardView.tsx","../../packages/uikit/src/components/Svg/Icons/ChartDisable.tsx","../../packages/uikit/src/components/Svg/Icons/Chart.tsx","../../packages/uikit/src/components/Svg/Icons/CheckmarkCircleFill.tsx","../../packages/uikit/src/components/Svg/Icons/Checkmark.tsx","../../packages/uikit/src/components/Svg/Icons/ChevronDown.tsx","../../packages/uikit/src/components/Svg/Icons/ChevronLeft.tsx","../../packages/uikit/src/components/Svg/Icons/ChevronRight.tsx","../../packages/uikit/src/components/Svg/Icons/ChevronUp.tsx","../../packages/uikit/src/components/Svg/Icons/CircleOutline.tsx","../../packages/uikit/src/components/Svg/Icons/Close.tsx","../../packages/uikit/src/components/Svg/Icons/Cog.tsx","../../packages/uikit/src/components/Svg/Icons/Coin98.tsx","../../packages/uikit/src/components/Svg/Icons/CommunityFilled.tsx","../../packages/uikit/src/components/Svg/Icons/Community.tsx","../../packages/uikit/src/components/Svg/Icons/Copy.tsx","../../packages/uikit/src/components/Svg/Icons/Crown.tsx","../../packages/uikit/src/components/Svg/Icons/Currency.tsx","../../packages/uikit/src/components/Svg/Icons/Discord.tsx","../../packages/uikit/src/components/Svg/Icons/DotLine.tsx","../../packages/uikit/src/components/Svg/Icons/EarnFilled.tsx","../../packages/uikit/src/components/Svg/Icons/EarnFill.tsx","../../packages/uikit/src/components/Svg/Icons/Earn.tsx","../../packages/uikit/src/components/Svg/Icons/Ellipsis.tsx","../../packages/uikit/src/components/Svg/Icons/Expand.tsx","../../packages/uikit/src/components/Svg/Icons/Farm.tsx","../../packages/uikit/src/components/Svg/Icons/Gas.tsx","../../packages/uikit/src/components/Svg/Icons/Github.tsx","../../packages/uikit/src/components/Svg/Icons/Groups.tsx","../../packages/uikit/src/components/Svg/Icons/HamburgerClose.tsx","../../packages/uikit/src/components/Svg/Icons/Hamburger.tsx","../../packages/uikit/src/components/Svg/Icons/Help.tsx","../../packages/uikit/src/components/Svg/Icons/History.tsx","../../packages/uikit/src/components/Svg/Icons/Home.tsx","../../packages/uikit/src/components/Svg/Icons/Ifo.tsx","../../packages/uikit/src/components/Svg/Icons/Instagram.tsx","../../packages/uikit/src/components/Svg/Icons/LanguageCurrency.tsx","../../packages/uikit/src/components/Svg/Icons/Language.tsx","../../packages/uikit/src/components/Svg/Icons/LaurelLeft.tsx","../../packages/uikit/src/components/Svg/Icons/LaurelRight.tsx","../../packages/uikit/src/components/Svg/Icons/LineGraph.tsx","../../packages/uikit/src/components/Svg/Icons/ListView.tsx","../../packages/uikit/src/components/Svg/Icons/Login.tsx","../../packages/uikit/src/components/Svg/Icons/Logo.tsx","../../packages/uikit/src/components/Svg/Icons/LogoRound.tsx","../../packages/uikit/src/components/Svg/Icons/Logout.tsx","../../packages/uikit/src/components/Svg/Icons/LogoWithText.tsx","../../packages/uikit/src/components/Svg/Icons/MathWallet.tsx","../../packages/uikit/src/components/Svg/Icons/MedalBronze.tsx","../../packages/uikit/src/components/Svg/Icons/MedalGold.tsx","../../packages/uikit/src/components/Svg/Icons/MedalPurple.tsx","../../packages/uikit/src/components/Svg/Icons/MedalSilver.tsx","../../packages/uikit/src/components/Svg/Icons/MedalTeal.tsx","../../packages/uikit/src/components/Svg/Icons/Metamask.tsx","../../packages/uikit/src/components/Svg/Icons/Minus.tsx","../../packages/uikit/src/components/Svg/Icons/Moon.tsx","../../packages/uikit/src/components/Svg/Icons/MoreHorizontal.tsx","../../packages/uikit/src/components/Svg/Icons/More.tsx","../../packages/uikit/src/components/Svg/Icons/MoreVertical.tsx","../../packages/uikit/src/components/Svg/Icons/NftFilled.tsx","../../packages/uikit/src/components/Svg/Icons/NftFill.tsx","../../packages/uikit/src/components/Svg/Icons/Nft.tsx","../../packages/uikit/src/components/Svg/Icons/NoProfileAvatar.tsx","../../packages/uikit/src/components/Svg/Icons/OpenNew.tsx","../../packages/uikit/src/components/Svg/Icons/Opera.tsx","../../packages/uikit/src/components/Svg/Icons/PancakeRound.tsx","../../packages/uikit/src/components/Svg/Icons/Pancakes.tsx","../../packages/uikit/src/components/Svg/Icons/Pencil.tsx","../../packages/uikit/src/components/Svg/Icons/PlayCircleOutline.tsx","../../packages/uikit/src/components/Svg/Icons/PlsIcon.tsx","../../packages/uikit/src/components/Svg/Icons/PocketWatch.tsx","../../packages/uikit/src/components/Svg/Icons/Pool.tsx","../../packages/uikit/src/components/Svg/Icons/Predictions.tsx","../../packages/uikit/src/components/Svg/Icons/PresentCheck.tsx","../../packages/uikit/src/components/Svg/Icons/PresentNone.tsx","../../packages/uikit/src/components/Svg/Icons/PresentWon.tsx","../../packages/uikit/src/components/Svg/Icons/Prize.tsx","../../packages/uikit/src/components/Svg/Icons/ProgressBunny.tsx","../../packages/uikit/src/components/Svg/Icons/Proposal.tsx","../../packages/uikit/src/components/Svg/Icons/Reddit.tsx","../../packages/uikit/src/components/Svg/Icons/Refresh.tsx","../../packages/uikit/src/components/Svg/Icons/Remove.tsx","../../packages/uikit/src/components/Svg/Icons/ResourcesFilled.tsx","../../packages/uikit/src/components/Svg/Icons/Resources.tsx","../../packages/uikit/src/components/Svg/Icons/SafePal.tsx","../../packages/uikit/src/components/Svg/Icons/Search.tsx","../../packages/uikit/src/components/Svg/Icons/Sell.tsx","../../packages/uikit/src/components/Svg/Icons/Share.tsx","../../packages/uikit/src/components/Svg/Icons/Shrink.tsx","../../packages/uikit/src/components/Svg/Icons/SmallDot.tsx","../../packages/uikit/src/components/Svg/Icons/SmartContract.tsx","../../packages/uikit/src/components/Svg/Icons/StarFill.tsx","../../packages/uikit/src/components/Svg/Icons/StarLine.tsx","../../packages/uikit/src/components/Svg/Icons/StaticRoute.tsx","../../packages/uikit/src/components/Svg/Icons/Sun.tsx","../../packages/uikit/src/components/Svg/Icons/SwapFill.tsx","../../packages/uikit/src/components/Svg/Icons/Swap.tsx","../../packages/uikit/src/components/Svg/Icons/SwapVert.tsx","../../packages/uikit/src/components/Svg/Icons/SyncAlt.tsx","../../packages/uikit/src/components/Svg/Icons/TeamBattle.tsx","../../packages/uikit/src/components/Svg/Icons/TeamPlayer.tsx","../../packages/uikit/src/components/Svg/Icons/Telegram.tsx","../../packages/uikit/src/components/Svg/Icons/Testnet.tsx","../../packages/uikit/src/components/Svg/Icons/Ticket.tsx","../../packages/uikit/src/components/Svg/Icons/TicketFill.tsx","../../packages/uikit/src/components/Svg/Icons/TicketRound.tsx","../../packages/uikit/src/components/Svg/Icons/Timer.tsx","../../packages/uikit/src/components/Svg/Icons/TokenPocket.tsx","../../packages/uikit/src/components/Svg/Icons/TradeFilled.tsx","../../packages/uikit/src/components/Svg/Icons/Trade.tsx","../../packages/uikit/src/components/Svg/Icons/TradingView.tsx","../../packages/uikit/src/components/Svg/Icons/TrophyFill.tsx","../../packages/uikit/src/components/Svg/Icons/TrophyGold.tsx","../../packages/uikit/src/components/Svg/Icons/Trophy.tsx","../../packages/uikit/src/components/Svg/Icons/TrustWallet.tsx","../../packages/uikit/src/components/Svg/Icons/Tune.tsx","../../packages/uikit/src/components/Svg/Icons/Twitter.tsx","../../packages/uikit/src/components/Svg/Icons/Verified.tsx","../../packages/uikit/src/components/Svg/Icons/VisibilityOff.tsx","../../packages/uikit/src/components/Svg/Icons/VisibilityOn.tsx","../../packages/uikit/src/components/Svg/Icons/VolumeOff.tsx","../../packages/uikit/src/components/Svg/Icons/VolumeUp.tsx","../../packages/uikit/src/components/Svg/Icons/Vote.tsx","../../packages/uikit/src/components/Svg/Icons/Wait.tsx","../../packages/uikit/src/components/Svg/Icons/WalletConnect.tsx","../../packages/uikit/src/components/Svg/Icons/WalletFilled.tsx","../../packages/uikit/src/components/Svg/Icons/Wallet.tsx","../../packages/uikit/src/components/Svg/Icons/Warning.tsx","../../packages/uikit/src/components/Button/ExpandableButton.tsx","../../packages/uikit/src/components/Box/Box.tsx","../../packages/uikit/src/components/Box/Flex.tsx","../../packages/uikit/src/components/Alert/types.ts","../../packages/uikit/src/components/Alert/Alert.tsx","../../packages/uikit/src/components/AtomBox.tsx","../../packages/uikit/src/css/atoms.ts","../../packages/uikit/src/components/Balance/Balance.tsx","../../packages/uikit/src/components/Skeleton/types.ts","../../packages/uikit/src/components/Skeleton/Skeleton.tsx","../../packages/uikit/src/components/Box/Grid.tsx","../../packages/uikit/src/components/Input/types.ts","../../packages/uikit/src/components/Input/Input.tsx","../../packages/uikit/src/components/BalanceInput/styles.tsx","../../packages/uikit/src/components/BalanceInput/BalanceInput.tsx","../../packages/uikit/src/components/BaseMenu/styles.tsx","../../packages/uikit/src/util/getPortalRoot.ts","../../packages/uikit/src/components/BaseMenu/BaseMenu.tsx","../../packages/uikit/src/components/BaseMenu/InlineMenu.tsx","../../packages/uikit/src/components/Breadcrumbs/Breadcrumbs.tsx","../../packages/uikit/src/components/ButtonMenu/ButtonMenu.tsx","../../packages/uikit/src/components/ButtonMenu/ButtonMenuItem.tsx","../../packages/uikit/src/components/ButtonMenu/ButtonTabMenu.tsx","../../packages/uikit/src/hooks/useIsomorphicEffect.ts","../../packages/uikit/src/contexts/MatchBreakpoints/Provider.tsx","../../packages/uikit/src/contexts/MatchBreakpoints/useMatchBreakpoints.ts","../../packages/uikit/src/components/Toast/types.ts","../../packages/uikit/src/components/Toast/Toast.tsx","../../packages/uikit/src/components/Toast/ToastContainer.tsx","../../packages/uikit/src/contexts/ToastsContext/Provider.tsx","../../packages/uikit/src/contexts/ToastsContext/useToast.ts","../../packages/uikit/src/contexts/ToastsContext/Listener.tsx","../../packages/uikit/src/hooks/useOnClickOutside.ts","../../packages/uikit/src/components/Overlay/Overlay.tsx","../../packages/uikit/src/components/BottomDrawer/styles.ts","../../packages/uikit/src/components/BottomDrawer/BottomDrawer.tsx","../../packages/uikit/src/util/animationToolkit.ts","../../packages/uikit/src/components/Card/StyledCard.tsx","../../packages/uikit/src/components/Card/Card.tsx","../../packages/uikit/src/components/Card/CardBody.tsx","../../packages/uikit/src/components/Card/CardHeader.tsx","../../packages/uikit/src/components/Card/CardFooter.tsx","../../packages/uikit/src/components/Card/CardRibbon.tsx","../../packages/uikit/src/components/Checkbox/types.ts","../../packages/uikit/src/components/Checkbox/Checkbox.tsx","../../packages/uikit/src/components/Column/index.tsx","../../packages/uikit/src/util/isTouchDevice.ts","../../packages/uikit/src/hooks/useTooltip/StyledTooltip.tsx","../../packages/uikit/src/hooks/useTooltip/types.ts","../../packages/uikit/src/hooks/useTooltip/useTooltip.tsx","../../packages/uikit/src/components/CopyButton/CopyButton.tsx","../../packages/uikit/src/components/CopyButton/copyText.ts","../../packages/uikit/src/components/CopyButton/CopyAddress.tsx","../../packages/uikit/src/components/Dropdown/Dropdown.tsx","../../packages/uikit/src/widgets/Menu/context.ts","../../packages/uikit/src/components/Svg/IconComponent.tsx","../../packages/uikit/src/components/DropdownMenu/styles.tsx","../../packages/uikit/src/components/DropdownMenu/types.ts","../../packages/uikit/src/components/DropdownMenu/DropdownMenu.tsx","../../packages/uikit/src/components/Heading/types.ts","../../packages/uikit/src/components/Heading/Heading.tsx","../../packages/uikit/src/components/Image/options.ts","../../packages/uikit/src/components/Image/Wrapper.tsx","../../packages/uikit/src/components/Image/Placeholder.tsx","../../packages/uikit/src/components/Image/BackgroundImage.tsx","../../packages/uikit/src/components/Image/Image.tsx","../../packages/uikit/src/components/Image/TokenImage.tsx","../../packages/uikit/src/components/Image/types.ts","../../packages/uikit/src/components/Image/styles.tsx","../../packages/uikit/src/components/Image/TokenPairImage.tsx","../../packages/uikit/src/components/Image/ProfileAvatar.tsx","../../packages/uikit/src/components/Input/InputGroup.tsx","../../packages/uikit/src/components/LangSelector/MenuButton.tsx","../../packages/uikit/src/components/LangSelector/LangSelector.tsx","../../packages/uikit/src/components/Layouts/BaseLayout.tsx","../../packages/uikit/src/components/Layouts/CardsLayout.tsx","../../packages/uikit/src/components/Layouts/Container.tsx","../../packages/uikit/src/components/Layouts/Flex.tsx","../../packages/uikit/src/components/Layouts/FlexGap.tsx","../../packages/uikit/src/components/Link/Link.tsx","../../packages/uikit/src/components/Link/LinkExternal.tsx","../../packages/uikit/src/components/Loading/Loading.tsx","../../packages/uikit/src/components/Message/theme.ts","../../packages/uikit/src/components/Message/Message.tsx","../../packages/uikit/src/components/NotificationDot/NotificationDot.tsx","../../packages/uikit/src/components/PageHeader/PageHeader.tsx","../../packages/uikit/src/components/PlsxPrice/PlsxPrice.tsx","../../packages/uikit/src/components/PulseXToggle/types.ts","../../packages/uikit/src/components/PulseXToggle/StyledPulseXToggle.tsx","../../packages/uikit/src/components/Progress/types.ts","../../packages/uikit/src/components/Progress/themes.ts","../../packages/uikit/src/components/Progress/StyledProgress.tsx","../../packages/uikit/src/components/Progress/ProgressBunnyWrapper.tsx","../../packages/uikit/src/components/QuestionHelper/index.tsx","../../packages/uikit/src/components/Radio/types.ts","../../packages/uikit/src/components/Radio/Radio.tsx","../../packages/uikit/src/components/ReactMarkdown/styles.tsx","../../packages/utils/bigNumber.ts","../../packages/utils/getFullDecimalMultiplier.ts","../../packages/utils/formatBalance.ts","../../packages/utils/viem/formatUnits.ts","../../packages/uikit/src/components/RoiCalculatorModal/RoiCalculatorFooter.tsx","../../packages/utils/compoundApyHelpers.ts","../../packages/uikit/src/components/RoiCalculatorModal/useRoiCalculatorReducer.ts","../../packages/uikit/src/components/RoiCalculatorModal/RoiCard.tsx","../../packages/uikit/src/components/RoiCalculatorModal/AnimatedArrow.tsx","../../packages/uikit/src/widgets/Modal/styles.tsx","../../packages/uikit/src/widgets/Modal/ModalContext.tsx","../../packages/uikit/src/widgets/Modal/ModalV2.tsx","../../packages/uikit/src/widgets/Modal/Modal.tsx","../../packages/uikit/src/widgets/Modal/useModal.ts","../../packages/uikit/src/widgets/Modal/Spacer.tsx","../../packages/uikit/src/widgets/Modal/ModalActions.tsx","../../packages/utils/viem/parseUnits.ts","../../packages/utils/displayBalance.ts","../../packages/utils/trimTrailZero.ts","../../packages/uikit/src/widgets/Modal/ModalInput.tsx","../../packages/uikit/src/widgets/Modal/NotEnoughTokensModal.tsx","../../packages/uikit/src/components/RoiCalculatorModal/RoiCalculatorModal.tsx","../../packages/uikit/src/components/Row/Row.tsx","../../packages/uikit/src/components/SearchInput/SearchInput.tsx","../../packages/uikit/src/components/Select/Select.tsx","../../packages/uikit/src/components/Slider/styles.ts","../../packages/uikit/src/components/Slider/Slider.tsx","../../packages/uikit/src/components/Spinner/PanIcon.tsx","../../packages/uikit/src/components/Spinner/PancakeIcon.tsx","../../packages/uikit/src/components/Spinner/Spinner.tsx","../../packages/uikit/src/components/Spinner2/PanIcon.tsx","../../packages/uikit/src/components/Spinner2/Spinner2.tsx","../../packages/uikit/src/components/Stepper/Stepper.tsx","../../packages/uikit/src/components/Stepper/Step.tsx","../../packages/uikit/src/components/MenuItem/styles.tsx","../../packages/uikit/src/components/MenuItem/MenuItem.tsx","../../packages/uikit/src/components/SubMenuItems/styles.tsx","../../packages/uikit/src/components/SubMenuItems/SubMenuItems.tsx","../../packages/uikit/src/components/Table/Cell.tsx","../../packages/uikit/src/components/Table/Table.tsx","../../packages/uikit/src/components/TabMenu/TabMenu.tsx","../../packages/uikit/src/components/TabMenu/Tab.tsx","../../packages/uikit/src/components/Tag/types.ts","../../packages/uikit/src/components/Tag/theme.ts","../../packages/uikit/src/components/Tag/StyledTag.tsx","../../packages/uikit/src/components/Tag/Tag.tsx","../../packages/uikit/src/components/Toggle/types.ts","../../packages/uikit/src/components/Toggle/StyledToggle.tsx","../../packages/uikit/src/components/Toggle/Toggle.tsx","../../packages/uikit/src/theme/colors.ts","../../packages/uikit/src/components/Timeline/styles.ts","../../packages/uikit/src/components/ToggleView/ToggleView.tsx","../../packages/uikit/src/components/TokenLogo/TokenLogo.tsx","../../packages/uikit/src/components/Svg/styles.tsx","../../packages/uikit/src/components/Svg/AnimatedIconComponent.tsx","../../packages/uikit/src/components/BottomNavItem/styles.tsx","../../packages/uikit/src/components/BottomNavItem/BottomNavItem.tsx","../../packages/uikit/src/components/BottomNav/styles.tsx","../../packages/uikit/src/components/BottomNav/BottomNav.tsx","../../packages/uikit/src/components/MenuItems/MenuItems.tsx","../../packages/uikit/src/widgets/Menu/components/DesktopLogo.tsx","../../packages/uikit/src/widgets/Menu/components/MobileLogo.tsx","../../packages/uikit/src/widgets/Menu/Menu.tsx","../../packages/uikit/src/widgets/Menu/config.ts","../../packages/hooks/src/useIsMounted.ts","../../packages/uikit/src/widgets/Menu/testConfig.ts","../../packages/uikit/src/widgets/Menu/components/UserMenu/types.ts","../../packages/uikit/src/widgets/Menu/components/UserMenu/MenuIcon.tsx","../../packages/uikit/src/widgets/Menu/components/UserMenu/styles.tsx","../../packages/uikit/src/widgets/Menu/components/UserMenu/index.tsx","../../packages/uikit/src/widgets/Menu/components/Logo.tsx","../../packages/uikit/src/ResetCSS.tsx","../../packages/uikit/src/components/Alert/theme.ts","../../packages/uikit/src/components/Card/theme.ts","../../packages/uikit/src/components/PulseXToggle/theme.ts","../../packages/uikit/src/components/Radio/theme.ts","../../packages/uikit/src/components/Toggle/theme.ts","../../packages/uikit/src/widgets/Menu/theme.ts","../../packages/uikit/src/widgets/Modal/theme.ts","../../packages/uikit/src/components/Tooltip/theme.ts","../../packages/uikit/src/theme/base.ts","../../packages/uikit/src/theme/dark.ts","../../packages/uikit/src/Providers.tsx","../../packages/uikit/src/ui-wallets/WalletModal.css.ts","../../packages/uikit/src/ui-wallets/WalletModal.tsx","config/constants/types.ts","../../packages/wagmi/dist/chunk-MYWZT2KK.mjs","../../packages/wagmi/dist/connectors/trustWallet.mjs","config/index.ts","utils/wagmi.ts","config/chains.ts","../../packages/farms/src/const.ts","../../packages/utils/equalsIgnoreCase.ts","../../packages/farms/src/getFullDecimalMultiplier.ts","../../packages/farms/src/farmPrices.ts","../../packages/farms/src/fetchPublicFarmData.ts","../../packages/farms/src/fetchFarms.ts","../../packages/farms/src/index.ts","utils/viem.ts","state/global/actions.ts","config/abi/masterchef.ts","config/constants/contracts.ts","utils/addressHelpers.ts","state/farms/fetchFarmUser.ts","state/farms/index.ts","state/farms/fetchMasterChefData.ts","../../packages/pools/src/constants/pools/369.ts","../../packages/pools/src/constants/pools/943.ts","../../packages/pools/src/constants/supportedChains.ts","../../packages/pools/src/constants/pools/index.ts","../../packages/pools/src/types.ts","../../packages/pools/src/constants/contracts.ts","../../packages/pools/src/queries/fetchPools.ts","../../packages/pools/src/abis/plsxLab.ts","../../packages/pools/src/queries/fetchPoolsUser.ts","../../packages/token-lists/dist/chunk-3ODAR5LU.mjs","state/pools/helpers.ts","state/pools/index.ts","utils/apr.ts","state/transactions/actions.ts","state/transactions/reducer.ts","config/constants/exchange.ts","state/user/actions.ts","state/user/reducer.ts","state/global/reducer.ts","state/index.ts","utils/clearUserStates.ts","hooks/useSessionChainId.ts","hooks/useActiveChainId.ts","hooks/useAccountEventListener.ts","hooks/useEagerConnect.ts","hooks/useUserAgent.ts","hooks/useSwitchNetworkLoading.ts","hooks/useActiveWeb3React.ts","../../packages/wagmi/dist/index.mjs","utils/index.ts","../../packages/utils/enumValues.ts","config/constants/lists.ts","../../packages/token-lists/dist/react.mjs","state/lists/lists.ts","state/lists/hooks.ts","state/user/hooks/useUserAddedTokens.ts","hooks/useNativeCurrency.ts","hooks/Tokens.ts","state/user/hooks/index.tsx","hooks/useRefreshEffect.ts","utils/prices.ts","utils/getLpAddress.ts","../../packages/utils/tryParseAmount.ts","utils/wrappedCurrency.ts","config/abi/plsx.ts","config/abi/plsxLab.ts","config/abi/buyandburn.ts","utils/contractHelpers.ts","config/abi/multicall.ts","config/abi/IPulseXPair.ts","config/abi/weth.ts","hooks/useContract.ts","state/multicall/actions.ts","state/multicall/reducer.ts","state/multicall/hooks.ts","state/wallet/hooks.ts","hooks/usePairs.ts","hooks/useUSDCPrice.ts","hooks/useAccountActiveChain.ts","../../packages/farms/src/deserializeFarmUserData.ts","../../packages/farms/src/deserializeFarm.ts","state/farms/selectors.ts","state/farms/hooks.ts","state/block/hooks.ts","state/lists/updater.ts","state/multicall/retry.ts","state/multicall/updater.tsx","state/multicall/chunkArray.ts","components/Toast/types.ts","components/Toast/Toast.tsx","components/Toast/ToastContainer.tsx","utils/truncateHash.ts","components/Toast/DescriptionWithTx.tsx","state/transactions/hooks.tsx","state/transactions/updater.tsx","config/constants/supportChains.ts","hooks/useSwitchNetwork.ts","hooks/useAuth.ts","components/NetworkModal/PageNetworkSupportModal.tsx","components/Logo/ChainLogo.tsx","components/Loader/Dots.tsx","components/NetworkModal/WrongNetworkModal.tsx","components/NetworkModal/UnsupportedNetworkModal.tsx","components/NetworkModal/NetworkModal.tsx","utils/sentry.ts","utils/transactionErrorToUserReadableMessage.ts","hooks/Trades.ts","components/Layout/Row.tsx","components/Layout/Column.tsx","utils/getTokenLogoURL.ts","components/Logo/CurrencyLogo.tsx","components/Logo/DoubleLogo.tsx","components/Logo/ListLogo.tsx","components/UnsupportedCurrencyFooter.tsx","config/abi/IPulseXRouter02.ts","state/swap/actions.ts","utils/exchange.ts","state/mint/actions.ts","state/mint/reducer.ts","components/Card/index.tsx","components/SearchModal/CommonBases.tsx","components/Loader/CircleLoader.tsx","components/SearchModal/ImportRow.tsx","components/SearchModal/CurrencyList.tsx","components/SearchModal/sorting.ts","components/SearchModal/swapSound.ts","components/SearchModal/CurrencySearch.tsx","components/SearchModal/filtering.ts","components/SearchModal/ImportToken.tsx","components/SearchModal/types.ts","components/SearchModal/ManageLists.tsx","components/SearchModal/ManageTokens.tsx","components/SearchModal/Manage.tsx","components/SearchModal/ImportList.tsx","components/SearchModal/CurrencySearchModal.tsx","components/CurrencyInputPanel/NumericalInput.tsx","components/Logo/constants.ts","utils/wallet.ts","components/AddToWallet/AddToWalletButton.tsx","components/CurrencyInputPanel/index.tsx","components/App/AppHeader.tsx","components/App/AppBody.tsx","hooks/useTotalSupply.ts","utils/currencyId.ts","state/mint/hooks.ts","components/PositionCard/index.tsx","config/wallet.ts","../../packages/wagmi/dist/connectors/miniProgram.mjs","utils/mpBridge.ts","hooks/useEagerConnect.bmp.ts","components/Trans.tsx","../../packages/localization/src/Trans.tsx","components/ConnectWalletButton.tsx","hooks/useCallWithGasPrice.ts","hooks/useTokenAllowance.ts","hooks/useApproveCallback.ts","hooks/useTransactionDeadline.ts","hooks/useCurrentBlockTimestamp.ts","utils/maxAmountSpend.ts","pages/Page.tsx","pages/AddLiquidity/PoolPriceBar.tsx","components/TransactionConfirmationModal/index.tsx","state/burn/actions.ts","pages/AddLiquidity/ConfirmAddModalBottom.tsx","pages/Swap/components/ConfirmAddLiquidityModal.tsx","pages/AddLiquidity/useCurrencySelectRoute.ts","pages/AddLiquidity/index.tsx","utils/splitSignature.ts","state/burn/reducer.ts","state/burn/hooks.ts","pages/Swap/components/ConfirmRemoveLiquidityModal.tsx","pages/RemoveLiquidity/index.tsx","../../packages/hooks/src/useDebouncedChangeHandler.ts","components/VersionTag/index.tsx","components/Layout/Container.tsx","components/Layout/Page.tsx","pages/NotFound.tsx","utils/farmHelpers.ts","utils/latinise.ts","../../packages/widgets-internal/farm/components/FarmTabButtons.tsx","../../packages/widgets-internal/farm/components/FarmApyButton/index.tsx","../../packages/widgets-internal/farm/components/Tags/index.tsx","../../packages/widgets-internal/farm/components/FarmCard/DetailsSection.tsx","../../packages/widgets-internal/farm/components/FarmCard/index.tsx","../../packages/widgets-internal/farm/components/StakedLP/index.tsx","../../packages/widgets-internal/farm/components/DepositModal/index.tsx","../../packages/widgets-internal/farm/components/WithdrawModal/index.tsx","../../packages/widgets-internal/farm/components/FarmTable/CellLayout.tsx","../../packages/widgets-internal/farm/components/styles.ts","../../packages/widgets-internal/farm/components/FarmTable/Earned.tsx","../../packages/widgets-internal/farm/components/FarmTable/Details.tsx","../../packages/widgets-internal/farm/components/FarmTable/Liquidity.tsx","../../packages/widgets-internal/farm/components/FarmTable/Multiplier.tsx","../../packages/widgets-internal/farm/components/FarmTable/FarmTokenInfo.tsx","../../packages/widgets-internal/farm/components/FarmTable/Actions/styles.ts","../../packages/widgets-internal/farm/components/FarmTable/Actions/HarvestAction.tsx","../../packages/widgets-internal/farm/components/FarmTable/index.tsx","../../packages/widgets-internal/farm/components/FarmTable/Actions/AccountNotConnect.tsx","../../packages/widgets-internal/farm/components/FarmTable/Actions/StakeComponent.tsx","../../packages/widgets-internal/farm/components/FarmTable/Actions/StakeActionDataNotReady.tsx","../../packages/widgets-internal/farm/components/FarmTable/Actions/EnableStakeAction.tsx","../../packages/widgets-internal/farm/components/FarmTable/Actions/StakedActionComponent.tsx","../../packages/widgets-internal/farm/types.ts","../../packages/widgets-internal/farm/constants.ts","../../packages/utils/latinise.ts","pages/Farms/components/FarmCard/ApyButton.tsx","utils/getLiquidityUrlPathParts.ts","pages/Farms/components/FarmTable/Apr.tsx","components/TokenImage/index.tsx","pages/Farms/components/FarmTable/Farm.tsx","hooks/usePublicNodeWaitForTransaction.ts","hooks/useCatchTxError.tsx","pages/Farms/hooks/useApproveFarm.ts","pages/Farms/hooks/useStakeFarms.ts","utils/calls/farms.ts","pages/Farms/hooks/useUnstakeFarms.ts","pages/Farms/components/FarmTable/Actions/StakedAction.tsx","pages/Farms/hooks/useHarvestFarm.ts","pages/Farms/components/FarmTable/Actions/HarvestAction.tsx","pages/Farms/components/FarmTable/Actions/ActionPanel.tsx","pages/Farms/components/FarmTable/Row.tsx","pages/Farms/components/FarmTable/FarmTable.tsx","pages/Farms/components/getDisplayApr.ts","pages/Farms/components/FarmTypesFilter.tsx","pages/Farms/components/FarmTabButtons.tsx","components/ExpandableSectionButton/ExpandableSectionButton.tsx","pages/Farms/components/FarmCard/CardHeading.tsx","components/Balance.tsx","pages/Farms/components/FarmCard/HarvestAction.tsx","pages/Farms/components/FarmCard/StakeAction.tsx","pages/Farms/components/FarmCard/CardActionsContainer.tsx","pages/Farms/components/FarmCard/FarmCard.tsx","pages/Farms/index.tsx","state/pools/hooks.ts","components/Layout/Flex.tsx","components/PageHeader/PageHeader.tsx","components/SearchInput/SearchInput.tsx","pages/Swap/hooks/useGetTopPoolsByApr.tsx","components/Loading.tsx","pages/Pools/components/PoolCard/AprRow.tsx","pages/Pools/components/PoolCard/StyledCard.tsx","pages/Pools/helpers.tsx","pages/Pools/components/PoolCard/CardFooter/ExpandedFooter.tsx","pages/Pools/components/PoolCard/CardFooter/index.tsx","pages/Pools/components/PoolCard/PoolCardHeader.tsx","pages/Pools/hooks/useApprove.tsx","pages/Pools/components/PoolCard/CardActions/ApprovalAction.tsx","hooks/useTheme.ts","utils/compoundApyHelpers.ts","pages/Pools/components/PoolCard/Modals/PercentageButton.tsx","pages/Pools/hooks/useStakePool.ts","pages/Pools/hooks/useUnstakePool.ts","pages/Pools/components/PoolCard/Modals/StakeModal.tsx","pages/Pools/components/PoolCard/CardActions/StakeActions.tsx","pages/Pools/hooks/useHarvestPool.ts","pages/Pools/components/PoolCard/Modals/CollectModal.tsx","pages/Pools/components/PoolCard/CardActions/HarvestActions.tsx","pages/Pools/components/PoolCard/CardActions/index.tsx","pages/Pools/components/PoolCard/index.tsx","pages/Pools/components/ToggleView/ToggleView.tsx","pages/Pools/components/PoolTabButtons.tsx","pages/Pools/components/PoolsTable/Cells/BaseCell.tsx","pages/Pools/components/PoolsTable/Cells/NameCell.tsx","pages/Pools/components/PoolsTable/Apr.tsx","pages/Pools/components/PoolsTable/Cells/AprCell.tsx","pages/Pools/components/PoolsTable/Cells/EarningsCell.tsx","pages/Pools/components/PoolsTable/Cells/ExpandActionCell.tsx","pages/Pools/components/PoolsTable/Cells/TotalStakedCell.tsx","pages/Pools/components/PoolsTable/Cells/EndsInCell.tsx","pages/Pools/components/PoolsTable/ActionPanel/styles.ts","pages/Pools/components/PoolsTable/ActionPanel/Harvest.tsx","pages/Pools/components/PoolsTable/ActionPanel/Stake.tsx","pages/Pools/components/MaxStakeRow.tsx","pages/Pools/components/PoolsTable/ActionPanel/ActionPanel.tsx","pages/Pools/components/PoolsTable/PoolRow.tsx","pages/Pools/components/PoolsTable/PoolsTable.tsx","pages/Pools/index.tsx","pages/PoolFinder/index.tsx","pages/Info/components/CurrencyLogo/LogoLoader.tsx","pages/Info/components/CurrencyLogo/index.tsx","../../packages/utils/formatInfoNumbers.ts","pages/Info/components/Percent/index.tsx","pages/Info/components/SaveIcon/index.tsx","utils/graphql.ts","config/constants/info.ts","state/info/types.ts","state/info/queries/helpers.ts","state/info/queries/pools/chartData.ts","pages/Info/utils/infoDataHelpers.ts","utils/getChangeForPeriod.ts","utils/getDeltaTimestamps.ts","state/info/queries/pools/topPools.ts","state/info/queries/pools/poolData.ts","utils/getLpFeesAndApr.ts","state/info/queries/pools/transactions.ts","state/info/queries/protocol/chart.ts","config/constants/endpoints.ts","utils/requestWithTimeout.ts","pages/Info/utils/infoQueryHelpers.ts","utils/getBlocksFromTimestamps.ts","pages/Info/hooks/useBlocksFromTimestamps.ts","state/info/queries/protocol/overview.ts","state/info/queries/protocol/transactions.ts","state/info/queries/tokens/chartData.ts","state/info/queries/tokens/poolsForToken.ts","state/info/queries/tokens/priceData.ts","state/info/queries/tokens/topTokens.ts","state/info/queries/tokens/tokenData.ts","state/info/queries/tokens/transactions.ts","state/info/hooks.ts","pages/Info/components/InfoTables/shared.tsx","pages/Info/components/InfoTables/PoolsTable.tsx","pages/Info/components/InfoTables/TransactionsTable.tsx","hooks/useInfoUserSavedTokensAndPoolsList.ts","components/ChartLoaders/LineChartLoaderSVG.tsx","components/ChartLoaders/BarChartLoaderSVG.tsx","components/ChartLoaders/CandleChartLoaderSVG.tsx","components/ChartLoaders/index.tsx","pages/Info/hooks/useChartCallbacks.ts","pages/Info/components/InfoCharts/LineChart/index.tsx","pages/Info/components/InfoCharts/BarChart/index.tsx","components/TabToggle/index.tsx","pages/Info/components/InfoCharts/CandleChart/index.tsx","pages/Info/components/InfoCharts/ChartCard/index.tsx","pages/Info/Tokens/TokenPage.tsx","pages/Info/components/InfoTables/TokensTable.tsx","pages/Info/components/TopTokenMovers/index.tsx","pages/Info/Tokens/index.tsx","pages/Info/hooks/usePoolsData.ts","pages/Info/Pools/index.tsx","pages/Info/Pools/PoolPage.tsx","components/TestnetWarningBanner/index.tsx","components/Menu/config/config.ts","hooks/useTokenBalance.ts","components/Menu/UserMenu/WalletInfo.tsx","components/Menu/UserMenu/TransactionRow.tsx","components/Menu/UserMenu/WalletTransactions.tsx","components/Menu/UserMenu/WalletWrongNetwork.tsx","components/Menu/UserMenu/WalletModal.tsx","components/Menu/UserMenu/WalletUserMenuItem.tsx","components/Menu/UserMenu/index.tsx","hooks/useWrapCallback.ts","../../packages/v3-sdk/dist/index.mjs","../../packages/multicall/src/constants/contracts.ts","../../packages/multicall/src/constants/blockConflictTolerance.ts","../../packages/multicall/src/constants/gasLimit.ts","../../packages/multicall/src/getMulticallContract.ts","../../packages/multicall/src/abis/IMulticall.ts","../../packages/multicall/src/getGasLimit.ts","../../packages/multicall/src/getBlockConflictTolerance.ts","../../packages/multicall/src/multicall.ts","../../packages/smart-router/dist/index.mjs","../../packages/smart-router/src/routers/sdk/entities/protocol.ts","../../packages/smart-router/src/routers/sdk/entities/mixedRoute/route.ts","../../packages/smart-router/src/routers/sdk/entities/mixedRoute/trade.ts","../../packages/smart-router/src/routers/sdk/entities/route.ts","../../packages/smart-router/src/routers/sdk/entities/trade.ts","state/autorouter/types.ts","state/autorouter/utils.ts","state/autorouter/hooks.ts","hooks/useBestTrade.ts","hooks/useGetENSAddressByName.ts","hooks/useParsedQueryString.ts","pages/Swap/components/Chart/utils.ts","state/swap/reducer.ts","state/swap/normalizers.ts","state/swap/queries/getDerivedPrices.ts","state/swap/types.ts","state/swap/fetch/fetchDerivedPriceData.ts","state/swap/hooks.ts","components/Menu/GlobalSettings/TransactionSettings.tsx","components/Menu/GlobalSettings/ExpertModal.tsx","components/Menu/GlobalSettings/SettingsModal.tsx","components/Menu/GlobalSettings/index.tsx","components/Menu/utils.ts","components/Menu/index.tsx","components/BridgeButton/index.tsx","pages/Swap/hooks/useRefreshBlockNumber.ts","pages/Swap/components/AddressInputPanel.tsx","pages/Swap/components/styleds.tsx","pages/Swap/components/FormattedPriceImpact.tsx","pages/Swap/components/SwapModalFooter.tsx","pages/Swap/components/SwapModalHeader.tsx","pages/Swap/components/ConfirmSwapModal.tsx","pages/Swap/components/SwapRoute.tsx","pages/Swap/components/AnimatedDropdown.tsx","pages/Swap/components/TradePrice.tsx","pages/Swap/components/AdvancedSwapDetails.tsx","pages/Swap/components/confirmPriceImpactWithoutFee.ts","pages/Swap/components/ProgressSteps.tsx","../../packages/utils/isZero.ts","../../packages/utils/truncateHash.ts","hooks/useSwapCallback.ts","config/constants/warningTokens.ts","config/constants/swapWarningTokens.ts","utils/shouldShowSwapWarning.ts","components/ImportTokenWarningModal.tsx","pages/Swap/components/SwapWarningModal/Acknowledgement.tsx","pages/Swap/components/SwapWarningModal/index.tsx","pages/Swap/hooks/useWarningImport.tsx","pages/Swap/components/Chart/styles.tsx","pages/Swap/components/Chart/PlsWplsNotice.tsx","pages/Swap/components/Chart/NoChartAvailable.tsx","pages/Swap/components/Chart/TokenDisplay.tsx","pages/Swap/components/Chart/SwapLineChart.tsx","pages/Swap/components/Chart/BasicChart.tsx","pages/Swap/components/Chart/PriceChart.tsx","pages/Swap/components/Chart/PriceChartContainer.tsx","pages/Swap/styles.tsx","pages/Swap/components/CurrencyInputHeader.tsx","pages/Swap/index.tsx","utils/computeFiatValuePriceImpact.tsx","../../packages/utils/formatFractions.ts","pages/Swap/utils/isZero.ts","pages/Swap/SmartSwap/hooks/useSendSwapTransaction.ts","../../packages/smart-router/src/abis/ISwapRouter02.ts","../../packages/smart-router/src/routers/sdk/constants.ts","../../packages/smart-router/src/routers/sdk/approveAndCall.ts","../../packages/smart-router/src/abis/IApproveAndCall.ts","../../packages/smart-router/src/routers/sdk/multicallExtended.ts","../../packages/smart-router/src/abis/IMulticallExtended.ts","../../packages/smart-router/src/routers/sdk/paymentsExtended.ts","../../packages/smart-router/src/abis/IPeripheryPaymentsWithFeeExtended.ts","../../packages/smart-router/src/routers/sdk/utils/index.ts","../../packages/smart-router/src/routers/sdk/swapRouter.ts","pages/Swap/SmartSwap/hooks/useSwapCallback.ts","pages/Swap/SmartSwap/hooks/useSwapCallArguments.ts","components/Loader/LoadingRows.tsx","pages/Swap/SmartSwap/components/AdvancedSwapDetails.tsx","pages/Swap/SmartSwap/components/GasEstimateBadge.tsx","components/Badge/index.tsx","components/RoutingDiagram/index.tsx","pages/Swap/SmartSwap/components/RouterLabel.tsx","pages/Swap/SmartSwap/components/SwapRoute.tsx","pages/Swap/SmartSwap/components/SwapDetailsDropdown.tsx","pages/Swap/SmartSwap/components/SwapModalFooterV2.tsx","pages/Swap/SmartSwap/components/SwapModalHeaderV2.tsx","pages/Swap/SmartSwap/components/ConfirmSwapModalV2.tsx","pages/Swap/SmartSwap/index.tsx","pages/Swap/SmartSwap/hooks/useSlippageAdjustedAmounts.ts","pages/Pool/index.tsx","state/buyandburn/hooks.ts","pages/Burn/shared.tsx","pages/Burn/PoolsTable.tsx","pages/Burn/index.tsx","state/info/queries/search/index.ts","pages/Info/components/InfoSearch/index.tsx","pages/Info/components/InfoNav/index.tsx","pages/Info/index.tsx","pages/Info/components/InfoCharts/HoverableChart.tsx","pages/Info/Overview/index.tsx","pages/App.tsx","style/Global.tsx","index.tsx","hooks/useSWRContract.ts","../../packages/farms/constants|lazy|/^/.//.*/.ts$/|groupOptions: {}|namespace object","../../packages/chains/dist/index.mjs","../../packages/swap-sdk-core/dist/index.mjs","../../packages/swap-sdk/dist/index.mjs","../../packages/token-lists/dist/chunk-2L3ZO4UM.mjs","../../packages/tokens/dist/index.mjs","../webpack/bootstrap","../webpack/runtime/amd options","../webpack/runtime/chunk loaded","../webpack/runtime/compat get default export","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/ensure chunk","../webpack/runtime/get javascript chunk filename","../webpack/runtime/get mini-css chunk filename","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/load script","../webpack/runtime/make namespace object","../webpack/runtime/node module decorator","../webpack/runtime/publicPath","../webpack/runtime/jsonp chunk loading","../webpack/runtime/nonce","../webpack/startup"],"sourcesContent":["import { ChainId } from '@pulsex/chains'\nimport { SerializedFarmConfig } from '..'\n\nlet logged = false\n\nexport const getFarmConfig = async (chainId: ChainId) => {\n try {\n return (await import(`/${chainId}.ts`)).default.filter(\n (f: SerializedFarmConfig) => f.pid !== null,\n ) as SerializedFarmConfig[]\n } catch (error) {\n if (!logged) {\n console.error('Cannot get farm config', error, chainId)\n logged = true\n }\n return []\n }\n}\n\nexport const getStableConfig = async (chainId: ChainId) => {\n try {\n const farms = (await import(`/${chainId}.ts`)).default as SerializedFarmConfig[]\n\n return farms\n } catch (error) {\n if (!logged) {\n console.error('Cannot get stable farm config', error, chainId)\n logged = true\n }\n return []\n }\n}\n","import { SerializedFarmConfig } from '../..'\n\nconst priceHelperLps: SerializedFarmConfig[] = []\n\nexport default priceHelperLps\n","import { SerializedFarmConfig } from '../..'\n\nconst priceHelperLps: SerializedFarmConfig[] = []\n\nexport default priceHelperLps\n","import { ChainId } from '@pulsex/chains'\nimport FarmsPLSPriceHelper from './369'\nimport FarmsPLSTestnetPriceHelper from './943'\n\nexport const getFarmsPriceHelperLpFiles = (chainId: ChainId) => {\n switch (chainId) {\n case ChainId.PULSECHAIN:\n return FarmsPLSPriceHelper\n case ChainId.PULSECHAIN_TESTNET:\n return FarmsPLSTestnetPriceHelper\n default:\n return []\n }\n}\n","import { useEffect, useRef } from 'react'\n\n/**\n * Returns the previous value of the given value\n *\n * @see https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state\n */\nconst usePreviousValue = (value: T) => {\n const ref = useRef()\n\n useEffect(() => {\n ref.current = value\n }, [value])\n\n return ref.current\n}\n\nexport default usePreviousValue\n","import { useCallback, useState } from 'react'\nimport usePreviousValue from './usePreviousValue'\n\n/**\n * A helper hook to keep track of the time between events\n * Can also be used to force an effect to re-run\n */\nconst useLastUpdated = () => {\n const [lastUpdated, setStateLastUpdated] = useState(() => Date.now())\n const previousLastUpdated = usePreviousValue(lastUpdated)\n\n const setLastUpdated = useCallback(() => {\n setStateLastUpdated(Date.now())\n }, [setStateLastUpdated])\n\n return { lastUpdated, previousLastUpdated, setLastUpdated }\n}\n\nexport default useLastUpdated\n","import { useEffect, useState } from 'react'\n\nfunction isWindowVisible() {\n if (!(typeof document !== 'undefined' && 'visibilityState' in document)) {\n return true\n }\n\n return document.visibilityState === 'visible'\n}\n\n/**\n * Returns whether the window is currently visible to the user.\n */\nexport default function useIsWindowVisible() {\n const [isVisible, setIsVisible] = useState(() => isWindowVisible())\n\n useEffect(() => {\n if (!('visibilityState' in document)) return undefined\n\n const handleVisibilityChange = () => {\n setIsVisible(isWindowVisible())\n }\n\n document.addEventListener('visibilitychange', handleVisibilityChange)\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange)\n }\n }, [setIsVisible])\n\n return isVisible\n}\n","import { useEffect, useState } from 'react'\n\n// modified from https://usehooks.com/useDebounce/\nexport default function useDebounce(value: T, delay: number): T {\n const [debouncedValue, setDebouncedValue] = useState(value)\n\n useEffect(() => {\n // Update debounced value after delay\n const handler = setTimeout(() => {\n setDebouncedValue(value)\n }, delay)\n\n // Cancel the timeout if value changes (also on delay change or unmount)\n // This is how we prevent debounced value from updating if value is changed ...\n // .. within the delay period. Timeout gets cleared and restarted.\n return () => {\n clearTimeout(handler)\n }\n }, [value, delay])\n\n return debouncedValue\n}\n","/* eslint-disable no-case-declarations */\n/**\n * Given a URI that may be ipfs, ipns, http, or https protocol, return the fetch-able http(s) URLs for the same content\n * @param uri to convert to fetch-able http url\n */\nexport default function uriToHttp(uri: string): string[] {\n const protocol = uri.split(':')[0].toLowerCase()\n switch (protocol) {\n case 'https':\n return [uri]\n case 'http':\n return [`https${uri.substring(4)}`, uri]\n case 'ipfs':\n const hash = uri.match(/^ipfs:(\\/\\/)?(.*)$/i)?.[2]\n return [`https://cloudflare-ipfs.com/ipfs/${hash}/`, `https://ipfs.io/ipfs/${hash}/`]\n case 'ipns':\n const name = uri.match(/^ipns:(\\/\\/)?(.*)$/i)?.[2]\n return [`https://cloudflare-ipfs.com/ipns/${name}/`, `https://ipfs.io/ipns/${name}/`]\n default:\n return []\n }\n}\n","import { useMemo } from 'react'\nimport uriToHttp from '@pulsex/utils/uriToHttp'\n\nexport default function useHttpLocations(uri: string | undefined): string[] {\n return useMemo(() => {\n return uri ? uriToHttp(uri) : []\n }, [uri])\n}\n","import { useEffect } from 'react'\n\nconst preloadImageMap = new Map()\n\nexport const usePreloadImages = (imageSources: string[]) => {\n useEffect(() => {\n // eslint-disable-next-line no-restricted-syntax\n for (const src of imageSources) {\n if (!preloadImageMap.has(src)) {\n preloadImageMap.set(src, true)\n const img = new Image()\n img.src = src\n }\n }\n }, [imageSources])\n}\n","import { useEffect, useLayoutEffect, useState, useRef } from 'react'\n\nexport const useIsomorphicEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect\n\nconst useIntersectionObserver = () => {\n const [observerRefElement, setObserverRefElement] = useState(null)\n const intersectionObserverRef = useRef(null)\n const [isIntersecting, setIsIntersecting] = useState(false)\n\n useIsomorphicEffect(() => {\n const isSupported = typeof window === 'object' && window.IntersectionObserver\n\n if (isSupported) {\n if (!intersectionObserverRef.current && observerRefElement) {\n const checkObserverIsIntersecting = ([entry]: IntersectionObserverEntry[]) => {\n setIsIntersecting(entry.isIntersecting)\n }\n\n intersectionObserverRef.current = new window.IntersectionObserver(checkObserverIsIntersecting, {\n rootMargin: '0px',\n threshold: 1,\n })\n intersectionObserverRef.current.observe(observerRefElement)\n }\n\n if (intersectionObserverRef.current && !observerRefElement) {\n intersectionObserverRef.current.disconnect()\n setIsIntersecting(false)\n }\n } else {\n // If client doesnt support IntersectionObserver, set Intersecting to be true\n setIsIntersecting(true)\n }\n\n return () => {\n if (intersectionObserverRef.current) {\n intersectionObserverRef.current.disconnect()\n }\n }\n }, [observerRefElement])\n\n return { observerRef: setObserverRefElement, isIntersecting }\n}\n\nexport default useIntersectionObserver\n","import { useState, useEffect } from 'react'\n\n/**\n * Use this hook when you want to animate something when it appears on the screen (e.g. when some prop set to true)\n * but when its not on the screen you want it to be fully unmounted and not just hidden or height 0.\n * This is especially useful when you have a table of 100s rows and each row has expandable element that appears on click.\n * If you just set the expanding animation while keeping inactive elements mounted all those 100 elements will load the DOM,\n * and if they all receive updates via props you're looking at 100 DOM updates for hidden elements.\n * This hook \"shows\" element immediately when the isMounted is true\n * but keeps element mounted for delayTime to let unmounting animation happen, after which you unmount element completely.\n * delayTime should be the same as animation time in most cases.\n */\nconst useDelayedUnmount = (isMounted: boolean, delayTime: number) => {\n const [shouldRender, setShouldRender] = useState(false)\n\n useEffect(() => {\n let timeoutId: ReturnType\n if (isMounted && !shouldRender) {\n setShouldRender(true)\n } else if (!isMounted && shouldRender) {\n timeoutId = setTimeout(() => setShouldRender(false), delayTime)\n }\n return () => clearTimeout(timeoutId)\n }, [isMounted, delayTime, shouldRender])\n return shouldRender\n}\n\nexport default useDelayedUnmount\n","import { useContext, useCallback, useMemo } from 'react'\nimport Cookie from 'js-cookie'\nimport { ThemeContext as StyledThemeContext } from 'styled-components'\nimport { useTheme as useNextTheme } from 'next-themes'\n\nexport const COOKIE_THEME_KEY = 'theme'\nexport const THEME_DOMAIN = '.pulsex'\n\nconst useTheme = () => {\n const { resolvedTheme, setTheme } = useNextTheme()\n const theme = useContext(StyledThemeContext)!\n\n const handleSwitchTheme = useCallback(\n (themeValue: 'light' | 'dark') => {\n try {\n setTheme(themeValue)\n Cookie.set(COOKIE_THEME_KEY, themeValue, { domain: THEME_DOMAIN })\n } catch (err) {\n // ignore set cookie error for perp theme\n }\n },\n [setTheme],\n )\n\n return useMemo(\n () => ({ isDark: resolvedTheme === 'dark', theme, setTheme: handleSwitchTheme }),\n [theme, resolvedTheme, handleSwitchTheme],\n )\n}\n\nexport default useTheme\n","export default function isUndefinedOrNull(value: any): boolean {\n return value === null || value === undefined\n}\n","import { Language } from '@pulsex/uikit'\n\nexport const AR: Language = { locale: 'ar-SA', language: 'العربية', code: 'ar' }\nexport const BN: Language = { locale: 'bn-BD', language: 'বাংলা', code: 'bn' }\nexport const EN: Language = { locale: 'en-US', language: 'English', code: 'en' }\nexport const DE: Language = { locale: 'de-DE', language: 'Deutsch', code: 'de' }\nexport const EL: Language = { locale: 'el-GR', language: 'Ελληνικά', code: 'el' }\nexport const ESES: Language = { locale: 'es-ES', language: 'Español', code: 'es-ES' }\nexport const FI: Language = { locale: 'fi-FI', language: 'Suomalainen', code: 'fi' }\nexport const FIL: Language = { locale: 'fil-PH', language: 'Filipino', code: 'fil' }\nexport const FR: Language = { locale: 'fr-FR', language: 'Français', code: 'fr' }\nexport const HI: Language = { locale: 'hi-IN', language: 'हिंदी', code: 'hi' }\nexport const HU: Language = { locale: 'hu-HU', language: 'Magyar', code: 'hu' }\nexport const ID: Language = { locale: 'id-ID', language: 'Bahasa Indonesia', code: 'id' }\nexport const IT: Language = { locale: 'it-IT', language: 'Italiano', code: 'it' }\nexport const JA: Language = { locale: 'ja-JP', language: '日本語', code: 'ja' }\nexport const KO: Language = { locale: 'ko-KR', language: '한국어', code: 'ko' }\nexport const NL: Language = { locale: 'nl-NL', language: 'Nederlands', code: 'nl' }\nexport const PL: Language = { locale: 'pl-PL', language: 'Polski', code: 'pl' }\nexport const PTBR: Language = { locale: 'pt-BR', language: 'Português (Brazil)', code: 'pt-br' }\nexport const PTPT: Language = { locale: 'pt-PT', language: 'Português', code: 'pt-pt' }\nexport const RO: Language = { locale: 'ro-RO', language: 'Română', code: 'ro' }\nexport const RU: Language = { locale: 'ru-RU', language: 'Русский', code: 'ru' }\nexport const SVSE: Language = { locale: 'sv-SE', language: 'Svenska', code: 'sv' }\nexport const TA: Language = { locale: 'ta-IN', language: 'தமிழ்', code: 'ta' }\nexport const TR: Language = { locale: 'tr-TR', language: 'Türkçe', code: 'tr' }\nexport const UK: Language = { locale: 'uk-UA', language: 'Українська', code: 'uk' }\nexport const VI: Language = { locale: 'vi-VN', language: 'Tiếng Việt', code: 'vi' }\nexport const ZHCN: Language = { locale: 'zh-CN', language: '简体中文', code: 'zh-cn' }\nexport const ZHTW: Language = { locale: 'zh-TW', language: '繁體中文', code: 'zh-tw' }\n\nexport const languages = {\n 'ar-SA': AR,\n 'bn-BD': BN,\n 'en-US': EN,\n 'de-DE': DE,\n 'el-GR': EL,\n 'es-ES': ESES,\n 'fi-FI': FI,\n 'fil-PH': FIL,\n 'fr-FR': FR,\n 'hi-IN': HI,\n 'hu-HU': HU,\n 'id-ID': ID,\n 'it-IT': IT,\n 'ja-JP': JA,\n 'ko-KR': KO,\n 'nl-NL': NL,\n 'pl-PL': PL,\n 'pt-BR': PTBR,\n 'pt-PT': PTPT,\n 'ro-RO': RO,\n 'ru-RU': RU,\n 'sv-SE': SVSE,\n 'ta-IN': TA,\n 'tr-TR': TR,\n 'uk-UA': UK,\n 'vi-VN': VI,\n 'zh-CN': ZHCN,\n 'zh-TW': ZHTW,\n}\n\nconst languageList = Object.values(languages)\n\nexport default languageList\n","import { EN } from './config/languages'\n\nconst publicUrl = process.env.NEXT_PUBLIC_APEX_URL || ''\n\nexport const LS_KEY = 'pulsex_language'\n\nexport const fetchLocale = async (locale: string) => {\n const response = await fetch(`${publicUrl}/locales/${locale}.json`)\n if (response.ok) {\n const data = await response.json()\n return data\n }\n\n console.error(`API: Failed to fetch locale ${locale}`, response.statusText)\n return null\n}\n\nexport const getLanguageCodeFromLS = () => {\n try {\n const codeFromStorage = localStorage.getItem(LS_KEY)\n\n return codeFromStorage || EN.locale\n } catch {\n return EN.locale\n }\n}\n","import React, { createContext, useCallback, useEffect, useState, useMemo } from 'react'\nimport { useLastUpdated } from '@pulsex/hooks'\nimport memoize from 'lodash/memoize'\nimport omitBy from 'lodash/omitBy'\nimport reduce from 'lodash/reduce'\nimport isUndefinedOrNull from '@pulsex/utils/isUndefinedOrNull'\nimport { EN, languages } from './config/languages'\nimport { ContextApi, ProviderState, TranslateFunction, Language } from './types'\nimport { LS_KEY, fetchLocale, getLanguageCodeFromLS } from './helpers'\n\nconst initialState: ProviderState = {\n isFetching: true,\n currentLanguage: EN,\n}\n\nconst includesVariableRegex = new RegExp(/%\\S+?%/, 'gm')\n\nconst translatedTextIncludesVariable = memoize((translatedText: string): boolean => {\n return !!translatedText?.match(includesVariableRegex)\n})\n\nconst getRegExpForDataKey = memoize((dataKey: string): RegExp => {\n return new RegExp(`%${dataKey}%`, 'g')\n})\n\n// Export the translations directly\nconst languageMap = new Map>()\nlanguageMap.set(EN.locale, {})\n\nexport const LanguageContext = createContext(undefined)\n\nexport const LanguageProvider: React.FC = ({ children }) => {\n const { lastUpdated, setLastUpdated: refresh } = useLastUpdated()\n const [state, setState] = useState(() => {\n const codeFromStorage = getLanguageCodeFromLS()\n\n return {\n ...initialState,\n currentLanguage: languages[codeFromStorage] || EN,\n }\n })\n const { currentLanguage } = state\n\n useEffect(() => {\n const fetchInitialLocales = async () => {\n const codeFromStorage = getLanguageCodeFromLS()\n\n if (codeFromStorage !== EN.locale) {\n const currentLocale = await fetchLocale(codeFromStorage)\n if (currentLocale) {\n languageMap.set(codeFromStorage, currentLocale)\n refresh()\n }\n }\n\n setState((prevState) => ({\n ...prevState,\n isFetching: false,\n }))\n }\n\n fetchInitialLocales()\n }, [refresh])\n\n const setLanguage = useCallback(async (language: Language) => {\n if (!languageMap.has(language.locale)) {\n setState((prevState) => ({\n ...prevState,\n isFetching: true,\n }))\n\n const locale = await fetchLocale(language.locale)\n if (locale) {\n languageMap.set(language.locale, locale)\n localStorage?.setItem(LS_KEY, language.locale)\n setState((prevState) => ({\n ...prevState,\n isFetching: false,\n currentLanguage: language,\n }))\n } else {\n setState((prevState) => ({\n ...prevState,\n isFetching: false,\n }))\n }\n } else {\n localStorage?.setItem(LS_KEY, language.locale)\n setState((prevState) => ({\n ...prevState,\n isFetching: false,\n currentLanguage: language,\n }))\n }\n }, [])\n\n const translate: TranslateFunction = useCallback(\n (key, data) => {\n const translationSet = languageMap.get(currentLanguage.locale) ?? {}\n const translatedText = translationSet?.[key] || key\n\n if (data) {\n // Check the existence of at least one combination of %%, separated by 1 or more non space characters\n const includesVariable = translatedTextIncludesVariable(key)\n if (includesVariable) {\n return reduce(\n omitBy(data, isUndefinedOrNull),\n (result, dataValue, dataKey) => {\n return result.replace(getRegExpForDataKey(dataKey), dataValue.toString())\n },\n translatedText,\n )\n }\n }\n\n return translatedText\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [currentLanguage, lastUpdated],\n )\n\n const providerValue = useMemo(() => {\n return { ...state, setLanguage, t: translate }\n }, [state, setLanguage, translate])\n\n return {children}\n}\n","import { useContext } from 'react'\nimport { LanguageContext } from './Provider'\n\nconst useTranslation = () => {\n const languageContext = useContext(LanguageContext)\n\n if (languageContext === undefined) {\n throw new Error('Language context is undefined')\n }\n\n return languageContext\n}\n\nexport default useTranslation\n","export const baseColors = {\n white: 'white',\n failure: '#ff0000',\n failure33: '#ff0000',\n primary: '#00cc44',\n primary0f: '#00cc44',\n primary3D: '#1FC7D43D',\n primaryBright: '#00ff55',\n primaryDark: '#00b33c',\n success: '#00cc44',\n success19: '#00cc44',\n warning: '#FFB237',\n warning2D: '#ED4B9E2D',\n warning33: 'rgba(255, 178, 55, 0.2)',\n}\n\nexport const additionalColors = {\n binance: \"#dbaa0a\",\n overlay: \"rgba(0, 0, 0, 0.6)\",\n gold: \"#FFC700\",\n silver: \"#B2B2B2\",\n bronze: \"#E7974D\",\n};\n\nexport const lightColors = {\n ...baseColors,\n ...additionalColors,\n secondary: '#7645D9',\n secondary80: '#7645D980',\n background: '#FAF9FA',\n backgroundDisabled: '#E9EAEB',\n backgroundAlt: '#FFFFFF',\n backgroundAlt2: 'rgba(255, 255, 255, 0.7)',\n cardBorder: '#E7E3EB',\n contrast: '#191326',\n dropdown: '#F6F6F6',\n dropdownDeep: '#EEEEEE',\n invertedContrast: '#FFFFFF',\n input: '#EEEAF4',\n inputSecondary: '#d7caec',\n tertiary: '#EFF4F5',\n text: '#280D5F',\n text99: '#280D5F99',\n textDisabled: '#BDC2C4',\n textSubtle: '#7A6EAA',\n disabled: '#E9EAEB',\n gradientBubblegum: 'linear-gradient(139.73deg, #E5FDFF 0%, #F3EFFF 100%)',\n gradientInverseBubblegum: 'linear-gradient(139.73deg, #F3EFFF 0%, #E5FDFF 100%)',\n gradientCardHeader: 'linear-gradient(111.68deg, #F2ECF2 0%, #E8F2F6 100%)',\n gradientBlue: 'linear-gradient(180deg, #A7E8F1 0%, #94E1F2 100%)',\n gradientViolet: 'linear-gradient(180deg, #E2C9FB 0%, #CDB8FA 100%)',\n gradientVioletAlt: 'linear-gradient(180deg, #CBD7EF 0%, #9A9FD0 100%)',\n gradientGold: 'linear-gradient(180deg, #FFD800 0%, #FDAB32 100%)',\n gradientBold: 'linear-gradient(#53DEE9, #7645D9)',\n}\n\nexport const darkColors = {\n ...baseColors,\n ...additionalColors,\n secondary: '#ffffff',\n secondary80: '#ffffff',\n background: '#08060B',\n backgroundDisabled: 'rgba(40, 40, 42, 1)',\n backgroundAlt: 'rgba(32, 32, 34, 1)',\n backgroundAlt2: 'rgba(40, 40, 42, 1)',\n cardBorder: 'rgba(50, 50, 52, 1)',\n contrast: '#FFFFFF',\n dropdown: 'rgba(40, 40, 42, 1)',\n dropdownDeep: 'rgba(32, 32, 34, 1)',\n invertedContrast: 'rgba(28, 28, 32, 1)',\n input: '#19191b',\n inputSecondary: 'rgba(30, 30, 32, 1)',\n primaryDark: '#00b33c',\n tertiary: 'rgba(45, 47, 48, 1)',\n text: '#f2f2f2',\n text99: '#f2f2f2',\n textDisabled: '#4d4d4d',\n textSubtle: '#cccccc',\n disabled: '#4d4d4d',\n gradientBubblegum: 'radial-gradient(150% 100vh at 50% 0%, #18181b 0px, #070707 100%)',\n gradientInverseBubblegum: 'linear-gradient(200.0deg, #070707 0%, #18181b 100%)',\n gradientCardHeader: 'linear-gradient(200.0deg, #070707 0%, #18181b 100%)',\n gradientBlue: 'linear-gradient(180deg, #00707F 0%, #19778C 100%)',\n gradientViolet: 'linear-gradient(180deg, #6C4999 0%, #6D4DB2 100%)',\n gradientVioletAlt: 'linear-gradient(180deg, #434575 0%, #66578D 100%)',\n gradientGold: 'linear-gradient(180deg, #FFD800 0%, #FDAB32 100%)',\n gradientBold: 'linear-gradient(#53DEE9, #9A6AFF)',\n}\n","import \"../packages/uikit/src/css/vars.css.ts.vanilla.css!=!../../../../node_modules/@vanilla-extract/webpack-plugin/virtualFileLoader/dist/vanilla-extract-webpack-plugin-virtualFileLoader.cjs.js?{\\\"fileName\\\":\\\"../packages/uikit/src/css/vars.css.ts.vanilla.css\\\",\\\"source\\\":\\\"#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\\\"}!../../../../node_modules/@vanilla-extract/webpack-plugin/extracted.js\"\nexport var modeVars = {colors:{white:'var(--colors-white)',failure:'var(--colors-failure)',failure33:'var(--colors-failure33)',primary:'var(--colors-primary)',primary0f:'var(--colors-primary0f)',primary3D:'var(--colors-primary3D)',primaryBright:'var(--colors-primaryBright)',primaryDark:'var(--colors-primaryDark)',success:'var(--colors-success)',success19:'var(--colors-success19)',warning:'var(--colors-warning)',warning2D:'var(--colors-warning2D)',warning33:'var(--colors-warning33)',binance:'var(--colors-binance)',overlay:'var(--colors-overlay)',gold:'var(--colors-gold)',silver:'var(--colors-silver)',bronze:'var(--colors-bronze)',secondary:'var(--colors-secondary)',secondary80:'var(--colors-secondary80)',background:'var(--colors-background)',backgroundDisabled:'var(--colors-backgroundDisabled)',backgroundAlt:'var(--colors-backgroundAlt)',backgroundAlt2:'var(--colors-backgroundAlt2)',cardBorder:'var(--colors-cardBorder)',contrast:'var(--colors-contrast)',dropdown:'var(--colors-dropdown)',dropdownDeep:'var(--colors-dropdownDeep)',invertedContrast:'var(--colors-invertedContrast)',input:'var(--colors-input)',inputSecondary:'var(--colors-inputSecondary)',tertiary:'var(--colors-tertiary)',text:'var(--colors-text)',text99:'var(--colors-text99)',textDisabled:'var(--colors-textDisabled)',textSubtle:'var(--colors-textSubtle)',disabled:'var(--colors-disabled)',gradientBubblegum:'var(--colors-gradientBubblegum)',gradientInverseBubblegum:'var(--colors-gradientInverseBubblegum)',gradientCardHeader:'var(--colors-gradientCardHeader)',gradientBlue:'var(--colors-gradientBlue)',gradientViolet:'var(--colors-gradientViolet)',gradientVioletAlt:'var(--colors-gradientVioletAlt)',gradientGold:'var(--colors-gradientGold)',gradientBold:'var(--colors-gradientBold)'}};\nexport var vars = {colors:{light:{white:'var(--colors-light-white)',failure:'var(--colors-light-failure)',failure33:'var(--colors-light-failure33)',primary:'var(--colors-light-primary)',primary0f:'var(--colors-light-primary0f)',primary3D:'var(--colors-light-primary3D)',primaryBright:'var(--colors-light-primaryBright)',primaryDark:'var(--colors-light-primaryDark)',success:'var(--colors-light-success)',success19:'var(--colors-light-success19)',warning:'var(--colors-light-warning)',warning2D:'var(--colors-light-warning2D)',warning33:'var(--colors-light-warning33)',binance:'var(--colors-light-binance)',overlay:'var(--colors-light-overlay)',gold:'var(--colors-light-gold)',silver:'var(--colors-light-silver)',bronze:'var(--colors-light-bronze)',secondary:'var(--colors-light-secondary)',secondary80:'var(--colors-light-secondary80)',background:'var(--colors-light-background)',backgroundDisabled:'var(--colors-light-backgroundDisabled)',backgroundAlt:'var(--colors-light-backgroundAlt)',backgroundAlt2:'var(--colors-light-backgroundAlt2)',cardBorder:'var(--colors-light-cardBorder)',contrast:'var(--colors-light-contrast)',dropdown:'var(--colors-light-dropdown)',dropdownDeep:'var(--colors-light-dropdownDeep)',invertedContrast:'var(--colors-light-invertedContrast)',input:'var(--colors-light-input)',inputSecondary:'var(--colors-light-inputSecondary)',tertiary:'var(--colors-light-tertiary)',text:'var(--colors-light-text)',text99:'var(--colors-light-text99)',textDisabled:'var(--colors-light-textDisabled)',textSubtle:'var(--colors-light-textSubtle)',disabled:'var(--colors-light-disabled)',gradientBubblegum:'var(--colors-light-gradientBubblegum)',gradientInverseBubblegum:'var(--colors-light-gradientInverseBubblegum)',gradientCardHeader:'var(--colors-light-gradientCardHeader)',gradientBlue:'var(--colors-light-gradientBlue)',gradientViolet:'var(--colors-light-gradientViolet)',gradientVioletAlt:'var(--colors-light-gradientVioletAlt)',gradientGold:'var(--colors-light-gradientGold)',gradientBold:'var(--colors-light-gradientBold)'},dark:{white:'var(--colors-dark-white)',failure:'var(--colors-dark-failure)',failure33:'var(--colors-dark-failure33)',primary:'var(--colors-dark-primary)',primary0f:'var(--colors-dark-primary0f)',primary3D:'var(--colors-dark-primary3D)',primaryBright:'var(--colors-dark-primaryBright)',primaryDark:'var(--colors-dark-primaryDark)',success:'var(--colors-dark-success)',success19:'var(--colors-dark-success19)',warning:'var(--colors-dark-warning)',warning2D:'var(--colors-dark-warning2D)',warning33:'var(--colors-dark-warning33)',binance:'var(--colors-dark-binance)',overlay:'var(--colors-dark-overlay)',gold:'var(--colors-dark-gold)',silver:'var(--colors-dark-silver)',bronze:'var(--colors-dark-bronze)',secondary:'var(--colors-dark-secondary)',secondary80:'var(--colors-dark-secondary80)',background:'var(--colors-dark-background)',backgroundDisabled:'var(--colors-dark-backgroundDisabled)',backgroundAlt:'var(--colors-dark-backgroundAlt)',backgroundAlt2:'var(--colors-dark-backgroundAlt2)',cardBorder:'var(--colors-dark-cardBorder)',contrast:'var(--colors-dark-contrast)',dropdown:'var(--colors-dark-dropdown)',dropdownDeep:'var(--colors-dark-dropdownDeep)',invertedContrast:'var(--colors-dark-invertedContrast)',input:'var(--colors-dark-input)',inputSecondary:'var(--colors-dark-inputSecondary)',tertiary:'var(--colors-dark-tertiary)',text:'var(--colors-dark-text)',text99:'var(--colors-dark-text99)',textDisabled:'var(--colors-dark-textDisabled)',textSubtle:'var(--colors-dark-textSubtle)',disabled:'var(--colors-dark-disabled)',gradientBubblegum:'var(--colors-dark-gradientBubblegum)',gradientInverseBubblegum:'var(--colors-dark-gradientInverseBubblegum)',gradientCardHeader:'var(--colors-dark-gradientCardHeader)',gradientBlue:'var(--colors-dark-gradientBlue)',gradientViolet:'var(--colors-dark-gradientViolet)',gradientVioletAlt:'var(--colors-dark-gradientVioletAlt)',gradientGold:'var(--colors-dark-gradientGold)',gradientBold:'var(--colors-dark-gradientBold)'},white:'var(--colors-white)',failure:'var(--colors-failure)',failure33:'var(--colors-failure33)',primary:'var(--colors-primary)',primary0f:'var(--colors-primary0f)',primary3D:'var(--colors-primary3D)',primaryBright:'var(--colors-primaryBright)',primaryDark:'var(--colors-primaryDark)',success:'var(--colors-success)',success19:'var(--colors-success19)',warning:'var(--colors-warning)',warning2D:'var(--colors-warning2D)',warning33:'var(--colors-warning33)',binance:'var(--colors-binance)',overlay:'var(--colors-overlay)',gold:'var(--colors-gold)',silver:'var(--colors-silver)',bronze:'var(--colors-bronze)',secondary:'var(--colors-secondary)',secondary80:'var(--colors-secondary80)',background:'var(--colors-background)',backgroundDisabled:'var(--colors-backgroundDisabled)',backgroundAlt:'var(--colors-backgroundAlt)',backgroundAlt2:'var(--colors-backgroundAlt2)',cardBorder:'var(--colors-cardBorder)',contrast:'var(--colors-contrast)',dropdown:'var(--colors-dropdown)',dropdownDeep:'var(--colors-dropdownDeep)',invertedContrast:'var(--colors-invertedContrast)',input:'var(--colors-input)',inputSecondary:'var(--colors-inputSecondary)',tertiary:'var(--colors-tertiary)',text:'var(--colors-text)',text99:'var(--colors-text99)',textDisabled:'var(--colors-textDisabled)',textSubtle:'var(--colors-textSubtle)',disabled:'var(--colors-disabled)',gradientBubblegum:'var(--colors-gradientBubblegum)',gradientInverseBubblegum:'var(--colors-gradientInverseBubblegum)',gradientCardHeader:'var(--colors-gradientCardHeader)',gradientBlue:'var(--colors-gradientBlue)',gradientViolet:'var(--colors-gradientViolet)',gradientVioletAlt:'var(--colors-gradientVioletAlt)',gradientGold:'var(--colors-gradientGold)',gradientBold:'var(--colors-gradientBold)'},fonts:{normal:'var(--fonts-normal)',mono:'var(--fonts-mono)'},space:{'0':'var(--space-0)','1':'var(--space-1)','2':'var(--space-2)','3':'var(--space-3)','4':'var(--space-4)','5':'var(--space-5)','6':'var(--space-6)','7':'var(--space-7)','0px':'var(--space-0px)','1rem':'var(--space-1rem)','1px':'var(--space-1px)','2px':'var(--space-2px)','4px':'var(--space-4px)','8px':'var(--space-8px)','12px':'var(--space-12px)','14px':'var(--space-14px)','16px':'var(--space-16px)','20px':'var(--space-20px)','24px':'var(--space-24px)','32px':'var(--space-32px)','48px':'var(--space-48px)','56px':'var(--space-56px)','64px':'var(--space-64px)'},borderWidths:{'0':'var(--borderWidths-0)','1':'var(--borderWidths-1)','2':'var(--borderWidths-2)'},radii:{'0':'var(--radii-0)','8px':'var(--radii-8px)','12px':'var(--radii-12px)','20px':'var(--radii-20px)',small:'var(--radii-small)','default':'var(--radii-default)',card:'var(--radii-card)',circle:'var(--radii-circle)'},fontSizes:{'10px':'var(--fontSizes-10px)','12px':'var(--fontSizes-12px)','16px':'var(--fontSizes-16px)','14px':'var(--fontSizes-14px)','20px':'var(--fontSizes-20px)','40px':'var(--fontSizes-40px)'},shadows:{level1:'var(--shadows-level1)',active:'var(--shadows-active)',success:'var(--shadows-success)',warning:'var(--shadows-warning)',danger:'var(--shadows-danger)',focus:'var(--shadows-focus)',inset:'var(--shadows-inset)',tooltip:'var(--shadows-tooltip)'}};","export const breakpoints = {\n xs: 370,\n sm: 576,\n md: 852,\n lg: 968,\n xl: 1080,\n xxl: 1200,\n} as const;\n\nexport const mediaQueries = {\n xs: ``,\n sm: `@media screen and (min-width: ${breakpoints.sm}px)`,\n md: `@media screen and (min-width: ${breakpoints.md}px)`,\n lg: `@media screen and (min-width: ${breakpoints.lg}px)`,\n xl: `@media screen and (min-width: ${breakpoints.xl}px)`,\n xxl: `@media screen and (min-width: ${breakpoints.xxl}px)`,\n};\n\nexport type Breakpoint = keyof typeof breakpoints;\n\nexport const breakpointNames = Object.keys(breakpoints) as Breakpoint[];\n","import { StyleRule } from \"@vanilla-extract/css\";\nimport { Breakpoint, breakpoints } from \"./breakpoints\";\n\ntype CSSProps = Omit;\n\nconst makeMediaQuery = (breakpoint: Breakpoint) => (styles?: CSSProps) =>\n !styles || Object.keys(styles).length === 0\n ? {}\n : {\n [`screen and (min-width: ${breakpoints[breakpoint]}px)`]: styles,\n };\n\nconst mediaQuery = {\n sm: makeMediaQuery(\"sm\"),\n md: makeMediaQuery(\"md\"),\n lg: makeMediaQuery(\"lg\"),\n xl: makeMediaQuery(\"xl\"),\n xxl: makeMediaQuery(\"xxl\"),\n};\n\ntype ResponsiveStyle = {\n xs?: CSSProps;\n sm?: CSSProps;\n md?: CSSProps;\n lg?: CSSProps;\n xl?: CSSProps;\n xxl?: CSSProps;\n};\n\nexport const responsiveStyle = ({ xs, sm, md, lg, xl, xxl }: ResponsiveStyle): StyleRule => {\n const { \"@media\": _, ...xsStyle } = (xs ?? {}) as any;\n return {\n ...xsStyle,\n ...(sm || md || lg || xl\n ? {\n \"@media\": {\n ...mediaQuery.sm(sm ?? {}),\n ...mediaQuery.md(md ?? {}),\n ...mediaQuery.lg(lg ?? {}),\n ...mediaQuery.xl(xl ?? {}),\n ...mediaQuery.xxl(xxl ?? {}),\n },\n }\n : {}),\n };\n};\n","import \"../packages/uikit/src/css/reset.css.ts.vanilla.css!=!../../../../node_modules/@vanilla-extract/webpack-plugin/virtualFileLoader/dist/vanilla-extract-webpack-plugin-virtualFileLoader.cjs.js?{\\\"fileName\\\":\\\"../packages/uikit/src/css/reset.css.ts.vanilla.css\\\",\\\"source\\\":\\\"Ll8xeGE1ejBxMCB7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7CiAgYm9yZGVyOiAwOwogIG1pbi13aWR0aDogMDsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIGZvbnQtc2l6ZTogMTAwJTsKICBmb250OiBpbmhlcml0OwogIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKfQouXzF4YTV6MHExIHsKICBiYWNrZ3JvdW5kOiAwOwogIGJvcmRlcjogMDsKICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7Cn0KLl8xeGE1ejBxMiB7CiAgZGlzcGxheTogYmxvY2s7Cn0KLl8xeGE1ejBxMyB7CiAgbGluZS1oZWlnaHQ6IDE7Cn0KLl8xeGE1ejBxNCB7CiAgbGlzdC1zdHlsZTogbm9uZTsKfQouXzF4YTV6MHE1IHsKICBxdW90ZXM6IG5vbmU7Cn0KLl8xeGE1ejBxNTpiZWZvcmUsIC5fMXhhNXowcTU6YWZ0ZXIgewogIGNvbnRlbnQ6ICcnOwp9Ci5fMXhhNXowcTYgewogIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgYm9yZGVyLXNwYWNpbmc6IDA7Cn0KLl8xeGE1ejBxNyB7CiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgY29sb3I6IGluaGVyaXQ7Cn0KLl8xeGE1ejBxOCB7CiAgYXBwZWFyYW5jZTogbm9uZTsKfQouXzF4YTV6MHE4OjotbXMtZXhwYW5kIHsKICBkaXNwbGF5OiBub25lOwp9\\\"}!../../../../node_modules/@vanilla-extract/webpack-plugin/extracted.js\"\nexport var base = '_1xa5z0q0';\nexport var button = '_1xa5z0q1';\nexport var element = {article:'_1xa5z0q2',aside:'_1xa5z0q2',button:'_1xa5z0q1',details:'_1xa5z0q2',figcaption:'_1xa5z0q2',figure:'_1xa5z0q2',footer:'_1xa5z0q2',header:'_1xa5z0q2',hgroup:'_1xa5z0q2',menu:'_1xa5z0q2',nav:'_1xa5z0q2',section:'_1xa5z0q2',textarea:'_1xa5z0q2',ul:'_1xa5z0q4',ol:'_1xa5z0q4',blockquote:'_1xa5z0q5',q:'_1xa5z0q5',body:'_1xa5z0q3',table:'_1xa5z0q6',mark:'_1xa5z0q7',select:'_1xa5z0q8'};","import \"../packages/uikit/src/css/vars.css.ts.vanilla.css!=!../../../../node_modules/@vanilla-extract/webpack-plugin/virtualFileLoader/dist/vanilla-extract-webpack-plugin-virtualFileLoader.cjs.js?{\\\"fileName\\\":\\\"../packages/uikit/src/css/vars.css.ts.vanilla.css\\\",\\\"source\\\":\\\"#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\\\"}!../../../../node_modules/@vanilla-extract/webpack-plugin/extracted.js\"\nimport \"../packages/uikit/src/css/sprinkles.css.ts.vanilla.css!=!../../../../node_modules/@vanilla-extract/webpack-plugin/virtualFileLoader/dist/vanilla-extract-webpack-plugin-virtualFileLoader.cjs.js?{\\\"fileName\\\":\\\"../packages/uikit/src/css/sprinkles.css.ts.vanilla.css\\\",\\\"source\\\":\\\"#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\\\"}!../../../../node_modules/@vanilla-extract/webpack-plugin/extracted.js\"\nimport { createSprinkles as _ad221 } from '@vanilla-extract/sprinkles/createRuntimeSprinkles';\nexport var sprinkles = _ad221((function(){var x={conditions:{defaultCondition:'xs',conditionNames:['xs','sm','md','lg','xl','xxl'],responsiveArray:['xs','sm','md','lg','xl','xxl']},styles:{borderLeftRadius:{mappings:['borderBottomLeftRadius','borderTopLeftRadius']},borderRightRadius:{mappings:['borderBottomRightRadius','borderTopRightRadius']},borderTopRadius:{mappings:['borderTopLeftRadius','borderTopRightRadius']},borderBottomRadius:{mappings:['borderBottomLeftRadius','borderBottomRightRadius']},mt:{mappings:['marginTop']},mb:{mappings:['marginBottom']},m:{mappings:['margin']},ml:{mappings:['marginLeft']},mr:{mappings:['marginRight']},marginX:{mappings:['marginLeft','marginRight']},mx:{mappings:['marginLeft','marginRight']},marginY:{mappings:['marginTop','marginBottom']},my:{mappings:['marginTop','marginBottom']},pl:{mappings:['paddingLeft']},pr:{mappings:['paddingRight']},pt:{mappings:['paddingTop']},pb:{mappings:['paddingBottom']},p:{mappings:['padding']},paddingX:{mappings:['paddingLeft','paddingRight']},px:{mappings:['paddingLeft','paddingRight']},paddingY:{mappings:['paddingTop','paddingBottom']},py:{mappings:['paddingTop','paddingBottom']},size:{mappings:['width','height']},display:{values:{block:{conditions:{xs:'bd70ut0',sm:'bd70ut1',md:'bd70ut2',lg:'bd70ut3',xl:'bd70ut4',xxl:'bd70ut5'},defaultClass:'bd70ut0'},flex:{conditions:{xs:'bd70ut6',sm:'bd70ut7',md:'bd70ut8',lg:'bd70ut9',xl:'bd70uta',xxl:'bd70utb'},defaultClass:'bd70ut6'},grid:{conditions:{xs:'bd70utc',sm:'bd70utd',md:'bd70ute',lg:'bd70utf',xl:'bd70utg',xxl:'bd70uth'},defaultClass:'bd70utc'},inline:{conditions:{xs:'bd70uti',sm:'bd70utj',md:'bd70utk',lg:'bd70utl',xl:'bd70utm',xxl:'bd70utn'},defaultClass:'bd70uti'},'inline-flex':{conditions:{xs:'bd70uto',sm:'bd70utp',md:'bd70utq',lg:'bd70utr',xl:'bd70uts',xxl:'bd70utt'},defaultClass:'bd70uto'},'inline-block':{conditions:{xs:'bd70utu',sm:'bd70utv',md:'bd70utw',lg:'bd70utx',xl:'bd70uty',xxl:'bd70utz'},defaultClass:'bd70utu'},none:{conditions:{xs:'bd70ut10',sm:'bd70ut11',md:'bd70ut12',lg:'bd70ut13',xl:'bd70ut14',xxl:'bd70ut15'},defaultClass:'bd70ut10'}},responsiveArray:undefined},flexDirection:{values:{column:{conditions:{xs:'bd70ut16',sm:'bd70ut17',md:'bd70ut18',lg:'bd70ut19',xl:'bd70ut1a',xxl:'bd70ut1b'},defaultClass:'bd70ut16'},row:{conditions:{xs:'bd70ut1c',sm:'bd70ut1d',md:'bd70ut1e',lg:'bd70ut1f',xl:'bd70ut1g',xxl:'bd70ut1h'},defaultClass:'bd70ut1c'},'column-reverse':{conditions:{xs:'bd70ut1i',sm:'bd70ut1j',md:'bd70ut1k',lg:'bd70ut1l',xl:'bd70ut1m',xxl:'bd70ut1n'},defaultClass:'bd70ut1i'}},responsiveArray:undefined},alignItems:{values:{center:{conditions:{xs:'bd70ut2i',sm:'bd70ut2j',md:'bd70ut2k',lg:'bd70ut2l',xl:'bd70ut2m',xxl:'bd70ut2n'},defaultClass:'bd70ut2i'},end:{conditions:{xs:'bd70ut1u',sm:'bd70ut1v',md:'bd70ut1w',lg:'bd70ut1x',xl:'bd70ut1y',xxl:'bd70ut1z'},defaultClass:'bd70ut1u'},baseLine:{conditions:{xs:'bd70ut20',sm:'bd70ut21',md:'bd70ut22',lg:'bd70ut23',xl:'bd70ut24',xxl:'bd70ut25'},defaultClass:'bd70ut20'},inherit:{conditions:{xs:'bd70ut26',sm:'bd70ut27',md:'bd70ut28',lg:'bd70ut29',xl:'bd70ut2a',xxl:'bd70ut2b'},defaultClass:'bd70ut26'},'flex-start':{conditions:{xs:'bd70ut2c',sm:'bd70ut2d',md:'bd70ut2e',lg:'bd70ut2f',xl:'bd70ut2g',xxl:'bd70ut2h'},defaultClass:'bd70ut2c'},start:{conditions:{xs:'bd70ut2o',sm:'bd70ut2p',md:'bd70ut2q',lg:'bd70ut2r',xl:'bd70ut2s',xxl:'bd70ut2t'},defaultClass:'bd70ut2o'},'flex-end':{conditions:{xs:'bd70ut2u',sm:'bd70ut2v',md:'bd70ut2w',lg:'bd70ut2x',xl:'bd70ut2y',xxl:'bd70ut2z'},defaultClass:'bd70ut2u'},stretch:{conditions:{xs:'bd70ut30',sm:'bd70ut31',md:'bd70ut32',lg:'bd70ut33',xl:'bd70ut34',xxl:'bd70ut35'},defaultClass:'bd70ut30'}},responsiveArray:undefined},alignSelf:{values:{'flex-start':{conditions:{xs:'bd70ut36',sm:'bd70ut37',md:'bd70ut38',lg:'bd70ut39',xl:'bd70ut3a',xxl:'bd70ut3b'},defaultClass:'bd70ut36'},center:{conditions:{xs:'bd70ut3c',sm:'bd70ut3d',md:'bd70ut3e',lg:'bd70ut3f',xl:'bd70ut3g',xxl:'bd70ut3h'},defaultClass:'bd70ut3c'},start:{conditions:{xs:'bd70ut3i',sm:'bd70ut3j',md:'bd70ut3k',lg:'bd70ut3l',xl:'bd70ut3m',xxl:'bd70ut3n'},defaultClass:'bd70ut3i'},'flex-end':{conditions:{xs:'bd70ut3o',sm:'bd70ut3p',md:'bd70ut3q',lg:'bd70ut3r',xl:'bd70ut3s',xxl:'bd70ut3t'},defaultClass:'bd70ut3o'},stretch:{conditions:{xs:'bd70ut3u',sm:'bd70ut3v',md:'bd70ut3w',lg:'bd70ut3x',xl:'bd70ut3y',xxl:'bd70ut3z'},defaultClass:'bd70ut3u'}},responsiveArray:undefined},flexWrap:{values:{wrap:{conditions:{xs:'bd70ut40',sm:'bd70ut41',md:'bd70ut42',lg:'bd70ut43',xl:'bd70ut44',xxl:'bd70ut45'},defaultClass:'bd70ut40'},nowrap:{conditions:{xs:'bd70ut46',sm:'bd70ut47',md:'bd70ut48',lg:'bd70ut49',xl:'bd70ut4a',xxl:'bd70ut4b'},defaultClass:'bd70ut46'}},responsiveArray:undefined},flexGrow:{values:{'1':{conditions:{xs:'bd70ut4c',sm:'bd70ut4d',md:'bd70ut4e',lg:'bd70ut4f',xl:'bd70ut4g',xxl:'bd70ut4h'},defaultClass:'bd70ut4c'}},responsiveArray:undefined},overflow:{values:{auto:{conditions:{xs:'bd70ut4i',sm:'bd70ut4j',md:'bd70ut4k',lg:'bd70ut4l',xl:'bd70ut4m',xxl:'bd70ut4n'},defaultClass:'bd70ut4i'},hidden:{conditions:{xs:'bd70ut4o',sm:'bd70ut4p',md:'bd70ut4q',lg:'bd70ut4r',xl:'bd70ut4s',xxl:'bd70ut4t'},defaultClass:'bd70ut4o'},scroll:{conditions:{xs:'bd70ut4u',sm:'bd70ut4v',md:'bd70ut4w',lg:'bd70ut4x',xl:'bd70ut4y',xxl:'bd70ut4z'},defaultClass:'bd70ut4u'},unset:{conditions:{xs:'bd70ut50',sm:'bd70ut51',md:'bd70ut52',lg:'bd70ut53',xl:'bd70ut54',xxl:'bd70ut55'},defaultClass:'bd70ut50'}},responsiveArray:undefined},overflowY:{values:{auto:{conditions:{xs:'bd70ut56',sm:'bd70ut57',md:'bd70ut58',lg:'bd70ut59',xl:'bd70ut5a',xxl:'bd70ut5b'},defaultClass:'bd70ut56'},hidden:{conditions:{xs:'bd70ut5c',sm:'bd70ut5d',md:'bd70ut5e',lg:'bd70ut5f',xl:'bd70ut5g',xxl:'bd70ut5h'},defaultClass:'bd70ut5c'},scroll:{conditions:{xs:'bd70ut5i',sm:'bd70ut5j',md:'bd70ut5k',lg:'bd70ut5l',xl:'bd70ut5m',xxl:'bd70ut5n'},defaultClass:'bd70ut5i'}},responsiveArray:undefined},overflowX:{values:{auto:{conditions:{xs:'bd70ut5o',sm:'bd70ut5p',md:'bd70ut5q',lg:'bd70ut5r',xl:'bd70ut5s',xxl:'bd70ut5t'},defaultClass:'bd70ut5o'},hidden:{conditions:{xs:'bd70ut5u',sm:'bd70ut5v',md:'bd70ut5w',lg:'bd70ut5x',xl:'bd70ut5y',xxl:'bd70ut5z'},defaultClass:'bd70ut5u'},scroll:{conditions:{xs:'bd70ut60',sm:'bd70ut61',md:'bd70ut62',lg:'bd70ut63',xl:'bd70ut64',xxl:'bd70ut65'},defaultClass:'bd70ut60'}},responsiveArray:undefined},position:{values:{absolute:{conditions:{xs:'bd70ut66',sm:'bd70ut67',md:'bd70ut68',lg:'bd70ut69',xl:'bd70ut6a',xxl:'bd70ut6b'},defaultClass:'bd70ut66'},fixed:{conditions:{xs:'bd70ut6c',sm:'bd70ut6d',md:'bd70ut6e',lg:'bd70ut6f',xl:'bd70ut6g',xxl:'bd70ut6h'},defaultClass:'bd70ut6c'},relative:{conditions:{xs:'bd70ut6i',sm:'bd70ut6j',md:'bd70ut6k',lg:'bd70ut6l',xl:'bd70ut6m',xxl:'bd70ut6n'},defaultClass:'bd70ut6i'},sticky:{conditions:{xs:'bd70ut6o',sm:'bd70ut6p',md:'bd70ut6q',lg:'bd70ut6r',xl:'bd70ut6s',xxl:'bd70ut6t'},defaultClass:'bd70ut6o'}},responsiveArray:undefined},textAlign:{values:{center:{conditions:{xs:'bd70ut6u',sm:'bd70ut6v',md:'bd70ut6w',lg:'bd70ut6x',xl:'bd70ut6y',xxl:'bd70ut6z'},defaultClass:'bd70ut6u'},left:{conditions:{xs:'bd70ut70',sm:'bd70ut71',md:'bd70ut72',lg:'bd70ut73',xl:'bd70ut74',xxl:'bd70ut75'},defaultClass:'bd70ut70'},right:{conditions:{xs:'bd70ut76',sm:'bd70ut77',md:'bd70ut78',lg:'bd70ut79',xl:'bd70ut7a',xxl:'bd70ut7b'},defaultClass:'bd70ut76'}},responsiveArray:undefined},justifyContent:{values:{'flex-start':{conditions:{xs:'bd70ut7c',sm:'bd70ut7d',md:'bd70ut7e',lg:'bd70ut7f',xl:'bd70ut7g',xxl:'bd70ut7h'},defaultClass:'bd70ut7c'},center:{conditions:{xs:'bd70ut7i',sm:'bd70ut7j',md:'bd70ut7k',lg:'bd70ut7l',xl:'bd70ut7m',xxl:'bd70ut7n'},defaultClass:'bd70ut7i'},start:{conditions:{xs:'bd70ut7o',sm:'bd70ut7p',md:'bd70ut7q',lg:'bd70ut7r',xl:'bd70ut7s',xxl:'bd70ut7t'},defaultClass:'bd70ut7o'},'flex-end':{conditions:{xs:'bd70ut7u',sm:'bd70ut7v',md:'bd70ut7w',lg:'bd70ut7x',xl:'bd70ut7y',xxl:'bd70ut7z'},defaultClass:'bd70ut7u'},stretch:{conditions:{xs:'bd70ut80',sm:'bd70ut81',md:'bd70ut82',lg:'bd70ut83',xl:'bd70ut84',xxl:'bd70ut85'},defaultClass:'bd70ut80'},'space-around':{conditions:{xs:'bd70ut86',sm:'bd70ut87',md:'bd70ut88',lg:'bd70ut89',xl:'bd70ut8a',xxl:'bd70ut8b'},defaultClass:'bd70ut86'},'space-between':{conditions:{xs:'bd70ut8c',sm:'bd70ut8d',md:'bd70ut8e',lg:'bd70ut8f',xl:'bd70ut8g',xxl:'bd70ut8h'},defaultClass:'bd70ut8c'}},responsiveArray:undefined},justifyItems:{values:{'flex-start':{conditions:{xs:'bd70ut8i',sm:'bd70ut8j',md:'bd70ut8k',lg:'bd70ut8l',xl:'bd70ut8m',xxl:'bd70ut8n'},defaultClass:'bd70ut8i'},center:{conditions:{xs:'bd70ut8o',sm:'bd70ut8p',md:'bd70ut8q',lg:'bd70ut8r',xl:'bd70ut8s',xxl:'bd70ut8t'},defaultClass:'bd70ut8o'},start:{conditions:{xs:'bd70ut8u',sm:'bd70ut8v',md:'bd70ut8w',lg:'bd70ut8x',xl:'bd70ut8y',xxl:'bd70ut8z'},defaultClass:'bd70ut8u'},'flex-end':{conditions:{xs:'bd70ut90',sm:'bd70ut91',md:'bd70ut92',lg:'bd70ut93',xl:'bd70ut94',xxl:'bd70ut95'},defaultClass:'bd70ut90'},stretch:{conditions:{xs:'bd70ut96',sm:'bd70ut97',md:'bd70ut98',lg:'bd70ut99',xl:'bd70ut9a',xxl:'bd70ut9b'},defaultClass:'bd70ut96'},'space-around':{conditions:{xs:'bd70ut9c',sm:'bd70ut9d',md:'bd70ut9e',lg:'bd70ut9f',xl:'bd70ut9g',xxl:'bd70ut9h'},defaultClass:'bd70ut9c'},'space-between':{conditions:{xs:'bd70ut9i',sm:'bd70ut9j',md:'bd70ut9k',lg:'bd70ut9l',xl:'bd70ut9m',xxl:'bd70ut9n'},defaultClass:'bd70ut9i'}},responsiveArray:undefined},justifySelf:{values:{'flex-start':{conditions:{xs:'bd70ut9o',sm:'bd70ut9p',md:'bd70ut9q',lg:'bd70ut9r',xl:'bd70ut9s',xxl:'bd70ut9t'},defaultClass:'bd70ut9o'},center:{conditions:{xs:'bd70ut9u',sm:'bd70ut9v',md:'bd70ut9w',lg:'bd70ut9x',xl:'bd70ut9y',xxl:'bd70ut9z'},defaultClass:'bd70ut9u'},start:{conditions:{xs:'bd70uta0',sm:'bd70uta1',md:'bd70uta2',lg:'bd70uta3',xl:'bd70uta4',xxl:'bd70uta5'},defaultClass:'bd70uta0'},'flex-end':{conditions:{xs:'bd70uta6',sm:'bd70uta7',md:'bd70uta8',lg:'bd70uta9',xl:'bd70utaa',xxl:'bd70utab'},defaultClass:'bd70uta6'},stretch:{conditions:{xs:'bd70utac',sm:'bd70utad',md:'bd70utae',lg:'bd70utaf',xl:'bd70utag',xxl:'bd70utah'},defaultClass:'bd70utac'}},responsiveArray:undefined},inset:{values:{'0px':{conditions:{xs:'bd70utai',sm:'bd70utaj',md:'bd70utak',lg:'bd70utal',xl:'bd70utam',xxl:'bd70utan'},defaultClass:'bd70utai'}},responsiveArray:undefined},height:{values:{'0':{conditions:{xs:'bd70utao',sm:'bd70utap',md:'bd70utaq',lg:'bd70utar',xl:'bd70utas',xxl:'bd70utat'},defaultClass:'bd70utao'},'1':{conditions:{xs:'bd70utau',sm:'bd70utav',md:'bd70utaw',lg:'bd70utax',xl:'bd70utay',xxl:'bd70utaz'},defaultClass:'bd70utau'},'2':{conditions:{xs:'bd70utb0',sm:'bd70utb1',md:'bd70utb2',lg:'bd70utb3',xl:'bd70utb4',xxl:'bd70utb5'},defaultClass:'bd70utb0'},'3':{conditions:{xs:'bd70utb6',sm:'bd70utb7',md:'bd70utb8',lg:'bd70utb9',xl:'bd70utba',xxl:'bd70utbb'},defaultClass:'bd70utb6'},'4':{conditions:{xs:'bd70utbc',sm:'bd70utbd',md:'bd70utbe',lg:'bd70utbf',xl:'bd70utbg',xxl:'bd70utbh'},defaultClass:'bd70utbc'},'5':{conditions:{xs:'bd70utbi',sm:'bd70utbj',md:'bd70utbk',lg:'bd70utbl',xl:'bd70utbm',xxl:'bd70utbn'},defaultClass:'bd70utbi'},'6':{conditions:{xs:'bd70utbo',sm:'bd70utbp',md:'bd70utbq',lg:'bd70utbr',xl:'bd70utbs',xxl:'bd70utbt'},defaultClass:'bd70utbo'},'7':{conditions:{xs:'bd70utbu',sm:'bd70utbv',md:'bd70utbw',lg:'bd70utbx',xl:'bd70utby',xxl:'bd70utbz'},defaultClass:'bd70utbu'},'0px':{conditions:{xs:'bd70utc0',sm:'bd70utc1',md:'bd70utc2',lg:'bd70utc3',xl:'bd70utc4',xxl:'bd70utc5'},defaultClass:'bd70utc0'},'1rem':{conditions:{xs:'bd70utc6',sm:'bd70utc7',md:'bd70utc8',lg:'bd70utc9',xl:'bd70utca',xxl:'bd70utcb'},defaultClass:'bd70utc6'},'1px':{conditions:{xs:'bd70utcc',sm:'bd70utcd',md:'bd70utce',lg:'bd70utcf',xl:'bd70utcg',xxl:'bd70utch'},defaultClass:'bd70utcc'},'2px':{conditions:{xs:'bd70utci',sm:'bd70utcj',md:'bd70utck',lg:'bd70utcl',xl:'bd70utcm',xxl:'bd70utcn'},defaultClass:'bd70utci'},'4px':{conditions:{xs:'bd70utco',sm:'bd70utcp',md:'bd70utcq',lg:'bd70utcr',xl:'bd70utcs',xxl:'bd70utct'},defaultClass:'bd70utco'},'8px':{conditions:{xs:'bd70utcu',sm:'bd70utcv',md:'bd70utcw',lg:'bd70utcx',xl:'bd70utcy',xxl:'bd70utcz'},defaultClass:'bd70utcu'},'12px':{conditions:{xs:'bd70utd0',sm:'bd70utd1',md:'bd70utd2',lg:'bd70utd3',xl:'bd70utd4',xxl:'bd70utd5'},defaultClass:'bd70utd0'},'14px':{conditions:{xs:'bd70utd6',sm:'bd70utd7',md:'bd70utd8',lg:'bd70utd9',xl:'bd70utda',xxl:'bd70utdb'},defaultClass:'bd70utd6'},'16px':{conditions:{xs:'bd70utdc',sm:'bd70utdd',md:'bd70utde',lg:'bd70utdf',xl:'bd70utdg',xxl:'bd70utdh'},defaultClass:'bd70utdc'},'20px':{conditions:{xs:'bd70utdi',sm:'bd70utdj',md:'bd70utdk',lg:'bd70utdl',xl:'bd70utdm',xxl:'bd70utdn'},defaultClass:'bd70utdi'},'24px':{conditions:{xs:'bd70utdo',sm:'bd70utdp',md:'bd70utdq',lg:'bd70utdr',xl:'bd70utds',xxl:'bd70utdt'},defaultClass:'bd70utdo'},'32px':{conditions:{xs:'bd70utdu',sm:'bd70utdv',md:'bd70utdw',lg:'bd70utdx',xl:'bd70utdy',xxl:'bd70utdz'},defaultClass:'bd70utdu'},'48px':{conditions:{xs:'bd70ute0',sm:'bd70ute1',md:'bd70ute2',lg:'bd70ute3',xl:'bd70ute4',xxl:'bd70ute5'},defaultClass:'bd70ute0'},'56px':{conditions:{xs:'bd70ute6',sm:'bd70ute7',md:'bd70ute8',lg:'bd70ute9',xl:'bd70utea',xxl:'bd70uteb'},defaultClass:'bd70ute6'},'64px':{conditions:{xs:'bd70utec',sm:'bd70uted',md:'bd70utee',lg:'bd70utef',xl:'bd70uteg',xxl:'bd70uteh'},defaultClass:'bd70utec'},'100%':{conditions:{xs:'bd70utei',sm:'bd70utej',md:'bd70utek',lg:'bd70utel',xl:'bd70utem',xxl:'bd70uten'},defaultClass:'bd70utei'},auto:{conditions:{xs:'bd70uteo',sm:'bd70utep',md:'bd70uteq',lg:'bd70uter',xl:'bd70utes',xxl:'bd70utet'},defaultClass:'bd70uteo'},'fit-content':{conditions:{xs:'bd70uteu',sm:'bd70utev',md:'bd70utew',lg:'bd70utex',xl:'bd70utey',xxl:'bd70utez'},defaultClass:'bd70uteu'},'420px':{conditions:{xs:'bd70utf0',sm:'bd70utf1',md:'bd70utf2',lg:'bd70utf3',xl:'bd70utf4',xxl:'bd70utf5'},defaultClass:'bd70utf0'},screenSm:{conditions:{xs:'bd70utf6',sm:'bd70utf7',md:'bd70utf8',lg:'bd70utf9',xl:'bd70utfa',xxl:'bd70utfb'},defaultClass:'bd70utf6'},screenMd:{conditions:{xs:'bd70utfc',sm:'bd70utfd',md:'bd70utfe',lg:'bd70utff',xl:'bd70utfg',xxl:'bd70utfh'},defaultClass:'bd70utfc'},screenLg:{conditions:{xs:'bd70utfi',sm:'bd70utfj',md:'bd70utfk',lg:'bd70utfl',xl:'bd70utfm',xxl:'bd70utfn'},defaultClass:'bd70utfi'},screenXl:{conditions:{xs:'bd70utfo',sm:'bd70utfp',md:'bd70utfq',lg:'bd70utfr',xl:'bd70utfs',xxl:'bd70utft'},defaultClass:'bd70utfo'},'100vh':{conditions:{xs:'bd70utfu',sm:'bd70utfv',md:'bd70utfw',lg:'bd70utfx',xl:'bd70utfy',xxl:'bd70utfz'},defaultClass:'bd70utfu'}},responsiveArray:undefined},marginBottom:{values:{'0':{conditions:{xs:'bd70utg0',sm:'bd70utg1',md:'bd70utg2',lg:'bd70utg3',xl:'bd70utg4',xxl:'bd70utg5'},defaultClass:'bd70utg0'},'1':{conditions:{xs:'bd70utg6',sm:'bd70utg7',md:'bd70utg8',lg:'bd70utg9',xl:'bd70utga',xxl:'bd70utgb'},defaultClass:'bd70utg6'},'2':{conditions:{xs:'bd70utgc',sm:'bd70utgd',md:'bd70utge',lg:'bd70utgf',xl:'bd70utgg',xxl:'bd70utgh'},defaultClass:'bd70utgc'},'3':{conditions:{xs:'bd70utgi',sm:'bd70utgj',md:'bd70utgk',lg:'bd70utgl',xl:'bd70utgm',xxl:'bd70utgn'},defaultClass:'bd70utgi'},'4':{conditions:{xs:'bd70utgo',sm:'bd70utgp',md:'bd70utgq',lg:'bd70utgr',xl:'bd70utgs',xxl:'bd70utgt'},defaultClass:'bd70utgo'},'5':{conditions:{xs:'bd70utgu',sm:'bd70utgv',md:'bd70utgw',lg:'bd70utgx',xl:'bd70utgy',xxl:'bd70utgz'},defaultClass:'bd70utgu'},'6':{conditions:{xs:'bd70uth0',sm:'bd70uth1',md:'bd70uth2',lg:'bd70uth3',xl:'bd70uth4',xxl:'bd70uth5'},defaultClass:'bd70uth0'},'7':{conditions:{xs:'bd70uth6',sm:'bd70uth7',md:'bd70uth8',lg:'bd70uth9',xl:'bd70utha',xxl:'bd70uthb'},defaultClass:'bd70uth6'},'0px':{conditions:{xs:'bd70uthc',sm:'bd70uthd',md:'bd70uthe',lg:'bd70uthf',xl:'bd70uthg',xxl:'bd70uthh'},defaultClass:'bd70uthc'},'1rem':{conditions:{xs:'bd70uthi',sm:'bd70uthj',md:'bd70uthk',lg:'bd70uthl',xl:'bd70uthm',xxl:'bd70uthn'},defaultClass:'bd70uthi'},'1px':{conditions:{xs:'bd70utho',sm:'bd70uthp',md:'bd70uthq',lg:'bd70uthr',xl:'bd70uths',xxl:'bd70utht'},defaultClass:'bd70utho'},'2px':{conditions:{xs:'bd70uthu',sm:'bd70uthv',md:'bd70uthw',lg:'bd70uthx',xl:'bd70uthy',xxl:'bd70uthz'},defaultClass:'bd70uthu'},'4px':{conditions:{xs:'bd70uti0',sm:'bd70uti1',md:'bd70uti2',lg:'bd70uti3',xl:'bd70uti4',xxl:'bd70uti5'},defaultClass:'bd70uti0'},'8px':{conditions:{xs:'bd70uti6',sm:'bd70uti7',md:'bd70uti8',lg:'bd70uti9',xl:'bd70utia',xxl:'bd70utib'},defaultClass:'bd70uti6'},'12px':{conditions:{xs:'bd70utic',sm:'bd70utid',md:'bd70utie',lg:'bd70utif',xl:'bd70utig',xxl:'bd70utih'},defaultClass:'bd70utic'},'14px':{conditions:{xs:'bd70utii',sm:'bd70utij',md:'bd70utik',lg:'bd70util',xl:'bd70utim',xxl:'bd70utin'},defaultClass:'bd70utii'},'16px':{conditions:{xs:'bd70utio',sm:'bd70utip',md:'bd70utiq',lg:'bd70utir',xl:'bd70utis',xxl:'bd70utit'},defaultClass:'bd70utio'},'20px':{conditions:{xs:'bd70utiu',sm:'bd70utiv',md:'bd70utiw',lg:'bd70utix',xl:'bd70utiy',xxl:'bd70utiz'},defaultClass:'bd70utiu'},'24px':{conditions:{xs:'bd70utj0',sm:'bd70utj1',md:'bd70utj2',lg:'bd70utj3',xl:'bd70utj4',xxl:'bd70utj5'},defaultClass:'bd70utj0'},'32px':{conditions:{xs:'bd70utj6',sm:'bd70utj7',md:'bd70utj8',lg:'bd70utj9',xl:'bd70utja',xxl:'bd70utjb'},defaultClass:'bd70utj6'},'48px':{conditions:{xs:'bd70utjc',sm:'bd70utjd',md:'bd70utje',lg:'bd70utjf',xl:'bd70utjg',xxl:'bd70utjh'},defaultClass:'bd70utjc'},'56px':{conditions:{xs:'bd70utji',sm:'bd70utjj',md:'bd70utjk',lg:'bd70utjl',xl:'bd70utjm',xxl:'bd70utjn'},defaultClass:'bd70utji'},'64px':{conditions:{xs:'bd70utjo',sm:'bd70utjp',md:'bd70utjq',lg:'bd70utjr',xl:'bd70utjs',xxl:'bd70utjt'},defaultClass:'bd70utjo'},auto:{conditions:{xs:'bd70utju',sm:'bd70utjv',md:'bd70utjw',lg:'bd70utjx',xl:'bd70utjy',xxl:'bd70utjz'},defaultClass:'bd70utju'}},responsiveArray:undefined},marginLeft:{values:{'0':{conditions:{xs:'bd70utk0',sm:'bd70utk1',md:'bd70utk2',lg:'bd70utk3',xl:'bd70utk4',xxl:'bd70utk5'},defaultClass:'bd70utk0'},'1':{conditions:{xs:'bd70utk6',sm:'bd70utk7',md:'bd70utk8',lg:'bd70utk9',xl:'bd70utka',xxl:'bd70utkb'},defaultClass:'bd70utk6'},'2':{conditions:{xs:'bd70utkc',sm:'bd70utkd',md:'bd70utke',lg:'bd70utkf',xl:'bd70utkg',xxl:'bd70utkh'},defaultClass:'bd70utkc'},'3':{conditions:{xs:'bd70utki',sm:'bd70utkj',md:'bd70utkk',lg:'bd70utkl',xl:'bd70utkm',xxl:'bd70utkn'},defaultClass:'bd70utki'},'4':{conditions:{xs:'bd70utko',sm:'bd70utkp',md:'bd70utkq',lg:'bd70utkr',xl:'bd70utks',xxl:'bd70utkt'},defaultClass:'bd70utko'},'5':{conditions:{xs:'bd70utku',sm:'bd70utkv',md:'bd70utkw',lg:'bd70utkx',xl:'bd70utky',xxl:'bd70utkz'},defaultClass:'bd70utku'},'6':{conditions:{xs:'bd70utl0',sm:'bd70utl1',md:'bd70utl2',lg:'bd70utl3',xl:'bd70utl4',xxl:'bd70utl5'},defaultClass:'bd70utl0'},'7':{conditions:{xs:'bd70utl6',sm:'bd70utl7',md:'bd70utl8',lg:'bd70utl9',xl:'bd70utla',xxl:'bd70utlb'},defaultClass:'bd70utl6'},'0px':{conditions:{xs:'bd70utlc',sm:'bd70utld',md:'bd70utle',lg:'bd70utlf',xl:'bd70utlg',xxl:'bd70utlh'},defaultClass:'bd70utlc'},'1rem':{conditions:{xs:'bd70utli',sm:'bd70utlj',md:'bd70utlk',lg:'bd70utll',xl:'bd70utlm',xxl:'bd70utln'},defaultClass:'bd70utli'},'1px':{conditions:{xs:'bd70utlo',sm:'bd70utlp',md:'bd70utlq',lg:'bd70utlr',xl:'bd70utls',xxl:'bd70utlt'},defaultClass:'bd70utlo'},'2px':{conditions:{xs:'bd70utlu',sm:'bd70utlv',md:'bd70utlw',lg:'bd70utlx',xl:'bd70utly',xxl:'bd70utlz'},defaultClass:'bd70utlu'},'4px':{conditions:{xs:'bd70utm0',sm:'bd70utm1',md:'bd70utm2',lg:'bd70utm3',xl:'bd70utm4',xxl:'bd70utm5'},defaultClass:'bd70utm0'},'8px':{conditions:{xs:'bd70utm6',sm:'bd70utm7',md:'bd70utm8',lg:'bd70utm9',xl:'bd70utma',xxl:'bd70utmb'},defaultClass:'bd70utm6'},'12px':{conditions:{xs:'bd70utmc',sm:'bd70utmd',md:'bd70utme',lg:'bd70utmf',xl:'bd70utmg',xxl:'bd70utmh'},defaultClass:'bd70utmc'},'14px':{conditions:{xs:'bd70utmi',sm:'bd70utmj',md:'bd70utmk',lg:'bd70utml',xl:'bd70utmm',xxl:'bd70utmn'},defaultClass:'bd70utmi'},'16px':{conditions:{xs:'bd70utmo',sm:'bd70utmp',md:'bd70utmq',lg:'bd70utmr',xl:'bd70utms',xxl:'bd70utmt'},defaultClass:'bd70utmo'},'20px':{conditions:{xs:'bd70utmu',sm:'bd70utmv',md:'bd70utmw',lg:'bd70utmx',xl:'bd70utmy',xxl:'bd70utmz'},defaultClass:'bd70utmu'},'24px':{conditions:{xs:'bd70utn0',sm:'bd70utn1',md:'bd70utn2',lg:'bd70utn3',xl:'bd70utn4',xxl:'bd70utn5'},defaultClass:'bd70utn0'},'32px':{conditions:{xs:'bd70utn6',sm:'bd70utn7',md:'bd70utn8',lg:'bd70utn9',xl:'bd70utna',xxl:'bd70utnb'},defaultClass:'bd70utn6'},'48px':{conditions:{xs:'bd70utnc',sm:'bd70utnd',md:'bd70utne',lg:'bd70utnf',xl:'bd70utng',xxl:'bd70utnh'},defaultClass:'bd70utnc'},'56px':{conditions:{xs:'bd70utni',sm:'bd70utnj',md:'bd70utnk',lg:'bd70utnl',xl:'bd70utnm',xxl:'bd70utnn'},defaultClass:'bd70utni'},'64px':{conditions:{xs:'bd70utno',sm:'bd70utnp',md:'bd70utnq',lg:'bd70utnr',xl:'bd70utns',xxl:'bd70utnt'},defaultClass:'bd70utno'},auto:{conditions:{xs:'bd70utnu',sm:'bd70utnv',md:'bd70utnw',lg:'bd70utnx',xl:'bd70utny',xxl:'bd70utnz'},defaultClass:'bd70utnu'}},responsiveArray:undefined},marginRight:{values:{'0':{conditions:{xs:'bd70uto0',sm:'bd70uto1',md:'bd70uto2',lg:'bd70uto3',xl:'bd70uto4',xxl:'bd70uto5'},defaultClass:'bd70uto0'},'1':{conditions:{xs:'bd70uto6',sm:'bd70uto7',md:'bd70uto8',lg:'bd70uto9',xl:'bd70utoa',xxl:'bd70utob'},defaultClass:'bd70uto6'},'2':{conditions:{xs:'bd70utoc',sm:'bd70utod',md:'bd70utoe',lg:'bd70utof',xl:'bd70utog',xxl:'bd70utoh'},defaultClass:'bd70utoc'},'3':{conditions:{xs:'bd70utoi',sm:'bd70utoj',md:'bd70utok',lg:'bd70utol',xl:'bd70utom',xxl:'bd70uton'},defaultClass:'bd70utoi'},'4':{conditions:{xs:'bd70utoo',sm:'bd70utop',md:'bd70utoq',lg:'bd70utor',xl:'bd70utos',xxl:'bd70utot'},defaultClass:'bd70utoo'},'5':{conditions:{xs:'bd70utou',sm:'bd70utov',md:'bd70utow',lg:'bd70utox',xl:'bd70utoy',xxl:'bd70utoz'},defaultClass:'bd70utou'},'6':{conditions:{xs:'bd70utp0',sm:'bd70utp1',md:'bd70utp2',lg:'bd70utp3',xl:'bd70utp4',xxl:'bd70utp5'},defaultClass:'bd70utp0'},'7':{conditions:{xs:'bd70utp6',sm:'bd70utp7',md:'bd70utp8',lg:'bd70utp9',xl:'bd70utpa',xxl:'bd70utpb'},defaultClass:'bd70utp6'},'0px':{conditions:{xs:'bd70utpc',sm:'bd70utpd',md:'bd70utpe',lg:'bd70utpf',xl:'bd70utpg',xxl:'bd70utph'},defaultClass:'bd70utpc'},'1rem':{conditions:{xs:'bd70utpi',sm:'bd70utpj',md:'bd70utpk',lg:'bd70utpl',xl:'bd70utpm',xxl:'bd70utpn'},defaultClass:'bd70utpi'},'1px':{conditions:{xs:'bd70utpo',sm:'bd70utpp',md:'bd70utpq',lg:'bd70utpr',xl:'bd70utps',xxl:'bd70utpt'},defaultClass:'bd70utpo'},'2px':{conditions:{xs:'bd70utpu',sm:'bd70utpv',md:'bd70utpw',lg:'bd70utpx',xl:'bd70utpy',xxl:'bd70utpz'},defaultClass:'bd70utpu'},'4px':{conditions:{xs:'bd70utq0',sm:'bd70utq1',md:'bd70utq2',lg:'bd70utq3',xl:'bd70utq4',xxl:'bd70utq5'},defaultClass:'bd70utq0'},'8px':{conditions:{xs:'bd70utq6',sm:'bd70utq7',md:'bd70utq8',lg:'bd70utq9',xl:'bd70utqa',xxl:'bd70utqb'},defaultClass:'bd70utq6'},'12px':{conditions:{xs:'bd70utqc',sm:'bd70utqd',md:'bd70utqe',lg:'bd70utqf',xl:'bd70utqg',xxl:'bd70utqh'},defaultClass:'bd70utqc'},'14px':{conditions:{xs:'bd70utqi',sm:'bd70utqj',md:'bd70utqk',lg:'bd70utql',xl:'bd70utqm',xxl:'bd70utqn'},defaultClass:'bd70utqi'},'16px':{conditions:{xs:'bd70utqo',sm:'bd70utqp',md:'bd70utqq',lg:'bd70utqr',xl:'bd70utqs',xxl:'bd70utqt'},defaultClass:'bd70utqo'},'20px':{conditions:{xs:'bd70utqu',sm:'bd70utqv',md:'bd70utqw',lg:'bd70utqx',xl:'bd70utqy',xxl:'bd70utqz'},defaultClass:'bd70utqu'},'24px':{conditions:{xs:'bd70utr0',sm:'bd70utr1',md:'bd70utr2',lg:'bd70utr3',xl:'bd70utr4',xxl:'bd70utr5'},defaultClass:'bd70utr0'},'32px':{conditions:{xs:'bd70utr6',sm:'bd70utr7',md:'bd70utr8',lg:'bd70utr9',xl:'bd70utra',xxl:'bd70utrb'},defaultClass:'bd70utr6'},'48px':{conditions:{xs:'bd70utrc',sm:'bd70utrd',md:'bd70utre',lg:'bd70utrf',xl:'bd70utrg',xxl:'bd70utrh'},defaultClass:'bd70utrc'},'56px':{conditions:{xs:'bd70utri',sm:'bd70utrj',md:'bd70utrk',lg:'bd70utrl',xl:'bd70utrm',xxl:'bd70utrn'},defaultClass:'bd70utri'},'64px':{conditions:{xs:'bd70utro',sm:'bd70utrp',md:'bd70utrq',lg:'bd70utrr',xl:'bd70utrs',xxl:'bd70utrt'},defaultClass:'bd70utro'},auto:{conditions:{xs:'bd70utru',sm:'bd70utrv',md:'bd70utrw',lg:'bd70utrx',xl:'bd70utry',xxl:'bd70utrz'},defaultClass:'bd70utru'}},responsiveArray:undefined},marginTop:{values:{'0':{conditions:{xs:'bd70uts0',sm:'bd70uts1',md:'bd70uts2',lg:'bd70uts3',xl:'bd70uts4',xxl:'bd70uts5'},defaultClass:'bd70uts0'},'1':{conditions:{xs:'bd70uts6',sm:'bd70uts7',md:'bd70uts8',lg:'bd70uts9',xl:'bd70utsa',xxl:'bd70utsb'},defaultClass:'bd70uts6'},'2':{conditions:{xs:'bd70utsc',sm:'bd70utsd',md:'bd70utse',lg:'bd70utsf',xl:'bd70utsg',xxl:'bd70utsh'},defaultClass:'bd70utsc'},'3':{conditions:{xs:'bd70utsi',sm:'bd70utsj',md:'bd70utsk',lg:'bd70utsl',xl:'bd70utsm',xxl:'bd70utsn'},defaultClass:'bd70utsi'},'4':{conditions:{xs:'bd70utso',sm:'bd70utsp',md:'bd70utsq',lg:'bd70utsr',xl:'bd70utss',xxl:'bd70utst'},defaultClass:'bd70utso'},'5':{conditions:{xs:'bd70utsu',sm:'bd70utsv',md:'bd70utsw',lg:'bd70utsx',xl:'bd70utsy',xxl:'bd70utsz'},defaultClass:'bd70utsu'},'6':{conditions:{xs:'bd70utt0',sm:'bd70utt1',md:'bd70utt2',lg:'bd70utt3',xl:'bd70utt4',xxl:'bd70utt5'},defaultClass:'bd70utt0'},'7':{conditions:{xs:'bd70utt6',sm:'bd70utt7',md:'bd70utt8',lg:'bd70utt9',xl:'bd70utta',xxl:'bd70uttb'},defaultClass:'bd70utt6'},'0px':{conditions:{xs:'bd70uttc',sm:'bd70uttd',md:'bd70utte',lg:'bd70uttf',xl:'bd70uttg',xxl:'bd70utth'},defaultClass:'bd70uttc'},'1rem':{conditions:{xs:'bd70utti',sm:'bd70uttj',md:'bd70uttk',lg:'bd70uttl',xl:'bd70uttm',xxl:'bd70uttn'},defaultClass:'bd70utti'},'1px':{conditions:{xs:'bd70utto',sm:'bd70uttp',md:'bd70uttq',lg:'bd70uttr',xl:'bd70utts',xxl:'bd70uttt'},defaultClass:'bd70utto'},'2px':{conditions:{xs:'bd70uttu',sm:'bd70uttv',md:'bd70uttw',lg:'bd70uttx',xl:'bd70utty',xxl:'bd70uttz'},defaultClass:'bd70uttu'},'4px':{conditions:{xs:'bd70utu0',sm:'bd70utu1',md:'bd70utu2',lg:'bd70utu3',xl:'bd70utu4',xxl:'bd70utu5'},defaultClass:'bd70utu0'},'8px':{conditions:{xs:'bd70utu6',sm:'bd70utu7',md:'bd70utu8',lg:'bd70utu9',xl:'bd70utua',xxl:'bd70utub'},defaultClass:'bd70utu6'},'12px':{conditions:{xs:'bd70utuc',sm:'bd70utud',md:'bd70utue',lg:'bd70utuf',xl:'bd70utug',xxl:'bd70utuh'},defaultClass:'bd70utuc'},'14px':{conditions:{xs:'bd70utui',sm:'bd70utuj',md:'bd70utuk',lg:'bd70utul',xl:'bd70utum',xxl:'bd70utun'},defaultClass:'bd70utui'},'16px':{conditions:{xs:'bd70utuo',sm:'bd70utup',md:'bd70utuq',lg:'bd70utur',xl:'bd70utus',xxl:'bd70utut'},defaultClass:'bd70utuo'},'20px':{conditions:{xs:'bd70utuu',sm:'bd70utuv',md:'bd70utuw',lg:'bd70utux',xl:'bd70utuy',xxl:'bd70utuz'},defaultClass:'bd70utuu'},'24px':{conditions:{xs:'bd70utv0',sm:'bd70utv1',md:'bd70utv2',lg:'bd70utv3',xl:'bd70utv4',xxl:'bd70utv5'},defaultClass:'bd70utv0'},'32px':{conditions:{xs:'bd70utv6',sm:'bd70utv7',md:'bd70utv8',lg:'bd70utv9',xl:'bd70utva',xxl:'bd70utvb'},defaultClass:'bd70utv6'},'48px':{conditions:{xs:'bd70utvc',sm:'bd70utvd',md:'bd70utve',lg:'bd70utvf',xl:'bd70utvg',xxl:'bd70utvh'},defaultClass:'bd70utvc'},'56px':{conditions:{xs:'bd70utvi',sm:'bd70utvj',md:'bd70utvk',lg:'bd70utvl',xl:'bd70utvm',xxl:'bd70utvn'},defaultClass:'bd70utvi'},'64px':{conditions:{xs:'bd70utvo',sm:'bd70utvp',md:'bd70utvq',lg:'bd70utvr',xl:'bd70utvs',xxl:'bd70utvt'},defaultClass:'bd70utvo'},auto:{conditions:{xs:'bd70utvu',sm:'bd70utvv',md:'bd70utvw',lg:'bd70utvx',xl:'bd70utvy',xxl:'bd70utvz'},defaultClass:'bd70utvu'}},responsiveArray:undefined},margin:{values:{'0':{conditions:{xs:'bd70utw0',sm:'bd70utw1',md:'bd70utw2',lg:'bd70utw3',xl:'bd70utw4',xxl:'bd70utw5'},defaultClass:'bd70utw0'},'1':{conditions:{xs:'bd70utw6',sm:'bd70utw7',md:'bd70utw8',lg:'bd70utw9',xl:'bd70utwa',xxl:'bd70utwb'},defaultClass:'bd70utw6'},'2':{conditions:{xs:'bd70utwc',sm:'bd70utwd',md:'bd70utwe',lg:'bd70utwf',xl:'bd70utwg',xxl:'bd70utwh'},defaultClass:'bd70utwc'},'3':{conditions:{xs:'bd70utwi',sm:'bd70utwj',md:'bd70utwk',lg:'bd70utwl',xl:'bd70utwm',xxl:'bd70utwn'},defaultClass:'bd70utwi'},'4':{conditions:{xs:'bd70utwo',sm:'bd70utwp',md:'bd70utwq',lg:'bd70utwr',xl:'bd70utws',xxl:'bd70utwt'},defaultClass:'bd70utwo'},'5':{conditions:{xs:'bd70utwu',sm:'bd70utwv',md:'bd70utww',lg:'bd70utwx',xl:'bd70utwy',xxl:'bd70utwz'},defaultClass:'bd70utwu'},'6':{conditions:{xs:'bd70utx0',sm:'bd70utx1',md:'bd70utx2',lg:'bd70utx3',xl:'bd70utx4',xxl:'bd70utx5'},defaultClass:'bd70utx0'},'7':{conditions:{xs:'bd70utx6',sm:'bd70utx7',md:'bd70utx8',lg:'bd70utx9',xl:'bd70utxa',xxl:'bd70utxb'},defaultClass:'bd70utx6'},'0px':{conditions:{xs:'bd70utxc',sm:'bd70utxd',md:'bd70utxe',lg:'bd70utxf',xl:'bd70utxg',xxl:'bd70utxh'},defaultClass:'bd70utxc'},'1rem':{conditions:{xs:'bd70utxi',sm:'bd70utxj',md:'bd70utxk',lg:'bd70utxl',xl:'bd70utxm',xxl:'bd70utxn'},defaultClass:'bd70utxi'},'1px':{conditions:{xs:'bd70utxo',sm:'bd70utxp',md:'bd70utxq',lg:'bd70utxr',xl:'bd70utxs',xxl:'bd70utxt'},defaultClass:'bd70utxo'},'2px':{conditions:{xs:'bd70utxu',sm:'bd70utxv',md:'bd70utxw',lg:'bd70utxx',xl:'bd70utxy',xxl:'bd70utxz'},defaultClass:'bd70utxu'},'4px':{conditions:{xs:'bd70uty0',sm:'bd70uty1',md:'bd70uty2',lg:'bd70uty3',xl:'bd70uty4',xxl:'bd70uty5'},defaultClass:'bd70uty0'},'8px':{conditions:{xs:'bd70uty6',sm:'bd70uty7',md:'bd70uty8',lg:'bd70uty9',xl:'bd70utya',xxl:'bd70utyb'},defaultClass:'bd70uty6'},'12px':{conditions:{xs:'bd70utyc',sm:'bd70utyd',md:'bd70utye',lg:'bd70utyf',xl:'bd70utyg',xxl:'bd70utyh'},defaultClass:'bd70utyc'},'14px':{conditions:{xs:'bd70utyi',sm:'bd70utyj',md:'bd70utyk',lg:'bd70utyl',xl:'bd70utym',xxl:'bd70utyn'},defaultClass:'bd70utyi'},'16px':{conditions:{xs:'bd70utyo',sm:'bd70utyp',md:'bd70utyq',lg:'bd70utyr',xl:'bd70utys',xxl:'bd70utyt'},defaultClass:'bd70utyo'},'20px':{conditions:{xs:'bd70utyu',sm:'bd70utyv',md:'bd70utyw',lg:'bd70utyx',xl:'bd70utyy',xxl:'bd70utyz'},defaultClass:'bd70utyu'},'24px':{conditions:{xs:'bd70utz0',sm:'bd70utz1',md:'bd70utz2',lg:'bd70utz3',xl:'bd70utz4',xxl:'bd70utz5'},defaultClass:'bd70utz0'},'32px':{conditions:{xs:'bd70utz6',sm:'bd70utz7',md:'bd70utz8',lg:'bd70utz9',xl:'bd70utza',xxl:'bd70utzb'},defaultClass:'bd70utz6'},'48px':{conditions:{xs:'bd70utzc',sm:'bd70utzd',md:'bd70utze',lg:'bd70utzf',xl:'bd70utzg',xxl:'bd70utzh'},defaultClass:'bd70utzc'},'56px':{conditions:{xs:'bd70utzi',sm:'bd70utzj',md:'bd70utzk',lg:'bd70utzl',xl:'bd70utzm',xxl:'bd70utzn'},defaultClass:'bd70utzi'},'64px':{conditions:{xs:'bd70utzo',sm:'bd70utzp',md:'bd70utzq',lg:'bd70utzr',xl:'bd70utzs',xxl:'bd70utzt'},defaultClass:'bd70utzo'},auto:{conditions:{xs:'bd70utzu',sm:'bd70utzv',md:'bd70utzw',lg:'bd70utzx',xl:'bd70utzy',xxl:'bd70utzz'},defaultClass:'bd70utzu'}},responsiveArray:undefined},padding:{values:{'0':{conditions:{xs:'bd70ut100',sm:'bd70ut101',md:'bd70ut102',lg:'bd70ut103',xl:'bd70ut104',xxl:'bd70ut105'},defaultClass:'bd70ut100'},'1':{conditions:{xs:'bd70ut106',sm:'bd70ut107',md:'bd70ut108',lg:'bd70ut109',xl:'bd70ut10a',xxl:'bd70ut10b'},defaultClass:'bd70ut106'},'2':{conditions:{xs:'bd70ut10c',sm:'bd70ut10d',md:'bd70ut10e',lg:'bd70ut10f',xl:'bd70ut10g',xxl:'bd70ut10h'},defaultClass:'bd70ut10c'},'3':{conditions:{xs:'bd70ut10i',sm:'bd70ut10j',md:'bd70ut10k',lg:'bd70ut10l',xl:'bd70ut10m',xxl:'bd70ut10n'},defaultClass:'bd70ut10i'},'4':{conditions:{xs:'bd70ut10o',sm:'bd70ut10p',md:'bd70ut10q',lg:'bd70ut10r',xl:'bd70ut10s',xxl:'bd70ut10t'},defaultClass:'bd70ut10o'},'5':{conditions:{xs:'bd70ut10u',sm:'bd70ut10v',md:'bd70ut10w',lg:'bd70ut10x',xl:'bd70ut10y',xxl:'bd70ut10z'},defaultClass:'bd70ut10u'},'6':{conditions:{xs:'bd70ut110',sm:'bd70ut111',md:'bd70ut112',lg:'bd70ut113',xl:'bd70ut114',xxl:'bd70ut115'},defaultClass:'bd70ut110'},'7':{conditions:{xs:'bd70ut116',sm:'bd70ut117',md:'bd70ut118',lg:'bd70ut119',xl:'bd70ut11a',xxl:'bd70ut11b'},defaultClass:'bd70ut116'},'0px':{conditions:{xs:'bd70ut11c',sm:'bd70ut11d',md:'bd70ut11e',lg:'bd70ut11f',xl:'bd70ut11g',xxl:'bd70ut11h'},defaultClass:'bd70ut11c'},'1rem':{conditions:{xs:'bd70ut11i',sm:'bd70ut11j',md:'bd70ut11k',lg:'bd70ut11l',xl:'bd70ut11m',xxl:'bd70ut11n'},defaultClass:'bd70ut11i'},'1px':{conditions:{xs:'bd70ut11o',sm:'bd70ut11p',md:'bd70ut11q',lg:'bd70ut11r',xl:'bd70ut11s',xxl:'bd70ut11t'},defaultClass:'bd70ut11o'},'2px':{conditions:{xs:'bd70ut11u',sm:'bd70ut11v',md:'bd70ut11w',lg:'bd70ut11x',xl:'bd70ut11y',xxl:'bd70ut11z'},defaultClass:'bd70ut11u'},'4px':{conditions:{xs:'bd70ut120',sm:'bd70ut121',md:'bd70ut122',lg:'bd70ut123',xl:'bd70ut124',xxl:'bd70ut125'},defaultClass:'bd70ut120'},'8px':{conditions:{xs:'bd70ut126',sm:'bd70ut127',md:'bd70ut128',lg:'bd70ut129',xl:'bd70ut12a',xxl:'bd70ut12b'},defaultClass:'bd70ut126'},'12px':{conditions:{xs:'bd70ut12c',sm:'bd70ut12d',md:'bd70ut12e',lg:'bd70ut12f',xl:'bd70ut12g',xxl:'bd70ut12h'},defaultClass:'bd70ut12c'},'14px':{conditions:{xs:'bd70ut12i',sm:'bd70ut12j',md:'bd70ut12k',lg:'bd70ut12l',xl:'bd70ut12m',xxl:'bd70ut12n'},defaultClass:'bd70ut12i'},'16px':{conditions:{xs:'bd70ut12o',sm:'bd70ut12p',md:'bd70ut12q',lg:'bd70ut12r',xl:'bd70ut12s',xxl:'bd70ut12t'},defaultClass:'bd70ut12o'},'20px':{conditions:{xs:'bd70ut12u',sm:'bd70ut12v',md:'bd70ut12w',lg:'bd70ut12x',xl:'bd70ut12y',xxl:'bd70ut12z'},defaultClass:'bd70ut12u'},'24px':{conditions:{xs:'bd70ut130',sm:'bd70ut131',md:'bd70ut132',lg:'bd70ut133',xl:'bd70ut134',xxl:'bd70ut135'},defaultClass:'bd70ut130'},'32px':{conditions:{xs:'bd70ut136',sm:'bd70ut137',md:'bd70ut138',lg:'bd70ut139',xl:'bd70ut13a',xxl:'bd70ut13b'},defaultClass:'bd70ut136'},'48px':{conditions:{xs:'bd70ut13c',sm:'bd70ut13d',md:'bd70ut13e',lg:'bd70ut13f',xl:'bd70ut13g',xxl:'bd70ut13h'},defaultClass:'bd70ut13c'},'56px':{conditions:{xs:'bd70ut13i',sm:'bd70ut13j',md:'bd70ut13k',lg:'bd70ut13l',xl:'bd70ut13m',xxl:'bd70ut13n'},defaultClass:'bd70ut13i'},'64px':{conditions:{xs:'bd70ut13o',sm:'bd70ut13p',md:'bd70ut13q',lg:'bd70ut13r',xl:'bd70ut13s',xxl:'bd70ut13t'},defaultClass:'bd70ut13o'}},responsiveArray:undefined},maxHeight:{values:{'0':{conditions:{xs:'bd70ut13u',sm:'bd70ut13v',md:'bd70ut13w',lg:'bd70ut13x',xl:'bd70ut13y',xxl:'bd70ut13z'},defaultClass:'bd70ut13u'},'1':{conditions:{xs:'bd70ut140',sm:'bd70ut141',md:'bd70ut142',lg:'bd70ut143',xl:'bd70ut144',xxl:'bd70ut145'},defaultClass:'bd70ut140'},'2':{conditions:{xs:'bd70ut146',sm:'bd70ut147',md:'bd70ut148',lg:'bd70ut149',xl:'bd70ut14a',xxl:'bd70ut14b'},defaultClass:'bd70ut146'},'3':{conditions:{xs:'bd70ut14c',sm:'bd70ut14d',md:'bd70ut14e',lg:'bd70ut14f',xl:'bd70ut14g',xxl:'bd70ut14h'},defaultClass:'bd70ut14c'},'4':{conditions:{xs:'bd70ut14i',sm:'bd70ut14j',md:'bd70ut14k',lg:'bd70ut14l',xl:'bd70ut14m',xxl:'bd70ut14n'},defaultClass:'bd70ut14i'},'5':{conditions:{xs:'bd70ut14o',sm:'bd70ut14p',md:'bd70ut14q',lg:'bd70ut14r',xl:'bd70ut14s',xxl:'bd70ut14t'},defaultClass:'bd70ut14o'},'6':{conditions:{xs:'bd70ut14u',sm:'bd70ut14v',md:'bd70ut14w',lg:'bd70ut14x',xl:'bd70ut14y',xxl:'bd70ut14z'},defaultClass:'bd70ut14u'},'7':{conditions:{xs:'bd70ut150',sm:'bd70ut151',md:'bd70ut152',lg:'bd70ut153',xl:'bd70ut154',xxl:'bd70ut155'},defaultClass:'bd70ut150'},'0px':{conditions:{xs:'bd70ut156',sm:'bd70ut157',md:'bd70ut158',lg:'bd70ut159',xl:'bd70ut15a',xxl:'bd70ut15b'},defaultClass:'bd70ut156'},'1rem':{conditions:{xs:'bd70ut15c',sm:'bd70ut15d',md:'bd70ut15e',lg:'bd70ut15f',xl:'bd70ut15g',xxl:'bd70ut15h'},defaultClass:'bd70ut15c'},'1px':{conditions:{xs:'bd70ut15i',sm:'bd70ut15j',md:'bd70ut15k',lg:'bd70ut15l',xl:'bd70ut15m',xxl:'bd70ut15n'},defaultClass:'bd70ut15i'},'2px':{conditions:{xs:'bd70ut15o',sm:'bd70ut15p',md:'bd70ut15q',lg:'bd70ut15r',xl:'bd70ut15s',xxl:'bd70ut15t'},defaultClass:'bd70ut15o'},'4px':{conditions:{xs:'bd70ut15u',sm:'bd70ut15v',md:'bd70ut15w',lg:'bd70ut15x',xl:'bd70ut15y',xxl:'bd70ut15z'},defaultClass:'bd70ut15u'},'8px':{conditions:{xs:'bd70ut160',sm:'bd70ut161',md:'bd70ut162',lg:'bd70ut163',xl:'bd70ut164',xxl:'bd70ut165'},defaultClass:'bd70ut160'},'12px':{conditions:{xs:'bd70ut166',sm:'bd70ut167',md:'bd70ut168',lg:'bd70ut169',xl:'bd70ut16a',xxl:'bd70ut16b'},defaultClass:'bd70ut166'},'14px':{conditions:{xs:'bd70ut16c',sm:'bd70ut16d',md:'bd70ut16e',lg:'bd70ut16f',xl:'bd70ut16g',xxl:'bd70ut16h'},defaultClass:'bd70ut16c'},'16px':{conditions:{xs:'bd70ut16i',sm:'bd70ut16j',md:'bd70ut16k',lg:'bd70ut16l',xl:'bd70ut16m',xxl:'bd70ut16n'},defaultClass:'bd70ut16i'},'20px':{conditions:{xs:'bd70ut16o',sm:'bd70ut16p',md:'bd70ut16q',lg:'bd70ut16r',xl:'bd70ut16s',xxl:'bd70ut16t'},defaultClass:'bd70ut16o'},'24px':{conditions:{xs:'bd70ut16u',sm:'bd70ut16v',md:'bd70ut16w',lg:'bd70ut16x',xl:'bd70ut16y',xxl:'bd70ut16z'},defaultClass:'bd70ut16u'},'32px':{conditions:{xs:'bd70ut170',sm:'bd70ut171',md:'bd70ut172',lg:'bd70ut173',xl:'bd70ut174',xxl:'bd70ut175'},defaultClass:'bd70ut170'},'48px':{conditions:{xs:'bd70ut176',sm:'bd70ut177',md:'bd70ut178',lg:'bd70ut179',xl:'bd70ut17a',xxl:'bd70ut17b'},defaultClass:'bd70ut176'},'56px':{conditions:{xs:'bd70ut17c',sm:'bd70ut17d',md:'bd70ut17e',lg:'bd70ut17f',xl:'bd70ut17g',xxl:'bd70ut17h'},defaultClass:'bd70ut17c'},'64px':{conditions:{xs:'bd70ut17i',sm:'bd70ut17j',md:'bd70ut17k',lg:'bd70ut17l',xl:'bd70ut17m',xxl:'bd70ut17n'},defaultClass:'bd70ut17i'}},responsiveArray:undefined},maxWidth:{values:{'0':{conditions:{xs:'bd70ut17o',sm:'bd70ut17p',md:'bd70ut17q',lg:'bd70ut17r',xl:'bd70ut17s',xxl:'bd70ut17t'},defaultClass:'bd70ut17o'},'1':{conditions:{xs:'bd70ut17u',sm:'bd70ut17v',md:'bd70ut17w',lg:'bd70ut17x',xl:'bd70ut17y',xxl:'bd70ut17z'},defaultClass:'bd70ut17u'},'2':{conditions:{xs:'bd70ut180',sm:'bd70ut181',md:'bd70ut182',lg:'bd70ut183',xl:'bd70ut184',xxl:'bd70ut185'},defaultClass:'bd70ut180'},'3':{conditions:{xs:'bd70ut186',sm:'bd70ut187',md:'bd70ut188',lg:'bd70ut189',xl:'bd70ut18a',xxl:'bd70ut18b'},defaultClass:'bd70ut186'},'4':{conditions:{xs:'bd70ut18c',sm:'bd70ut18d',md:'bd70ut18e',lg:'bd70ut18f',xl:'bd70ut18g',xxl:'bd70ut18h'},defaultClass:'bd70ut18c'},'5':{conditions:{xs:'bd70ut18i',sm:'bd70ut18j',md:'bd70ut18k',lg:'bd70ut18l',xl:'bd70ut18m',xxl:'bd70ut18n'},defaultClass:'bd70ut18i'},'6':{conditions:{xs:'bd70ut18o',sm:'bd70ut18p',md:'bd70ut18q',lg:'bd70ut18r',xl:'bd70ut18s',xxl:'bd70ut18t'},defaultClass:'bd70ut18o'},'7':{conditions:{xs:'bd70ut18u',sm:'bd70ut18v',md:'bd70ut18w',lg:'bd70ut18x',xl:'bd70ut18y',xxl:'bd70ut18z'},defaultClass:'bd70ut18u'},'0px':{conditions:{xs:'bd70ut190',sm:'bd70ut191',md:'bd70ut192',lg:'bd70ut193',xl:'bd70ut194',xxl:'bd70ut195'},defaultClass:'bd70ut190'},'1rem':{conditions:{xs:'bd70ut196',sm:'bd70ut197',md:'bd70ut198',lg:'bd70ut199',xl:'bd70ut19a',xxl:'bd70ut19b'},defaultClass:'bd70ut196'},'1px':{conditions:{xs:'bd70ut19c',sm:'bd70ut19d',md:'bd70ut19e',lg:'bd70ut19f',xl:'bd70ut19g',xxl:'bd70ut19h'},defaultClass:'bd70ut19c'},'2px':{conditions:{xs:'bd70ut19i',sm:'bd70ut19j',md:'bd70ut19k',lg:'bd70ut19l',xl:'bd70ut19m',xxl:'bd70ut19n'},defaultClass:'bd70ut19i'},'4px':{conditions:{xs:'bd70ut19o',sm:'bd70ut19p',md:'bd70ut19q',lg:'bd70ut19r',xl:'bd70ut19s',xxl:'bd70ut19t'},defaultClass:'bd70ut19o'},'8px':{conditions:{xs:'bd70ut19u',sm:'bd70ut19v',md:'bd70ut19w',lg:'bd70ut19x',xl:'bd70ut19y',xxl:'bd70ut19z'},defaultClass:'bd70ut19u'},'12px':{conditions:{xs:'bd70ut1a0',sm:'bd70ut1a1',md:'bd70ut1a2',lg:'bd70ut1a3',xl:'bd70ut1a4',xxl:'bd70ut1a5'},defaultClass:'bd70ut1a0'},'14px':{conditions:{xs:'bd70ut1a6',sm:'bd70ut1a7',md:'bd70ut1a8',lg:'bd70ut1a9',xl:'bd70ut1aa',xxl:'bd70ut1ab'},defaultClass:'bd70ut1a6'},'16px':{conditions:{xs:'bd70ut1ac',sm:'bd70ut1ad',md:'bd70ut1ae',lg:'bd70ut1af',xl:'bd70ut1ag',xxl:'bd70ut1ah'},defaultClass:'bd70ut1ac'},'20px':{conditions:{xs:'bd70ut1ai',sm:'bd70ut1aj',md:'bd70ut1ak',lg:'bd70ut1al',xl:'bd70ut1am',xxl:'bd70ut1an'},defaultClass:'bd70ut1ai'},'24px':{conditions:{xs:'bd70ut1ao',sm:'bd70ut1ap',md:'bd70ut1aq',lg:'bd70ut1ar',xl:'bd70ut1as',xxl:'bd70ut1at'},defaultClass:'bd70ut1ao'},'32px':{conditions:{xs:'bd70ut1au',sm:'bd70ut1av',md:'bd70ut1aw',lg:'bd70ut1ax',xl:'bd70ut1ay',xxl:'bd70ut1az'},defaultClass:'bd70ut1au'},'48px':{conditions:{xs:'bd70ut1b0',sm:'bd70ut1b1',md:'bd70ut1b2',lg:'bd70ut1b3',xl:'bd70ut1b4',xxl:'bd70ut1b5'},defaultClass:'bd70ut1b0'},'56px':{conditions:{xs:'bd70ut1b6',sm:'bd70ut1b7',md:'bd70ut1b8',lg:'bd70ut1b9',xl:'bd70ut1ba',xxl:'bd70ut1bb'},defaultClass:'bd70ut1b6'},'64px':{conditions:{xs:'bd70ut1bc',sm:'bd70ut1bd',md:'bd70ut1be',lg:'bd70ut1bf',xl:'bd70ut1bg',xxl:'bd70ut1bh'},defaultClass:'bd70ut1bc'},'100%':{conditions:{xs:'bd70ut1bi',sm:'bd70ut1bj',md:'bd70ut1bk',lg:'bd70ut1bl',xl:'bd70ut1bm',xxl:'bd70ut1bn'},defaultClass:'bd70ut1bi'},auto:{conditions:{xs:'bd70ut1bo',sm:'bd70ut1bp',md:'bd70ut1bq',lg:'bd70ut1br',xl:'bd70ut1bs',xxl:'bd70ut1bt'},defaultClass:'bd70ut1bo'},'fit-content':{conditions:{xs:'bd70ut1bu',sm:'bd70ut1bv',md:'bd70ut1bw',lg:'bd70ut1bx',xl:'bd70ut1by',xxl:'bd70ut1bz'},defaultClass:'bd70ut1bu'},'420px':{conditions:{xs:'bd70ut1c0',sm:'bd70ut1c1',md:'bd70ut1c2',lg:'bd70ut1c3',xl:'bd70ut1c4',xxl:'bd70ut1c5'},defaultClass:'bd70ut1c0'},screenSm:{conditions:{xs:'bd70ut1c6',sm:'bd70ut1c7',md:'bd70ut1c8',lg:'bd70ut1c9',xl:'bd70ut1ca',xxl:'bd70ut1cb'},defaultClass:'bd70ut1c6'},screenMd:{conditions:{xs:'bd70ut1cc',sm:'bd70ut1cd',md:'bd70ut1ce',lg:'bd70ut1cf',xl:'bd70ut1cg',xxl:'bd70ut1ch'},defaultClass:'bd70ut1cc'},screenLg:{conditions:{xs:'bd70ut1ci',sm:'bd70ut1cj',md:'bd70ut1ck',lg:'bd70ut1cl',xl:'bd70ut1cm',xxl:'bd70ut1cn'},defaultClass:'bd70ut1ci'},screenXl:{conditions:{xs:'bd70ut1co',sm:'bd70ut1cp',md:'bd70ut1cq',lg:'bd70ut1cr',xl:'bd70ut1cs',xxl:'bd70ut1ct'},defaultClass:'bd70ut1co'},none:{conditions:{xs:'bd70ut1cu',sm:'bd70ut1cv',md:'bd70ut1cw',lg:'bd70ut1cx',xl:'bd70ut1cy',xxl:'bd70ut1cz'},defaultClass:'bd70ut1cu'}},responsiveArray:undefined},minHeight:{values:{'0':{conditions:{xs:'bd70ut1d0',sm:'bd70ut1d1',md:'bd70ut1d2',lg:'bd70ut1d3',xl:'bd70ut1d4',xxl:'bd70ut1d5'},defaultClass:'bd70ut1d0'},'1':{conditions:{xs:'bd70ut1d6',sm:'bd70ut1d7',md:'bd70ut1d8',lg:'bd70ut1d9',xl:'bd70ut1da',xxl:'bd70ut1db'},defaultClass:'bd70ut1d6'},'2':{conditions:{xs:'bd70ut1dc',sm:'bd70ut1dd',md:'bd70ut1de',lg:'bd70ut1df',xl:'bd70ut1dg',xxl:'bd70ut1dh'},defaultClass:'bd70ut1dc'},'3':{conditions:{xs:'bd70ut1di',sm:'bd70ut1dj',md:'bd70ut1dk',lg:'bd70ut1dl',xl:'bd70ut1dm',xxl:'bd70ut1dn'},defaultClass:'bd70ut1di'},'4':{conditions:{xs:'bd70ut1do',sm:'bd70ut1dp',md:'bd70ut1dq',lg:'bd70ut1dr',xl:'bd70ut1ds',xxl:'bd70ut1dt'},defaultClass:'bd70ut1do'},'5':{conditions:{xs:'bd70ut1du',sm:'bd70ut1dv',md:'bd70ut1dw',lg:'bd70ut1dx',xl:'bd70ut1dy',xxl:'bd70ut1dz'},defaultClass:'bd70ut1du'},'6':{conditions:{xs:'bd70ut1e0',sm:'bd70ut1e1',md:'bd70ut1e2',lg:'bd70ut1e3',xl:'bd70ut1e4',xxl:'bd70ut1e5'},defaultClass:'bd70ut1e0'},'7':{conditions:{xs:'bd70ut1e6',sm:'bd70ut1e7',md:'bd70ut1e8',lg:'bd70ut1e9',xl:'bd70ut1ea',xxl:'bd70ut1eb'},defaultClass:'bd70ut1e6'},'0px':{conditions:{xs:'bd70ut1ec',sm:'bd70ut1ed',md:'bd70ut1ee',lg:'bd70ut1ef',xl:'bd70ut1eg',xxl:'bd70ut1eh'},defaultClass:'bd70ut1ec'},'1rem':{conditions:{xs:'bd70ut1ei',sm:'bd70ut1ej',md:'bd70ut1ek',lg:'bd70ut1el',xl:'bd70ut1em',xxl:'bd70ut1en'},defaultClass:'bd70ut1ei'},'1px':{conditions:{xs:'bd70ut1eo',sm:'bd70ut1ep',md:'bd70ut1eq',lg:'bd70ut1er',xl:'bd70ut1es',xxl:'bd70ut1et'},defaultClass:'bd70ut1eo'},'2px':{conditions:{xs:'bd70ut1eu',sm:'bd70ut1ev',md:'bd70ut1ew',lg:'bd70ut1ex',xl:'bd70ut1ey',xxl:'bd70ut1ez'},defaultClass:'bd70ut1eu'},'4px':{conditions:{xs:'bd70ut1f0',sm:'bd70ut1f1',md:'bd70ut1f2',lg:'bd70ut1f3',xl:'bd70ut1f4',xxl:'bd70ut1f5'},defaultClass:'bd70ut1f0'},'8px':{conditions:{xs:'bd70ut1f6',sm:'bd70ut1f7',md:'bd70ut1f8',lg:'bd70ut1f9',xl:'bd70ut1fa',xxl:'bd70ut1fb'},defaultClass:'bd70ut1f6'},'12px':{conditions:{xs:'bd70ut1fc',sm:'bd70ut1fd',md:'bd70ut1fe',lg:'bd70ut1ff',xl:'bd70ut1fg',xxl:'bd70ut1fh'},defaultClass:'bd70ut1fc'},'14px':{conditions:{xs:'bd70ut1fi',sm:'bd70ut1fj',md:'bd70ut1fk',lg:'bd70ut1fl',xl:'bd70ut1fm',xxl:'bd70ut1fn'},defaultClass:'bd70ut1fi'},'16px':{conditions:{xs:'bd70ut1fo',sm:'bd70ut1fp',md:'bd70ut1fq',lg:'bd70ut1fr',xl:'bd70ut1fs',xxl:'bd70ut1ft'},defaultClass:'bd70ut1fo'},'20px':{conditions:{xs:'bd70ut1fu',sm:'bd70ut1fv',md:'bd70ut1fw',lg:'bd70ut1fx',xl:'bd70ut1fy',xxl:'bd70ut1fz'},defaultClass:'bd70ut1fu'},'24px':{conditions:{xs:'bd70ut1g0',sm:'bd70ut1g1',md:'bd70ut1g2',lg:'bd70ut1g3',xl:'bd70ut1g4',xxl:'bd70ut1g5'},defaultClass:'bd70ut1g0'},'32px':{conditions:{xs:'bd70ut1g6',sm:'bd70ut1g7',md:'bd70ut1g8',lg:'bd70ut1g9',xl:'bd70ut1ga',xxl:'bd70ut1gb'},defaultClass:'bd70ut1g6'},'48px':{conditions:{xs:'bd70ut1gc',sm:'bd70ut1gd',md:'bd70ut1ge',lg:'bd70ut1gf',xl:'bd70ut1gg',xxl:'bd70ut1gh'},defaultClass:'bd70ut1gc'},'56px':{conditions:{xs:'bd70ut1gi',sm:'bd70ut1gj',md:'bd70ut1gk',lg:'bd70ut1gl',xl:'bd70ut1gm',xxl:'bd70ut1gn'},defaultClass:'bd70ut1gi'},'64px':{conditions:{xs:'bd70ut1go',sm:'bd70ut1gp',md:'bd70ut1gq',lg:'bd70ut1gr',xl:'bd70ut1gs',xxl:'bd70ut1gt'},defaultClass:'bd70ut1go'},'100%':{conditions:{xs:'bd70ut1gu',sm:'bd70ut1gv',md:'bd70ut1gw',lg:'bd70ut1gx',xl:'bd70ut1gy',xxl:'bd70ut1gz'},defaultClass:'bd70ut1gu'},auto:{conditions:{xs:'bd70ut1h0',sm:'bd70ut1h1',md:'bd70ut1h2',lg:'bd70ut1h3',xl:'bd70ut1h4',xxl:'bd70ut1h5'},defaultClass:'bd70ut1h0'},'fit-content':{conditions:{xs:'bd70ut1h6',sm:'bd70ut1h7',md:'bd70ut1h8',lg:'bd70ut1h9',xl:'bd70ut1ha',xxl:'bd70ut1hb'},defaultClass:'bd70ut1h6'},'420px':{conditions:{xs:'bd70ut1hc',sm:'bd70ut1hd',md:'bd70ut1he',lg:'bd70ut1hf',xl:'bd70ut1hg',xxl:'bd70ut1hh'},defaultClass:'bd70ut1hc'},screenSm:{conditions:{xs:'bd70ut1hi',sm:'bd70ut1hj',md:'bd70ut1hk',lg:'bd70ut1hl',xl:'bd70ut1hm',xxl:'bd70ut1hn'},defaultClass:'bd70ut1hi'},screenMd:{conditions:{xs:'bd70ut1ho',sm:'bd70ut1hp',md:'bd70ut1hq',lg:'bd70ut1hr',xl:'bd70ut1hs',xxl:'bd70ut1ht'},defaultClass:'bd70ut1ho'},screenLg:{conditions:{xs:'bd70ut1hu',sm:'bd70ut1hv',md:'bd70ut1hw',lg:'bd70ut1hx',xl:'bd70ut1hy',xxl:'bd70ut1hz'},defaultClass:'bd70ut1hu'},screenXl:{conditions:{xs:'bd70ut1i0',sm:'bd70ut1i1',md:'bd70ut1i2',lg:'bd70ut1i3',xl:'bd70ut1i4',xxl:'bd70ut1i5'},defaultClass:'bd70ut1i0'},'100vh':{conditions:{xs:'bd70ut1i6',sm:'bd70ut1i7',md:'bd70ut1i8',lg:'bd70ut1i9',xl:'bd70ut1ia',xxl:'bd70ut1ib'},defaultClass:'bd70ut1i6'}},responsiveArray:undefined},minWidth:{values:{'0':{conditions:{xs:'bd70ut1ic',sm:'bd70ut1id',md:'bd70ut1ie',lg:'bd70ut1if',xl:'bd70ut1ig',xxl:'bd70ut1ih'},defaultClass:'bd70ut1ic'},'1':{conditions:{xs:'bd70ut1ii',sm:'bd70ut1ij',md:'bd70ut1ik',lg:'bd70ut1il',xl:'bd70ut1im',xxl:'bd70ut1in'},defaultClass:'bd70ut1ii'},'2':{conditions:{xs:'bd70ut1io',sm:'bd70ut1ip',md:'bd70ut1iq',lg:'bd70ut1ir',xl:'bd70ut1is',xxl:'bd70ut1it'},defaultClass:'bd70ut1io'},'3':{conditions:{xs:'bd70ut1iu',sm:'bd70ut1iv',md:'bd70ut1iw',lg:'bd70ut1ix',xl:'bd70ut1iy',xxl:'bd70ut1iz'},defaultClass:'bd70ut1iu'},'4':{conditions:{xs:'bd70ut1j0',sm:'bd70ut1j1',md:'bd70ut1j2',lg:'bd70ut1j3',xl:'bd70ut1j4',xxl:'bd70ut1j5'},defaultClass:'bd70ut1j0'},'5':{conditions:{xs:'bd70ut1j6',sm:'bd70ut1j7',md:'bd70ut1j8',lg:'bd70ut1j9',xl:'bd70ut1ja',xxl:'bd70ut1jb'},defaultClass:'bd70ut1j6'},'6':{conditions:{xs:'bd70ut1jc',sm:'bd70ut1jd',md:'bd70ut1je',lg:'bd70ut1jf',xl:'bd70ut1jg',xxl:'bd70ut1jh'},defaultClass:'bd70ut1jc'},'7':{conditions:{xs:'bd70ut1ji',sm:'bd70ut1jj',md:'bd70ut1jk',lg:'bd70ut1jl',xl:'bd70ut1jm',xxl:'bd70ut1jn'},defaultClass:'bd70ut1ji'},'0px':{conditions:{xs:'bd70ut1jo',sm:'bd70ut1jp',md:'bd70ut1jq',lg:'bd70ut1jr',xl:'bd70ut1js',xxl:'bd70ut1jt'},defaultClass:'bd70ut1jo'},'1rem':{conditions:{xs:'bd70ut1ju',sm:'bd70ut1jv',md:'bd70ut1jw',lg:'bd70ut1jx',xl:'bd70ut1jy',xxl:'bd70ut1jz'},defaultClass:'bd70ut1ju'},'1px':{conditions:{xs:'bd70ut1k0',sm:'bd70ut1k1',md:'bd70ut1k2',lg:'bd70ut1k3',xl:'bd70ut1k4',xxl:'bd70ut1k5'},defaultClass:'bd70ut1k0'},'2px':{conditions:{xs:'bd70ut1k6',sm:'bd70ut1k7',md:'bd70ut1k8',lg:'bd70ut1k9',xl:'bd70ut1ka',xxl:'bd70ut1kb'},defaultClass:'bd70ut1k6'},'4px':{conditions:{xs:'bd70ut1kc',sm:'bd70ut1kd',md:'bd70ut1ke',lg:'bd70ut1kf',xl:'bd70ut1kg',xxl:'bd70ut1kh'},defaultClass:'bd70ut1kc'},'8px':{conditions:{xs:'bd70ut1ki',sm:'bd70ut1kj',md:'bd70ut1kk',lg:'bd70ut1kl',xl:'bd70ut1km',xxl:'bd70ut1kn'},defaultClass:'bd70ut1ki'},'12px':{conditions:{xs:'bd70ut1ko',sm:'bd70ut1kp',md:'bd70ut1kq',lg:'bd70ut1kr',xl:'bd70ut1ks',xxl:'bd70ut1kt'},defaultClass:'bd70ut1ko'},'14px':{conditions:{xs:'bd70ut1ku',sm:'bd70ut1kv',md:'bd70ut1kw',lg:'bd70ut1kx',xl:'bd70ut1ky',xxl:'bd70ut1kz'},defaultClass:'bd70ut1ku'},'16px':{conditions:{xs:'bd70ut1l0',sm:'bd70ut1l1',md:'bd70ut1l2',lg:'bd70ut1l3',xl:'bd70ut1l4',xxl:'bd70ut1l5'},defaultClass:'bd70ut1l0'},'20px':{conditions:{xs:'bd70ut1l6',sm:'bd70ut1l7',md:'bd70ut1l8',lg:'bd70ut1l9',xl:'bd70ut1la',xxl:'bd70ut1lb'},defaultClass:'bd70ut1l6'},'24px':{conditions:{xs:'bd70ut1lc',sm:'bd70ut1ld',md:'bd70ut1le',lg:'bd70ut1lf',xl:'bd70ut1lg',xxl:'bd70ut1lh'},defaultClass:'bd70ut1lc'},'32px':{conditions:{xs:'bd70ut1li',sm:'bd70ut1lj',md:'bd70ut1lk',lg:'bd70ut1ll',xl:'bd70ut1lm',xxl:'bd70ut1ln'},defaultClass:'bd70ut1li'},'48px':{conditions:{xs:'bd70ut1lo',sm:'bd70ut1lp',md:'bd70ut1lq',lg:'bd70ut1lr',xl:'bd70ut1ls',xxl:'bd70ut1lt'},defaultClass:'bd70ut1lo'},'56px':{conditions:{xs:'bd70ut1lu',sm:'bd70ut1lv',md:'bd70ut1lw',lg:'bd70ut1lx',xl:'bd70ut1ly',xxl:'bd70ut1lz'},defaultClass:'bd70ut1lu'},'64px':{conditions:{xs:'bd70ut1m0',sm:'bd70ut1m1',md:'bd70ut1m2',lg:'bd70ut1m3',xl:'bd70ut1m4',xxl:'bd70ut1m5'},defaultClass:'bd70ut1m0'}},responsiveArray:undefined},paddingBottom:{values:{'0':{conditions:{xs:'bd70ut1m6',sm:'bd70ut1m7',md:'bd70ut1m8',lg:'bd70ut1m9',xl:'bd70ut1ma',xxl:'bd70ut1mb'},defaultClass:'bd70ut1m6'},'1':{conditions:{xs:'bd70ut1mc',sm:'bd70ut1md',md:'bd70ut1me',lg:'bd70ut1mf',xl:'bd70ut1mg',xxl:'bd70ut1mh'},defaultClass:'bd70ut1mc'},'2':{conditions:{xs:'bd70ut1mi',sm:'bd70ut1mj',md:'bd70ut1mk',lg:'bd70ut1ml',xl:'bd70ut1mm',xxl:'bd70ut1mn'},defaultClass:'bd70ut1mi'},'3':{conditions:{xs:'bd70ut1mo',sm:'bd70ut1mp',md:'bd70ut1mq',lg:'bd70ut1mr',xl:'bd70ut1ms',xxl:'bd70ut1mt'},defaultClass:'bd70ut1mo'},'4':{conditions:{xs:'bd70ut1mu',sm:'bd70ut1mv',md:'bd70ut1mw',lg:'bd70ut1mx',xl:'bd70ut1my',xxl:'bd70ut1mz'},defaultClass:'bd70ut1mu'},'5':{conditions:{xs:'bd70ut1n0',sm:'bd70ut1n1',md:'bd70ut1n2',lg:'bd70ut1n3',xl:'bd70ut1n4',xxl:'bd70ut1n5'},defaultClass:'bd70ut1n0'},'6':{conditions:{xs:'bd70ut1n6',sm:'bd70ut1n7',md:'bd70ut1n8',lg:'bd70ut1n9',xl:'bd70ut1na',xxl:'bd70ut1nb'},defaultClass:'bd70ut1n6'},'7':{conditions:{xs:'bd70ut1nc',sm:'bd70ut1nd',md:'bd70ut1ne',lg:'bd70ut1nf',xl:'bd70ut1ng',xxl:'bd70ut1nh'},defaultClass:'bd70ut1nc'},'0px':{conditions:{xs:'bd70ut1ni',sm:'bd70ut1nj',md:'bd70ut1nk',lg:'bd70ut1nl',xl:'bd70ut1nm',xxl:'bd70ut1nn'},defaultClass:'bd70ut1ni'},'1rem':{conditions:{xs:'bd70ut1no',sm:'bd70ut1np',md:'bd70ut1nq',lg:'bd70ut1nr',xl:'bd70ut1ns',xxl:'bd70ut1nt'},defaultClass:'bd70ut1no'},'1px':{conditions:{xs:'bd70ut1nu',sm:'bd70ut1nv',md:'bd70ut1nw',lg:'bd70ut1nx',xl:'bd70ut1ny',xxl:'bd70ut1nz'},defaultClass:'bd70ut1nu'},'2px':{conditions:{xs:'bd70ut1o0',sm:'bd70ut1o1',md:'bd70ut1o2',lg:'bd70ut1o3',xl:'bd70ut1o4',xxl:'bd70ut1o5'},defaultClass:'bd70ut1o0'},'4px':{conditions:{xs:'bd70ut1o6',sm:'bd70ut1o7',md:'bd70ut1o8',lg:'bd70ut1o9',xl:'bd70ut1oa',xxl:'bd70ut1ob'},defaultClass:'bd70ut1o6'},'8px':{conditions:{xs:'bd70ut1oc',sm:'bd70ut1od',md:'bd70ut1oe',lg:'bd70ut1of',xl:'bd70ut1og',xxl:'bd70ut1oh'},defaultClass:'bd70ut1oc'},'12px':{conditions:{xs:'bd70ut1oi',sm:'bd70ut1oj',md:'bd70ut1ok',lg:'bd70ut1ol',xl:'bd70ut1om',xxl:'bd70ut1on'},defaultClass:'bd70ut1oi'},'14px':{conditions:{xs:'bd70ut1oo',sm:'bd70ut1op',md:'bd70ut1oq',lg:'bd70ut1or',xl:'bd70ut1os',xxl:'bd70ut1ot'},defaultClass:'bd70ut1oo'},'16px':{conditions:{xs:'bd70ut1ou',sm:'bd70ut1ov',md:'bd70ut1ow',lg:'bd70ut1ox',xl:'bd70ut1oy',xxl:'bd70ut1oz'},defaultClass:'bd70ut1ou'},'20px':{conditions:{xs:'bd70ut1p0',sm:'bd70ut1p1',md:'bd70ut1p2',lg:'bd70ut1p3',xl:'bd70ut1p4',xxl:'bd70ut1p5'},defaultClass:'bd70ut1p0'},'24px':{conditions:{xs:'bd70ut1p6',sm:'bd70ut1p7',md:'bd70ut1p8',lg:'bd70ut1p9',xl:'bd70ut1pa',xxl:'bd70ut1pb'},defaultClass:'bd70ut1p6'},'32px':{conditions:{xs:'bd70ut1pc',sm:'bd70ut1pd',md:'bd70ut1pe',lg:'bd70ut1pf',xl:'bd70ut1pg',xxl:'bd70ut1ph'},defaultClass:'bd70ut1pc'},'48px':{conditions:{xs:'bd70ut1pi',sm:'bd70ut1pj',md:'bd70ut1pk',lg:'bd70ut1pl',xl:'bd70ut1pm',xxl:'bd70ut1pn'},defaultClass:'bd70ut1pi'},'56px':{conditions:{xs:'bd70ut1po',sm:'bd70ut1pp',md:'bd70ut1pq',lg:'bd70ut1pr',xl:'bd70ut1ps',xxl:'bd70ut1pt'},defaultClass:'bd70ut1po'},'64px':{conditions:{xs:'bd70ut1pu',sm:'bd70ut1pv',md:'bd70ut1pw',lg:'bd70ut1px',xl:'bd70ut1py',xxl:'bd70ut1pz'},defaultClass:'bd70ut1pu'}},responsiveArray:undefined},paddingLeft:{values:{'0':{conditions:{xs:'bd70ut1q0',sm:'bd70ut1q1',md:'bd70ut1q2',lg:'bd70ut1q3',xl:'bd70ut1q4',xxl:'bd70ut1q5'},defaultClass:'bd70ut1q0'},'1':{conditions:{xs:'bd70ut1q6',sm:'bd70ut1q7',md:'bd70ut1q8',lg:'bd70ut1q9',xl:'bd70ut1qa',xxl:'bd70ut1qb'},defaultClass:'bd70ut1q6'},'2':{conditions:{xs:'bd70ut1qc',sm:'bd70ut1qd',md:'bd70ut1qe',lg:'bd70ut1qf',xl:'bd70ut1qg',xxl:'bd70ut1qh'},defaultClass:'bd70ut1qc'},'3':{conditions:{xs:'bd70ut1qi',sm:'bd70ut1qj',md:'bd70ut1qk',lg:'bd70ut1ql',xl:'bd70ut1qm',xxl:'bd70ut1qn'},defaultClass:'bd70ut1qi'},'4':{conditions:{xs:'bd70ut1qo',sm:'bd70ut1qp',md:'bd70ut1qq',lg:'bd70ut1qr',xl:'bd70ut1qs',xxl:'bd70ut1qt'},defaultClass:'bd70ut1qo'},'5':{conditions:{xs:'bd70ut1qu',sm:'bd70ut1qv',md:'bd70ut1qw',lg:'bd70ut1qx',xl:'bd70ut1qy',xxl:'bd70ut1qz'},defaultClass:'bd70ut1qu'},'6':{conditions:{xs:'bd70ut1r0',sm:'bd70ut1r1',md:'bd70ut1r2',lg:'bd70ut1r3',xl:'bd70ut1r4',xxl:'bd70ut1r5'},defaultClass:'bd70ut1r0'},'7':{conditions:{xs:'bd70ut1r6',sm:'bd70ut1r7',md:'bd70ut1r8',lg:'bd70ut1r9',xl:'bd70ut1ra',xxl:'bd70ut1rb'},defaultClass:'bd70ut1r6'},'0px':{conditions:{xs:'bd70ut1rc',sm:'bd70ut1rd',md:'bd70ut1re',lg:'bd70ut1rf',xl:'bd70ut1rg',xxl:'bd70ut1rh'},defaultClass:'bd70ut1rc'},'1rem':{conditions:{xs:'bd70ut1ri',sm:'bd70ut1rj',md:'bd70ut1rk',lg:'bd70ut1rl',xl:'bd70ut1rm',xxl:'bd70ut1rn'},defaultClass:'bd70ut1ri'},'1px':{conditions:{xs:'bd70ut1ro',sm:'bd70ut1rp',md:'bd70ut1rq',lg:'bd70ut1rr',xl:'bd70ut1rs',xxl:'bd70ut1rt'},defaultClass:'bd70ut1ro'},'2px':{conditions:{xs:'bd70ut1ru',sm:'bd70ut1rv',md:'bd70ut1rw',lg:'bd70ut1rx',xl:'bd70ut1ry',xxl:'bd70ut1rz'},defaultClass:'bd70ut1ru'},'4px':{conditions:{xs:'bd70ut1s0',sm:'bd70ut1s1',md:'bd70ut1s2',lg:'bd70ut1s3',xl:'bd70ut1s4',xxl:'bd70ut1s5'},defaultClass:'bd70ut1s0'},'8px':{conditions:{xs:'bd70ut1s6',sm:'bd70ut1s7',md:'bd70ut1s8',lg:'bd70ut1s9',xl:'bd70ut1sa',xxl:'bd70ut1sb'},defaultClass:'bd70ut1s6'},'12px':{conditions:{xs:'bd70ut1sc',sm:'bd70ut1sd',md:'bd70ut1se',lg:'bd70ut1sf',xl:'bd70ut1sg',xxl:'bd70ut1sh'},defaultClass:'bd70ut1sc'},'14px':{conditions:{xs:'bd70ut1si',sm:'bd70ut1sj',md:'bd70ut1sk',lg:'bd70ut1sl',xl:'bd70ut1sm',xxl:'bd70ut1sn'},defaultClass:'bd70ut1si'},'16px':{conditions:{xs:'bd70ut1so',sm:'bd70ut1sp',md:'bd70ut1sq',lg:'bd70ut1sr',xl:'bd70ut1ss',xxl:'bd70ut1st'},defaultClass:'bd70ut1so'},'20px':{conditions:{xs:'bd70ut1su',sm:'bd70ut1sv',md:'bd70ut1sw',lg:'bd70ut1sx',xl:'bd70ut1sy',xxl:'bd70ut1sz'},defaultClass:'bd70ut1su'},'24px':{conditions:{xs:'bd70ut1t0',sm:'bd70ut1t1',md:'bd70ut1t2',lg:'bd70ut1t3',xl:'bd70ut1t4',xxl:'bd70ut1t5'},defaultClass:'bd70ut1t0'},'32px':{conditions:{xs:'bd70ut1t6',sm:'bd70ut1t7',md:'bd70ut1t8',lg:'bd70ut1t9',xl:'bd70ut1ta',xxl:'bd70ut1tb'},defaultClass:'bd70ut1t6'},'48px':{conditions:{xs:'bd70ut1tc',sm:'bd70ut1td',md:'bd70ut1te',lg:'bd70ut1tf',xl:'bd70ut1tg',xxl:'bd70ut1th'},defaultClass:'bd70ut1tc'},'56px':{conditions:{xs:'bd70ut1ti',sm:'bd70ut1tj',md:'bd70ut1tk',lg:'bd70ut1tl',xl:'bd70ut1tm',xxl:'bd70ut1tn'},defaultClass:'bd70ut1ti'},'64px':{conditions:{xs:'bd70ut1to',sm:'bd70ut1tp',md:'bd70ut1tq',lg:'bd70ut1tr',xl:'bd70ut1ts',xxl:'bd70ut1tt'},defaultClass:'bd70ut1to'}},responsiveArray:undefined},paddingRight:{values:{'0':{conditions:{xs:'bd70ut1tu',sm:'bd70ut1tv',md:'bd70ut1tw',lg:'bd70ut1tx',xl:'bd70ut1ty',xxl:'bd70ut1tz'},defaultClass:'bd70ut1tu'},'1':{conditions:{xs:'bd70ut1u0',sm:'bd70ut1u1',md:'bd70ut1u2',lg:'bd70ut1u3',xl:'bd70ut1u4',xxl:'bd70ut1u5'},defaultClass:'bd70ut1u0'},'2':{conditions:{xs:'bd70ut1u6',sm:'bd70ut1u7',md:'bd70ut1u8',lg:'bd70ut1u9',xl:'bd70ut1ua',xxl:'bd70ut1ub'},defaultClass:'bd70ut1u6'},'3':{conditions:{xs:'bd70ut1uc',sm:'bd70ut1ud',md:'bd70ut1ue',lg:'bd70ut1uf',xl:'bd70ut1ug',xxl:'bd70ut1uh'},defaultClass:'bd70ut1uc'},'4':{conditions:{xs:'bd70ut1ui',sm:'bd70ut1uj',md:'bd70ut1uk',lg:'bd70ut1ul',xl:'bd70ut1um',xxl:'bd70ut1un'},defaultClass:'bd70ut1ui'},'5':{conditions:{xs:'bd70ut1uo',sm:'bd70ut1up',md:'bd70ut1uq',lg:'bd70ut1ur',xl:'bd70ut1us',xxl:'bd70ut1ut'},defaultClass:'bd70ut1uo'},'6':{conditions:{xs:'bd70ut1uu',sm:'bd70ut1uv',md:'bd70ut1uw',lg:'bd70ut1ux',xl:'bd70ut1uy',xxl:'bd70ut1uz'},defaultClass:'bd70ut1uu'},'7':{conditions:{xs:'bd70ut1v0',sm:'bd70ut1v1',md:'bd70ut1v2',lg:'bd70ut1v3',xl:'bd70ut1v4',xxl:'bd70ut1v5'},defaultClass:'bd70ut1v0'},'0px':{conditions:{xs:'bd70ut1v6',sm:'bd70ut1v7',md:'bd70ut1v8',lg:'bd70ut1v9',xl:'bd70ut1va',xxl:'bd70ut1vb'},defaultClass:'bd70ut1v6'},'1rem':{conditions:{xs:'bd70ut1vc',sm:'bd70ut1vd',md:'bd70ut1ve',lg:'bd70ut1vf',xl:'bd70ut1vg',xxl:'bd70ut1vh'},defaultClass:'bd70ut1vc'},'1px':{conditions:{xs:'bd70ut1vi',sm:'bd70ut1vj',md:'bd70ut1vk',lg:'bd70ut1vl',xl:'bd70ut1vm',xxl:'bd70ut1vn'},defaultClass:'bd70ut1vi'},'2px':{conditions:{xs:'bd70ut1vo',sm:'bd70ut1vp',md:'bd70ut1vq',lg:'bd70ut1vr',xl:'bd70ut1vs',xxl:'bd70ut1vt'},defaultClass:'bd70ut1vo'},'4px':{conditions:{xs:'bd70ut1vu',sm:'bd70ut1vv',md:'bd70ut1vw',lg:'bd70ut1vx',xl:'bd70ut1vy',xxl:'bd70ut1vz'},defaultClass:'bd70ut1vu'},'8px':{conditions:{xs:'bd70ut1w0',sm:'bd70ut1w1',md:'bd70ut1w2',lg:'bd70ut1w3',xl:'bd70ut1w4',xxl:'bd70ut1w5'},defaultClass:'bd70ut1w0'},'12px':{conditions:{xs:'bd70ut1w6',sm:'bd70ut1w7',md:'bd70ut1w8',lg:'bd70ut1w9',xl:'bd70ut1wa',xxl:'bd70ut1wb'},defaultClass:'bd70ut1w6'},'14px':{conditions:{xs:'bd70ut1wc',sm:'bd70ut1wd',md:'bd70ut1we',lg:'bd70ut1wf',xl:'bd70ut1wg',xxl:'bd70ut1wh'},defaultClass:'bd70ut1wc'},'16px':{conditions:{xs:'bd70ut1wi',sm:'bd70ut1wj',md:'bd70ut1wk',lg:'bd70ut1wl',xl:'bd70ut1wm',xxl:'bd70ut1wn'},defaultClass:'bd70ut1wi'},'20px':{conditions:{xs:'bd70ut1wo',sm:'bd70ut1wp',md:'bd70ut1wq',lg:'bd70ut1wr',xl:'bd70ut1ws',xxl:'bd70ut1wt'},defaultClass:'bd70ut1wo'},'24px':{conditions:{xs:'bd70ut1wu',sm:'bd70ut1wv',md:'bd70ut1ww',lg:'bd70ut1wx',xl:'bd70ut1wy',xxl:'bd70ut1wz'},defaultClass:'bd70ut1wu'},'32px':{conditions:{xs:'bd70ut1x0',sm:'bd70ut1x1',md:'bd70ut1x2',lg:'bd70ut1x3',xl:'bd70ut1x4',xxl:'bd70ut1x5'},defaultClass:'bd70ut1x0'},'48px':{conditions:{xs:'bd70ut1x6',sm:'bd70ut1x7',md:'bd70ut1x8',lg:'bd70ut1x9',xl:'bd70ut1xa',xxl:'bd70ut1xb'},defaultClass:'bd70ut1x6'},'56px':{conditions:{xs:'bd70ut1xc',sm:'bd70ut1xd',md:'bd70ut1xe',lg:'bd70ut1xf',xl:'bd70ut1xg',xxl:'bd70ut1xh'},defaultClass:'bd70ut1xc'},'64px':{conditions:{xs:'bd70ut1xi',sm:'bd70ut1xj',md:'bd70ut1xk',lg:'bd70ut1xl',xl:'bd70ut1xm',xxl:'bd70ut1xn'},defaultClass:'bd70ut1xi'}},responsiveArray:undefined},paddingTop:{values:{'0':{conditions:{xs:'bd70ut1xo',sm:'bd70ut1xp',md:'bd70ut1xq',lg:'bd70ut1xr',xl:'bd70ut1xs',xxl:'bd70ut1xt'},defaultClass:'bd70ut1xo'},'1':{conditions:{xs:'bd70ut1xu',sm:'bd70ut1xv',md:'bd70ut1xw',lg:'bd70ut1xx',xl:'bd70ut1xy',xxl:'bd70ut1xz'},defaultClass:'bd70ut1xu'},'2':{conditions:{xs:'bd70ut1y0',sm:'bd70ut1y1',md:'bd70ut1y2',lg:'bd70ut1y3',xl:'bd70ut1y4',xxl:'bd70ut1y5'},defaultClass:'bd70ut1y0'},'3':{conditions:{xs:'bd70ut1y6',sm:'bd70ut1y7',md:'bd70ut1y8',lg:'bd70ut1y9',xl:'bd70ut1ya',xxl:'bd70ut1yb'},defaultClass:'bd70ut1y6'},'4':{conditions:{xs:'bd70ut1yc',sm:'bd70ut1yd',md:'bd70ut1ye',lg:'bd70ut1yf',xl:'bd70ut1yg',xxl:'bd70ut1yh'},defaultClass:'bd70ut1yc'},'5':{conditions:{xs:'bd70ut1yi',sm:'bd70ut1yj',md:'bd70ut1yk',lg:'bd70ut1yl',xl:'bd70ut1ym',xxl:'bd70ut1yn'},defaultClass:'bd70ut1yi'},'6':{conditions:{xs:'bd70ut1yo',sm:'bd70ut1yp',md:'bd70ut1yq',lg:'bd70ut1yr',xl:'bd70ut1ys',xxl:'bd70ut1yt'},defaultClass:'bd70ut1yo'},'7':{conditions:{xs:'bd70ut1yu',sm:'bd70ut1yv',md:'bd70ut1yw',lg:'bd70ut1yx',xl:'bd70ut1yy',xxl:'bd70ut1yz'},defaultClass:'bd70ut1yu'},'0px':{conditions:{xs:'bd70ut1z0',sm:'bd70ut1z1',md:'bd70ut1z2',lg:'bd70ut1z3',xl:'bd70ut1z4',xxl:'bd70ut1z5'},defaultClass:'bd70ut1z0'},'1rem':{conditions:{xs:'bd70ut1z6',sm:'bd70ut1z7',md:'bd70ut1z8',lg:'bd70ut1z9',xl:'bd70ut1za',xxl:'bd70ut1zb'},defaultClass:'bd70ut1z6'},'1px':{conditions:{xs:'bd70ut1zc',sm:'bd70ut1zd',md:'bd70ut1ze',lg:'bd70ut1zf',xl:'bd70ut1zg',xxl:'bd70ut1zh'},defaultClass:'bd70ut1zc'},'2px':{conditions:{xs:'bd70ut1zi',sm:'bd70ut1zj',md:'bd70ut1zk',lg:'bd70ut1zl',xl:'bd70ut1zm',xxl:'bd70ut1zn'},defaultClass:'bd70ut1zi'},'4px':{conditions:{xs:'bd70ut1zo',sm:'bd70ut1zp',md:'bd70ut1zq',lg:'bd70ut1zr',xl:'bd70ut1zs',xxl:'bd70ut1zt'},defaultClass:'bd70ut1zo'},'8px':{conditions:{xs:'bd70ut1zu',sm:'bd70ut1zv',md:'bd70ut1zw',lg:'bd70ut1zx',xl:'bd70ut1zy',xxl:'bd70ut1zz'},defaultClass:'bd70ut1zu'},'12px':{conditions:{xs:'bd70ut200',sm:'bd70ut201',md:'bd70ut202',lg:'bd70ut203',xl:'bd70ut204',xxl:'bd70ut205'},defaultClass:'bd70ut200'},'14px':{conditions:{xs:'bd70ut206',sm:'bd70ut207',md:'bd70ut208',lg:'bd70ut209',xl:'bd70ut20a',xxl:'bd70ut20b'},defaultClass:'bd70ut206'},'16px':{conditions:{xs:'bd70ut20c',sm:'bd70ut20d',md:'bd70ut20e',lg:'bd70ut20f',xl:'bd70ut20g',xxl:'bd70ut20h'},defaultClass:'bd70ut20c'},'20px':{conditions:{xs:'bd70ut20i',sm:'bd70ut20j',md:'bd70ut20k',lg:'bd70ut20l',xl:'bd70ut20m',xxl:'bd70ut20n'},defaultClass:'bd70ut20i'},'24px':{conditions:{xs:'bd70ut20o',sm:'bd70ut20p',md:'bd70ut20q',lg:'bd70ut20r',xl:'bd70ut20s',xxl:'bd70ut20t'},defaultClass:'bd70ut20o'},'32px':{conditions:{xs:'bd70ut20u',sm:'bd70ut20v',md:'bd70ut20w',lg:'bd70ut20x',xl:'bd70ut20y',xxl:'bd70ut20z'},defaultClass:'bd70ut20u'},'48px':{conditions:{xs:'bd70ut210',sm:'bd70ut211',md:'bd70ut212',lg:'bd70ut213',xl:'bd70ut214',xxl:'bd70ut215'},defaultClass:'bd70ut210'},'56px':{conditions:{xs:'bd70ut216',sm:'bd70ut217',md:'bd70ut218',lg:'bd70ut219',xl:'bd70ut21a',xxl:'bd70ut21b'},defaultClass:'bd70ut216'},'64px':{conditions:{xs:'bd70ut21c',sm:'bd70ut21d',md:'bd70ut21e',lg:'bd70ut21f',xl:'bd70ut21g',xxl:'bd70ut21h'},defaultClass:'bd70ut21c'}},responsiveArray:undefined},fontSize:{values:{'10px':{conditions:{xs:'bd70ut21i',sm:'bd70ut21j',md:'bd70ut21k',lg:'bd70ut21l',xl:'bd70ut21m',xxl:'bd70ut21n'},defaultClass:'bd70ut21i'},'12px':{conditions:{xs:'bd70ut21o',sm:'bd70ut21p',md:'bd70ut21q',lg:'bd70ut21r',xl:'bd70ut21s',xxl:'bd70ut21t'},defaultClass:'bd70ut21o'},'16px':{conditions:{xs:'bd70ut21u',sm:'bd70ut21v',md:'bd70ut21w',lg:'bd70ut21x',xl:'bd70ut21y',xxl:'bd70ut21z'},defaultClass:'bd70ut21u'},'14px':{conditions:{xs:'bd70ut220',sm:'bd70ut221',md:'bd70ut222',lg:'bd70ut223',xl:'bd70ut224',xxl:'bd70ut225'},defaultClass:'bd70ut220'},'20px':{conditions:{xs:'bd70ut226',sm:'bd70ut227',md:'bd70ut228',lg:'bd70ut229',xl:'bd70ut22a',xxl:'bd70ut22b'},defaultClass:'bd70ut226'},'40px':{conditions:{xs:'bd70ut22c',sm:'bd70ut22d',md:'bd70ut22e',lg:'bd70ut22f',xl:'bd70ut22g',xxl:'bd70ut22h'},defaultClass:'bd70ut22c'},inherit:{conditions:{xs:'bd70ut22i',sm:'bd70ut22j',md:'bd70ut22k',lg:'bd70ut22l',xl:'bd70ut22m',xxl:'bd70ut22n'},defaultClass:'bd70ut22i'}},responsiveArray:undefined},flex:{values:{'1':{conditions:{xs:'bd70ut22o',sm:'bd70ut22p',md:'bd70ut22q',lg:'bd70ut22r',xl:'bd70ut22s',xxl:'bd70ut22t'},defaultClass:'bd70ut22o'},auto:{conditions:{xs:'bd70ut22u',sm:'bd70ut22v',md:'bd70ut22w',lg:'bd70ut22x',xl:'bd70ut22y',xxl:'bd70ut22z'},defaultClass:'bd70ut22u'},initial:{conditions:{xs:'bd70ut230',sm:'bd70ut231',md:'bd70ut232',lg:'bd70ut233',xl:'bd70ut234',xxl:'bd70ut235'},defaultClass:'bd70ut230'},none:{conditions:{xs:'bd70ut236',sm:'bd70ut237',md:'bd70ut238',lg:'bd70ut239',xl:'bd70ut23a',xxl:'bd70ut23b'},defaultClass:'bd70ut236'}},responsiveArray:undefined},boxShadow:{values:{level1:{conditions:{xs:'bd70ut23c',sm:'bd70ut23d',md:'bd70ut23e',lg:'bd70ut23f',xl:'bd70ut23g',xxl:'bd70ut23h'},defaultClass:'bd70ut23c'},active:{conditions:{xs:'bd70ut23i',sm:'bd70ut23j',md:'bd70ut23k',lg:'bd70ut23l',xl:'bd70ut23m',xxl:'bd70ut23n'},defaultClass:'bd70ut23i'},success:{conditions:{xs:'bd70ut23o',sm:'bd70ut23p',md:'bd70ut23q',lg:'bd70ut23r',xl:'bd70ut23s',xxl:'bd70ut23t'},defaultClass:'bd70ut23o'},warning:{conditions:{xs:'bd70ut23u',sm:'bd70ut23v',md:'bd70ut23w',lg:'bd70ut23x',xl:'bd70ut23y',xxl:'bd70ut23z'},defaultClass:'bd70ut23u'},danger:{conditions:{xs:'bd70ut240',sm:'bd70ut241',md:'bd70ut242',lg:'bd70ut243',xl:'bd70ut244',xxl:'bd70ut245'},defaultClass:'bd70ut240'},focus:{conditions:{xs:'bd70ut246',sm:'bd70ut247',md:'bd70ut248',lg:'bd70ut249',xl:'bd70ut24a',xxl:'bd70ut24b'},defaultClass:'bd70ut246'},inset:{conditions:{xs:'bd70ut24c',sm:'bd70ut24d',md:'bd70ut24e',lg:'bd70ut24f',xl:'bd70ut24g',xxl:'bd70ut24h'},defaultClass:'bd70ut24c'},tooltip:{conditions:{xs:'bd70ut24i',sm:'bd70ut24j',md:'bd70ut24k',lg:'bd70ut24l',xl:'bd70ut24m',xxl:'bd70ut24n'},defaultClass:'bd70ut24i'}},responsiveArray:undefined},width:{values:{'0':{conditions:{xs:'bd70ut24o',sm:'bd70ut24p',md:'bd70ut24q',lg:'bd70ut24r',xl:'bd70ut24s',xxl:'bd70ut24t'},defaultClass:'bd70ut24o'},'1':{conditions:{xs:'bd70ut24u',sm:'bd70ut24v',md:'bd70ut24w',lg:'bd70ut24x',xl:'bd70ut24y',xxl:'bd70ut24z'},defaultClass:'bd70ut24u'},'2':{conditions:{xs:'bd70ut250',sm:'bd70ut251',md:'bd70ut252',lg:'bd70ut253',xl:'bd70ut254',xxl:'bd70ut255'},defaultClass:'bd70ut250'},'3':{conditions:{xs:'bd70ut256',sm:'bd70ut257',md:'bd70ut258',lg:'bd70ut259',xl:'bd70ut25a',xxl:'bd70ut25b'},defaultClass:'bd70ut256'},'4':{conditions:{xs:'bd70ut25c',sm:'bd70ut25d',md:'bd70ut25e',lg:'bd70ut25f',xl:'bd70ut25g',xxl:'bd70ut25h'},defaultClass:'bd70ut25c'},'5':{conditions:{xs:'bd70ut25i',sm:'bd70ut25j',md:'bd70ut25k',lg:'bd70ut25l',xl:'bd70ut25m',xxl:'bd70ut25n'},defaultClass:'bd70ut25i'},'6':{conditions:{xs:'bd70ut25o',sm:'bd70ut25p',md:'bd70ut25q',lg:'bd70ut25r',xl:'bd70ut25s',xxl:'bd70ut25t'},defaultClass:'bd70ut25o'},'7':{conditions:{xs:'bd70ut25u',sm:'bd70ut25v',md:'bd70ut25w',lg:'bd70ut25x',xl:'bd70ut25y',xxl:'bd70ut25z'},defaultClass:'bd70ut25u'},'0px':{conditions:{xs:'bd70ut260',sm:'bd70ut261',md:'bd70ut262',lg:'bd70ut263',xl:'bd70ut264',xxl:'bd70ut265'},defaultClass:'bd70ut260'},'1rem':{conditions:{xs:'bd70ut266',sm:'bd70ut267',md:'bd70ut268',lg:'bd70ut269',xl:'bd70ut26a',xxl:'bd70ut26b'},defaultClass:'bd70ut266'},'1px':{conditions:{xs:'bd70ut26c',sm:'bd70ut26d',md:'bd70ut26e',lg:'bd70ut26f',xl:'bd70ut26g',xxl:'bd70ut26h'},defaultClass:'bd70ut26c'},'2px':{conditions:{xs:'bd70ut26i',sm:'bd70ut26j',md:'bd70ut26k',lg:'bd70ut26l',xl:'bd70ut26m',xxl:'bd70ut26n'},defaultClass:'bd70ut26i'},'4px':{conditions:{xs:'bd70ut26o',sm:'bd70ut26p',md:'bd70ut26q',lg:'bd70ut26r',xl:'bd70ut26s',xxl:'bd70ut26t'},defaultClass:'bd70ut26o'},'8px':{conditions:{xs:'bd70ut26u',sm:'bd70ut26v',md:'bd70ut26w',lg:'bd70ut26x',xl:'bd70ut26y',xxl:'bd70ut26z'},defaultClass:'bd70ut26u'},'12px':{conditions:{xs:'bd70ut270',sm:'bd70ut271',md:'bd70ut272',lg:'bd70ut273',xl:'bd70ut274',xxl:'bd70ut275'},defaultClass:'bd70ut270'},'14px':{conditions:{xs:'bd70ut276',sm:'bd70ut277',md:'bd70ut278',lg:'bd70ut279',xl:'bd70ut27a',xxl:'bd70ut27b'},defaultClass:'bd70ut276'},'16px':{conditions:{xs:'bd70ut27c',sm:'bd70ut27d',md:'bd70ut27e',lg:'bd70ut27f',xl:'bd70ut27g',xxl:'bd70ut27h'},defaultClass:'bd70ut27c'},'20px':{conditions:{xs:'bd70ut27i',sm:'bd70ut27j',md:'bd70ut27k',lg:'bd70ut27l',xl:'bd70ut27m',xxl:'bd70ut27n'},defaultClass:'bd70ut27i'},'24px':{conditions:{xs:'bd70ut27o',sm:'bd70ut27p',md:'bd70ut27q',lg:'bd70ut27r',xl:'bd70ut27s',xxl:'bd70ut27t'},defaultClass:'bd70ut27o'},'32px':{conditions:{xs:'bd70ut27u',sm:'bd70ut27v',md:'bd70ut27w',lg:'bd70ut27x',xl:'bd70ut27y',xxl:'bd70ut27z'},defaultClass:'bd70ut27u'},'48px':{conditions:{xs:'bd70ut280',sm:'bd70ut281',md:'bd70ut282',lg:'bd70ut283',xl:'bd70ut284',xxl:'bd70ut285'},defaultClass:'bd70ut280'},'56px':{conditions:{xs:'bd70ut286',sm:'bd70ut287',md:'bd70ut288',lg:'bd70ut289',xl:'bd70ut28a',xxl:'bd70ut28b'},defaultClass:'bd70ut286'},'64px':{conditions:{xs:'bd70ut28c',sm:'bd70ut28d',md:'bd70ut28e',lg:'bd70ut28f',xl:'bd70ut28g',xxl:'bd70ut28h'},defaultClass:'bd70ut28c'},'100%':{conditions:{xs:'bd70ut28i',sm:'bd70ut28j',md:'bd70ut28k',lg:'bd70ut28l',xl:'bd70ut28m',xxl:'bd70ut28n'},defaultClass:'bd70ut28i'},auto:{conditions:{xs:'bd70ut28o',sm:'bd70ut28p',md:'bd70ut28q',lg:'bd70ut28r',xl:'bd70ut28s',xxl:'bd70ut28t'},defaultClass:'bd70ut28o'},'fit-content':{conditions:{xs:'bd70ut28u',sm:'bd70ut28v',md:'bd70ut28w',lg:'bd70ut28x',xl:'bd70ut28y',xxl:'bd70ut28z'},defaultClass:'bd70ut28u'},'420px':{conditions:{xs:'bd70ut290',sm:'bd70ut291',md:'bd70ut292',lg:'bd70ut293',xl:'bd70ut294',xxl:'bd70ut295'},defaultClass:'bd70ut290'},screenSm:{conditions:{xs:'bd70ut296',sm:'bd70ut297',md:'bd70ut298',lg:'bd70ut299',xl:'bd70ut29a',xxl:'bd70ut29b'},defaultClass:'bd70ut296'},screenMd:{conditions:{xs:'bd70ut29c',sm:'bd70ut29d',md:'bd70ut29e',lg:'bd70ut29f',xl:'bd70ut29g',xxl:'bd70ut29h'},defaultClass:'bd70ut29c'},screenLg:{conditions:{xs:'bd70ut29i',sm:'bd70ut29j',md:'bd70ut29k',lg:'bd70ut29l',xl:'bd70ut29m',xxl:'bd70ut29n'},defaultClass:'bd70ut29i'},screenXl:{conditions:{xs:'bd70ut29o',sm:'bd70ut29p',md:'bd70ut29q',lg:'bd70ut29r',xl:'bd70ut29s',xxl:'bd70ut29t'},defaultClass:'bd70ut29o'}},responsiveArray:undefined},zIndex:{values:{'0':{conditions:{xs:'bd70ut29u',sm:'bd70ut29v',md:'bd70ut29w',lg:'bd70ut29x',xl:'bd70ut29y',xxl:'bd70ut29z'},defaultClass:'bd70ut29u'},'1':{conditions:{xs:'bd70ut2a0',sm:'bd70ut2a1',md:'bd70ut2a2',lg:'bd70ut2a3',xl:'bd70ut2a4',xxl:'bd70ut2a5'},defaultClass:'bd70ut2a0'},'10':{conditions:{xs:'bd70ut2a6',sm:'bd70ut2a7',md:'bd70ut2a8',lg:'bd70ut2a9',xl:'bd70ut2aa',xxl:'bd70ut2ab'},defaultClass:'bd70ut2a6'},'20':{conditions:{xs:'bd70ut2ac',sm:'bd70ut2ad',md:'bd70ut2ae',lg:'bd70ut2af',xl:'bd70ut2ag',xxl:'bd70ut2ah'},defaultClass:'bd70ut2ac'},'30':{conditions:{xs:'bd70ut2ai',sm:'bd70ut2aj',md:'bd70ut2ak',lg:'bd70ut2al',xl:'bd70ut2am',xxl:'bd70ut2an'},defaultClass:'bd70ut2ai'},'40':{conditions:{xs:'bd70ut2ao',sm:'bd70ut2ap',md:'bd70ut2aq',lg:'bd70ut2ar',xl:'bd70ut2as',xxl:'bd70ut2at'},defaultClass:'bd70ut2ao'},'50':{conditions:{xs:'bd70ut2au',sm:'bd70ut2av',md:'bd70ut2aw',lg:'bd70ut2ax',xl:'bd70ut2ay',xxl:'bd70ut2az'},defaultClass:'bd70ut2au'},'75':{conditions:{xs:'bd70ut2b0',sm:'bd70ut2b1',md:'bd70ut2b2',lg:'bd70ut2b3',xl:'bd70ut2b4',xxl:'bd70ut2b5'},defaultClass:'bd70ut2b0'},'99':{conditions:{xs:'bd70ut2b6',sm:'bd70ut2b7',md:'bd70ut2b8',lg:'bd70ut2b9',xl:'bd70ut2ba',xxl:'bd70ut2bb'},defaultClass:'bd70ut2b6'},'100':{conditions:{xs:'bd70ut2bc',sm:'bd70ut2bd',md:'bd70ut2be',lg:'bd70ut2bf',xl:'bd70ut2bg',xxl:'bd70ut2bh'},defaultClass:'bd70ut2bc'},ribbon:{conditions:{xs:'bd70ut2bi',sm:'bd70ut2bj',md:'bd70ut2bk',lg:'bd70ut2bl',xl:'bd70ut2bm',xxl:'bd70ut2bn'},defaultClass:'bd70ut2bi'},dropdown:{conditions:{xs:'bd70ut2bo',sm:'bd70ut2bp',md:'bd70ut2bq',lg:'bd70ut2br',xl:'bd70ut2bs',xxl:'bd70ut2bt'},defaultClass:'bd70ut2bo'},modal:{conditions:{xs:'bd70ut2bu',sm:'bd70ut2bv',md:'bd70ut2bw',lg:'bd70ut2bx',xl:'bd70ut2by',xxl:'bd70ut2bz'},defaultClass:'bd70ut2bu'},auto:{conditions:{xs:'bd70ut2c0',sm:'bd70ut2c1',md:'bd70ut2c2',lg:'bd70ut2c3',xl:'bd70ut2c4',xxl:'bd70ut2c5'},defaultClass:'bd70ut2c0'}},responsiveArray:undefined},borderTop:{values:{'1':{conditions:{xs:'bd70ut2c6',sm:'bd70ut2c7',md:'bd70ut2c8',lg:'bd70ut2c9',xl:'bd70ut2ca',xxl:'bd70ut2cb'},defaultClass:'bd70ut2c6'}},responsiveArray:undefined},borderRadius:{values:{'0':{conditions:{xs:'bd70ut2cc',sm:'bd70ut2cd',md:'bd70ut2ce',lg:'bd70ut2cf',xl:'bd70ut2cg',xxl:'bd70ut2ch'},defaultClass:'bd70ut2cc'},'8px':{conditions:{xs:'bd70ut2ci',sm:'bd70ut2cj',md:'bd70ut2ck',lg:'bd70ut2cl',xl:'bd70ut2cm',xxl:'bd70ut2cn'},defaultClass:'bd70ut2ci'},'12px':{conditions:{xs:'bd70ut2co',sm:'bd70ut2cp',md:'bd70ut2cq',lg:'bd70ut2cr',xl:'bd70ut2cs',xxl:'bd70ut2ct'},defaultClass:'bd70ut2co'},'20px':{conditions:{xs:'bd70ut2cu',sm:'bd70ut2cv',md:'bd70ut2cw',lg:'bd70ut2cx',xl:'bd70ut2cy',xxl:'bd70ut2cz'},defaultClass:'bd70ut2cu'},small:{conditions:{xs:'bd70ut2d0',sm:'bd70ut2d1',md:'bd70ut2d2',lg:'bd70ut2d3',xl:'bd70ut2d4',xxl:'bd70ut2d5'},defaultClass:'bd70ut2d0'},'default':{conditions:{xs:'bd70ut2d6',sm:'bd70ut2d7',md:'bd70ut2d8',lg:'bd70ut2d9',xl:'bd70ut2da',xxl:'bd70ut2db'},defaultClass:'bd70ut2d6'},card:{conditions:{xs:'bd70ut2dc',sm:'bd70ut2dd',md:'bd70ut2de',lg:'bd70ut2df',xl:'bd70ut2dg',xxl:'bd70ut2dh'},defaultClass:'bd70ut2dc'},circle:{conditions:{xs:'bd70ut2di',sm:'bd70ut2dj',md:'bd70ut2dk',lg:'bd70ut2dl',xl:'bd70ut2dm',xxl:'bd70ut2dn'},defaultClass:'bd70ut2di'}},responsiveArray:undefined},borderTopLeftRadius:{values:{'0':{conditions:{xs:'bd70ut2do',sm:'bd70ut2dp',md:'bd70ut2dq',lg:'bd70ut2dr',xl:'bd70ut2ds',xxl:'bd70ut2dt'},defaultClass:'bd70ut2do'},'8px':{conditions:{xs:'bd70ut2du',sm:'bd70ut2dv',md:'bd70ut2dw',lg:'bd70ut2dx',xl:'bd70ut2dy',xxl:'bd70ut2dz'},defaultClass:'bd70ut2du'},'12px':{conditions:{xs:'bd70ut2e0',sm:'bd70ut2e1',md:'bd70ut2e2',lg:'bd70ut2e3',xl:'bd70ut2e4',xxl:'bd70ut2e5'},defaultClass:'bd70ut2e0'},'20px':{conditions:{xs:'bd70ut2e6',sm:'bd70ut2e7',md:'bd70ut2e8',lg:'bd70ut2e9',xl:'bd70ut2ea',xxl:'bd70ut2eb'},defaultClass:'bd70ut2e6'},small:{conditions:{xs:'bd70ut2ec',sm:'bd70ut2ed',md:'bd70ut2ee',lg:'bd70ut2ef',xl:'bd70ut2eg',xxl:'bd70ut2eh'},defaultClass:'bd70ut2ec'},'default':{conditions:{xs:'bd70ut2ei',sm:'bd70ut2ej',md:'bd70ut2ek',lg:'bd70ut2el',xl:'bd70ut2em',xxl:'bd70ut2en'},defaultClass:'bd70ut2ei'},card:{conditions:{xs:'bd70ut2eo',sm:'bd70ut2ep',md:'bd70ut2eq',lg:'bd70ut2er',xl:'bd70ut2es',xxl:'bd70ut2et'},defaultClass:'bd70ut2eo'},circle:{conditions:{xs:'bd70ut2eu',sm:'bd70ut2ev',md:'bd70ut2ew',lg:'bd70ut2ex',xl:'bd70ut2ey',xxl:'bd70ut2ez'},defaultClass:'bd70ut2eu'}},responsiveArray:undefined},borderBottomRightRadius:{values:{'0':{conditions:{xs:'bd70ut2f0',sm:'bd70ut2f1',md:'bd70ut2f2',lg:'bd70ut2f3',xl:'bd70ut2f4',xxl:'bd70ut2f5'},defaultClass:'bd70ut2f0'},'8px':{conditions:{xs:'bd70ut2f6',sm:'bd70ut2f7',md:'bd70ut2f8',lg:'bd70ut2f9',xl:'bd70ut2fa',xxl:'bd70ut2fb'},defaultClass:'bd70ut2f6'},'12px':{conditions:{xs:'bd70ut2fc',sm:'bd70ut2fd',md:'bd70ut2fe',lg:'bd70ut2ff',xl:'bd70ut2fg',xxl:'bd70ut2fh'},defaultClass:'bd70ut2fc'},'20px':{conditions:{xs:'bd70ut2fi',sm:'bd70ut2fj',md:'bd70ut2fk',lg:'bd70ut2fl',xl:'bd70ut2fm',xxl:'bd70ut2fn'},defaultClass:'bd70ut2fi'},small:{conditions:{xs:'bd70ut2fo',sm:'bd70ut2fp',md:'bd70ut2fq',lg:'bd70ut2fr',xl:'bd70ut2fs',xxl:'bd70ut2ft'},defaultClass:'bd70ut2fo'},'default':{conditions:{xs:'bd70ut2fu',sm:'bd70ut2fv',md:'bd70ut2fw',lg:'bd70ut2fx',xl:'bd70ut2fy',xxl:'bd70ut2fz'},defaultClass:'bd70ut2fu'},card:{conditions:{xs:'bd70ut2g0',sm:'bd70ut2g1',md:'bd70ut2g2',lg:'bd70ut2g3',xl:'bd70ut2g4',xxl:'bd70ut2g5'},defaultClass:'bd70ut2g0'},circle:{conditions:{xs:'bd70ut2g6',sm:'bd70ut2g7',md:'bd70ut2g8',lg:'bd70ut2g9',xl:'bd70ut2ga',xxl:'bd70ut2gb'},defaultClass:'bd70ut2g6'}},responsiveArray:undefined},borderTopRightRadius:{values:{'0':{conditions:{xs:'bd70ut2gc',sm:'bd70ut2gd',md:'bd70ut2ge',lg:'bd70ut2gf',xl:'bd70ut2gg',xxl:'bd70ut2gh'},defaultClass:'bd70ut2gc'},'8px':{conditions:{xs:'bd70ut2gi',sm:'bd70ut2gj',md:'bd70ut2gk',lg:'bd70ut2gl',xl:'bd70ut2gm',xxl:'bd70ut2gn'},defaultClass:'bd70ut2gi'},'12px':{conditions:{xs:'bd70ut2go',sm:'bd70ut2gp',md:'bd70ut2gq',lg:'bd70ut2gr',xl:'bd70ut2gs',xxl:'bd70ut2gt'},defaultClass:'bd70ut2go'},'20px':{conditions:{xs:'bd70ut2gu',sm:'bd70ut2gv',md:'bd70ut2gw',lg:'bd70ut2gx',xl:'bd70ut2gy',xxl:'bd70ut2gz'},defaultClass:'bd70ut2gu'},small:{conditions:{xs:'bd70ut2h0',sm:'bd70ut2h1',md:'bd70ut2h2',lg:'bd70ut2h3',xl:'bd70ut2h4',xxl:'bd70ut2h5'},defaultClass:'bd70ut2h0'},'default':{conditions:{xs:'bd70ut2h6',sm:'bd70ut2h7',md:'bd70ut2h8',lg:'bd70ut2h9',xl:'bd70ut2ha',xxl:'bd70ut2hb'},defaultClass:'bd70ut2h6'},card:{conditions:{xs:'bd70ut2hc',sm:'bd70ut2hd',md:'bd70ut2he',lg:'bd70ut2hf',xl:'bd70ut2hg',xxl:'bd70ut2hh'},defaultClass:'bd70ut2hc'},circle:{conditions:{xs:'bd70ut2hi',sm:'bd70ut2hj',md:'bd70ut2hk',lg:'bd70ut2hl',xl:'bd70ut2hm',xxl:'bd70ut2hn'},defaultClass:'bd70ut2hi'}},responsiveArray:undefined},borderBottomLeftRadius:{values:{'0':{conditions:{xs:'bd70ut2ho',sm:'bd70ut2hp',md:'bd70ut2hq',lg:'bd70ut2hr',xl:'bd70ut2hs',xxl:'bd70ut2ht'},defaultClass:'bd70ut2ho'},'8px':{conditions:{xs:'bd70ut2hu',sm:'bd70ut2hv',md:'bd70ut2hw',lg:'bd70ut2hx',xl:'bd70ut2hy',xxl:'bd70ut2hz'},defaultClass:'bd70ut2hu'},'12px':{conditions:{xs:'bd70ut2i0',sm:'bd70ut2i1',md:'bd70ut2i2',lg:'bd70ut2i3',xl:'bd70ut2i4',xxl:'bd70ut2i5'},defaultClass:'bd70ut2i0'},'20px':{conditions:{xs:'bd70ut2i6',sm:'bd70ut2i7',md:'bd70ut2i8',lg:'bd70ut2i9',xl:'bd70ut2ia',xxl:'bd70ut2ib'},defaultClass:'bd70ut2i6'},small:{conditions:{xs:'bd70ut2ic',sm:'bd70ut2id',md:'bd70ut2ie',lg:'bd70ut2if',xl:'bd70ut2ig',xxl:'bd70ut2ih'},defaultClass:'bd70ut2ic'},'default':{conditions:{xs:'bd70ut2ii',sm:'bd70ut2ij',md:'bd70ut2ik',lg:'bd70ut2il',xl:'bd70ut2im',xxl:'bd70ut2in'},defaultClass:'bd70ut2ii'},card:{conditions:{xs:'bd70ut2io',sm:'bd70ut2ip',md:'bd70ut2iq',lg:'bd70ut2ir',xl:'bd70ut2is',xxl:'bd70ut2it'},defaultClass:'bd70ut2io'},circle:{conditions:{xs:'bd70ut2iu',sm:'bd70ut2iv',md:'bd70ut2iw',lg:'bd70ut2ix',xl:'bd70ut2iy',xxl:'bd70ut2iz'},defaultClass:'bd70ut2iu'}},responsiveArray:undefined},gap:{values:{'0':{conditions:{xs:'bd70ut2j0',sm:'bd70ut2j1',md:'bd70ut2j2',lg:'bd70ut2j3',xl:'bd70ut2j4',xxl:'bd70ut2j5'},defaultClass:'bd70ut2j0'},'1':{conditions:{xs:'bd70ut2j6',sm:'bd70ut2j7',md:'bd70ut2j8',lg:'bd70ut2j9',xl:'bd70ut2ja',xxl:'bd70ut2jb'},defaultClass:'bd70ut2j6'},'2':{conditions:{xs:'bd70ut2jc',sm:'bd70ut2jd',md:'bd70ut2je',lg:'bd70ut2jf',xl:'bd70ut2jg',xxl:'bd70ut2jh'},defaultClass:'bd70ut2jc'},'3':{conditions:{xs:'bd70ut2ji',sm:'bd70ut2jj',md:'bd70ut2jk',lg:'bd70ut2jl',xl:'bd70ut2jm',xxl:'bd70ut2jn'},defaultClass:'bd70ut2ji'},'4':{conditions:{xs:'bd70ut2jo',sm:'bd70ut2jp',md:'bd70ut2jq',lg:'bd70ut2jr',xl:'bd70ut2js',xxl:'bd70ut2jt'},defaultClass:'bd70ut2jo'},'5':{conditions:{xs:'bd70ut2ju',sm:'bd70ut2jv',md:'bd70ut2jw',lg:'bd70ut2jx',xl:'bd70ut2jy',xxl:'bd70ut2jz'},defaultClass:'bd70ut2ju'},'6':{conditions:{xs:'bd70ut2k0',sm:'bd70ut2k1',md:'bd70ut2k2',lg:'bd70ut2k3',xl:'bd70ut2k4',xxl:'bd70ut2k5'},defaultClass:'bd70ut2k0'},'7':{conditions:{xs:'bd70ut2k6',sm:'bd70ut2k7',md:'bd70ut2k8',lg:'bd70ut2k9',xl:'bd70ut2ka',xxl:'bd70ut2kb'},defaultClass:'bd70ut2k6'},'0px':{conditions:{xs:'bd70ut2kc',sm:'bd70ut2kd',md:'bd70ut2ke',lg:'bd70ut2kf',xl:'bd70ut2kg',xxl:'bd70ut2kh'},defaultClass:'bd70ut2kc'},'1rem':{conditions:{xs:'bd70ut2ki',sm:'bd70ut2kj',md:'bd70ut2kk',lg:'bd70ut2kl',xl:'bd70ut2km',xxl:'bd70ut2kn'},defaultClass:'bd70ut2ki'},'1px':{conditions:{xs:'bd70ut2ko',sm:'bd70ut2kp',md:'bd70ut2kq',lg:'bd70ut2kr',xl:'bd70ut2ks',xxl:'bd70ut2kt'},defaultClass:'bd70ut2ko'},'2px':{conditions:{xs:'bd70ut2ku',sm:'bd70ut2kv',md:'bd70ut2kw',lg:'bd70ut2kx',xl:'bd70ut2ky',xxl:'bd70ut2kz'},defaultClass:'bd70ut2ku'},'4px':{conditions:{xs:'bd70ut2l0',sm:'bd70ut2l1',md:'bd70ut2l2',lg:'bd70ut2l3',xl:'bd70ut2l4',xxl:'bd70ut2l5'},defaultClass:'bd70ut2l0'},'8px':{conditions:{xs:'bd70ut2l6',sm:'bd70ut2l7',md:'bd70ut2l8',lg:'bd70ut2l9',xl:'bd70ut2la',xxl:'bd70ut2lb'},defaultClass:'bd70ut2l6'},'12px':{conditions:{xs:'bd70ut2lc',sm:'bd70ut2ld',md:'bd70ut2le',lg:'bd70ut2lf',xl:'bd70ut2lg',xxl:'bd70ut2lh'},defaultClass:'bd70ut2lc'},'14px':{conditions:{xs:'bd70ut2li',sm:'bd70ut2lj',md:'bd70ut2lk',lg:'bd70ut2ll',xl:'bd70ut2lm',xxl:'bd70ut2ln'},defaultClass:'bd70ut2li'},'16px':{conditions:{xs:'bd70ut2lo',sm:'bd70ut2lp',md:'bd70ut2lq',lg:'bd70ut2lr',xl:'bd70ut2ls',xxl:'bd70ut2lt'},defaultClass:'bd70ut2lo'},'20px':{conditions:{xs:'bd70ut2lu',sm:'bd70ut2lv',md:'bd70ut2lw',lg:'bd70ut2lx',xl:'bd70ut2ly',xxl:'bd70ut2lz'},defaultClass:'bd70ut2lu'},'24px':{conditions:{xs:'bd70ut2m0',sm:'bd70ut2m1',md:'bd70ut2m2',lg:'bd70ut2m3',xl:'bd70ut2m4',xxl:'bd70ut2m5'},defaultClass:'bd70ut2m0'},'32px':{conditions:{xs:'bd70ut2m6',sm:'bd70ut2m7',md:'bd70ut2m8',lg:'bd70ut2m9',xl:'bd70ut2ma',xxl:'bd70ut2mb'},defaultClass:'bd70ut2m6'},'48px':{conditions:{xs:'bd70ut2mc',sm:'bd70ut2md',md:'bd70ut2me',lg:'bd70ut2mf',xl:'bd70ut2mg',xxl:'bd70ut2mh'},defaultClass:'bd70ut2mc'},'56px':{conditions:{xs:'bd70ut2mi',sm:'bd70ut2mj',md:'bd70ut2mk',lg:'bd70ut2ml',xl:'bd70ut2mm',xxl:'bd70ut2mn'},defaultClass:'bd70ut2mi'},'64px':{conditions:{xs:'bd70ut2mo',sm:'bd70ut2mp',md:'bd70ut2mq',lg:'bd70ut2mr',xl:'bd70ut2ms',xxl:'bd70ut2mt'},defaultClass:'bd70ut2mo'},sm:{conditions:{xs:'bd70ut2mu',sm:'bd70ut2mv',md:'bd70ut2mw',lg:'bd70ut2mx',xl:'bd70ut2my',xxl:'bd70ut2mz'},defaultClass:'bd70ut2mu'},md:{conditions:{xs:'bd70ut2n0',sm:'bd70ut2n1',md:'bd70ut2n2',lg:'bd70ut2n3',xl:'bd70ut2n4',xxl:'bd70ut2n5'},defaultClass:'bd70ut2n0'},lg:{conditions:{xs:'bd70ut2n6',sm:'bd70ut2n7',md:'bd70ut2n8',lg:'bd70ut2n9',xl:'bd70ut2na',xxl:'bd70ut2nb'},defaultClass:'bd70ut2n6'}},responsiveArray:undefined},rowGap:{values:{'0':{conditions:{xs:'bd70ut2nc',sm:'bd70ut2nd',md:'bd70ut2ne',lg:'bd70ut2nf',xl:'bd70ut2ng',xxl:'bd70ut2nh'},defaultClass:'bd70ut2nc'},'1':{conditions:{xs:'bd70ut2ni',sm:'bd70ut2nj',md:'bd70ut2nk',lg:'bd70ut2nl',xl:'bd70ut2nm',xxl:'bd70ut2nn'},defaultClass:'bd70ut2ni'},'2':{conditions:{xs:'bd70ut2no',sm:'bd70ut2np',md:'bd70ut2nq',lg:'bd70ut2nr',xl:'bd70ut2ns',xxl:'bd70ut2nt'},defaultClass:'bd70ut2no'},'3':{conditions:{xs:'bd70ut2nu',sm:'bd70ut2nv',md:'bd70ut2nw',lg:'bd70ut2nx',xl:'bd70ut2ny',xxl:'bd70ut2nz'},defaultClass:'bd70ut2nu'},'4':{conditions:{xs:'bd70ut2o0',sm:'bd70ut2o1',md:'bd70ut2o2',lg:'bd70ut2o3',xl:'bd70ut2o4',xxl:'bd70ut2o5'},defaultClass:'bd70ut2o0'},'5':{conditions:{xs:'bd70ut2o6',sm:'bd70ut2o7',md:'bd70ut2o8',lg:'bd70ut2o9',xl:'bd70ut2oa',xxl:'bd70ut2ob'},defaultClass:'bd70ut2o6'},'6':{conditions:{xs:'bd70ut2oc',sm:'bd70ut2od',md:'bd70ut2oe',lg:'bd70ut2of',xl:'bd70ut2og',xxl:'bd70ut2oh'},defaultClass:'bd70ut2oc'},'7':{conditions:{xs:'bd70ut2oi',sm:'bd70ut2oj',md:'bd70ut2ok',lg:'bd70ut2ol',xl:'bd70ut2om',xxl:'bd70ut2on'},defaultClass:'bd70ut2oi'},'0px':{conditions:{xs:'bd70ut2oo',sm:'bd70ut2op',md:'bd70ut2oq',lg:'bd70ut2or',xl:'bd70ut2os',xxl:'bd70ut2ot'},defaultClass:'bd70ut2oo'},'1rem':{conditions:{xs:'bd70ut2ou',sm:'bd70ut2ov',md:'bd70ut2ow',lg:'bd70ut2ox',xl:'bd70ut2oy',xxl:'bd70ut2oz'},defaultClass:'bd70ut2ou'},'1px':{conditions:{xs:'bd70ut2p0',sm:'bd70ut2p1',md:'bd70ut2p2',lg:'bd70ut2p3',xl:'bd70ut2p4',xxl:'bd70ut2p5'},defaultClass:'bd70ut2p0'},'2px':{conditions:{xs:'bd70ut2p6',sm:'bd70ut2p7',md:'bd70ut2p8',lg:'bd70ut2p9',xl:'bd70ut2pa',xxl:'bd70ut2pb'},defaultClass:'bd70ut2p6'},'4px':{conditions:{xs:'bd70ut2pc',sm:'bd70ut2pd',md:'bd70ut2pe',lg:'bd70ut2pf',xl:'bd70ut2pg',xxl:'bd70ut2ph'},defaultClass:'bd70ut2pc'},'8px':{conditions:{xs:'bd70ut2pi',sm:'bd70ut2pj',md:'bd70ut2pk',lg:'bd70ut2pl',xl:'bd70ut2pm',xxl:'bd70ut2pn'},defaultClass:'bd70ut2pi'},'12px':{conditions:{xs:'bd70ut2po',sm:'bd70ut2pp',md:'bd70ut2pq',lg:'bd70ut2pr',xl:'bd70ut2ps',xxl:'bd70ut2pt'},defaultClass:'bd70ut2po'},'14px':{conditions:{xs:'bd70ut2pu',sm:'bd70ut2pv',md:'bd70ut2pw',lg:'bd70ut2px',xl:'bd70ut2py',xxl:'bd70ut2pz'},defaultClass:'bd70ut2pu'},'16px':{conditions:{xs:'bd70ut2q0',sm:'bd70ut2q1',md:'bd70ut2q2',lg:'bd70ut2q3',xl:'bd70ut2q4',xxl:'bd70ut2q5'},defaultClass:'bd70ut2q0'},'20px':{conditions:{xs:'bd70ut2q6',sm:'bd70ut2q7',md:'bd70ut2q8',lg:'bd70ut2q9',xl:'bd70ut2qa',xxl:'bd70ut2qb'},defaultClass:'bd70ut2q6'},'24px':{conditions:{xs:'bd70ut2qc',sm:'bd70ut2qd',md:'bd70ut2qe',lg:'bd70ut2qf',xl:'bd70ut2qg',xxl:'bd70ut2qh'},defaultClass:'bd70ut2qc'},'32px':{conditions:{xs:'bd70ut2qi',sm:'bd70ut2qj',md:'bd70ut2qk',lg:'bd70ut2ql',xl:'bd70ut2qm',xxl:'bd70ut2qn'},defaultClass:'bd70ut2qi'},'48px':{conditions:{xs:'bd70ut2qo',sm:'bd70ut2qp',md:'bd70ut2qq',lg:'bd70ut2qr',xl:'bd70ut2qs',xxl:'bd70ut2qt'},defaultClass:'bd70ut2qo'},'56px':{conditions:{xs:'bd70ut2qu',sm:'bd70ut2qv',md:'bd70ut2qw',lg:'bd70ut2qx',xl:'bd70ut2qy',xxl:'bd70ut2qz'},defaultClass:'bd70ut2qu'},'64px':{conditions:{xs:'bd70ut2r0',sm:'bd70ut2r1',md:'bd70ut2r2',lg:'bd70ut2r3',xl:'bd70ut2r4',xxl:'bd70ut2r5'},defaultClass:'bd70ut2r0'},sm:{conditions:{xs:'bd70ut2r6',sm:'bd70ut2r7',md:'bd70ut2r8',lg:'bd70ut2r9',xl:'bd70ut2ra',xxl:'bd70ut2rb'},defaultClass:'bd70ut2r6'},md:{conditions:{xs:'bd70ut2rc',sm:'bd70ut2rd',md:'bd70ut2re',lg:'bd70ut2rf',xl:'bd70ut2rg',xxl:'bd70ut2rh'},defaultClass:'bd70ut2rc'},lg:{conditions:{xs:'bd70ut2ri',sm:'bd70ut2rj',md:'bd70ut2rk',lg:'bd70ut2rl',xl:'bd70ut2rm',xxl:'bd70ut2rn'},defaultClass:'bd70ut2ri'}},responsiveArray:undefined},columnGap:{values:{'0':{conditions:{xs:'bd70ut2ro',sm:'bd70ut2rp',md:'bd70ut2rq',lg:'bd70ut2rr',xl:'bd70ut2rs',xxl:'bd70ut2rt'},defaultClass:'bd70ut2ro'},'1':{conditions:{xs:'bd70ut2ru',sm:'bd70ut2rv',md:'bd70ut2rw',lg:'bd70ut2rx',xl:'bd70ut2ry',xxl:'bd70ut2rz'},defaultClass:'bd70ut2ru'},'2':{conditions:{xs:'bd70ut2s0',sm:'bd70ut2s1',md:'bd70ut2s2',lg:'bd70ut2s3',xl:'bd70ut2s4',xxl:'bd70ut2s5'},defaultClass:'bd70ut2s0'},'3':{conditions:{xs:'bd70ut2s6',sm:'bd70ut2s7',md:'bd70ut2s8',lg:'bd70ut2s9',xl:'bd70ut2sa',xxl:'bd70ut2sb'},defaultClass:'bd70ut2s6'},'4':{conditions:{xs:'bd70ut2sc',sm:'bd70ut2sd',md:'bd70ut2se',lg:'bd70ut2sf',xl:'bd70ut2sg',xxl:'bd70ut2sh'},defaultClass:'bd70ut2sc'},'5':{conditions:{xs:'bd70ut2si',sm:'bd70ut2sj',md:'bd70ut2sk',lg:'bd70ut2sl',xl:'bd70ut2sm',xxl:'bd70ut2sn'},defaultClass:'bd70ut2si'},'6':{conditions:{xs:'bd70ut2so',sm:'bd70ut2sp',md:'bd70ut2sq',lg:'bd70ut2sr',xl:'bd70ut2ss',xxl:'bd70ut2st'},defaultClass:'bd70ut2so'},'7':{conditions:{xs:'bd70ut2su',sm:'bd70ut2sv',md:'bd70ut2sw',lg:'bd70ut2sx',xl:'bd70ut2sy',xxl:'bd70ut2sz'},defaultClass:'bd70ut2su'},'0px':{conditions:{xs:'bd70ut2t0',sm:'bd70ut2t1',md:'bd70ut2t2',lg:'bd70ut2t3',xl:'bd70ut2t4',xxl:'bd70ut2t5'},defaultClass:'bd70ut2t0'},'1rem':{conditions:{xs:'bd70ut2t6',sm:'bd70ut2t7',md:'bd70ut2t8',lg:'bd70ut2t9',xl:'bd70ut2ta',xxl:'bd70ut2tb'},defaultClass:'bd70ut2t6'},'1px':{conditions:{xs:'bd70ut2tc',sm:'bd70ut2td',md:'bd70ut2te',lg:'bd70ut2tf',xl:'bd70ut2tg',xxl:'bd70ut2th'},defaultClass:'bd70ut2tc'},'2px':{conditions:{xs:'bd70ut2ti',sm:'bd70ut2tj',md:'bd70ut2tk',lg:'bd70ut2tl',xl:'bd70ut2tm',xxl:'bd70ut2tn'},defaultClass:'bd70ut2ti'},'4px':{conditions:{xs:'bd70ut2to',sm:'bd70ut2tp',md:'bd70ut2tq',lg:'bd70ut2tr',xl:'bd70ut2ts',xxl:'bd70ut2tt'},defaultClass:'bd70ut2to'},'8px':{conditions:{xs:'bd70ut2tu',sm:'bd70ut2tv',md:'bd70ut2tw',lg:'bd70ut2tx',xl:'bd70ut2ty',xxl:'bd70ut2tz'},defaultClass:'bd70ut2tu'},'12px':{conditions:{xs:'bd70ut2u0',sm:'bd70ut2u1',md:'bd70ut2u2',lg:'bd70ut2u3',xl:'bd70ut2u4',xxl:'bd70ut2u5'},defaultClass:'bd70ut2u0'},'14px':{conditions:{xs:'bd70ut2u6',sm:'bd70ut2u7',md:'bd70ut2u8',lg:'bd70ut2u9',xl:'bd70ut2ua',xxl:'bd70ut2ub'},defaultClass:'bd70ut2u6'},'16px':{conditions:{xs:'bd70ut2uc',sm:'bd70ut2ud',md:'bd70ut2ue',lg:'bd70ut2uf',xl:'bd70ut2ug',xxl:'bd70ut2uh'},defaultClass:'bd70ut2uc'},'20px':{conditions:{xs:'bd70ut2ui',sm:'bd70ut2uj',md:'bd70ut2uk',lg:'bd70ut2ul',xl:'bd70ut2um',xxl:'bd70ut2un'},defaultClass:'bd70ut2ui'},'24px':{conditions:{xs:'bd70ut2uo',sm:'bd70ut2up',md:'bd70ut2uq',lg:'bd70ut2ur',xl:'bd70ut2us',xxl:'bd70ut2ut'},defaultClass:'bd70ut2uo'},'32px':{conditions:{xs:'bd70ut2uu',sm:'bd70ut2uv',md:'bd70ut2uw',lg:'bd70ut2ux',xl:'bd70ut2uy',xxl:'bd70ut2uz'},defaultClass:'bd70ut2uu'},'48px':{conditions:{xs:'bd70ut2v0',sm:'bd70ut2v1',md:'bd70ut2v2',lg:'bd70ut2v3',xl:'bd70ut2v4',xxl:'bd70ut2v5'},defaultClass:'bd70ut2v0'},'56px':{conditions:{xs:'bd70ut2v6',sm:'bd70ut2v7',md:'bd70ut2v8',lg:'bd70ut2v9',xl:'bd70ut2va',xxl:'bd70ut2vb'},defaultClass:'bd70ut2v6'},'64px':{conditions:{xs:'bd70ut2vc',sm:'bd70ut2vd',md:'bd70ut2ve',lg:'bd70ut2vf',xl:'bd70ut2vg',xxl:'bd70ut2vh'},defaultClass:'bd70ut2vc'},sm:{conditions:{xs:'bd70ut2vi',sm:'bd70ut2vj',md:'bd70ut2vk',lg:'bd70ut2vl',xl:'bd70ut2vm',xxl:'bd70ut2vn'},defaultClass:'bd70ut2vi'},md:{conditions:{xs:'bd70ut2vo',sm:'bd70ut2vp',md:'bd70ut2vq',lg:'bd70ut2vr',xl:'bd70ut2vs',xxl:'bd70ut2vt'},defaultClass:'bd70ut2vo'},lg:{conditions:{xs:'bd70ut2vu',sm:'bd70ut2vv',md:'bd70ut2vw',lg:'bd70ut2vx',xl:'bd70ut2vy',xxl:'bd70ut2vz'},defaultClass:'bd70ut2vu'}},responsiveArray:undefined},gridAutoRows:{values:{auto:{conditions:{xs:'bd70ut2w0',sm:'bd70ut2w1',md:'bd70ut2w2',lg:'bd70ut2w3',xl:'bd70ut2w4',xxl:'bd70ut2w5'},defaultClass:'bd70ut2w0'}},responsiveArray:undefined},opacity:{values:{'0.5':{conditions:{xs:'bd70ut2w6',sm:'bd70ut2w7',md:'bd70ut2w8',lg:'bd70ut2w9',xl:'bd70ut2wa',xxl:'bd70ut2wb'},defaultClass:'bd70ut2w6'},'0.6':{conditions:{xs:'bd70ut2wc',sm:'bd70ut2wd',md:'bd70ut2we',lg:'bd70ut2wf',xl:'bd70ut2wg',xxl:'bd70ut2wh'},defaultClass:'bd70ut2wc'}},responsiveArray:undefined},lineHeight:{values:{'16px':{conditions:{xs:'bd70ut2wi',sm:'bd70ut2wj',md:'bd70ut2wk',lg:'bd70ut2wl',xl:'bd70ut2wm',xxl:'bd70ut2wn'},defaultClass:'bd70ut2wi'}},responsiveArray:undefined},borderBottomColor:{values:{light:{conditions:{xs:'bd70ut2wo',sm:'bd70ut2wp',md:'bd70ut2wq',lg:'bd70ut2wr',xl:'bd70ut2ws',xxl:'bd70ut2wt'},defaultClass:'bd70ut2wo'},dark:{conditions:{xs:'bd70ut2wu',sm:'bd70ut2wv',md:'bd70ut2ww',lg:'bd70ut2wx',xl:'bd70ut2wy',xxl:'bd70ut2wz'},defaultClass:'bd70ut2wu'},white:{conditions:{xs:'bd70ut2x0',sm:'bd70ut2x1',md:'bd70ut2x2',lg:'bd70ut2x3',xl:'bd70ut2x4',xxl:'bd70ut2x5'},defaultClass:'bd70ut2x0'},failure:{conditions:{xs:'bd70ut2x6',sm:'bd70ut2x7',md:'bd70ut2x8',lg:'bd70ut2x9',xl:'bd70ut2xa',xxl:'bd70ut2xb'},defaultClass:'bd70ut2x6'},failure33:{conditions:{xs:'bd70ut2xc',sm:'bd70ut2xd',md:'bd70ut2xe',lg:'bd70ut2xf',xl:'bd70ut2xg',xxl:'bd70ut2xh'},defaultClass:'bd70ut2xc'},primary:{conditions:{xs:'bd70ut2xi',sm:'bd70ut2xj',md:'bd70ut2xk',lg:'bd70ut2xl',xl:'bd70ut2xm',xxl:'bd70ut2xn'},defaultClass:'bd70ut2xi'},primary0f:{conditions:{xs:'bd70ut2xo',sm:'bd70ut2xp',md:'bd70ut2xq',lg:'bd70ut2xr',xl:'bd70ut2xs',xxl:'bd70ut2xt'},defaultClass:'bd70ut2xo'},primary3D:{conditions:{xs:'bd70ut2xu',sm:'bd70ut2xv',md:'bd70ut2xw',lg:'bd70ut2xx',xl:'bd70ut2xy',xxl:'bd70ut2xz'},defaultClass:'bd70ut2xu'},primaryBright:{conditions:{xs:'bd70ut2y0',sm:'bd70ut2y1',md:'bd70ut2y2',lg:'bd70ut2y3',xl:'bd70ut2y4',xxl:'bd70ut2y5'},defaultClass:'bd70ut2y0'},primaryDark:{conditions:{xs:'bd70ut2y6',sm:'bd70ut2y7',md:'bd70ut2y8',lg:'bd70ut2y9',xl:'bd70ut2ya',xxl:'bd70ut2yb'},defaultClass:'bd70ut2y6'},success:{conditions:{xs:'bd70ut2yc',sm:'bd70ut2yd',md:'bd70ut2ye',lg:'bd70ut2yf',xl:'bd70ut2yg',xxl:'bd70ut2yh'},defaultClass:'bd70ut2yc'},success19:{conditions:{xs:'bd70ut2yi',sm:'bd70ut2yj',md:'bd70ut2yk',lg:'bd70ut2yl',xl:'bd70ut2ym',xxl:'bd70ut2yn'},defaultClass:'bd70ut2yi'},warning:{conditions:{xs:'bd70ut2yo',sm:'bd70ut2yp',md:'bd70ut2yq',lg:'bd70ut2yr',xl:'bd70ut2ys',xxl:'bd70ut2yt'},defaultClass:'bd70ut2yo'},warning2D:{conditions:{xs:'bd70ut2yu',sm:'bd70ut2yv',md:'bd70ut2yw',lg:'bd70ut2yx',xl:'bd70ut2yy',xxl:'bd70ut2yz'},defaultClass:'bd70ut2yu'},warning33:{conditions:{xs:'bd70ut2z0',sm:'bd70ut2z1',md:'bd70ut2z2',lg:'bd70ut2z3',xl:'bd70ut2z4',xxl:'bd70ut2z5'},defaultClass:'bd70ut2z0'},binance:{conditions:{xs:'bd70ut2z6',sm:'bd70ut2z7',md:'bd70ut2z8',lg:'bd70ut2z9',xl:'bd70ut2za',xxl:'bd70ut2zb'},defaultClass:'bd70ut2z6'},overlay:{conditions:{xs:'bd70ut2zc',sm:'bd70ut2zd',md:'bd70ut2ze',lg:'bd70ut2zf',xl:'bd70ut2zg',xxl:'bd70ut2zh'},defaultClass:'bd70ut2zc'},gold:{conditions:{xs:'bd70ut2zi',sm:'bd70ut2zj',md:'bd70ut2zk',lg:'bd70ut2zl',xl:'bd70ut2zm',xxl:'bd70ut2zn'},defaultClass:'bd70ut2zi'},silver:{conditions:{xs:'bd70ut2zo',sm:'bd70ut2zp',md:'bd70ut2zq',lg:'bd70ut2zr',xl:'bd70ut2zs',xxl:'bd70ut2zt'},defaultClass:'bd70ut2zo'},bronze:{conditions:{xs:'bd70ut2zu',sm:'bd70ut2zv',md:'bd70ut2zw',lg:'bd70ut2zx',xl:'bd70ut2zy',xxl:'bd70ut2zz'},defaultClass:'bd70ut2zu'},secondary:{conditions:{xs:'bd70ut300',sm:'bd70ut301',md:'bd70ut302',lg:'bd70ut303',xl:'bd70ut304',xxl:'bd70ut305'},defaultClass:'bd70ut300'},secondary80:{conditions:{xs:'bd70ut306',sm:'bd70ut307',md:'bd70ut308',lg:'bd70ut309',xl:'bd70ut30a',xxl:'bd70ut30b'},defaultClass:'bd70ut306'},background:{conditions:{xs:'bd70ut30c',sm:'bd70ut30d',md:'bd70ut30e',lg:'bd70ut30f',xl:'bd70ut30g',xxl:'bd70ut30h'},defaultClass:'bd70ut30c'},backgroundDisabled:{conditions:{xs:'bd70ut30i',sm:'bd70ut30j',md:'bd70ut30k',lg:'bd70ut30l',xl:'bd70ut30m',xxl:'bd70ut30n'},defaultClass:'bd70ut30i'},backgroundAlt:{conditions:{xs:'bd70ut30o',sm:'bd70ut30p',md:'bd70ut30q',lg:'bd70ut30r',xl:'bd70ut30s',xxl:'bd70ut30t'},defaultClass:'bd70ut30o'},backgroundAlt2:{conditions:{xs:'bd70ut30u',sm:'bd70ut30v',md:'bd70ut30w',lg:'bd70ut30x',xl:'bd70ut30y',xxl:'bd70ut30z'},defaultClass:'bd70ut30u'},cardBorder:{conditions:{xs:'bd70ut310',sm:'bd70ut311',md:'bd70ut312',lg:'bd70ut313',xl:'bd70ut314',xxl:'bd70ut315'},defaultClass:'bd70ut310'},contrast:{conditions:{xs:'bd70ut316',sm:'bd70ut317',md:'bd70ut318',lg:'bd70ut319',xl:'bd70ut31a',xxl:'bd70ut31b'},defaultClass:'bd70ut316'},dropdown:{conditions:{xs:'bd70ut31c',sm:'bd70ut31d',md:'bd70ut31e',lg:'bd70ut31f',xl:'bd70ut31g',xxl:'bd70ut31h'},defaultClass:'bd70ut31c'},dropdownDeep:{conditions:{xs:'bd70ut31i',sm:'bd70ut31j',md:'bd70ut31k',lg:'bd70ut31l',xl:'bd70ut31m',xxl:'bd70ut31n'},defaultClass:'bd70ut31i'},invertedContrast:{conditions:{xs:'bd70ut31o',sm:'bd70ut31p',md:'bd70ut31q',lg:'bd70ut31r',xl:'bd70ut31s',xxl:'bd70ut31t'},defaultClass:'bd70ut31o'},input:{conditions:{xs:'bd70ut31u',sm:'bd70ut31v',md:'bd70ut31w',lg:'bd70ut31x',xl:'bd70ut31y',xxl:'bd70ut31z'},defaultClass:'bd70ut31u'},inputSecondary:{conditions:{xs:'bd70ut320',sm:'bd70ut321',md:'bd70ut322',lg:'bd70ut323',xl:'bd70ut324',xxl:'bd70ut325'},defaultClass:'bd70ut320'},tertiary:{conditions:{xs:'bd70ut326',sm:'bd70ut327',md:'bd70ut328',lg:'bd70ut329',xl:'bd70ut32a',xxl:'bd70ut32b'},defaultClass:'bd70ut326'},text:{conditions:{xs:'bd70ut32c',sm:'bd70ut32d',md:'bd70ut32e',lg:'bd70ut32f',xl:'bd70ut32g',xxl:'bd70ut32h'},defaultClass:'bd70ut32c'},text99:{conditions:{xs:'bd70ut32i',sm:'bd70ut32j',md:'bd70ut32k',lg:'bd70ut32l',xl:'bd70ut32m',xxl:'bd70ut32n'},defaultClass:'bd70ut32i'},textDisabled:{conditions:{xs:'bd70ut32o',sm:'bd70ut32p',md:'bd70ut32q',lg:'bd70ut32r',xl:'bd70ut32s',xxl:'bd70ut32t'},defaultClass:'bd70ut32o'},textSubtle:{conditions:{xs:'bd70ut32u',sm:'bd70ut32v',md:'bd70ut32w',lg:'bd70ut32x',xl:'bd70ut32y',xxl:'bd70ut32z'},defaultClass:'bd70ut32u'},disabled:{conditions:{xs:'bd70ut330',sm:'bd70ut331',md:'bd70ut332',lg:'bd70ut333',xl:'bd70ut334',xxl:'bd70ut335'},defaultClass:'bd70ut330'},gradientBubblegum:{conditions:{xs:'bd70ut336',sm:'bd70ut337',md:'bd70ut338',lg:'bd70ut339',xl:'bd70ut33a',xxl:'bd70ut33b'},defaultClass:'bd70ut336'},gradientInverseBubblegum:{conditions:{xs:'bd70ut33c',sm:'bd70ut33d',md:'bd70ut33e',lg:'bd70ut33f',xl:'bd70ut33g',xxl:'bd70ut33h'},defaultClass:'bd70ut33c'},gradientCardHeader:{conditions:{xs:'bd70ut33i',sm:'bd70ut33j',md:'bd70ut33k',lg:'bd70ut33l',xl:'bd70ut33m',xxl:'bd70ut33n'},defaultClass:'bd70ut33i'},gradientBlue:{conditions:{xs:'bd70ut33o',sm:'bd70ut33p',md:'bd70ut33q',lg:'bd70ut33r',xl:'bd70ut33s',xxl:'bd70ut33t'},defaultClass:'bd70ut33o'},gradientViolet:{conditions:{xs:'bd70ut33u',sm:'bd70ut33v',md:'bd70ut33w',lg:'bd70ut33x',xl:'bd70ut33y',xxl:'bd70ut33z'},defaultClass:'bd70ut33u'},gradientVioletAlt:{conditions:{xs:'bd70ut340',sm:'bd70ut341',md:'bd70ut342',lg:'bd70ut343',xl:'bd70ut344',xxl:'bd70ut345'},defaultClass:'bd70ut340'},gradientGold:{conditions:{xs:'bd70ut346',sm:'bd70ut347',md:'bd70ut348',lg:'bd70ut349',xl:'bd70ut34a',xxl:'bd70ut34b'},defaultClass:'bd70ut346'},gradientBold:{conditions:{xs:'bd70ut34c',sm:'bd70ut34d',md:'bd70ut34e',lg:'bd70ut34f',xl:'bd70ut34g',xxl:'bd70ut34h'},defaultClass:'bd70ut34c'}},responsiveArray:undefined},border:{values:{'1':{conditions:{xs:'bd70ut34i',sm:'bd70ut34j',md:'bd70ut34k',lg:'bd70ut34l',xl:'bd70ut34m',xxl:'bd70ut34n'},defaultClass:'bd70ut34i'}},responsiveArray:undefined},borderBottom:{values:{'1':{conditions:{xs:'bd70ut34o',sm:'bd70ut34p',md:'bd70ut34q',lg:'bd70ut34r',xl:'bd70ut34s',xxl:'bd70ut34t'},defaultClass:'bd70ut34o'}},responsiveArray:undefined}}};x.styles.display.responsiveArray=x.conditions.responsiveArray;x.styles.flexDirection.responsiveArray=x.conditions.responsiveArray;x.styles.alignItems.responsiveArray=x.conditions.responsiveArray;x.styles.alignSelf.responsiveArray=x.conditions.responsiveArray;x.styles.flexWrap.responsiveArray=x.conditions.responsiveArray;x.styles.flexGrow.responsiveArray=x.conditions.responsiveArray;x.styles.overflow.responsiveArray=x.conditions.responsiveArray;x.styles.overflowY.responsiveArray=x.conditions.responsiveArray;x.styles.overflowX.responsiveArray=x.conditions.responsiveArray;x.styles.position.responsiveArray=x.conditions.responsiveArray;x.styles.textAlign.responsiveArray=x.conditions.responsiveArray;x.styles.justifyContent.responsiveArray=x.conditions.responsiveArray;x.styles.justifyItems.responsiveArray=x.conditions.responsiveArray;x.styles.justifySelf.responsiveArray=x.conditions.responsiveArray;x.styles.inset.responsiveArray=x.conditions.responsiveArray;x.styles.height.responsiveArray=x.conditions.responsiveArray;x.styles.marginBottom.responsiveArray=x.conditions.responsiveArray;x.styles.marginLeft.responsiveArray=x.conditions.responsiveArray;x.styles.marginRight.responsiveArray=x.conditions.responsiveArray;x.styles.marginTop.responsiveArray=x.conditions.responsiveArray;x.styles.margin.responsiveArray=x.conditions.responsiveArray;x.styles.padding.responsiveArray=x.conditions.responsiveArray;x.styles.maxHeight.responsiveArray=x.conditions.responsiveArray;x.styles.maxWidth.responsiveArray=x.conditions.responsiveArray;x.styles.minHeight.responsiveArray=x.conditions.responsiveArray;x.styles.minWidth.responsiveArray=x.conditions.responsiveArray;x.styles.paddingBottom.responsiveArray=x.conditions.responsiveArray;x.styles.paddingLeft.responsiveArray=x.conditions.responsiveArray;x.styles.paddingRight.responsiveArray=x.conditions.responsiveArray;x.styles.paddingTop.responsiveArray=x.conditions.responsiveArray;x.styles.fontSize.responsiveArray=x.conditions.responsiveArray;x.styles.flex.responsiveArray=x.conditions.responsiveArray;x.styles.boxShadow.responsiveArray=x.conditions.responsiveArray;x.styles.width.responsiveArray=x.conditions.responsiveArray;x.styles.zIndex.responsiveArray=x.conditions.responsiveArray;x.styles.borderTop.responsiveArray=x.conditions.responsiveArray;x.styles.borderRadius.responsiveArray=x.conditions.responsiveArray;x.styles.borderTopLeftRadius.responsiveArray=x.conditions.responsiveArray;x.styles.borderBottomRightRadius.responsiveArray=x.conditions.responsiveArray;x.styles.borderTopRightRadius.responsiveArray=x.conditions.responsiveArray;x.styles.borderBottomLeftRadius.responsiveArray=x.conditions.responsiveArray;x.styles.gap.responsiveArray=x.conditions.responsiveArray;x.styles.rowGap.responsiveArray=x.conditions.responsiveArray;x.styles.columnGap.responsiveArray=x.conditions.responsiveArray;x.styles.gridAutoRows.responsiveArray=x.conditions.responsiveArray;x.styles.opacity.responsiveArray=x.conditions.responsiveArray;x.styles.lineHeight.responsiveArray=x.conditions.responsiveArray;x.styles.borderBottomColor.responsiveArray=x.conditions.responsiveArray;x.styles.border.responsiveArray=x.conditions.responsiveArray;x.styles.borderBottom.responsiveArray=x.conditions.responsiveArray;return x;}()),{conditions:undefined,styles:{isolation:{values:{isolate:{defaultClass:'bd70ut34u'}}},objectFit:{values:{contain:{defaultClass:'bd70ut34v'},cover:{defaultClass:'bd70ut34w'},none:{defaultClass:'bd70ut34x'}}},pointerEvents:{values:{none:{defaultClass:'bd70ut34y'}}},textTransform:{values:{capitalize:{defaultClass:'bd70ut34z'},lowercase:{defaultClass:'bd70ut350'},uppercase:{defaultClass:'bd70ut351'}}},cursor:{values:{'default':{defaultClass:'bd70ut352'},pointer:{defaultClass:'bd70ut353'},'not-allowed':{defaultClass:'bd70ut354'}}},visibility:{values:{hidden:{defaultClass:'bd70ut355'},visible:{defaultClass:'bd70ut356'}}},whiteSpace:{values:{normal:{defaultClass:'bd70ut357'},nowrap:{defaultClass:'bd70ut358'},pre:{defaultClass:'bd70ut359'},'pre-line':{defaultClass:'bd70ut35a'},'pre-wrap':{defaultClass:'bd70ut35b'}}},wordBreak:{values:{'break-word':{defaultClass:'bd70ut35c'}}},wordWrap:{values:{normal:{defaultClass:'bd70ut35d'},'break-word':{defaultClass:'bd70ut35e'}}}}},{conditions:{defaultCondition:'base',conditionNames:['base','hover','focus','active'],responsiveArray:undefined},styles:{bgc:{mappings:['backgroundColor']},bg:{mappings:['background']},background:{values:{light:{conditions:{base:'bd70ut35f',hover:'bd70ut35g',focus:'bd70ut35h',active:'bd70ut35i'},defaultClass:'bd70ut35f'},dark:{conditions:{base:'bd70ut35j',hover:'bd70ut35k',focus:'bd70ut35l',active:'bd70ut35m'},defaultClass:'bd70ut35j'},white:{conditions:{base:'bd70ut35n',hover:'bd70ut35o',focus:'bd70ut35p',active:'bd70ut35q'},defaultClass:'bd70ut35n'},failure:{conditions:{base:'bd70ut35r',hover:'bd70ut35s',focus:'bd70ut35t',active:'bd70ut35u'},defaultClass:'bd70ut35r'},failure33:{conditions:{base:'bd70ut35v',hover:'bd70ut35w',focus:'bd70ut35x',active:'bd70ut35y'},defaultClass:'bd70ut35v'},primary:{conditions:{base:'bd70ut35z',hover:'bd70ut360',focus:'bd70ut361',active:'bd70ut362'},defaultClass:'bd70ut35z'},primary0f:{conditions:{base:'bd70ut363',hover:'bd70ut364',focus:'bd70ut365',active:'bd70ut366'},defaultClass:'bd70ut363'},primary3D:{conditions:{base:'bd70ut367',hover:'bd70ut368',focus:'bd70ut369',active:'bd70ut36a'},defaultClass:'bd70ut367'},primaryBright:{conditions:{base:'bd70ut36b',hover:'bd70ut36c',focus:'bd70ut36d',active:'bd70ut36e'},defaultClass:'bd70ut36b'},primaryDark:{conditions:{base:'bd70ut36f',hover:'bd70ut36g',focus:'bd70ut36h',active:'bd70ut36i'},defaultClass:'bd70ut36f'},success:{conditions:{base:'bd70ut36j',hover:'bd70ut36k',focus:'bd70ut36l',active:'bd70ut36m'},defaultClass:'bd70ut36j'},success19:{conditions:{base:'bd70ut36n',hover:'bd70ut36o',focus:'bd70ut36p',active:'bd70ut36q'},defaultClass:'bd70ut36n'},warning:{conditions:{base:'bd70ut36r',hover:'bd70ut36s',focus:'bd70ut36t',active:'bd70ut36u'},defaultClass:'bd70ut36r'},warning2D:{conditions:{base:'bd70ut36v',hover:'bd70ut36w',focus:'bd70ut36x',active:'bd70ut36y'},defaultClass:'bd70ut36v'},warning33:{conditions:{base:'bd70ut36z',hover:'bd70ut370',focus:'bd70ut371',active:'bd70ut372'},defaultClass:'bd70ut36z'},binance:{conditions:{base:'bd70ut373',hover:'bd70ut374',focus:'bd70ut375',active:'bd70ut376'},defaultClass:'bd70ut373'},overlay:{conditions:{base:'bd70ut377',hover:'bd70ut378',focus:'bd70ut379',active:'bd70ut37a'},defaultClass:'bd70ut377'},gold:{conditions:{base:'bd70ut37b',hover:'bd70ut37c',focus:'bd70ut37d',active:'bd70ut37e'},defaultClass:'bd70ut37b'},silver:{conditions:{base:'bd70ut37f',hover:'bd70ut37g',focus:'bd70ut37h',active:'bd70ut37i'},defaultClass:'bd70ut37f'},bronze:{conditions:{base:'bd70ut37j',hover:'bd70ut37k',focus:'bd70ut37l',active:'bd70ut37m'},defaultClass:'bd70ut37j'},secondary:{conditions:{base:'bd70ut37n',hover:'bd70ut37o',focus:'bd70ut37p',active:'bd70ut37q'},defaultClass:'bd70ut37n'},secondary80:{conditions:{base:'bd70ut37r',hover:'bd70ut37s',focus:'bd70ut37t',active:'bd70ut37u'},defaultClass:'bd70ut37r'},background:{conditions:{base:'bd70ut37v',hover:'bd70ut37w',focus:'bd70ut37x',active:'bd70ut37y'},defaultClass:'bd70ut37v'},backgroundDisabled:{conditions:{base:'bd70ut37z',hover:'bd70ut380',focus:'bd70ut381',active:'bd70ut382'},defaultClass:'bd70ut37z'},backgroundAlt:{conditions:{base:'bd70ut383',hover:'bd70ut384',focus:'bd70ut385',active:'bd70ut386'},defaultClass:'bd70ut383'},backgroundAlt2:{conditions:{base:'bd70ut387',hover:'bd70ut388',focus:'bd70ut389',active:'bd70ut38a'},defaultClass:'bd70ut387'},cardBorder:{conditions:{base:'bd70ut38b',hover:'bd70ut38c',focus:'bd70ut38d',active:'bd70ut38e'},defaultClass:'bd70ut38b'},contrast:{conditions:{base:'bd70ut38f',hover:'bd70ut38g',focus:'bd70ut38h',active:'bd70ut38i'},defaultClass:'bd70ut38f'},dropdown:{conditions:{base:'bd70ut38j',hover:'bd70ut38k',focus:'bd70ut38l',active:'bd70ut38m'},defaultClass:'bd70ut38j'},dropdownDeep:{conditions:{base:'bd70ut38n',hover:'bd70ut38o',focus:'bd70ut38p',active:'bd70ut38q'},defaultClass:'bd70ut38n'},invertedContrast:{conditions:{base:'bd70ut38r',hover:'bd70ut38s',focus:'bd70ut38t',active:'bd70ut38u'},defaultClass:'bd70ut38r'},input:{conditions:{base:'bd70ut38v',hover:'bd70ut38w',focus:'bd70ut38x',active:'bd70ut38y'},defaultClass:'bd70ut38v'},inputSecondary:{conditions:{base:'bd70ut38z',hover:'bd70ut390',focus:'bd70ut391',active:'bd70ut392'},defaultClass:'bd70ut38z'},tertiary:{conditions:{base:'bd70ut393',hover:'bd70ut394',focus:'bd70ut395',active:'bd70ut396'},defaultClass:'bd70ut393'},text:{conditions:{base:'bd70ut397',hover:'bd70ut398',focus:'bd70ut399',active:'bd70ut39a'},defaultClass:'bd70ut397'},text99:{conditions:{base:'bd70ut39b',hover:'bd70ut39c',focus:'bd70ut39d',active:'bd70ut39e'},defaultClass:'bd70ut39b'},textDisabled:{conditions:{base:'bd70ut39f',hover:'bd70ut39g',focus:'bd70ut39h',active:'bd70ut39i'},defaultClass:'bd70ut39f'},textSubtle:{conditions:{base:'bd70ut39j',hover:'bd70ut39k',focus:'bd70ut39l',active:'bd70ut39m'},defaultClass:'bd70ut39j'},disabled:{conditions:{base:'bd70ut39n',hover:'bd70ut39o',focus:'bd70ut39p',active:'bd70ut39q'},defaultClass:'bd70ut39n'},gradientBubblegum:{conditions:{base:'bd70ut39r',hover:'bd70ut39s',focus:'bd70ut39t',active:'bd70ut39u'},defaultClass:'bd70ut39r'},gradientInverseBubblegum:{conditions:{base:'bd70ut39v',hover:'bd70ut39w',focus:'bd70ut39x',active:'bd70ut39y'},defaultClass:'bd70ut39v'},gradientCardHeader:{conditions:{base:'bd70ut39z',hover:'bd70ut3a0',focus:'bd70ut3a1',active:'bd70ut3a2'},defaultClass:'bd70ut39z'},gradientBlue:{conditions:{base:'bd70ut3a3',hover:'bd70ut3a4',focus:'bd70ut3a5',active:'bd70ut3a6'},defaultClass:'bd70ut3a3'},gradientViolet:{conditions:{base:'bd70ut3a7',hover:'bd70ut3a8',focus:'bd70ut3a9',active:'bd70ut3aa'},defaultClass:'bd70ut3a7'},gradientVioletAlt:{conditions:{base:'bd70ut3ab',hover:'bd70ut3ac',focus:'bd70ut3ad',active:'bd70ut3ae'},defaultClass:'bd70ut3ab'},gradientGold:{conditions:{base:'bd70ut3af',hover:'bd70ut3ag',focus:'bd70ut3ah',active:'bd70ut3ai'},defaultClass:'bd70ut3af'},gradientBold:{conditions:{base:'bd70ut3aj',hover:'bd70ut3ak',focus:'bd70ut3al',active:'bd70ut3am'},defaultClass:'bd70ut3aj'}}},backgroundColor:{values:{light:{conditions:{base:'bd70ut3an',hover:'bd70ut3ao',focus:'bd70ut3ap',active:'bd70ut3aq'},defaultClass:'bd70ut3an'},dark:{conditions:{base:'bd70ut3ar',hover:'bd70ut3as',focus:'bd70ut3at',active:'bd70ut3au'},defaultClass:'bd70ut3ar'},white:{conditions:{base:'bd70ut3av',hover:'bd70ut3aw',focus:'bd70ut3ax',active:'bd70ut3ay'},defaultClass:'bd70ut3av'},failure:{conditions:{base:'bd70ut3az',hover:'bd70ut3b0',focus:'bd70ut3b1',active:'bd70ut3b2'},defaultClass:'bd70ut3az'},failure33:{conditions:{base:'bd70ut3b3',hover:'bd70ut3b4',focus:'bd70ut3b5',active:'bd70ut3b6'},defaultClass:'bd70ut3b3'},primary:{conditions:{base:'bd70ut3b7',hover:'bd70ut3b8',focus:'bd70ut3b9',active:'bd70ut3ba'},defaultClass:'bd70ut3b7'},primary0f:{conditions:{base:'bd70ut3bb',hover:'bd70ut3bc',focus:'bd70ut3bd',active:'bd70ut3be'},defaultClass:'bd70ut3bb'},primary3D:{conditions:{base:'bd70ut3bf',hover:'bd70ut3bg',focus:'bd70ut3bh',active:'bd70ut3bi'},defaultClass:'bd70ut3bf'},primaryBright:{conditions:{base:'bd70ut3bj',hover:'bd70ut3bk',focus:'bd70ut3bl',active:'bd70ut3bm'},defaultClass:'bd70ut3bj'},primaryDark:{conditions:{base:'bd70ut3bn',hover:'bd70ut3bo',focus:'bd70ut3bp',active:'bd70ut3bq'},defaultClass:'bd70ut3bn'},success:{conditions:{base:'bd70ut3br',hover:'bd70ut3bs',focus:'bd70ut3bt',active:'bd70ut3bu'},defaultClass:'bd70ut3br'},success19:{conditions:{base:'bd70ut3bv',hover:'bd70ut3bw',focus:'bd70ut3bx',active:'bd70ut3by'},defaultClass:'bd70ut3bv'},warning:{conditions:{base:'bd70ut3bz',hover:'bd70ut3c0',focus:'bd70ut3c1',active:'bd70ut3c2'},defaultClass:'bd70ut3bz'},warning2D:{conditions:{base:'bd70ut3c3',hover:'bd70ut3c4',focus:'bd70ut3c5',active:'bd70ut3c6'},defaultClass:'bd70ut3c3'},warning33:{conditions:{base:'bd70ut3c7',hover:'bd70ut3c8',focus:'bd70ut3c9',active:'bd70ut3ca'},defaultClass:'bd70ut3c7'},binance:{conditions:{base:'bd70ut3cb',hover:'bd70ut3cc',focus:'bd70ut3cd',active:'bd70ut3ce'},defaultClass:'bd70ut3cb'},overlay:{conditions:{base:'bd70ut3cf',hover:'bd70ut3cg',focus:'bd70ut3ch',active:'bd70ut3ci'},defaultClass:'bd70ut3cf'},gold:{conditions:{base:'bd70ut3cj',hover:'bd70ut3ck',focus:'bd70ut3cl',active:'bd70ut3cm'},defaultClass:'bd70ut3cj'},silver:{conditions:{base:'bd70ut3cn',hover:'bd70ut3co',focus:'bd70ut3cp',active:'bd70ut3cq'},defaultClass:'bd70ut3cn'},bronze:{conditions:{base:'bd70ut3cr',hover:'bd70ut3cs',focus:'bd70ut3ct',active:'bd70ut3cu'},defaultClass:'bd70ut3cr'},secondary:{conditions:{base:'bd70ut3cv',hover:'bd70ut3cw',focus:'bd70ut3cx',active:'bd70ut3cy'},defaultClass:'bd70ut3cv'},secondary80:{conditions:{base:'bd70ut3cz',hover:'bd70ut3d0',focus:'bd70ut3d1',active:'bd70ut3d2'},defaultClass:'bd70ut3cz'},background:{conditions:{base:'bd70ut3d3',hover:'bd70ut3d4',focus:'bd70ut3d5',active:'bd70ut3d6'},defaultClass:'bd70ut3d3'},backgroundDisabled:{conditions:{base:'bd70ut3d7',hover:'bd70ut3d8',focus:'bd70ut3d9',active:'bd70ut3da'},defaultClass:'bd70ut3d7'},backgroundAlt:{conditions:{base:'bd70ut3db',hover:'bd70ut3dc',focus:'bd70ut3dd',active:'bd70ut3de'},defaultClass:'bd70ut3db'},backgroundAlt2:{conditions:{base:'bd70ut3df',hover:'bd70ut3dg',focus:'bd70ut3dh',active:'bd70ut3di'},defaultClass:'bd70ut3df'},cardBorder:{conditions:{base:'bd70ut3dj',hover:'bd70ut3dk',focus:'bd70ut3dl',active:'bd70ut3dm'},defaultClass:'bd70ut3dj'},contrast:{conditions:{base:'bd70ut3dn',hover:'bd70ut3do',focus:'bd70ut3dp',active:'bd70ut3dq'},defaultClass:'bd70ut3dn'},dropdown:{conditions:{base:'bd70ut3dr',hover:'bd70ut3ds',focus:'bd70ut3dt',active:'bd70ut3du'},defaultClass:'bd70ut3dr'},dropdownDeep:{conditions:{base:'bd70ut3dv',hover:'bd70ut3dw',focus:'bd70ut3dx',active:'bd70ut3dy'},defaultClass:'bd70ut3dv'},invertedContrast:{conditions:{base:'bd70ut3dz',hover:'bd70ut3e0',focus:'bd70ut3e1',active:'bd70ut3e2'},defaultClass:'bd70ut3dz'},input:{conditions:{base:'bd70ut3e3',hover:'bd70ut3e4',focus:'bd70ut3e5',active:'bd70ut3e6'},defaultClass:'bd70ut3e3'},inputSecondary:{conditions:{base:'bd70ut3e7',hover:'bd70ut3e8',focus:'bd70ut3e9',active:'bd70ut3ea'},defaultClass:'bd70ut3e7'},tertiary:{conditions:{base:'bd70ut3eb',hover:'bd70ut3ec',focus:'bd70ut3ed',active:'bd70ut3ee'},defaultClass:'bd70ut3eb'},text:{conditions:{base:'bd70ut3ef',hover:'bd70ut3eg',focus:'bd70ut3eh',active:'bd70ut3ei'},defaultClass:'bd70ut3ef'},text99:{conditions:{base:'bd70ut3ej',hover:'bd70ut3ek',focus:'bd70ut3el',active:'bd70ut3em'},defaultClass:'bd70ut3ej'},textDisabled:{conditions:{base:'bd70ut3en',hover:'bd70ut3eo',focus:'bd70ut3ep',active:'bd70ut3eq'},defaultClass:'bd70ut3en'},textSubtle:{conditions:{base:'bd70ut3er',hover:'bd70ut3es',focus:'bd70ut3et',active:'bd70ut3eu'},defaultClass:'bd70ut3er'},disabled:{conditions:{base:'bd70ut3ev',hover:'bd70ut3ew',focus:'bd70ut3ex',active:'bd70ut3ey'},defaultClass:'bd70ut3ev'},gradientBubblegum:{conditions:{base:'bd70ut3ez',hover:'bd70ut3f0',focus:'bd70ut3f1',active:'bd70ut3f2'},defaultClass:'bd70ut3ez'},gradientInverseBubblegum:{conditions:{base:'bd70ut3f3',hover:'bd70ut3f4',focus:'bd70ut3f5',active:'bd70ut3f6'},defaultClass:'bd70ut3f3'},gradientCardHeader:{conditions:{base:'bd70ut3f7',hover:'bd70ut3f8',focus:'bd70ut3f9',active:'bd70ut3fa'},defaultClass:'bd70ut3f7'},gradientBlue:{conditions:{base:'bd70ut3fb',hover:'bd70ut3fc',focus:'bd70ut3fd',active:'bd70ut3fe'},defaultClass:'bd70ut3fb'},gradientViolet:{conditions:{base:'bd70ut3ff',hover:'bd70ut3fg',focus:'bd70ut3fh',active:'bd70ut3fi'},defaultClass:'bd70ut3ff'},gradientVioletAlt:{conditions:{base:'bd70ut3fj',hover:'bd70ut3fk',focus:'bd70ut3fl',active:'bd70ut3fm'},defaultClass:'bd70ut3fj'},gradientGold:{conditions:{base:'bd70ut3fn',hover:'bd70ut3fo',focus:'bd70ut3fp',active:'bd70ut3fq'},defaultClass:'bd70ut3fn'},gradientBold:{conditions:{base:'bd70ut3fr',hover:'bd70ut3fs',focus:'bd70ut3ft',active:'bd70ut3fu'},defaultClass:'bd70ut3fr'}}},borderColor:{values:{light:{conditions:{base:'bd70ut3fv',hover:'bd70ut3fw',focus:'bd70ut3fx',active:'bd70ut3fy'},defaultClass:'bd70ut3fv'},dark:{conditions:{base:'bd70ut3fz',hover:'bd70ut3g0',focus:'bd70ut3g1',active:'bd70ut3g2'},defaultClass:'bd70ut3fz'},white:{conditions:{base:'bd70ut3g3',hover:'bd70ut3g4',focus:'bd70ut3g5',active:'bd70ut3g6'},defaultClass:'bd70ut3g3'},failure:{conditions:{base:'bd70ut3g7',hover:'bd70ut3g8',focus:'bd70ut3g9',active:'bd70ut3ga'},defaultClass:'bd70ut3g7'},failure33:{conditions:{base:'bd70ut3gb',hover:'bd70ut3gc',focus:'bd70ut3gd',active:'bd70ut3ge'},defaultClass:'bd70ut3gb'},primary:{conditions:{base:'bd70ut3gf',hover:'bd70ut3gg',focus:'bd70ut3gh',active:'bd70ut3gi'},defaultClass:'bd70ut3gf'},primary0f:{conditions:{base:'bd70ut3gj',hover:'bd70ut3gk',focus:'bd70ut3gl',active:'bd70ut3gm'},defaultClass:'bd70ut3gj'},primary3D:{conditions:{base:'bd70ut3gn',hover:'bd70ut3go',focus:'bd70ut3gp',active:'bd70ut3gq'},defaultClass:'bd70ut3gn'},primaryBright:{conditions:{base:'bd70ut3gr',hover:'bd70ut3gs',focus:'bd70ut3gt',active:'bd70ut3gu'},defaultClass:'bd70ut3gr'},primaryDark:{conditions:{base:'bd70ut3gv',hover:'bd70ut3gw',focus:'bd70ut3gx',active:'bd70ut3gy'},defaultClass:'bd70ut3gv'},success:{conditions:{base:'bd70ut3gz',hover:'bd70ut3h0',focus:'bd70ut3h1',active:'bd70ut3h2'},defaultClass:'bd70ut3gz'},success19:{conditions:{base:'bd70ut3h3',hover:'bd70ut3h4',focus:'bd70ut3h5',active:'bd70ut3h6'},defaultClass:'bd70ut3h3'},warning:{conditions:{base:'bd70ut3h7',hover:'bd70ut3h8',focus:'bd70ut3h9',active:'bd70ut3ha'},defaultClass:'bd70ut3h7'},warning2D:{conditions:{base:'bd70ut3hb',hover:'bd70ut3hc',focus:'bd70ut3hd',active:'bd70ut3he'},defaultClass:'bd70ut3hb'},warning33:{conditions:{base:'bd70ut3hf',hover:'bd70ut3hg',focus:'bd70ut3hh',active:'bd70ut3hi'},defaultClass:'bd70ut3hf'},binance:{conditions:{base:'bd70ut3hj',hover:'bd70ut3hk',focus:'bd70ut3hl',active:'bd70ut3hm'},defaultClass:'bd70ut3hj'},overlay:{conditions:{base:'bd70ut3hn',hover:'bd70ut3ho',focus:'bd70ut3hp',active:'bd70ut3hq'},defaultClass:'bd70ut3hn'},gold:{conditions:{base:'bd70ut3hr',hover:'bd70ut3hs',focus:'bd70ut3ht',active:'bd70ut3hu'},defaultClass:'bd70ut3hr'},silver:{conditions:{base:'bd70ut3hv',hover:'bd70ut3hw',focus:'bd70ut3hx',active:'bd70ut3hy'},defaultClass:'bd70ut3hv'},bronze:{conditions:{base:'bd70ut3hz',hover:'bd70ut3i0',focus:'bd70ut3i1',active:'bd70ut3i2'},defaultClass:'bd70ut3hz'},secondary:{conditions:{base:'bd70ut3i3',hover:'bd70ut3i4',focus:'bd70ut3i5',active:'bd70ut3i6'},defaultClass:'bd70ut3i3'},secondary80:{conditions:{base:'bd70ut3i7',hover:'bd70ut3i8',focus:'bd70ut3i9',active:'bd70ut3ia'},defaultClass:'bd70ut3i7'},background:{conditions:{base:'bd70ut3ib',hover:'bd70ut3ic',focus:'bd70ut3id',active:'bd70ut3ie'},defaultClass:'bd70ut3ib'},backgroundDisabled:{conditions:{base:'bd70ut3if',hover:'bd70ut3ig',focus:'bd70ut3ih',active:'bd70ut3ii'},defaultClass:'bd70ut3if'},backgroundAlt:{conditions:{base:'bd70ut3ij',hover:'bd70ut3ik',focus:'bd70ut3il',active:'bd70ut3im'},defaultClass:'bd70ut3ij'},backgroundAlt2:{conditions:{base:'bd70ut3in',hover:'bd70ut3io',focus:'bd70ut3ip',active:'bd70ut3iq'},defaultClass:'bd70ut3in'},cardBorder:{conditions:{base:'bd70ut3ir',hover:'bd70ut3is',focus:'bd70ut3it',active:'bd70ut3iu'},defaultClass:'bd70ut3ir'},contrast:{conditions:{base:'bd70ut3iv',hover:'bd70ut3iw',focus:'bd70ut3ix',active:'bd70ut3iy'},defaultClass:'bd70ut3iv'},dropdown:{conditions:{base:'bd70ut3iz',hover:'bd70ut3j0',focus:'bd70ut3j1',active:'bd70ut3j2'},defaultClass:'bd70ut3iz'},dropdownDeep:{conditions:{base:'bd70ut3j3',hover:'bd70ut3j4',focus:'bd70ut3j5',active:'bd70ut3j6'},defaultClass:'bd70ut3j3'},invertedContrast:{conditions:{base:'bd70ut3j7',hover:'bd70ut3j8',focus:'bd70ut3j9',active:'bd70ut3ja'},defaultClass:'bd70ut3j7'},input:{conditions:{base:'bd70ut3jb',hover:'bd70ut3jc',focus:'bd70ut3jd',active:'bd70ut3je'},defaultClass:'bd70ut3jb'},inputSecondary:{conditions:{base:'bd70ut3jf',hover:'bd70ut3jg',focus:'bd70ut3jh',active:'bd70ut3ji'},defaultClass:'bd70ut3jf'},tertiary:{conditions:{base:'bd70ut3jj',hover:'bd70ut3jk',focus:'bd70ut3jl',active:'bd70ut3jm'},defaultClass:'bd70ut3jj'},text:{conditions:{base:'bd70ut3jn',hover:'bd70ut3jo',focus:'bd70ut3jp',active:'bd70ut3jq'},defaultClass:'bd70ut3jn'},text99:{conditions:{base:'bd70ut3jr',hover:'bd70ut3js',focus:'bd70ut3jt',active:'bd70ut3ju'},defaultClass:'bd70ut3jr'},textDisabled:{conditions:{base:'bd70ut3jv',hover:'bd70ut3jw',focus:'bd70ut3jx',active:'bd70ut3jy'},defaultClass:'bd70ut3jv'},textSubtle:{conditions:{base:'bd70ut3jz',hover:'bd70ut3k0',focus:'bd70ut3k1',active:'bd70ut3k2'},defaultClass:'bd70ut3jz'},disabled:{conditions:{base:'bd70ut3k3',hover:'bd70ut3k4',focus:'bd70ut3k5',active:'bd70ut3k6'},defaultClass:'bd70ut3k3'},gradientBubblegum:{conditions:{base:'bd70ut3k7',hover:'bd70ut3k8',focus:'bd70ut3k9',active:'bd70ut3ka'},defaultClass:'bd70ut3k7'},gradientInverseBubblegum:{conditions:{base:'bd70ut3kb',hover:'bd70ut3kc',focus:'bd70ut3kd',active:'bd70ut3ke'},defaultClass:'bd70ut3kb'},gradientCardHeader:{conditions:{base:'bd70ut3kf',hover:'bd70ut3kg',focus:'bd70ut3kh',active:'bd70ut3ki'},defaultClass:'bd70ut3kf'},gradientBlue:{conditions:{base:'bd70ut3kj',hover:'bd70ut3kk',focus:'bd70ut3kl',active:'bd70ut3km'},defaultClass:'bd70ut3kj'},gradientViolet:{conditions:{base:'bd70ut3kn',hover:'bd70ut3ko',focus:'bd70ut3kp',active:'bd70ut3kq'},defaultClass:'bd70ut3kn'},gradientVioletAlt:{conditions:{base:'bd70ut3kr',hover:'bd70ut3ks',focus:'bd70ut3kt',active:'bd70ut3ku'},defaultClass:'bd70ut3kr'},gradientGold:{conditions:{base:'bd70ut3kv',hover:'bd70ut3kw',focus:'bd70ut3kx',active:'bd70ut3ky'},defaultClass:'bd70ut3kv'},gradientBold:{conditions:{base:'bd70ut3kz',hover:'bd70ut3l0',focus:'bd70ut3l1',active:'bd70ut3l2'},defaultClass:'bd70ut3kz'}}},color:{values:{light:{conditions:{base:'bd70ut3l3',hover:'bd70ut3l4',focus:'bd70ut3l5',active:'bd70ut3l6'},defaultClass:'bd70ut3l3'},dark:{conditions:{base:'bd70ut3l7',hover:'bd70ut3l8',focus:'bd70ut3l9',active:'bd70ut3la'},defaultClass:'bd70ut3l7'},white:{conditions:{base:'bd70ut3lb',hover:'bd70ut3lc',focus:'bd70ut3ld',active:'bd70ut3le'},defaultClass:'bd70ut3lb'},failure:{conditions:{base:'bd70ut3lf',hover:'bd70ut3lg',focus:'bd70ut3lh',active:'bd70ut3li'},defaultClass:'bd70ut3lf'},failure33:{conditions:{base:'bd70ut3lj',hover:'bd70ut3lk',focus:'bd70ut3ll',active:'bd70ut3lm'},defaultClass:'bd70ut3lj'},primary:{conditions:{base:'bd70ut3ln',hover:'bd70ut3lo',focus:'bd70ut3lp',active:'bd70ut3lq'},defaultClass:'bd70ut3ln'},primary0f:{conditions:{base:'bd70ut3lr',hover:'bd70ut3ls',focus:'bd70ut3lt',active:'bd70ut3lu'},defaultClass:'bd70ut3lr'},primary3D:{conditions:{base:'bd70ut3lv',hover:'bd70ut3lw',focus:'bd70ut3lx',active:'bd70ut3ly'},defaultClass:'bd70ut3lv'},primaryBright:{conditions:{base:'bd70ut3lz',hover:'bd70ut3m0',focus:'bd70ut3m1',active:'bd70ut3m2'},defaultClass:'bd70ut3lz'},primaryDark:{conditions:{base:'bd70ut3m3',hover:'bd70ut3m4',focus:'bd70ut3m5',active:'bd70ut3m6'},defaultClass:'bd70ut3m3'},success:{conditions:{base:'bd70ut3m7',hover:'bd70ut3m8',focus:'bd70ut3m9',active:'bd70ut3ma'},defaultClass:'bd70ut3m7'},success19:{conditions:{base:'bd70ut3mb',hover:'bd70ut3mc',focus:'bd70ut3md',active:'bd70ut3me'},defaultClass:'bd70ut3mb'},warning:{conditions:{base:'bd70ut3mf',hover:'bd70ut3mg',focus:'bd70ut3mh',active:'bd70ut3mi'},defaultClass:'bd70ut3mf'},warning2D:{conditions:{base:'bd70ut3mj',hover:'bd70ut3mk',focus:'bd70ut3ml',active:'bd70ut3mm'},defaultClass:'bd70ut3mj'},warning33:{conditions:{base:'bd70ut3mn',hover:'bd70ut3mo',focus:'bd70ut3mp',active:'bd70ut3mq'},defaultClass:'bd70ut3mn'},binance:{conditions:{base:'bd70ut3mr',hover:'bd70ut3ms',focus:'bd70ut3mt',active:'bd70ut3mu'},defaultClass:'bd70ut3mr'},overlay:{conditions:{base:'bd70ut3mv',hover:'bd70ut3mw',focus:'bd70ut3mx',active:'bd70ut3my'},defaultClass:'bd70ut3mv'},gold:{conditions:{base:'bd70ut3mz',hover:'bd70ut3n0',focus:'bd70ut3n1',active:'bd70ut3n2'},defaultClass:'bd70ut3mz'},silver:{conditions:{base:'bd70ut3n3',hover:'bd70ut3n4',focus:'bd70ut3n5',active:'bd70ut3n6'},defaultClass:'bd70ut3n3'},bronze:{conditions:{base:'bd70ut3n7',hover:'bd70ut3n8',focus:'bd70ut3n9',active:'bd70ut3na'},defaultClass:'bd70ut3n7'},secondary:{conditions:{base:'bd70ut3nb',hover:'bd70ut3nc',focus:'bd70ut3nd',active:'bd70ut3ne'},defaultClass:'bd70ut3nb'},secondary80:{conditions:{base:'bd70ut3nf',hover:'bd70ut3ng',focus:'bd70ut3nh',active:'bd70ut3ni'},defaultClass:'bd70ut3nf'},background:{conditions:{base:'bd70ut3nj',hover:'bd70ut3nk',focus:'bd70ut3nl',active:'bd70ut3nm'},defaultClass:'bd70ut3nj'},backgroundDisabled:{conditions:{base:'bd70ut3nn',hover:'bd70ut3no',focus:'bd70ut3np',active:'bd70ut3nq'},defaultClass:'bd70ut3nn'},backgroundAlt:{conditions:{base:'bd70ut3nr',hover:'bd70ut3ns',focus:'bd70ut3nt',active:'bd70ut3nu'},defaultClass:'bd70ut3nr'},backgroundAlt2:{conditions:{base:'bd70ut3nv',hover:'bd70ut3nw',focus:'bd70ut3nx',active:'bd70ut3ny'},defaultClass:'bd70ut3nv'},cardBorder:{conditions:{base:'bd70ut3nz',hover:'bd70ut3o0',focus:'bd70ut3o1',active:'bd70ut3o2'},defaultClass:'bd70ut3nz'},contrast:{conditions:{base:'bd70ut3o3',hover:'bd70ut3o4',focus:'bd70ut3o5',active:'bd70ut3o6'},defaultClass:'bd70ut3o3'},dropdown:{conditions:{base:'bd70ut3o7',hover:'bd70ut3o8',focus:'bd70ut3o9',active:'bd70ut3oa'},defaultClass:'bd70ut3o7'},dropdownDeep:{conditions:{base:'bd70ut3ob',hover:'bd70ut3oc',focus:'bd70ut3od',active:'bd70ut3oe'},defaultClass:'bd70ut3ob'},invertedContrast:{conditions:{base:'bd70ut3of',hover:'bd70ut3og',focus:'bd70ut3oh',active:'bd70ut3oi'},defaultClass:'bd70ut3of'},input:{conditions:{base:'bd70ut3oj',hover:'bd70ut3ok',focus:'bd70ut3ol',active:'bd70ut3om'},defaultClass:'bd70ut3oj'},inputSecondary:{conditions:{base:'bd70ut3on',hover:'bd70ut3oo',focus:'bd70ut3op',active:'bd70ut3oq'},defaultClass:'bd70ut3on'},tertiary:{conditions:{base:'bd70ut3or',hover:'bd70ut3os',focus:'bd70ut3ot',active:'bd70ut3ou'},defaultClass:'bd70ut3or'},text:{conditions:{base:'bd70ut3ov',hover:'bd70ut3ow',focus:'bd70ut3ox',active:'bd70ut3oy'},defaultClass:'bd70ut3ov'},text99:{conditions:{base:'bd70ut3oz',hover:'bd70ut3p0',focus:'bd70ut3p1',active:'bd70ut3p2'},defaultClass:'bd70ut3oz'},textDisabled:{conditions:{base:'bd70ut3p3',hover:'bd70ut3p4',focus:'bd70ut3p5',active:'bd70ut3p6'},defaultClass:'bd70ut3p3'},textSubtle:{conditions:{base:'bd70ut3p7',hover:'bd70ut3p8',focus:'bd70ut3p9',active:'bd70ut3pa'},defaultClass:'bd70ut3p7'},disabled:{conditions:{base:'bd70ut3pb',hover:'bd70ut3pc',focus:'bd70ut3pd',active:'bd70ut3pe'},defaultClass:'bd70ut3pb'},gradientBubblegum:{conditions:{base:'bd70ut3pf',hover:'bd70ut3pg',focus:'bd70ut3ph',active:'bd70ut3pi'},defaultClass:'bd70ut3pf'},gradientInverseBubblegum:{conditions:{base:'bd70ut3pj',hover:'bd70ut3pk',focus:'bd70ut3pl',active:'bd70ut3pm'},defaultClass:'bd70ut3pj'},gradientCardHeader:{conditions:{base:'bd70ut3pn',hover:'bd70ut3po',focus:'bd70ut3pp',active:'bd70ut3pq'},defaultClass:'bd70ut3pn'},gradientBlue:{conditions:{base:'bd70ut3pr',hover:'bd70ut3ps',focus:'bd70ut3pt',active:'bd70ut3pu'},defaultClass:'bd70ut3pr'},gradientViolet:{conditions:{base:'bd70ut3pv',hover:'bd70ut3pw',focus:'bd70ut3px',active:'bd70ut3py'},defaultClass:'bd70ut3pv'},gradientVioletAlt:{conditions:{base:'bd70ut3pz',hover:'bd70ut3q0',focus:'bd70ut3q1',active:'bd70ut3q2'},defaultClass:'bd70ut3pz'},gradientGold:{conditions:{base:'bd70ut3q3',hover:'bd70ut3q4',focus:'bd70ut3q5',active:'bd70ut3q6'},defaultClass:'bd70ut3q3'},gradientBold:{conditions:{base:'bd70ut3q7',hover:'bd70ut3q8',focus:'bd70ut3q9',active:'bd70ut3qa'},defaultClass:'bd70ut3q7'}}},outlineColor:{values:{light:{conditions:{base:'bd70ut3qb',hover:'bd70ut3qc',focus:'bd70ut3qd',active:'bd70ut3qe'},defaultClass:'bd70ut3qb'},dark:{conditions:{base:'bd70ut3qf',hover:'bd70ut3qg',focus:'bd70ut3qh',active:'bd70ut3qi'},defaultClass:'bd70ut3qf'},white:{conditions:{base:'bd70ut3qj',hover:'bd70ut3qk',focus:'bd70ut3ql',active:'bd70ut3qm'},defaultClass:'bd70ut3qj'},failure:{conditions:{base:'bd70ut3qn',hover:'bd70ut3qo',focus:'bd70ut3qp',active:'bd70ut3qq'},defaultClass:'bd70ut3qn'},failure33:{conditions:{base:'bd70ut3qr',hover:'bd70ut3qs',focus:'bd70ut3qt',active:'bd70ut3qu'},defaultClass:'bd70ut3qr'},primary:{conditions:{base:'bd70ut3qv',hover:'bd70ut3qw',focus:'bd70ut3qx',active:'bd70ut3qy'},defaultClass:'bd70ut3qv'},primary0f:{conditions:{base:'bd70ut3qz',hover:'bd70ut3r0',focus:'bd70ut3r1',active:'bd70ut3r2'},defaultClass:'bd70ut3qz'},primary3D:{conditions:{base:'bd70ut3r3',hover:'bd70ut3r4',focus:'bd70ut3r5',active:'bd70ut3r6'},defaultClass:'bd70ut3r3'},primaryBright:{conditions:{base:'bd70ut3r7',hover:'bd70ut3r8',focus:'bd70ut3r9',active:'bd70ut3ra'},defaultClass:'bd70ut3r7'},primaryDark:{conditions:{base:'bd70ut3rb',hover:'bd70ut3rc',focus:'bd70ut3rd',active:'bd70ut3re'},defaultClass:'bd70ut3rb'},success:{conditions:{base:'bd70ut3rf',hover:'bd70ut3rg',focus:'bd70ut3rh',active:'bd70ut3ri'},defaultClass:'bd70ut3rf'},success19:{conditions:{base:'bd70ut3rj',hover:'bd70ut3rk',focus:'bd70ut3rl',active:'bd70ut3rm'},defaultClass:'bd70ut3rj'},warning:{conditions:{base:'bd70ut3rn',hover:'bd70ut3ro',focus:'bd70ut3rp',active:'bd70ut3rq'},defaultClass:'bd70ut3rn'},warning2D:{conditions:{base:'bd70ut3rr',hover:'bd70ut3rs',focus:'bd70ut3rt',active:'bd70ut3ru'},defaultClass:'bd70ut3rr'},warning33:{conditions:{base:'bd70ut3rv',hover:'bd70ut3rw',focus:'bd70ut3rx',active:'bd70ut3ry'},defaultClass:'bd70ut3rv'},binance:{conditions:{base:'bd70ut3rz',hover:'bd70ut3s0',focus:'bd70ut3s1',active:'bd70ut3s2'},defaultClass:'bd70ut3rz'},overlay:{conditions:{base:'bd70ut3s3',hover:'bd70ut3s4',focus:'bd70ut3s5',active:'bd70ut3s6'},defaultClass:'bd70ut3s3'},gold:{conditions:{base:'bd70ut3s7',hover:'bd70ut3s8',focus:'bd70ut3s9',active:'bd70ut3sa'},defaultClass:'bd70ut3s7'},silver:{conditions:{base:'bd70ut3sb',hover:'bd70ut3sc',focus:'bd70ut3sd',active:'bd70ut3se'},defaultClass:'bd70ut3sb'},bronze:{conditions:{base:'bd70ut3sf',hover:'bd70ut3sg',focus:'bd70ut3sh',active:'bd70ut3si'},defaultClass:'bd70ut3sf'},secondary:{conditions:{base:'bd70ut3sj',hover:'bd70ut3sk',focus:'bd70ut3sl',active:'bd70ut3sm'},defaultClass:'bd70ut3sj'},secondary80:{conditions:{base:'bd70ut3sn',hover:'bd70ut3so',focus:'bd70ut3sp',active:'bd70ut3sq'},defaultClass:'bd70ut3sn'},background:{conditions:{base:'bd70ut3sr',hover:'bd70ut3ss',focus:'bd70ut3st',active:'bd70ut3su'},defaultClass:'bd70ut3sr'},backgroundDisabled:{conditions:{base:'bd70ut3sv',hover:'bd70ut3sw',focus:'bd70ut3sx',active:'bd70ut3sy'},defaultClass:'bd70ut3sv'},backgroundAlt:{conditions:{base:'bd70ut3sz',hover:'bd70ut3t0',focus:'bd70ut3t1',active:'bd70ut3t2'},defaultClass:'bd70ut3sz'},backgroundAlt2:{conditions:{base:'bd70ut3t3',hover:'bd70ut3t4',focus:'bd70ut3t5',active:'bd70ut3t6'},defaultClass:'bd70ut3t3'},cardBorder:{conditions:{base:'bd70ut3t7',hover:'bd70ut3t8',focus:'bd70ut3t9',active:'bd70ut3ta'},defaultClass:'bd70ut3t7'},contrast:{conditions:{base:'bd70ut3tb',hover:'bd70ut3tc',focus:'bd70ut3td',active:'bd70ut3te'},defaultClass:'bd70ut3tb'},dropdown:{conditions:{base:'bd70ut3tf',hover:'bd70ut3tg',focus:'bd70ut3th',active:'bd70ut3ti'},defaultClass:'bd70ut3tf'},dropdownDeep:{conditions:{base:'bd70ut3tj',hover:'bd70ut3tk',focus:'bd70ut3tl',active:'bd70ut3tm'},defaultClass:'bd70ut3tj'},invertedContrast:{conditions:{base:'bd70ut3tn',hover:'bd70ut3to',focus:'bd70ut3tp',active:'bd70ut3tq'},defaultClass:'bd70ut3tn'},input:{conditions:{base:'bd70ut3tr',hover:'bd70ut3ts',focus:'bd70ut3tt',active:'bd70ut3tu'},defaultClass:'bd70ut3tr'},inputSecondary:{conditions:{base:'bd70ut3tv',hover:'bd70ut3tw',focus:'bd70ut3tx',active:'bd70ut3ty'},defaultClass:'bd70ut3tv'},tertiary:{conditions:{base:'bd70ut3tz',hover:'bd70ut3u0',focus:'bd70ut3u1',active:'bd70ut3u2'},defaultClass:'bd70ut3tz'},text:{conditions:{base:'bd70ut3u3',hover:'bd70ut3u4',focus:'bd70ut3u5',active:'bd70ut3u6'},defaultClass:'bd70ut3u3'},text99:{conditions:{base:'bd70ut3u7',hover:'bd70ut3u8',focus:'bd70ut3u9',active:'bd70ut3ua'},defaultClass:'bd70ut3u7'},textDisabled:{conditions:{base:'bd70ut3ub',hover:'bd70ut3uc',focus:'bd70ut3ud',active:'bd70ut3ue'},defaultClass:'bd70ut3ub'},textSubtle:{conditions:{base:'bd70ut3uf',hover:'bd70ut3ug',focus:'bd70ut3uh',active:'bd70ut3ui'},defaultClass:'bd70ut3uf'},disabled:{conditions:{base:'bd70ut3uj',hover:'bd70ut3uk',focus:'bd70ut3ul',active:'bd70ut3um'},defaultClass:'bd70ut3uj'},gradientBubblegum:{conditions:{base:'bd70ut3un',hover:'bd70ut3uo',focus:'bd70ut3up',active:'bd70ut3uq'},defaultClass:'bd70ut3un'},gradientInverseBubblegum:{conditions:{base:'bd70ut3ur',hover:'bd70ut3us',focus:'bd70ut3ut',active:'bd70ut3uu'},defaultClass:'bd70ut3ur'},gradientCardHeader:{conditions:{base:'bd70ut3uv',hover:'bd70ut3uw',focus:'bd70ut3ux',active:'bd70ut3uy'},defaultClass:'bd70ut3uv'},gradientBlue:{conditions:{base:'bd70ut3uz',hover:'bd70ut3v0',focus:'bd70ut3v1',active:'bd70ut3v2'},defaultClass:'bd70ut3uz'},gradientViolet:{conditions:{base:'bd70ut3v3',hover:'bd70ut3v4',focus:'bd70ut3v5',active:'bd70ut3v6'},defaultClass:'bd70ut3v3'},gradientVioletAlt:{conditions:{base:'bd70ut3v7',hover:'bd70ut3v8',focus:'bd70ut3v9',active:'bd70ut3va'},defaultClass:'bd70ut3v7'},gradientGold:{conditions:{base:'bd70ut3vb',hover:'bd70ut3vc',focus:'bd70ut3vd',active:'bd70ut3ve'},defaultClass:'bd70ut3vb'},gradientBold:{conditions:{base:'bd70ut3vf',hover:'bd70ut3vg',focus:'bd70ut3vh',active:'bd70ut3vi'},defaultClass:'bd70ut3vf'}}}}});","import \"../packages/uikit/src/css/reset.css.ts.vanilla.css!=!../../../../node_modules/@vanilla-extract/webpack-plugin/virtualFileLoader/dist/vanilla-extract-webpack-plugin-virtualFileLoader.cjs.js?{\\\"fileName\\\":\\\"../packages/uikit/src/css/reset.css.ts.vanilla.css\\\",\\\"source\\\":\\\"Ll8xeGE1ejBxMCB7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7CiAgYm9yZGVyOiAwOwogIG1pbi13aWR0aDogMDsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIGZvbnQtc2l6ZTogMTAwJTsKICBmb250OiBpbmhlcml0OwogIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKfQouXzF4YTV6MHExIHsKICBiYWNrZ3JvdW5kOiAwOwogIGJvcmRlcjogMDsKICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7Cn0KLl8xeGE1ejBxMiB7CiAgZGlzcGxheTogYmxvY2s7Cn0KLl8xeGE1ejBxMyB7CiAgbGluZS1oZWlnaHQ6IDE7Cn0KLl8xeGE1ejBxNCB7CiAgbGlzdC1zdHlsZTogbm9uZTsKfQouXzF4YTV6MHE1IHsKICBxdW90ZXM6IG5vbmU7Cn0KLl8xeGE1ejBxNTpiZWZvcmUsIC5fMXhhNXowcTU6YWZ0ZXIgewogIGNvbnRlbnQ6ICcnOwp9Ci5fMXhhNXowcTYgewogIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgYm9yZGVyLXNwYWNpbmc6IDA7Cn0KLl8xeGE1ejBxNyB7CiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgY29sb3I6IGluaGVyaXQ7Cn0KLl8xeGE1ejBxOCB7CiAgYXBwZWFyYW5jZTogbm9uZTsKfQouXzF4YTV6MHE4OjotbXMtZXhwYW5kIHsKICBkaXNwbGF5OiBub25lOwp9\\\"}!../../../../node_modules/@vanilla-extract/webpack-plugin/extracted.js\"\nimport \"../packages/uikit/src/css/vars.css.ts.vanilla.css!=!../../../../node_modules/@vanilla-extract/webpack-plugin/virtualFileLoader/dist/vanilla-extract-webpack-plugin-virtualFileLoader.cjs.js?{\\\"fileName\\\":\\\"../packages/uikit/src/css/vars.css.ts.vanilla.css\\\",\\\"source\\\":\\\"#H4sIAAAAAAAAA+1YW4+jNhh931+BdjXaXSkZ2cbcUvUBArRV1aeR2oeqDw6QDFoGIiCzN+1/r21IYoixyTajvmwyTBL7+Nj+bPD5zqquqtb4+sowlsukKqq6WRb57rFdfnzM22xl8I+fLqu3JC8ONQW82W4BfU1DTFMF2tf5E6k/UwgASYLxNARsZ4DMkIJgvHZCbIbTsKBmvzjfdmtZ08CQ1B84bGOaiQTWHJIkaxrVyHoI9FSgj6Qu83JHIXEcINOZhiA2wyjEgRch2Qx7GIt6vduQd8iyFgZ03IXBvoB79F7SaJOXpEzYaqYbQgCRQKrnrC7I554VUKru796WEe6qIuWTWTvSZW/ygvJRRIDYWzakuiq/sBFFjudg2UybLKnKtNs8jo2t0FOBXHCCubIRbUjyYVdXh5KP24+92FeiwrwhmyJj6MiL/ChQov2i5eFgLx0QiSt3/gfuHVmkE1KnQVWnPJqRE5nSkdAgtDVp2CCgB01kSzBpXe3T6mPJBmqztwITZtme9cdfElxe0uVts3R97ndy8nm5P7QdmR/Lbg4OeBBWO3USkslux5Z2mneYKI5xLLuz2+wT6w25ILRkw2H1nndCeLJdxTDCBgjCNVrLRs5wD4dNW7CN7Ph25Ms2VTpjK+1qkuZZ2QaHDYXuDk8ro8jLjNSnmnfQ9O4dM812C8pjxWEcG+COfo9NGovYgADcSW/Vvv1vbMmabGYHPSnvoO9M18Ga7tRfM8J36gU1hPe221OjaB2jntqNUWxrqYPikElIXdAx+g7lgR2jhyNI2XWMf+ZVkbUKzgitvTjoONdh4Mb+TE7+KJikXQehE/Vx9XwvDoGW9hf+rJ1kjOPQBaDfCqEfmPrJB1LGN5YZRpG3OD5Ghwz01vwwLRp4rVIziIgpycAxSsUgIqYEg4iZ1gsiSiUXRNy0WuAopVgQEVNaoYuxSiqIiGmlIKLmCgXeRqkTOGKuTODgaZXQRUMhErrhKDRCxyAcGlv+UmC4QphCDeQBcIENAhXofDjwOGAaAn4hGmJZXIdCgbcxKZZfeEYbNLMjUS3wBhYF82uqgfIA55Czbpg1hKGEmDXVSzXR7Vi6V9llTvR0FBZU8XhwM1Ev6IpuLHTo/JogPUuMbrb0XsEOvdwpOFcbW8Te8mouNlQAQWnglL3lsJPQSPhLEnk9j0RmsBJSCAeLBe7YCfL8aJDWYD/40QJd+t4YYP+J/gAOe0vOmUEnesWBALjvj7GeUuxLQ6/SG/+JWKM2AOPrj3DoOY671hFqxYa9xp7ndZR2iMNAdoZLKNVaA5vYcqye1bYcN9Sx3kJqDEOpURqeb/tx3BNs6e3fLMuqfiLFynj7Oynz9u3CaEjZ0Kd4nW9F2FNVVivjIf6Dfi6MQ84Lmj1JsoVx+to14F+X9OlPN69YAlcGHpbQx6w7LKGnJ7SHRXhloFE7a0WfJ8Mim5KPuJyVYY8a0hFdDqvO6K3C/g9KGRKOhsvKRv1iVjbqxWVlo8FA3hiOWkPeHI7aswhcxgHxwaPR6BFnGAfI5L2NY4T5wMZhsnhv1qg3m/Oe47fhp9xfedo+NoO1HVRAIWaDCiQEjm3LfMDRlQzD1pWNw9aVjkPRlTZ0HxcX/aTZlhzYfTtiZkf3JXOS1wl76NPn8Hn3P+RfMjo33ik8dSrUjAYp1IxWUqgZrfy5Zjy5cw3mNfi8Ax4JPflptpE9ZwXk8WSz5yMxWDiPSpSepfTuN10mHN33Cw6E/SWBHI2RIz9J2vw56/iPF2tKH82e68PFqZDOxjh1a0LGSUkRRIwVj1hP8v2C1oQh8P3FoAIfaTFjBEweOEDU1Ufak56/oO20+wQtVf4Lw2FhsFwZbUrKHTv5bsu6rZKDEAGrX8Cj2Oc5hGudpdCxXV427IDjH6dl56s+WFJEe0d2t+pDgraqijbfn7sWuz3mGMetgi/3FGTSkl4YHzfMt1d/p6Qly/Yxe8p+fs0z4Nf/DK3wyXxWmcpqslhlAqvJXbVp64yMVZusKvNUTYqqzE61iemVOakyHZ2biU4noar8U5V6aozpGZa0zoyea0PPMKC/y3rWmc5qu1ltNOst5nnmssJWnmMoq63kaRNZbR/rjWOdZaw2i1/CJn5Bg/hFrOFbmsK3tYNvbgTfMi+72vwdHaAsr/txfv44P297fkr8WK1hq/Nqv8emvdKhvdacvcaX1Viy893Yq4zY6z1Yhf16rfM633Sd9ltVVqveZdUarMrWL22rvpyj+hJm6i191NtaqDd3T/+PA/rkmX77F08jnYbdJQAA\\\"}!../../../../node_modules/@vanilla-extract/webpack-plugin/extracted.js\"\nimport \"../packages/uikit/src/css/sprinkles.css.ts.vanilla.css!=!../../../../node_modules/@vanilla-extract/webpack-plugin/virtualFileLoader/dist/vanilla-extract-webpack-plugin-virtualFileLoader.cjs.js?{\\\"fileName\\\":\\\"../packages/uikit/src/css/sprinkles.css.ts.vanilla.css\\\",\\\"source\\\":\\\"#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\\\"}!../../../../node_modules/@vanilla-extract/webpack-plugin/extracted.js\"\nimport \"../packages/uikit/src/css/swap.css.ts.vanilla.css!=!../../../../node_modules/@vanilla-extract/webpack-plugin/virtualFileLoader/dist/vanilla-extract-webpack-plugin-virtualFileLoader.cjs.js?{\\\"fileName\\\":\\\"../packages/uikit/src/css/swap.css.ts.vanilla.css\\\",\\\"source\\\":\\\"#H4sIAAAAAAAAA5WUzW7bMAzH730KracWmILETZpWxYAd9gY7DjvIFm0TkSVBluM0Q999+nAS56vZkEtE/8g/SZGa5Gb7XpRT8ueOkB6FqxmZvvn/RrfoUCtGLEjucA3BWmrlaA9Y1Y6RxTSSunMSFTCitIpQrq0AeziXEjaMzPyPd05HgheryupOCVpoqT3rLFet4RaU2+u0uPVRZ89mE0x9jQ6oZ4oo1VtuovoabCl1z0iNQoAKNgcbRw8fQEo0LbaxLC4Eqmoo0peSr9BRbgxwn0EIHZxLBCkCMGS35vaBplRbGoDHt7uPu8nQO8Z2cVofpaipgEJbHroX23pJJfXmEOOXezfw7V51TQ72/nfya/T2WmqX1P1FgPUdQkXzzjmtvpJzCJU6hv45RcaM9M2vtfS3G72udednlzsJ4x7NrvIlR9nZIzj7NPgPbHkuQYw9nqJHvHYusfJDK6F0I2B+BhR+0sCOkMUZYsOYj4glK3XRtbRHV2PqW643tK25CGOWMk0nX1dAxzm+/o+34KoCO3avk8dhcdJ2pI3aU6tIHYb8CzZGW8fVuA4ZocZPQD1sMiq/61xepNVJyElmoTnZ0enkZbkYzKfbv9PIsmGP0yOzOx69KPP0ojTcVj67cIch9nwnKDV3o2v53oBATtrCAijClSAPoahBYLH0D8djTH6oBONhVEs2TznsTTTXfiUaL5o+fNxUeX1+uaXylN1W+QvpouVPhwUAAA==\\\"}!../../../../node_modules/@vanilla-extract/webpack-plugin/extracted.js\"\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var iconButtonClass = 'bd70ut2di bd70ut353 bd70ut3ov bd70ut6 bd70ut7i bd70ut2i bpzycfn';\nexport var inputContainerVariants = _7a468({defaultClassName:'bpzycfc bd70ut2d6 bd70ut3e3 bpzycf7',variantClassNames:{error:{true:'bpzycf9',false:'bd70ut24c'},showBridgeWarning:{true:'bd70ut23u'}},defaultVariants:{},compoundVariants:[]});\nexport var inputVariants = _7a468({defaultClassName:'bpzycf0',variantClassNames:{error:{true:'bpzycf1'},loading:{true:'bpzycf2'},align:{left:'bpzycf3',center:'bpzycf4',right:'bpzycf5'}},defaultVariants:{align:'right',error:false},compoundVariants:[]});\nexport var pageVariants = _7a468({defaultClassName:'bpzycfj bpzycfi bd70ut6 bd70ut16 bd70ut2i bd70ut28i bd70utei bd70ut39r bd70ut12o bd70ut1ni bpzycfh',variantClassNames:{removePadding:{true:'bpzycfk'},noMinHeight:{true:'bpzycfl'}},defaultVariants:{},compoundVariants:[]});","import get from \"lodash/get\";\nimport { DefaultTheme } from \"styled-components\";\n\nconst getThemeValue = (theme: DefaultTheme, path: string, fallback?: string | number): string =>\n get(theme, path, fallback);\n\nexport default getThemeValue;\n","import { styled, css, keyframes } from \"styled-components\";\nimport { space } from \"styled-system\";\nimport getThemeValue from \"../../util/getThemeValue\";\nimport { SvgProps } from \"./types\";\n\nconst rotate = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`;\n\nconst spinStyle = css`\n animation: ${rotate} 2s linear infinite;\n`;\n\nconst Svg = styled(\"svg\").withConfig({\n shouldForwardProp: (p) => ![\"spin\"].includes(p),\n})`\n align-self: center; // Safari fix\n fill: ${({ theme, color }) =>\n getThemeValue(theme, `colors.${color}`, color)}; // should use color and currentColor in svg path\n color: ${({ theme, color }) => getThemeValue(theme, `colors.${color}`, color)};\n flex-shrink: 0;\n ${({ spin }) => spin && spinStyle};\n ${space};\n\n // Safari fix\n @supports (-webkit-text-size-adjust: none) and (not (-ms-accelerator: true)) and (not (-moz-appearance: none)) {\n filter: none !important;\n }\n`;\n\nSvg.defaultProps = {\n color: \"text\",\n width: \"20px\",\n xmlns: \"http://www.w3.org/2000/svg\",\n spin: false,\n};\n\nexport default Svg;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import { styled, DefaultTheme } from \"styled-components\";\nimport shouldForwardProp from \"@styled-system/should-forward-prop\";\nimport { space, typography, layout } from \"styled-system\";\nimport getThemeValue from \"../../util/getThemeValue\";\nimport { TextProps } from \"./types\";\n\ninterface ThemedProps extends TextProps {\n theme: DefaultTheme;\n}\n\nconst getColor = ({ color, theme }: ThemedProps) => {\n return getThemeValue(theme, `colors.${color}`, color);\n};\n\nconst Text = styled.div\n .attrs((props) => {\n const title =\n typeof props.title !== \"undefined\"\n ? props.title\n : props.ellipsis && typeof props.children === \"string\"\n ? props.children\n : undefined;\n return {\n ...props,\n title,\n };\n })\n .withConfig({\n shouldForwardProp,\n })`\n color: ${getColor};\n font-weight: ${({ bold }) => (bold ? 600 : 400)};\n line-height: 1.5;\n ${({ textTransform }) => textTransform && `text-transform: ${textTransform};`}\n ${({ ellipsis }) =>\n ellipsis &&\n `white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;`}\n\n ${space}\n ${typography}\n ${layout}\n\n ${({ small }) => small && `font-size: 14px;`}\n`;\n\nText.defaultProps = {\n color: \"text\",\n small: false,\n fontSize: \"16px\",\n ellipsis: false,\n};\n\nexport default Text;\n","import { styled } from \"styled-components\";\nimport { Colors } from \"../../theme/types\";\nimport Text from \"./Text\";\n\nconst TooltipText = styled(Text)<{ decorationColor?: keyof Colors }>`\n text-decoration: underline dotted;\n text-decoration-color: ${({ theme, decorationColor }) =>\n `${theme?.colors && decorationColor ? theme.colors[decorationColor] : theme?.colors?.textSubtle}`};\n text-underline-offset: 0.1em;\n`;\n\nexport default TooltipText;\n","const EXTERNAL_LINK_PROPS: { target: string; rel: string } = {\n target: \"_blank\",\n rel: \"noreferrer noopener\",\n};\n\nexport default EXTERNAL_LINK_PROPS;\n","import { ElementType, ReactNode } from \"react\";\nimport { LayoutProps, ResponsiveValue, SpaceProps } from \"styled-system\";\nimport type { PolymorphicComponentProps } from \"../../util/polymorphic\";\n\nexport const scales = {\n MD: \"md\",\n SM: \"sm\",\n XS: \"xs\",\n} as const;\n\nexport const variants = {\n PRIMARY: \"primary\",\n SECONDARY: \"secondary\",\n TERTIARY: \"tertiary\",\n TEXT: \"text\",\n DANGER: \"danger\",\n SUBTLE: \"subtle\",\n SUCCESS: \"success\",\n LIGHT: \"light\",\n} as const;\n\nexport type Scale = (typeof scales)[keyof typeof scales];\nexport type Variant = (typeof variants)[keyof typeof variants];\n\nexport interface BaseButtonProps extends LayoutProps, SpaceProps {\n as?: \"a\" | \"button\" | ElementType;\n external?: boolean;\n isLoading?: boolean;\n scale?: ResponsiveValue;\n variant?: Variant;\n disabled?: boolean;\n startIcon?: ReactNode;\n endIcon?: ReactNode;\n decorator?: {\n backgroundColor?: string;\n color?: string;\n text: string;\n direction?: \"left\" | \"right\";\n };\n}\n\nexport type ButtonProps

= PolymorphicComponentProps;\n","import { scales, variants } from \"./types\";\n\nexport const scaleVariants = {\n [scales.MD]: {\n height: \"48px\",\n padding: \"0 24px\",\n },\n [scales.SM]: {\n height: \"32px\",\n padding: \"0 16px\",\n },\n [scales.XS]: {\n height: \"28px\",\n fontSize: \"12px\",\n padding: \"0 12px\",\n },\n};\n\nexport const styleVariants = {\n [variants.PRIMARY]: {\n background: \"linear-gradient(45deg, #006622, #00b33c)\",\n color: \"white\",\n },\n [variants.SECONDARY]: {\n background: \"none\",\n backgroundColor: \"transparent\",\n border: \"2px solid\",\n borderColor: \"primary\",\n boxShadow: \"none\",\n color: \"primary\",\n \":disabled\": {\n backgroundColor: \"transparent\",\n },\n },\n [variants.TERTIARY]: {\n background: \"none\",\n backgroundColor: \"tertiary\",\n boxShadow: \"none\",\n color: \"primary\",\n },\n [variants.SUBTLE]: {\n background: \"none\",\n backgroundColor: \"textSubtle\",\n color: \"backgroundAlt\",\n },\n [variants.DANGER]: {\n background: \"none\",\n backgroundColor: \"failure\",\n color: \"white\",\n },\n [variants.SUCCESS]: {\n background: \"none\",\n backgroundColor: \"success\",\n color: \"white\",\n },\n [variants.TEXT]: {\n background: \"none\",\n backgroundColor: \"transparent\",\n color: \"primary\",\n boxShadow: \"none\",\n },\n [variants.LIGHT]: {\n background: \"none\",\n backgroundColor: \"input\",\n color: \"textSubtle\",\n boxShadow: \"none\",\n },\n};\n","import { styled, DefaultTheme, css } from \"styled-components\";\nimport { space, layout, variant } from \"styled-system\";\nimport { scaleVariants, styleVariants } from \"./theme\";\nimport { BaseButtonProps } from \"./types\";\n\ninterface ThemedButtonProps extends BaseButtonProps {\n theme: DefaultTheme;\n}\n\ninterface TransientButtonProps extends ThemedButtonProps {\n $isLoading?: boolean;\n}\n\nconst getDisabledStyles = ({ $isLoading, theme }: TransientButtonProps) => {\n if ($isLoading === true) {\n return `\n &:disabled,\n &.pancake-button--disabled {\n cursor: not-allowed;\n }\n `;\n }\n\n return `\n &:disabled,\n &.pancake-button--disabled {\n background: none;\n background-color: ${theme.colors.backgroundDisabled};\n border-color: ${theme.colors.backgroundDisabled};\n box-shadow: none;\n color: ${theme.colors.textDisabled};\n cursor: not-allowed;\n }\n `;\n};\n\n/**\n * This is to get around an issue where if you use a Link component\n * React will throw a invalid DOM attribute error\n * @see https://github.com/styled-components/styled-components/issues/135\n */\n\nconst getOpacity = ({ $isLoading = false }: TransientButtonProps) => {\n return $isLoading ? \".5\" : \"1\";\n};\n\nconst StyledButton = styled(\"button\").withConfig({\n shouldForwardProp: (props) => ![\"fullWidth\", \"minHeight\", \"paddingRight\"].includes(props),\n})`\n position: relative;\n align-items: center;\n border: 0;\n border-radius: 10px;\n box-shadow: 0px -1px 0px 0px rgba(14, 14, 44, 0.4) inset;\n cursor: pointer;\n display: inline-flex;\n font-family: inherit;\n font-size: 16px;\n font-weight: 600;\n justify-content: center;\n letter-spacing: 0.03em;\n line-height: 1;\n opacity: ${getOpacity};\n outline: 0;\n transition: background-color 0.2s, opacity 0.2s;\n color: ${({ theme }) => theme.colors.primaryBright};\n\n &:hover:not(:disabled):not(.pancake-button--disabled):not(.pancake-button--disabled):not(:active) {\n opacity: 0.85;\n }\n\n &:active:not(:disabled):not(.pancake-button--disabled):not(.pancake-button--disabled) {\n opacity: 0.85;\n transform: translateY(1px);\n box-shadow: none;\n }\n\n ${getDisabledStyles}\n ${variant({\n prop: \"scale\",\n variants: scaleVariants,\n })}\n ${variant({\n variants: styleVariants,\n })}\n ${layout}\n ${space}\n ${({ decorator, theme }) =>\n decorator &&\n css`\n &::before {\n content: \"${decorator.text}\";\n position: absolute;\n border-bottom: 20px solid ${decorator.backgroundColor ?? theme.colors.secondary};\n border-left: 34px solid transparent;\n border-right: 12px solid transparent;\n height: 0;\n top: -1px;\n right: -12px;\n width: 75px;\n text-align: center;\n padding-right: 30px;\n line-height: 20px;\n font-size: 12px;\n font-weight: 400;\n transform: rotate(31.17deg);\n color: ${decorator.color ?? \"white\"};\n }\n `}\n`;\n\nexport default StyledButton;\n","import clsx from \"clsx\";\nimport { cloneElement, ElementType, isValidElement } from \"react\";\nimport EXTERNAL_LINK_PROPS from \"../../util/externalLinkProps\";\nimport StyledButton from \"./StyledButton\";\nimport { ButtonProps, scales, variants } from \"./types\";\n\nconst Button = (props: ButtonProps): JSX.Element => {\n const { startIcon, endIcon, external, className, isLoading, disabled, children, ...rest } = props;\n const internalProps = external ? EXTERNAL_LINK_PROPS : {};\n const isDisabled = isLoading || disabled;\n\n return (\n \n <>\n {isValidElement(startIcon) &&\n cloneElement(startIcon, {\n // @ts-ignore\n mr: \"0.5rem\",\n })}\n {children}\n {isValidElement(endIcon) &&\n cloneElement(endIcon, {\n // @ts-ignore\n ml: \"0.5rem\",\n })}\n \n \n );\n};\n\nButton.defaultProps = {\n isLoading: false,\n external: false,\n variant: variants.PRIMARY,\n scale: scales.MD,\n disabled: false,\n};\n\nexport default Button;\n","import { styled } from \"styled-components\";\nimport { PolymorphicComponent } from \"../../util/polymorphic\";\nimport Button from \"./Button\";\nimport { BaseButtonProps } from \"./types\";\n\nconst IconButton: PolymorphicComponent = styled(Button)`\n padding: 2px;\n width: ${({ scale }) => (scale === \"xs\" ? \"auto\" : scale === \"sm\" ? \"32px\" : \"48px\")};\n`;\n\nexport default IconButton;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => (\n \n \n \n \n);\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => (\n \n \n \n \n);\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport uniqueId from \"lodash/uniqueId\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n\tconst id = uniqueId(\"svg\");\n\n\treturn (\n\t\t\n\t\t\t\n \n \n \n \n \n \n\t\t\t\n\t\t\n\t);\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport uniqueId from \"lodash/uniqueId\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n const id = uniqueId(\"svg\");\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport { useTheme } from \"styled-components\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n const theme = useTheme();\n const primaryColor = theme.isDark ? \"#3C3742\" : \"#e9eaeb\";\n const secondaryColor = theme.isDark ? \"#666171\" : \"#bdc2c4\";\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => (\n \n \n \n \n);\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => (\n \n \n \n \n \n \n);\n\nexport default Icon;\n","import * as React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => (\n \n \n \n \n \n \n \n);\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import * as React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default Icon;\n","import * as React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import * as React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => (\n \n \n \n);\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Logo: React.FC = ({ ...props }) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Logo;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => (\n \n \n \n);\n\nexport default Icon;\n","import * as React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => (\n \n \n \n);\n\nexport default Icon;\n","import React from \"react\";\nimport { useTheme } from \"styled-components\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n const theme = useTheme();\n const primaryColor = theme.isDark ? \"#3C3742\" : \"#e9eaeb\";\n const secondaryColor = theme.isDark ? \"#666171\" : \"#bdc2c4\";\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC> = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC> = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;","import React from \"react\";\nimport uniqueId from \"lodash/uniqueId\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n const id = uniqueId(\"svg\");\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n );\n};\n\nexport default Icon;\n","import uniqueId from \"lodash/uniqueId\";\nimport React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n const id = uniqueId(\"svg\");\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport uniqueId from \"lodash/uniqueId\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n const id = uniqueId(\"svg\");\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import * as React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => (\n \n \n \n);\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => (\n \n \n \n \n \n \n \n \n \n);\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => (\n \n \n \n);\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import * as React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import * as React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport uniqueId from \"lodash/uniqueId\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n const id = uniqueId(\"svg\");\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import * as React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => (\n \n \n \n \n \n \n);\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => (\n \n \n \n \n \n);\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => (\n \n \n \n);\n\nexport default Icon;\n","import * as React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => (\n \n \n \n);\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import * as React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => (\n \n \n \n);\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n );\n};\n\nexport default Icon;\n","import * as React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg\";\nimport { SvgProps } from \"../types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport { ChevronDownIcon, ChevronUpIcon } from \"../Svg\";\nimport Button from \"./Button\";\nimport IconButton from \"./IconButton\";\n\ninterface Props {\n onClick?: () => void;\n expanded?: boolean;\n}\n\nexport const ExpandableButton: React.FC> = ({ onClick, expanded, children }) => {\n return (\n \n {children}\n {expanded ? : }\n \n );\n};\nExpandableButton.defaultProps = {\n expanded: false,\n};\n\nexport const ExpandableLabel: React.FC> = ({ onClick, expanded, children }) => {\n return (\n : }\n >\n {children}\n \n );\n};\nExpandableLabel.defaultProps = {\n expanded: false,\n};\n","import { m as motion, Variants } from \"framer-motion\";\nimport shouldForwardProp from \"@styled-system/should-forward-prop\";\nimport { styled } from \"styled-components\";\nimport { background, border, layout, position, space, color } from \"styled-system\";\nimport { BoxProps } from \"./types\";\n\nexport { type AnimatePresence, type LazyMotion, domAnimation } from \"framer-motion\";\nexport type MotionVariants = Variants;\n\nexport const MotionBox = styled(motion.div).withConfig({})`\n ${background}\n ${border}\n ${layout}\n ${position}\n ${space}\n`;\n\nconst Box = styled.div.withConfig({\n shouldForwardProp,\n})`\n ${background}\n ${border}\n ${layout}\n ${position}\n ${space}\n ${color}\n`;\n\nexport default Box;\n","import { styled } from \"styled-components\";\nimport { flexbox } from \"styled-system\";\nimport Box from \"./Box\";\nimport { FlexProps } from \"./types\";\n\nconst Flex = styled(Box)`\n display: flex;\n ${flexbox}\n`;\n\nexport default Flex;\n","import { MouseEvent, ReactNode } from \"react\";\n\nexport type AlertTheme = {\n background: string;\n};\n\nexport const variants = {\n INFO: \"info\",\n DANGER: \"danger\",\n SUCCESS: \"success\",\n WARNING: \"warning\",\n} as const;\n\nexport type Variants = (typeof variants)[keyof typeof variants];\n\nexport interface AlertProps {\n variant?: Variants;\n title: string;\n children?: ReactNode;\n onClick?: (evt: MouseEvent) => void;\n}\n","import React from \"react\";\nimport { styled, DefaultTheme } from \"styled-components\";\nimport CheckmarkCircleIcon from \"../Svg/Icons/CheckmarkCircle\";\nimport ErrorIcon from \"../Svg/Icons/Error\";\nimport BlockIcon from \"../Svg/Icons/Block\";\nimport InfoIcon from \"../Svg/Icons/Info\";\nimport { Text } from \"../Text\";\nimport { IconButton } from \"../Button\";\nimport { CloseIcon } from \"../Svg\";\nimport Flex from \"../Box/Flex\";\nimport { AlertProps, variants } from \"./types\";\n\ninterface ThemedIconLabel {\n variant: AlertProps[\"variant\"];\n theme: DefaultTheme;\n hasdescription: boolean;\n}\n\nconst getThemeColor = ({ theme, variant = variants.INFO }: ThemedIconLabel) => {\n switch (variant) {\n case variants.DANGER:\n return theme.colors.failure;\n case variants.WARNING:\n return theme.colors.warning;\n case variants.SUCCESS:\n return theme.colors.success;\n case variants.INFO:\n default:\n return theme.colors.secondary;\n }\n};\n\nconst getIcon = (variant: AlertProps[\"variant\"] = variants.INFO) => {\n switch (variant) {\n case variants.DANGER:\n return BlockIcon;\n case variants.WARNING:\n return ErrorIcon;\n case variants.SUCCESS:\n return CheckmarkCircleIcon;\n case variants.INFO:\n default:\n return InfoIcon;\n }\n};\n\nconst IconLabel = styled.div`\n background-color: ${getThemeColor};\n border-radius: 16px 0 0 16px;\n color: ${({ theme }) => theme.alert.background};\n padding: 12px;\n`;\n\nconst withHandlerSpacing = 32 + 12 + 8; // button size + inner spacing + handler position\nconst Details = styled.div<{ hashandler: boolean }>`\n flex: 1;\n padding-bottom: 12px;\n padding-left: 12px;\n padding-right: ${({ hashandler }) => (hashandler ? `${withHandlerSpacing}px` : \"12px\")};\n padding-top: 12px;\n`;\n\nconst CloseHandler = styled.div`\n border-radius: 0 16px 16px 0;\n right: 8px;\n position: absolute;\n top: 8px;\n`;\n\nconst StyledAlert = styled(Flex)`\n position: relative;\n background-color: ${({ theme }) => theme.alert.background};\n border-radius: 16px;\n box-shadow: 0px 20px 36px -8px rgba(14, 14, 44, 0.1), 0px 1px 1px rgba(0, 0, 0, 0.05);\n`;\n\nconst Alert: React.FC> = ({ title, children, variant, onClick }) => {\n const Icon = getIcon(variant);\n\n return (\n \n \n \n \n

\n {title}\n {typeof children === \"string\" ? {children} : children}\n
\n {onClick && (\n \n \n \n \n \n )}\n \n );\n};\n\nexport default Alert;\n","/* eslint-disable no-restricted-syntax */\nimport clsx, { ClassValue } from \"clsx\";\nimport * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { atoms, Atoms } from \"../css/atoms\";\nimport { sprinkles } from \"../css/sprinkles.css\";\n\ntype HTMLProperties = Omit<\n React.AllHTMLAttributes,\n \"as\" | \"className\" | \"color\" | \"height\" | \"width\" | \"size\"\n>;\n\ntype Props = Atoms &\n HTMLProperties & {\n as?: React.ElementType;\n asChild?: boolean;\n className?: ClassValue;\n };\n\nexport const AtomBox = React.forwardRef(\n ({ as = \"div\", asChild, className, ...props }: Props, ref) => {\n const atomProps: Record = {};\n const nativeProps: Record = {};\n\n for (const key in props) {\n if (sprinkles.properties.has(key as keyof Omit)) {\n atomProps[key] = props[key as keyof typeof props];\n } else {\n nativeProps[key] = props[key as keyof typeof props];\n }\n }\n\n const atomicClasses = atoms({\n reset: typeof as === \"string\" ? (as as Atoms[\"reset\"]) : \"div\",\n ...atomProps,\n });\n\n const Comp = asChild ? Slot : as;\n\n return React.createElement(Comp, {\n className: clsx(atomicClasses, className),\n ...nativeProps,\n ref,\n });\n }\n);\n\nexport type AtomBoxProps = Parameters[0];\n\nAtomBox.displayName = \"AtomBox\";\n","import clsx from 'clsx'\n\nimport * as resetStyles from './reset.css'\nimport { Sprinkles, sprinkles } from './sprinkles.css'\n\nexport type Atoms = Sprinkles & {\n reset?: keyof JSX.IntrinsicElements\n}\n\nexport const atoms = ({ reset, ...rest }: Atoms) => {\n if (!reset) return sprinkles(rest)\n\n const elementReset = resetStyles.element[reset as keyof typeof resetStyles.element]\n\n const sprinklesClasses = sprinkles(rest)\n\n return clsx(resetStyles.base, elementReset, sprinklesClasses)\n}\n","import { useMemo } from \"react\";\nimport CountUp from \"react-countup\";\nimport { Text, TextProps } from \"../Text\";\n\ninterface BalanceProps extends TextProps {\n value: number;\n decimals?: number;\n unit?: string;\n isDisabled?: boolean;\n prefix?: string;\n onClick?: (event: React.MouseEvent) => void;\n strikeThrough?: boolean;\n startFromValue?: boolean;\n}\n\nconst Balance: React.FC> = ({\n value,\n color = \"text\",\n decimals = 3,\n isDisabled = false,\n unit,\n prefix,\n onClick,\n strikeThrough,\n startFromValue = false,\n ...props\n}) => {\n const prefixProp = useMemo(() => (prefix ? { prefix } : {}), [prefix]);\n const suffixProp = useMemo(() => (unit ? { suffix: unit } : {}), [unit]);\n\n return (\n \n {({ countUpRef }) => (\n \n \n \n )}\n \n );\n};\n\nexport default Balance;\n","import { LayoutProps, SpaceProps } from \"styled-system\";\n\nexport const animation = {\n WAVES: \"waves\",\n PULSE: \"pulse\",\n} as const;\n\nexport const variant = {\n RECT: \"rect\",\n CIRCLE: \"circle\",\n} as const;\n\nexport type Animation = (typeof animation)[keyof typeof animation];\nexport type Variant = (typeof variant)[keyof typeof variant];\n\nexport interface SkeletonProps extends SpaceProps, LayoutProps {\n animation?: Animation;\n variant?: Variant;\n}\n","import React from \"react\";\nimport { styled, keyframes } from \"styled-components\";\nimport { space, layout } from \"styled-system\";\nimport { SkeletonProps, animation as ANIMATION, variant as VARIANT } from \"./types\";\n\nconst waves = keyframes`\n from {\n left: -150px;\n }\n to {\n left: 100%;\n }\n`;\n\nconst pulse = keyframes`\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.4;\n }\n 100% {\n opacity: 1;\n }\n`;\n\nconst Root = styled.div`\n min-height: 20px;\n display: block;\n background-color: ${({ theme }) => theme.colors.backgroundDisabled};\n border-radius: ${({ variant, theme }) => (variant === VARIANT.CIRCLE ? theme.radii.circle : theme.radii.small)};\n\n ${layout}\n ${space}\n`;\n\nconst Pulse = styled(Root)`\n animation: ${pulse} 2s infinite ease-out;\n transform: translate3d(0, 0, 0);\n`;\n\nconst Waves = styled(Root)`\n position: relative;\n overflow: hidden;\n transform: translate3d(0, 0, 0);\n &:before {\n content: \"\";\n position: absolute;\n background-image: linear-gradient(90deg, transparent, rgba(243, 243, 243, 0.5), transparent);\n top: 0;\n left: -150px;\n height: 100%;\n width: 150px;\n animation: ${waves} 2s cubic-bezier(0.4, 0, 0.2, 1) infinite;\n }\n`;\n\nconst Skeleton: React.FC> = ({\n variant = VARIANT.RECT,\n animation = ANIMATION.PULSE,\n ...props\n}) => {\n if (animation === ANIMATION.WAVES) {\n return ;\n }\n\n return ;\n};\n\nexport default Skeleton;\n","import { styled } from \"styled-components\";\nimport { grid, flexbox } from \"styled-system\";\nimport Box from \"./Box\";\nimport { GridProps } from \"./types\";\n\nconst Grid = styled(Box)`\n display: grid;\n ${flexbox}\n ${grid}\n`;\n\nexport default Grid;\n","import { ReactElement } from \"react\";\nimport { SpaceProps } from \"styled-system\";\n\nexport const scales = {\n SM: \"sm\",\n MD: \"md\",\n LG: \"lg\",\n} as const;\n\nexport type Scales = (typeof scales)[keyof typeof scales];\n\nexport interface InputProps extends SpaceProps {\n scale?: Scales;\n isSuccess?: boolean;\n isWarning?: boolean;\n}\n\nexport interface InputGroupProps extends SpaceProps {\n scale?: Scales;\n startIcon?: ReactElement;\n endIcon?: ReactElement;\n children: JSX.Element;\n}\n","import { styled, DefaultTheme } from \"styled-components\";\nimport { InputProps, scales } from \"./types\";\n\ninterface StyledInputProps extends InputProps {\n theme: DefaultTheme;\n}\n\n/**\n * Priority: Warning --> Success\n */\nconst getBoxShadow = ({ isSuccess = false, isWarning = false, theme }: StyledInputProps) => {\n if (isWarning) {\n return theme.shadows.warning;\n }\n\n if (isSuccess) {\n return theme.shadows.success;\n }\n\n return theme.shadows.inset;\n};\n\nconst getHeight = ({ scale = scales.MD }: StyledInputProps) => {\n switch (scale) {\n case scales.SM:\n return \"32px\";\n case scales.LG:\n return \"48px\";\n case scales.MD:\n default:\n return \"40px\";\n }\n};\n\nconst Input = styled(\"input\").withConfig({\n shouldForwardProp: (props) => ![\"scale\", \"isSuccess\", \"isWarning\"].includes(props),\n})`\n background-color: ${({ theme }) => theme.colors.backgroundAlt};\n border: 0;\n border-radius: 10px;\n box-shadow: ${getBoxShadow};\n color: ${({ theme }) => theme.colors.text};\n display: block;\n font-size: 16px;\n height: ${getHeight};\n outline: 0;\n padding: 0 16px;\n width: 100%;\n border: 1px solid ${({ theme }) => theme.colors.cardBorder};\n\n &::placeholder {\n color: ${({ theme }) => theme.colors.textSubtle};\n }\n\n &:disabled {\n background-color: ${({ theme }) => theme.colors.backgroundDisabled};\n box-shadow: none;\n color: ${({ theme }) => theme.colors.textDisabled};\n cursor: not-allowed;\n }\n\n &:focus:not(:disabled) {\n border: 1px solid ${({ theme }) => theme.colors.primary};\n }\n`;\n\nInput.defaultProps = {\n scale: scales.MD,\n isSuccess: false,\n isWarning: false,\n};\n\nexport default Input;\n","import { styled } from \"styled-components\";\nimport Box from \"../Box/Box\";\nimport Input from \"../Input/Input\";\nimport Text from \"../Text/Text\";\nimport IconButton from \"../Button/IconButton\";\nimport { BalanceInputProps } from \"./types\";\n\nexport const SwitchUnitsButton = styled(IconButton)`\n width: 16px;\n`;\n\nexport const UnitContainer = styled(Text)`\n margin-left: 4px;\n text-align: right;\n color: ${({ theme }) => theme.colors.textSubtle};\n white-space: nowrap;\n`;\n\nexport const StyledBalanceInput = styled(Box)<{ isWarning: BalanceInputProps[\"isWarning\"] }>`\n background-color: ${({ theme }) => theme.colors.input};\n border: 1px solid ${({ theme }) => theme.colors.inputSecondary};\n border-radius: 16px;\n box-shadow: ${({ theme, isWarning }) => theme.shadows[isWarning ? \"warning\" : \"inset\"]};\n padding: 8px 16px;\n`;\n\nexport const StyledInput = styled(Input)<{ textAlign?: string }>`\n background: transparent;\n border-radius: 0;\n box-shadow: none;\n padding-left: 0;\n padding-right: 0;\n text-align: ${({ textAlign = \"right\" }) => textAlign};\n border: none;\n\n ::placeholder {\n color: ${({ theme }) => theme.colors.textSubtle};\n }\n\n &:focus:not(:disabled) {\n box-shadow: none;\n }\n`;\n","import React from \"react\";\nimport { Flex, Box } from \"../Box\";\nimport { SwapVertIcon } from \"../Svg\";\nimport Text from \"../Text/Text\";\nimport { StyledBalanceInput, StyledInput, UnitContainer, SwitchUnitsButton } from \"./styles\";\nimport { BalanceInputProps } from \"./types\";\n\nconst BalanceInput: React.FC> = ({\n value,\n placeholder = \"0.0\",\n onUserInput,\n currencyValue,\n inputProps,\n innerRef,\n isWarning = false,\n decimals = 18,\n unit,\n switchEditingUnits,\n ...props\n}) => {\n const handleOnChange = (e: React.ChangeEvent) => {\n if (e.currentTarget.validity.valid) {\n onUserInput(e.currentTarget.value.replace(/,/g, \".\"));\n }\n };\n\n return (\n \n \n \n \n \n {unit && {unit}}\n \n {currencyValue && (\n \n {currencyValue}\n \n )}\n \n {switchEditingUnits && (\n \n \n \n \n \n )}\n \n \n );\n};\n\nexport default BalanceInput;\n","import { styled } from \"styled-components\";\nimport { Box, Flex } from \"../Box\";\n\nexport const InlineMenuContainer = styled(Box)`\n background-color: ${({ theme }) => theme.colors.backgroundAlt};\n border-radius: ${({ theme }) => theme.radii.card};\n box-shadow: ${({ theme }) => theme.shadows.tooltip};\n`;\n\nexport const SubMenuContainer = styled(Flex)`\n flex-direction: column;\n overflow: hidden;\n min-width: 136px;\n background: ${({ theme }) => theme.colors.input};\n border-radius: ${({ theme }) => theme.radii.default};\n border: ${({ theme }) => `1px solid ${theme.colors.inputSecondary}`};\n`;\n\nexport const ClickableElementContainer = styled.div`\n cursor: pointer;\n display: inline-flex;\n`;\n\nexport const SubMenuItem = styled.button`\n border: 0;\n outline: 0;\n cursor: pointer;\n background: transparent;\n padding: 8px 16px;\n color: ${({ theme }) => theme.colors.text};\n width: 100%;\n font-size: 16px;\n text-align: left;\n\n &:hover {\n background-color: ${({ theme }) => theme.colors.inputSecondary};\n text-decoration: none;\n }\n`;\n","// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nconst getPortalRoot = () => typeof window !== \"undefined\" && (document.getElementById(\"portal-root\") ?? document.body);\n\nexport default getPortalRoot;\n","import React, { useState, useEffect } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { usePopper } from \"react-popper\";\nimport { ClickableElementContainer } from \"./styles\";\nimport { BaseMenuProps } from \"./types\";\nimport getPortalRoot from \"../../util/getPortalRoot\";\n\nconst BaseMenu: React.FC = ({ component, options, children, isOpen = false }) => {\n const [targetElement, setTargetElement] = useState(null);\n const [menuElement, setMenuElement] = useState(null);\n const placement = options?.placement ?? \"bottom\";\n const offset = options?.offset ?? [0, 10];\n const padding = options?.padding ?? { left: 16, right: 16 };\n\n const [isMenuOpen, setIsMenuOpen] = useState(isOpen);\n\n const toggle = () => {\n setIsMenuOpen((prev) => !prev);\n };\n\n const open = () => {\n setIsMenuOpen(true);\n };\n\n const close = () => {\n setIsMenuOpen(false);\n };\n\n // Allow for component to be controlled\n useEffect(() => {\n setIsMenuOpen(isOpen);\n }, [isOpen, setIsMenuOpen]);\n\n useEffect(() => {\n if (menuElement !== null && targetElement !== null) {\n const handleClickOutside = ({ target }: Event) => {\n if (target instanceof Node && !menuElement.contains(target) && !targetElement.contains(target)) {\n setIsMenuOpen(false);\n }\n };\n document.addEventListener(\"click\", handleClickOutside);\n return () => {\n document.removeEventListener(\"click\", handleClickOutside);\n };\n }\n return undefined;\n }, [menuElement, targetElement]);\n\n const { styles, attributes } = usePopper(targetElement, menuElement, {\n placement,\n modifiers: [\n { name: \"offset\", options: { offset } },\n { name: \"preventOverflow\", options: { padding } },\n ],\n });\n\n const menu = (\n
\n {typeof children === \"function\" ? children({ toggle, open, close }) : children}\n
\n );\n\n const portal = getPortalRoot();\n const renderMenu = portal ? createPortal(menu, portal) : menu;\n\n return (\n <>\n \n {component}\n \n {isMenuOpen && renderMenu}\n \n );\n};\n\nexport default BaseMenu;\n","import React from \"react\";\nimport { BoxProps } from \"../Box\";\nimport BaseMenu from \"./BaseMenu\";\nimport { InlineMenuContainer } from \"./styles\";\nimport { BaseMenuProps } from \"./types\";\n\nconst InlineMenu: React.FC> = ({\n children,\n component,\n isOpen = false,\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n\nexport default InlineMenu;\n","/* eslint-disable react/no-array-index-key */\nimport React, { Children, isValidElement, ReactNode } from \"react\";\nimport { styled } from \"styled-components\";\nimport { space } from \"styled-system\";\nimport ChevronRightIcon from \"../Svg/Icons/ChevronRight\";\nimport { BreadcrumbsProps } from \"./types\";\n\nconst Separator = styled.div`\n align-items: center;\n color: ${({ theme }) => theme.colors.textDisabled};\n display: flex;\n justify-content: center;\n padding-left: 4px;\n padding-right: 4px;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n padding-left: 8px;\n padding-right: 8px;\n }\n\n ${({ theme }) => theme.mediaQueries.md} {\n padding-left: 16px;\n padding-right: 16px;\n }\n`;\n\nconst StyledBreadcrumbs = styled.ul`\n align-items: center;\n display: flex;\n flex-wrap: wrap;\n list-style-type: none;\n\n a {\n color: ${({ theme }) => theme.colors.primary};\n\n &:hover {\n color: ${({ theme }) => theme.colors.primaryBright};\n }\n }\n\n ${space}\n`;\n\nconst insertSeparators = (items: ReactNode[], separator: BreadcrumbsProps[\"separator\"]) =>\n items.reduce((accum: ReactNode[], item, index) => {\n if (index === 0) {\n return [...accum, item];\n }\n\n return [\n ...accum,\n \n {separator}\n ,\n item,\n ];\n }, []);\n\nconst DefaultSeparator = ;\n\nconst Breadcrumbs: React.FC> = ({\n separator = DefaultSeparator,\n children,\n}) => {\n const validItems = Children.toArray(children).filter((child) => isValidElement(child));\n const items = insertSeparators(validItems, separator);\n\n return (\n \n {items.map((item, index) => (\n
  • {item}
  • \n ))}\n
    \n );\n};\n\nexport default Breadcrumbs;\n","import React, { cloneElement, Children, ReactElement } from \"react\";\nimport { styled, DefaultTheme } from \"styled-components\";\nimport { space } from \"styled-system\";\nimport { scales, variants } from \"../Button/types\";\nimport { ButtonMenuProps } from \"./types\";\n\ninterface StyledButtonMenuProps extends ButtonMenuProps {\n theme: DefaultTheme;\n}\n\nconst getBackgroundColor = ({ theme, variant }: StyledButtonMenuProps) => {\n return theme.colors[variant === variants.SUBTLE ? \"input\" : \"tertiary\"];\n};\n\nconst getBorderColor = ({ theme, variant }: StyledButtonMenuProps) => {\n return theme.colors[variant === variants.SUBTLE ? \"inputSecondary\" : \"disabled\"];\n};\n\nconst StyledButtonMenu = styled.div.withConfig({\n shouldForwardProp: (props) => ![\"fullWidth\"].includes(props),\n})`\n background-color: ${getBackgroundColor};\n border-radius: 10px;\n display: ${({ fullWidth }) => (fullWidth ? \"flex\" : \"inline-flex\")};\n border: 1px solid ${getBorderColor};\n width: ${({ fullWidth }) => (fullWidth ? \"100%\" : \"auto\")};\n\n & > button,\n & > a {\n flex: ${({ fullWidth }) => (fullWidth ? 1 : \"auto\")};\n }\n\n & > button + button,\n & > a + a {\n margin-left: 2px; // To avoid focus shadow overlap\n }\n\n & > button,\n & a {\n box-shadow: none;\n }\n\n ${({ disabled, theme, variant }) => {\n if (disabled) {\n return `\n opacity: 0.5;\n\n & > button:disabled {\n background-color: transparent;\n color: ${variant === variants.PRIMARY ? theme.colors.primary : theme.colors.textSubtle};\n }\n `;\n }\n return \"\";\n }}\n ${space}\n`;\n\nconst ButtonMenu: React.FC> = ({\n activeIndex = 0,\n scale = scales.MD,\n variant = variants.PRIMARY,\n onItemClick,\n disabled,\n children,\n fullWidth = false,\n ...props\n}) => {\n return (\n \n {Children.map(children, (child: ReactElement, index) => {\n return cloneElement(child, {\n isActive: activeIndex === index,\n onClick: onItemClick ? (e: React.MouseEvent) => onItemClick(index, e) : undefined,\n scale,\n variant,\n disabled,\n });\n })}\n \n );\n};\n\nexport default ButtonMenu;\n","import { styled } from \"styled-components\";\nimport { PolymorphicComponent } from \"../../util/polymorphic\";\nimport Button from \"../Button/Button\";\nimport { BaseButtonProps, variants } from \"../Button/types\";\nimport { ButtonMenuItemProps } from \"./types\";\n\ninterface InactiveButtonProps extends BaseButtonProps {\n forwardedAs: BaseButtonProps[\"as\"];\n}\n\nconst InactiveButton: PolymorphicComponent = styled(Button)`\n background: transparent;\n background-color: transparent;\n color: ${({ theme, variant }) => (variant === variants.PRIMARY ? theme.colors.primary : theme.colors.textSubtle)};\n &:hover:not(:disabled):not(:active) {\n background: transparent;\n background-color: transparent;\n }\n`;\n\nconst ButtonMenuItem: PolymorphicComponent = ({\n isActive = false,\n variant = variants.PRIMARY,\n as,\n ...props\n}: ButtonMenuItemProps) => {\n if (!isActive) {\n return ;\n }\n\n return \n }\n >\n {langs.map((lang) => (\n setLang(lang)}\n // Safari fix\n style={{ minHeight: \"32px\", height: \"auto\" }}\n >\n {lang.language}\n \n ))}\n \n);\n\nexport default React.memo(LangSelector, (prev, next) => prev.currentLang === next.currentLang);\n","import { styled } from \"styled-components\";\nimport Grid from \"../Box/Grid\";\n\nconst GridLayout = styled(Grid)`\n grid-template-columns: repeat(6, 1fr);\n grid-gap: 16px;\n ${({ theme }) => theme.mediaQueries.sm} {\n grid-template-columns: repeat(8, 1fr);\n grid-gap: 24px;\n }\n ${({ theme }) => theme.mediaQueries.md} {\n grid-template-columns: repeat(12, 1fr);\n grid-gap: 24px;\n }\n ${({ theme }) => theme.mediaQueries.lg} {\n grid-template-columns: repeat(12, 1fr);\n grid-gap: 32px;\n }\n`;\n\nexport default GridLayout;\n","import { styled } from \"styled-components\";\nimport BaseLayout from \"./BaseLayout\";\n\nconst GridLayout = styled(BaseLayout)`\n & > div {\n grid-column: span 6;\n ${({ theme }) => theme.mediaQueries.sm} {\n grid-column: span 4;\n }\n }\n`;\n\nexport default GridLayout;\n","import { Box, BoxProps } from \"../Box\";\n\nconst Container: React.FC> = ({ children, ...props }) => (\n \n {children}\n \n);\n\nexport default Container;\n","import { styled } from \"styled-components\";\n\nconst FlexLayout = styled.div`\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n & > * {\n min-width: 280px;\n max-width: 31.5%;\n width: 100%;\n margin: 0 8px;\n margin-bottom: 32px;\n }\n`;\n\nexport default FlexLayout;\n","import { styled } from \"styled-components\";\nimport { Flex, FlexProps } from \"../Box\";\n\nexport interface FlexGapProps extends FlexProps {\n gap?: string;\n rowGap?: string;\n columnGap?: string;\n}\n\nconst FlexGap = styled(Flex)`\n gap: ${({ gap }) => gap};\n row-gap: ${({ rowGap }) => rowGap};\n column-gap: ${({ columnGap }) => columnGap};\n`;\n\nexport default FlexGap;\n","import React from \"react\";\nimport { Link as ReactLink } from 'react-router-dom';\nimport { styled } from \"styled-components\";\nimport EXTERNAL_LINK_PROPS from \"../../util/externalLinkProps\";\nimport Text from \"../Text/Text\";\nimport { StyledLinkProps } from \"./types\";\n\nexport const StyledLink = styled(Text)`\n display: flex;\n align-items: center;\n width: fit-content;\n &:hover {\n text-decoration: underline;\n }\n`;\n\nexport const Link: React.FC> = ({ external, to, target, rel, ...props }) => {\n const internalProps = external ? EXTERNAL_LINK_PROPS : {};\n return (\n \n \n \n )\n};\n\n/* eslint-disable react/default-props-match-prop-types */\nLink.defaultProps = {\n color: \"primary\",\n};\n","import React from \"react\";\nimport { Link } from \"./Link\";\nimport OpenNewIcon from \"../Svg/Icons/OpenNew\";\nimport PlsIcon from \"../Svg/Icons/PlsIcon\";\nimport { StyledLinkProps } from \"./types\";\n\nexport const LinkExternal: React.FC> = ({ \n children,\n isPlsScan,\n ...props\n}) => {\n return (\n \n {children}\n {isPlsScan && }\n \n \n );\n};\n","import { styled } from \"styled-components\";\nimport { Box } from \"../Box\";\n\nconst Loading = styled(Box)`\n border-radius: 50%;\n border: 2px solid ${({ theme }) => theme.colors.disabled};\n border-top: 2px solid transparent;\n -webkit-animation: spin 2s linear infinite;\n animation: spin 2s linear infinite;\n @-webkit-keyframes spin {\n 0% {\n -webkit-transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n }\n }\n\n @keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n`;\n\nLoading.defaultProps = {\n width: \"20px\",\n height: \"20px\",\n};\n\nexport default Loading;\n","const variants = {\n warning: {\n background: \"#FFB23719\",\n borderColor: \"warning\",\n },\n danger: {\n background: \"#ED4B9E19\",\n borderColor: \"failure\",\n },\n success: {\n background: \"rgba(49, 208, 170, 0.1)\",\n borderColor: \"success\",\n },\n};\n\nexport default variants;\n","import React, { useContext } from \"react\";\nimport { styled } from \"styled-components\";\nimport { variant as systemVariant, space } from \"styled-system\";\nimport { WarningIcon, ErrorIcon, CheckmarkCircleFillIcon } from \"../Svg\";\nimport { Text, TextProps } from \"../Text\";\nimport { Box } from \"../Box\";\nimport { MessageProps } from \"./types\";\nimport variants from \"./theme\";\n\nconst MessageContext = React.createContext({ variant: \"success\" });\n\nconst Icons = {\n warning: WarningIcon,\n danger: ErrorIcon,\n success: CheckmarkCircleFillIcon,\n};\n\nconst MessageContainer = styled.div`\n display: flex;\n background-color: gray;\n padding: 16px;\n border-radius: 10px;\n border: solid 1px;\n\n ${space}\n ${systemVariant({\n variants,\n })}\n`;\n\nconst colors = {\n // these color names should be place in the theme once the palette is finalized\n warning: \"#D67E0A\",\n success: \"#129E7D\",\n danger: \"failure\",\n};\n\nexport const MessageText: React.FC> = ({ children, ...props }) => {\n const ctx = useContext(MessageContext);\n return (\n \n {children}\n \n );\n};\n\nconst Message: React.FC> = ({ children, variant, icon, ...props }) => {\n const Icon = Icons[variant];\n return (\n \n \n {icon ?? }\n {children}\n \n \n );\n};\n\nexport default Message;\n","import React, { cloneElement, Children, ReactElement } from \"react\";\nimport { styled } from \"styled-components\";\nimport { NotificationDotProps, DotProps } from \"./types\";\n\nconst NotificationDotRoot = styled.span`\n display: inline-flex;\n position: relative;\n`;\n\nconst Dot = styled(\"span\").withConfig({\n shouldForwardProp: (props) => ![\"show\"].includes(props),\n})`\n display: ${({ show }) => (show ? \"inline-flex\" : \"none\")};\n position: absolute;\n top: 0;\n right: 0;\n width: 10px;\n height: 10px;\n pointer-events: none;\n border: 2px solid ${({ theme }) => theme.colors.invertedContrast};\n border-radius: 50%;\n background-color: ${({ theme, color }) => theme.colors[color]};\n`;\n\nconst NotificationDot: React.FC> = ({\n show = false,\n color = \"failure\",\n children,\n ...props\n}) => (\n \n {Children.map(children, (child: ReactElement) => cloneElement(child, props))}\n \n \n);\n\nexport default NotificationDot;\n","import { styled } from \"styled-components\";\nimport { Box } from \"../Box\";\nimport Container from \"../Layouts/Container\";\nimport { PageHeaderProps } from \"./types\";\n\nconst Outer = styled(Box)<{ background?: string }>`\n min-height: calc(100vh - 119px);\n background: ${({ theme, background }) => background || theme.colors.gradientBubblegum};\n\n ${({ theme }) => theme.mediaQueries.lg} {\n min-height: calc(100vh - 119px);\n }\n`\n\nconst Inner = styled(Container)`\n padding-top: 32px;\n padding-bottom: 70px;\n position: relative;\n`;\n\nconst PageHeader: React.FC> = ({ background, children, ...props }) => (\n \n {children}\n \n);\n\nexport default PageHeader;\n","import React from \"react\";\nimport { styled } from \"styled-components\";\nimport LogoRound from \"../Svg/Icons/LogoRound\";\nimport Text from \"../Text/Text\";\nimport Skeleton from \"../Skeleton/Skeleton\";\nimport { Colors } from \"../../theme\";\n\nexport interface Props {\n color?: keyof Colors;\n plsxPriceUsd?: number;\n showSkeleton?: boolean;\n}\n\nconst PriceLink = styled.a`\n display: flex;\n align-items: center;\n svg {\n transition: transform 0.3s;\n }\n :hover {\n svg {\n transform: scale(1.2);\n }\n }\n`;\n\nconst PlsxPrice: React.FC> = ({\n plsxPriceUsd,\n color = \"textSubtle\",\n showSkeleton = true,\n}) => {\n return plsxPriceUsd ? (\n \n \n {`$${plsxPriceUsd.toFixed(7)}`}\n \n ) : showSkeleton ? (\n \n ) : null;\n};\n\nexport default React.memo(PlsxPrice);\n","import { InputHTMLAttributes } from \"react\";\n\nexport type PulseXToggleTheme = {\n handleBackground: string;\n handleShadow: string;\n};\n\nexport const scales = {\n SM: \"sm\",\n MD: \"md\",\n LG: \"lg\",\n} as const;\n\nexport type Scales = (typeof scales)[keyof typeof scales];\n\nexport interface PulseXToggleProps extends InputHTMLAttributes {\n scale?: Scales;\n checked?: boolean;\n}\n\nexport interface HandleProps {\n scale: Scales;\n}\n\nexport interface InputProps {\n scale: Scales;\n}\n\nexport const scaleKeys = {\n pancakeSize: \"pancakeSize\",\n travelDistance: \"travelDistance\",\n toggleHeight: \"toggleHeight\",\n toggleWidth: \"toggleWidth\",\n pancakeThickness: \"pancakeThickness\",\n pancakeTwoOffset: \"pancakeTwoOffset\",\n pancakeThreeOffset: \"pancakeThreeOffset\",\n butterTop: \"butterTop\",\n butterLeft: \"butterLeft\",\n butterWidth: \"butterWidth\",\n butterHeight: \"butterHeight\",\n butterThickness: \"butterThickness\",\n butterRadius: \"butterRadius\",\n butterSmearOneTop: \"butterSmearOneTop\",\n butterSmearOneLeft: \"butterSmearOneLeft\",\n butterSmearTwoTop: \"butterSmearTwoTop\",\n butterSmearTwoRight: \"butterSmearTwoRight\",\n} as const;\n\nexport type ScaleKeys = (typeof scaleKeys)[keyof typeof scaleKeys];\n","import { styled } from \"styled-components\";\nimport { scales, PulseXToggleProps, HandleProps, InputProps, ScaleKeys } from \"./types\";\n\nconst scaleKeyValues = {\n sm: {\n pancakeSize: \"14px\", // The size of a pancake (the handle)\n travelDistance: \"14px\", // How far pancakes should travel horizontally\n toggleHeight: \"20px\", // General Height and\n toggleWidth: \"36px\", // Width of a toggle box\n pancakeThickness: \"1px\", // Bottom shadow of a pancake\n pancakeTwoOffset: \"0px\", // Pancakes don't look good when they are concentric\n pancakeThreeOffset: \"-3px\", // so pancake 2 and 3 are shifted a little bit\n butterTop: \"3px\", // Fine adjustments for butter position\n butterLeft: \"10px\",\n butterWidth: \"6px\", // Widht and\n butterHeight: \"5px\", // Height of a butter block on top of pancakes\n butterThickness: \"0.5px\", // Shadow on the bottom of the butter block\n butterRadius: \"2px\", // Rounded corners for the butter\n butterSmearOneTop: \"10px\", // There is melted butter\n butterSmearOneLeft: \"2.5px\", // next to the butter block\n butterSmearTwoTop: \"11px\", // implemented with :before and :after\n butterSmearTwoRight: \"2.5px\", // these values adjust the position of it\n },\n md: {\n pancakeSize: \"24px\",\n travelDistance: \"24px\",\n toggleHeight: \"32px\",\n toggleWidth: \"56px\",\n pancakeThickness: \"1.5px\",\n pancakeTwoOffset: \"-1px\",\n pancakeThreeOffset: \"-6px\",\n butterTop: \"5px\",\n butterLeft: \"13px\",\n butterWidth: \"10px\",\n butterHeight: \"8px\",\n butterThickness: \"0.75px\",\n butterRadius: \"3px\",\n butterSmearOneTop: \"15px\",\n butterSmearOneLeft: \"3.75px\",\n butterSmearTwoTop: \"16px\",\n butterSmearTwoRight: \"3.75px\",\n },\n lg: {\n pancakeSize: \"31px\",\n travelDistance: \"31px\",\n toggleHeight: \"40px\",\n toggleWidth: \"72px\",\n pancakeThickness: \"2px\",\n pancakeTwoOffset: \"-3px\",\n pancakeThreeOffset: \"-8px\",\n butterTop: \"3px\",\n butterLeft: \"16px\",\n butterWidth: \"12px\",\n butterHeight: \"11px\",\n butterThickness: \"1px\",\n butterRadius: \"4px\",\n butterSmearOneTop: \"20px\",\n butterSmearOneLeft: \"5px\",\n butterSmearTwoTop: \"22px\",\n butterSmearTwoRight: \"5px\",\n },\n};\n\nconst getScale =\n (property: ScaleKeys) =>\n ({ scale = scales.LG }: PulseXToggleProps) => {\n return scaleKeyValues[scale][property];\n };\n\nexport const PulseXStack = styled.div`\n position: relative;\n display: inline-block;\n\n &:label:before {\n content: none;\n }\n\n .pancakes {\n position: absolute;\n transition: 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275);\n }\n\n .pancake {\n background: #e27c31;\n border-radius: 50%;\n width: ${getScale(\"pancakeSize\")};\n height: ${getScale(\"pancakeSize\")};\n position: absolute;\n transition: 0.4s ease;\n top: 2px;\n left: 4px;\n box-shadow: 0 ${getScale(\"pancakeThickness\")} 0 ${getScale(\"pancakeThickness\")} #fbbe7c;\n }\n\n .pancake:nth-child(1) {\n background: ${({ theme }) => theme.plsxToggle.handleBackground};\n box-shadow: 0 ${getScale(\"pancakeThickness\")} 0 ${getScale(\"pancakeThickness\")}\n ${({ theme }) => theme.plsxToggle.handleShadow};\n }\n\n .pancake:nth-child(2) {\n left: 0;\n top: ${getScale(\"pancakeTwoOffset\")};\n transform: scale(0);\n transition: 0.2s ease 0.2s;\n }\n\n .pancake:nth-child(3) {\n top: ${getScale(\"pancakeThreeOffset\")};\n transform: scale(0);\n transition: 0.2s ease 0.2s;\n }\n\n .pancake:nth-child(3):before,\n .pancake:nth-child(3):after {\n content: \"\";\n position: absolute;\n background: #ef8927;\n border-radius: 20px;\n width: 50%;\n height: 20%;\n }\n\n .pancake:nth-child(3):before {\n top: ${getScale(\"butterSmearOneTop\")};\n left: ${getScale(\"butterSmearOneLeft\")};\n }\n\n .pancake:nth-child(3):after {\n top: ${getScale(\"butterSmearTwoTop\")};\n right: ${getScale(\"butterSmearTwoRight\")};\n }\n\n .butter {\n width: ${getScale(\"butterWidth\")};\n height: ${getScale(\"butterHeight\")};\n background: #fbdb60;\n top: ${getScale(\"butterTop\")};\n left: ${getScale(\"butterLeft\")};\n position: absolute;\n border-radius: ${getScale(\"butterRadius\")};\n box-shadow: 0 ${getScale(\"butterThickness\")} 0 ${getScale(\"butterThickness\")} #d67823;\n transform: scale(0);\n transition: 0.2s ease;\n }\n`;\n\nexport const PulseXInput = styled.input`\n height: 40px;\n left: 0;\n opacity: 0;\n position: absolute;\n top: 0;\n width: 40px;\n\n &:focus + label {\n box-shadow: ${({ theme }) => theme.shadows.focus};\n }\n\n &:checked + label .pancakes {\n transform: translateX(${getScale(\"travelDistance\")});\n }\n\n &:checked + label .pancake:nth-child(1) {\n background: #e27c31;\n box-shadow: 0 ${getScale(\"pancakeThickness\")} 0 ${getScale(\"pancakeThickness\")} #fbbe7c;\n transition-delay: 0.2s;\n }\n\n &:checked + label .pancake:nth-child(2) {\n transform: scale(1);\n transition-delay: 0.2s;\n }\n\n &:checked + label .pancake:nth-child(3) {\n transform: scale(1);\n transition-delay: 0.4s;\n }\n\n &:checked + label .butter {\n transform: scale(1);\n transition-delay: 0.6s;\n }\n`;\n\nexport const PulseXLabel = styled.label`\n width: ${getScale(\"toggleWidth\")};\n height: ${getScale(\"toggleHeight\")};\n background: ${({ theme, checked }) => theme.colors[checked ? \"success\" : \"input\"]};\n box-shadow: ${({ theme }) => theme.shadows.inset};\n display: inline-block;\n border-radius: 50px;\n position: relative;\n transition: all 0.3s ease;\n transform-origin: 20% center;\n cursor: pointer;\n`;\n","export const variants = {\n ROUND: \"round\",\n FLAT: \"flat\",\n} as const;\n\nexport const scales = {\n MD: \"md\",\n SM: \"sm\",\n} as const;\n\nexport type Scale = (typeof scales)[keyof typeof scales];\n\nexport type Variant = (typeof variants)[keyof typeof variants];\n\nexport interface ProgressProps {\n variant?: Variant;\n scale?: Scale;\n primaryStep?: number;\n secondaryStep?: number;\n showProgressBunny?: boolean;\n useDark?: boolean;\n}\n","import { variants, scales } from \"./types\";\n\nexport const styleVariants = {\n [variants.ROUND]: {\n borderRadius: \"10px\",\n },\n [variants.FLAT]: {\n borderRadius: 0,\n },\n};\n\nexport const styleScales = {\n [scales.MD]: {\n height: \"16px\",\n },\n [scales.SM]: {\n height: \"8px\",\n },\n};\n\nexport default styleVariants;\n","import shouldForwardProp from \"@styled-system/should-forward-prop\";\nimport { styled } from \"styled-components\";\nimport { space, variant as StyledSystemVariant } from \"styled-system\";\nimport { styleVariants, styleScales } from \"./themes\";\nimport { ProgressProps, variants } from \"./types\";\nimport { lightColors } from \"../..\";\n\ninterface ProgressBarProps {\n primary?: boolean;\n $useDark: boolean;\n $background?: string;\n}\n\nexport const Bar = styled.div.withConfig({ shouldForwardProp })`\n position: absolute;\n top: 0;\n left: 0;\n background: ${({ theme, $useDark, primary, $background }) => {\n if ($background) return $background;\n if ($useDark) return primary ? theme.colors.secondary : `${theme.colors.secondary}80`;\n return primary ? lightColors.secondary : `${lightColors.secondary}80`;\n }};\n height: 100%;\n transition: width 200ms ease;\n`;\n\nBar.defaultProps = {\n primary: false,\n};\n\ninterface StyledProgressProps {\n variant: ProgressProps[\"variant\"];\n scale: ProgressProps[\"scale\"];\n $useDark: boolean;\n}\n\nconst StyledProgress = styled.div`\n position: relative;\n background-color: ${({ theme, $useDark }) => ($useDark ? theme.colors.input : lightColors.input)};\n box-shadow: ${({ theme }) => theme.shadows.inset};\n overflow: hidden;\n\n ${Bar} {\n border-top-left-radius: ${({ variant }) => (variant === variants.FLAT ? \"0\" : \"32px\")};\n border-bottom-left-radius: ${({ variant }) => (variant === variants.FLAT ? \"0\" : \"32px\")};\n }\n\n ${StyledSystemVariant({\n variants: styleVariants,\n })}\n ${StyledSystemVariant({\n prop: \"scale\",\n variants: styleScales,\n })}\n ${space}\n`;\n\nexport default StyledProgress;\n","import { styled } from \"styled-components\";\n\nconst ProgressBunnyWrapper = styled.div`\n display: flex;\n z-index: 2;\n top: -65%;\n position: absolute;\n transform: translate(-50%, -50%);\n transition: left 200ms ease-out;\n`;\n\nexport default ProgressBunnyWrapper;\n","import { styled } from \"styled-components\";\nimport { Placement, useTooltip } from \"../../hooks\";\nimport { BoxProps, Flex } from \"../Box\";\nimport { HelpIcon } from \"../Svg\";\n\ninterface Props extends BoxProps {\n text: string | React.ReactNode;\n placement?: Placement;\n size?: string;\n isMobile?: boolean;\n};\n\nconst QuestionWrapper = styled.div`\n &:hover,\n &:focus {\n opacity: 0.7;\n }\n`;\n\nexport const QuestionHelper: React.FC> = ({\n text,\n placement = \"auto\",\n size = \"16px\",\n ...props\n}) => {\n const { targetRef, tooltip, tooltipVisible } = useTooltip(text, { placement, trigger: 'hover' });\n\n return (\n \n {tooltipVisible && tooltip}\n \n \n \n \n );\n};\n\nexport const MouseoverTooltip: React.FC = ({ text, isMobile, children, ...props }) => {\n const placement = isMobile ? 'top' : 'right';\n const { targetRef, tooltip, tooltipVisible } = useTooltip(text, { placement, trigger: 'hover' });\n\n return (\n <>\n
    {children}
    \n {tooltipVisible && tooltip}\n \n );\n};\n","import { SpaceProps } from \"styled-system\";\n\nexport type RadioTheme = {\n handleBackground: string;\n};\n\nexport const scales = {\n SM: \"sm\",\n MD: \"md\",\n} as const;\n\nexport type Scales = (typeof scales)[keyof typeof scales];\n\nexport interface RadioProps extends SpaceProps {\n scale?: Scales;\n}\n","import shouldForwardProp from \"@styled-system/should-forward-prop\";\nimport { styled } from \"styled-components\";\nimport { space } from \"styled-system\";\nimport { RadioProps, scales } from \"./types\";\n\nconst getScale = ({ scale }: RadioProps) => {\n switch (scale) {\n case scales.SM:\n return \"24px\";\n case scales.MD:\n default:\n return \"32px\";\n }\n};\n\nconst getCheckedScale = ({ scale }: RadioProps) => {\n switch (scale) {\n case scales.SM:\n return \"12px\";\n case scales.MD:\n default:\n return \"20px\";\n }\n};\n\nconst Radio = styled.input.attrs({ type: \"radio\" }).withConfig({ shouldForwardProp })`\n appearance: none;\n overflow: hidden;\n cursor: pointer;\n position: relative;\n display: inline-block;\n height: ${getScale};\n width: ${getScale};\n vertical-align: middle;\n transition: background-color 0.2s ease-in-out;\n border: 0;\n border-radius: 50%;\n background-color: ${({ theme }) => theme.colors.input};\n box-shadow: ${({ theme }) => theme.shadows.inset};\n\n &:after {\n border-radius: 50%;\n content: \"\";\n height: ${getCheckedScale};\n left: 6px;\n position: absolute;\n top: 6px;\n width: ${getCheckedScale};\n }\n\n &:hover:not(:disabled):not(:checked) {\n box-shadow: ${({ theme }) => theme.shadows.focus};\n }\n\n &:focus {\n outline: none;\n box-shadow: ${({ theme }) => theme.shadows.focus};\n }\n\n &:checked {\n background-color: ${({ theme }) => theme.colors.success};\n &:after {\n background-color: ${({ theme }) => theme.radio.handleBackground};\n }\n }\n\n &:disabled {\n cursor: default;\n opacity: 0.6;\n }\n ${space}\n`;\n\nRadio.defaultProps = {\n scale: scales.MD,\n m: 0,\n};\n\nexport default Radio;\n","import { styled } from \"styled-components\";\nimport { NormalComponents, SpecialComponents } from \"react-markdown/src/ast-to-react\";\nimport { Text } from \"../Text\";\nimport { Heading } from \"../Heading\";\n\nconst Table = styled.table`\n margin-bottom: 32px;\n margin-top: 32px;\n width: 100%;\n\n td,\n th {\n color: ${({ theme }) => theme.colors.text};\n padding: 8px;\n }\n`;\nconst TableBox = styled.div`\n width: 100%;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n`;\n\nconst ThemedComponent = styled.div`\n color: ${({ theme }) => theme.colors.text};\n margin-bottom: 16px;\n margin-top: 16px;\n\n li {\n margin-bottom: 8px;\n }\n`;\n\nconst Pre = styled.pre`\n color: ${({ theme }) => theme.colors.text};\n margin-bottom: 16px;\n margin-top: 16px;\n max-width: 100%;\n overflow-x: auto;\n`;\n\nconst AStyle = styled.a`\n word-break: break-all;\n`;\n\nconst Title = (props: any) => {\n return ;\n};\n\nconst markdownComponents: Partial = {\n h1: Title,\n h2: Title,\n h3: Title,\n h4: Title,\n h5: Title,\n h6: Title,\n p: (props) => {\n // @ts-ignore\n return ;\n },\n table: ({ ...props }) => {\n return (\n \n {props.children}
    \n
    \n );\n },\n ol: (props: any) => {\n return ;\n },\n ul: (props: any) => {\n return ;\n },\n pre: Pre,\n a: AStyle,\n};\n\nexport default markdownComponents;\n","import BigNumber from 'bignumber.js'\n\nexport const BIG_ZERO = new BigNumber(0)\nexport const BIG_ONE = new BigNumber(1)\nexport const BIG_TWO = new BigNumber(2)\nexport const BIG_NINE = new BigNumber(9)\nexport const BIG_TEN = new BigNumber(10)\nexport const BIG_ONE_HUNDRED = new BigNumber(100)\n\nexport const bigIntToSerializedBigNumber = (bigint: bigint): string => bigIntToBigNumber(bigint).toJSON()\n\nexport const bigIntToBigNumber = (bigint: bigint): BigNumber => new BigNumber(bigint.toString())\n","import BigNumber from 'bignumber.js'\nimport memoize from 'lodash/memoize'\nimport { BIG_TEN } from './bigNumber'\n\nexport const getFullDecimalMultiplier = memoize((decimals: number): BigNumber => {\n return BIG_TEN.pow(decimals)\n})\n","import BigNumber from 'bignumber.js'\nimport { getLanguageCodeFromLS } from '@pulsex/localization'\nimport _trimEnd from 'lodash/trimEnd'\nimport { getFullDecimalMultiplier } from './getFullDecimalMultiplier'\nimport { formatUnits } from './viem/formatUnits'\n\n/**\n * Take a formatted amount, e.g. 15 PLS and convert it to full decimal value, e.g. 15000000000000000\n */\nexport const getDecimalAmount = (amount: BigNumber, decimals = 18) => {\n return new BigNumber(amount).times(getFullDecimalMultiplier(decimals))\n}\n\nexport const getBalanceAmount = (amount: BigNumber, decimals: number | undefined = 18) => {\n return new BigNumber(amount).dividedBy(getFullDecimalMultiplier(decimals))\n}\n\n/**\n * This function is not really necessary but is used throughout the site.\n */\nexport const getBalanceNumber = (balance: BigNumber, decimals = 18) => {\n return getBalanceAmount(balance, decimals).toNumber()\n}\n\nexport const getFullDisplayBalance = (balance: BigNumber, decimals = 18, displayDecimals?: number): string => {\n const stringNumber = getBalanceAmount(balance, decimals).toFixed(displayDecimals as number)\n\n return displayDecimals ? _trimEnd(_trimEnd(stringNumber, '0'), '.') : stringNumber\n}\n\n/**\n * Don't use the result to convert back to number.\n * It uses undefined locale which uses host language as a result.\n * Languages have different decimal separators which results in inconsistency when converting back this result to number.\n */\nexport const formatNumber = (number: number, minPrecision = 2, maxPrecision = 2) => {\n const options = {\n minimumFractionDigits: minPrecision,\n maximumFractionDigits: maxPrecision,\n }\n return number.toLocaleString(undefined, options)\n}\n\nexport const formatBigInt = (value: bigint, displayDecimals = 18, decimals = 18): string => {\n const remainder = value % 10n ** BigInt(decimals - displayDecimals)\n\n const formatted = formatUnits(value - remainder, decimals)\n return formatted\n}\n\n/**\n * Method to format the display of wei given an bigint object with toFixed\n * Note: rounds\n */\nexport const formatBigIntToFixed = (number: bigint, displayDecimals = 18, decimals = 18) => {\n const formattedString = formatUnits(number, decimals)\n return (+formattedString).toFixed(displayDecimals)\n}\n\nexport const formatLocalisedCompactNumber = (number: number, isShort?: boolean): string => {\n const codeFromStorage = getLanguageCodeFromLS()\n\n const isClient = typeof window === 'object'\n const isSupported = window?.Intl\n\n // For clients do not support Intl, just return number\n if (isClient && !isSupported) {\n return `${number}`\n }\n\n return new Intl.NumberFormat(codeFromStorage, {\n notation: 'compact',\n compactDisplay: isShort ? 'short' : 'long',\n maximumSignificantDigits: 2,\n }).format(number)\n}\n\nexport default formatLocalisedCompactNumber\n\nexport const formatLpBalance = (balance: BigNumber, decimals: number) => {\n const stakedBalanceBigNumber = getBalanceAmount(balance, decimals)\n if (stakedBalanceBigNumber.gt(0) && stakedBalanceBigNumber.lt(0.00001)) {\n return '< 0.00001'\n }\n return stakedBalanceBigNumber.toFixed(5, BigNumber.ROUND_DOWN)\n}\n","// Copy from viem package to avoid unneessary dependency\nexport function formatUnits(value: bigint, decimals: number) {\n let display = value.toString()\n\n const negative = display.startsWith('-')\n if (negative) display = display.slice(1)\n\n display = display.padStart(decimals, '0')\n\n let [integer, fraction] = [display.slice(0, display.length - decimals), display.slice(display.length - decimals)]\n fraction = fraction.replace(/(0+)$/, '')\n integer = integer || '0'\n\n return `${negative ? '-' : ''}${integer}${fraction ? `.${fraction}` : ''}`\n}\n","import { useTranslation } from '@pulsex/localization';\nimport { useState } from 'react';\nimport { styled } from \"styled-components\";\nimport { useTooltip } from \"../../hooks/useTooltip\";\nimport { Box, Flex, Grid } from \"../Box\";\nimport { ExpandableLabel } from \"../Button\";\nimport { LinkExternal } from \"../Link\";\nimport { HelpIcon } from \"../Svg\";\nimport { Text } from \"../Text\";\n\nconst Footer = styled(Flex)`\n width: 100%;\n background: ${({ theme }) => theme.colors.dropdown};\n`\n\nconst BulletList = styled.ul`\n list-style-type: none;\n margin-top: 16px;\n padding: 0;\n li {\n margin: 0;\n padding: 0;\n }\n li::before {\n content: '•';\n margin-right: 4px;\n color: ${({ theme }) => theme.colors.textSubtle};\n }\n li::marker {\n font-size: 12px;\n }\n`\n\ninterface RoiCalculatorFooterProps {\n isFarm: boolean\n apr?: number;\n displayApr?: string;\n autoCompoundFrequency: number\n multiplier?: string;\n linkLabel: string\n linkHref: string\n performanceFee: number\n rewardIncPerSecond?: boolean;\n}\n\nconst RoiCalculatorFooter: React.FC> = ({\n isFarm,\n apr = 0,\n displayApr,\n multiplier,\n linkLabel,\n linkHref,\n performanceFee,\n rewardIncPerSecond,\n}) => {\n const [isExpanded, setIsExpanded] = useState(false)\n const { t } = useTranslation()\n const {\n targetRef: multiplierRef,\n tooltip: multiplierTooltip,\n tooltipVisible: multiplierTooltipVisible,\n } = useTooltip(\n <>\n \n {t(\n 'The Multiplier represents the proportion of INC rewards each farm receives, as a proportion of the INC produced each second.',\n )}\n \n \n {t('For example, if a 1x farm received 1 INC per second, a 40x farm would receive 40 INC per second.')}\n \n {t('This amount is already included in all APR calculations for the farm.')}\n ,\n { placement: 'top-end', tooltipOffset: [20, 10] },\n )\n\n const gridRowCount = isFarm ? 4 : 2\n\n return (\n
    \n setIsExpanded((prev) => !prev)}>\n {isExpanded ? t('Hide') : t('Details')}\n \n {isExpanded && (\n \n \n \n {'APR'}\n \n \n {apr.toFixed(2)}%\n \n {isFarm && (\n <>\n \n {t('Farm Multiplier')}\n \n \n \n {multiplier}\n \n \n \n \n {multiplierTooltipVisible && multiplierTooltip}\n \n \n )}\n \n \n
  • \n \n {t('Calculated based on current rates.')}\n \n
  • \n
  • \n \n {t(\n 'All figures are estimates provided for your convenience only, and by no means represent guaranteed returns.',\n )}\n \n
  • \n {performanceFee > 0 && (\n
  • \n \n {t('All estimated rates take into account this pool’s %fee%% performance fee', {\n fee: performanceFee,\n })}\n \n
  • \n )}\n
    \n \n {linkLabel}\n \n
    \n )}\n
    \n )\n}\n\nexport default RoiCalculatorFooter\n","// 1 day, 7 days, 30 days, 1 year, 5 years\nconst DAYS_TO_CALCULATE_AGAINST = [1, 7, 30, 365, 1825]\n\n/**\n *\n * @param principalInUSD - amount user wants to invest in USD\n * @param apr - farm or pool apr as percentage. If its farm APR its only cake rewards APR without LP rewards APR\n * @param earningTokenPrice - price of reward token\n * @param compoundFrequency - how many compounds per 1 day, e.g. 1 = one per day, 0.142857142 - once per week\n * @param performanceFee - performance fee as percentage\n * @returns an array of token values earned as interest, with each element representing interest earned over a different period of time (DAYS_TO_CALCULATE_AGAINST)\n */\nexport const getInterestBreakdown = ({\n principalInUSD,\n apr,\n earningTokenPrice,\n compoundFrequency = 1,\n performanceFee = 0,\n}: {\n principalInUSD: number\n apr: number\n earningTokenPrice: number\n compoundFrequency?: number\n performanceFee?: number\n}) => {\n // Everything here is worked out relative to a year, with the asset compounding at the compoundFrequency rate. 1 = once per day\n const timesCompounded = 365 * compoundFrequency\n // We use decimal values rather than % in the math for both APY and the number of days being calculates as a proportion of the year\n const aprAsDecimal = apr / 100\n\n // special handling for tokens like tBTC or BIFI where the daily token rewards for $1000 dollars will be less than 0.001 of that token\n // and also cause rounding errors\n const isHighValueToken = Math.round(earningTokenPrice / 1000) > 0\n const roundingDecimalsNew = isHighValueToken ? 5 : 3\n\n return DAYS_TO_CALCULATE_AGAINST.map((days) => {\n const daysAsDecimalOfYear = days / 365\n // Calculate the starting TOKEN balance with a dollar balance of principalInUSD.\n const principal = principalInUSD / earningTokenPrice\n let interestEarned = principal * aprAsDecimal * (days / 365)\n if (timesCompounded !== 0) {\n // This is a translation of the typical mathematical compounding APY formula. Details here: https://www.calculatorsoup.com/calculators/financial/compound-interest-calculator.php\n const accruedAmount = principal * (1 + aprAsDecimal / timesCompounded) ** (timesCompounded * daysAsDecimalOfYear)\n // To get the TOKEN amount earned, deduct the amount after compounding (accruedAmount) from the starting TOKEN balance (principal)\n interestEarned = accruedAmount - principal\n if (performanceFee) {\n const performanceFeeAsDecimal = performanceFee / 100\n const performanceFeeAsAmount = interestEarned * performanceFeeAsDecimal\n interestEarned -= performanceFeeAsAmount\n }\n }\n return parseFloat(interestEarned.toFixed(roundingDecimalsNew))\n })\n}\n\n/**\n * @param interest how much USD amount you aim to make\n * @param apr APR of farm/pool\n * @param compoundingFrequency how many compounds per 1 day, e.g. 1 = one per day, 0.142857142 - once per week\n * @returns an array of principal values needed to reach target interest, with each element representing principal needed for a different period of time (DAYS_TO_CALCULATE_AGAINST)\n */\nexport const getPrincipalForInterest = (\n interest: number,\n apr: number,\n compoundingFrequency: number,\n performanceFee = 0,\n) => {\n return DAYS_TO_CALCULATE_AGAINST.map((days) => {\n const apyAsDecimal = getApy(apr, compoundingFrequency, days, performanceFee)\n // console.log('inside', interest, apyAsDecimal)\n // const apyAsBN = new BigNumber(apyAsDecimal).decimalPlaces(6, BigNumber.ROUND_DOWN).toNumber()\n return parseFloat((interest / apyAsDecimal).toFixed(2))\n })\n}\n\n/**\n * Given APR returns APY\n * @param apr APR as percentage\n * @param compoundFrequency how many compounds per day\n * @param days if other than 365 adjusts (A)PY for period less than a year\n * @param performanceFee performance fee as percentage\n * @returns APY as decimal\n */\nexport const getApy = (apr: number, compoundFrequency = 1, days = 365, performanceFee = 0) => {\n const daysAsDecimalOfYear = days / 365\n const aprAsDecimal = apr / 100\n const timesCompounded = 365 * compoundFrequency\n let apyAsDecimal = (apr / 100) * daysAsDecimalOfYear\n if (timesCompounded > 0) {\n apyAsDecimal = (1 + aprAsDecimal / timesCompounded) ** (timesCompounded * daysAsDecimalOfYear) - 1\n }\n if (performanceFee) {\n const performanceFeeAsDecimal = performanceFee / 100\n const takenAsPerformanceFee = apyAsDecimal * performanceFeeAsDecimal\n apyAsDecimal -= takenAsPerformanceFee\n }\n return apyAsDecimal\n}\n\nexport const getRoi = ({ amountEarned, amountInvested }: { amountEarned: number; amountInvested: number }) => {\n if (amountInvested === 0) {\n return 0\n }\n const percentage = (amountEarned / amountInvested) * 100\n return percentage\n}\n","import { useEffect, useReducer, useCallback } from \"react\";\nimport merge from \"lodash/merge\";\nimport BigNumber from \"bignumber.js\";\nimport { getRoi, getInterestBreakdown, getPrincipalForInterest } from \"@pulsex/utils/compoundApyHelpers\";\n\n/**\n * This hook is handling all the calculator state and calculations.\n * UI connected to it is merely representation of the data and buttons to trigger actions\n */\n\n// Mapping from the compounding frequency button index to actual compounding frequency\n// in number of compounds per day\nconst compoundingIndexToFrequency = {\n 0: 1,\n 1: 0.142857142,\n 2: 0.071428571, // once every 7 days\n 3: 0.033333333, // once every 30 days\n};\n\nconst TOKEN_PRECISION = 10;\nconst USD_PRECISION = 2;\n\n// Used to track/react which currency user is editing (i.e. USD amount or Token amount)\nexport enum EditingCurrency {\n TOKEN,\n USD,\n}\n\n// Calculator works in 2 modes\nexport enum CalculatorMode {\n ROI_BASED_ON_PRINCIPAL, // User edits principal value and sees what ROI they get\n PRINCIPAL_BASED_ON_ROI, // User edits ROI value and sees what principal they need to invest to reach it\n}\n\nexport interface RoiCalculatorReducerState {\n controls: {\n compounding: boolean; // Compounding checkbox state\n compoundingFrequency: number; // Compounding frequency in number of compounds per day\n activeCompoundingIndex: number; // index of active compounding button in ButtonMenu\n stakingDuration: number; // index of active staking duration button in ButtonMenu\n mode: CalculatorMode;\n editingCurrency: EditingCurrency;\n };\n data: {\n principalAsToken: string; // Used as value for Inputs\n principalAsUSD: string; // Used as value for Inputs\n roiUSD: number;\n roiTokens: number;\n roiPercentage: number; // ROI expressed in percentage relative to principal\n };\n}\n\nconst defaultState: RoiCalculatorReducerState = {\n controls: {\n compounding: true,\n compoundingFrequency: 1, // how many compound in a day , e.g. 1 = once a day, 0.071 - once per 2 weeks\n activeCompoundingIndex: 0, // active compounding selected in\n stakingDuration: 3,\n mode: CalculatorMode.ROI_BASED_ON_PRINCIPAL,\n editingCurrency: EditingCurrency.USD,\n },\n data: {\n principalAsToken: \"0.00\",\n principalAsUSD: \"\",\n roiUSD: 0,\n roiTokens: 0,\n roiPercentage: 0,\n },\n};\n\nconst roiCalculatorReducer = (\n state: RoiCalculatorReducerState,\n action: { type: string; payload?: any }\n): RoiCalculatorReducerState => {\n switch (action.type) {\n case \"setStakingDuration\": {\n const controls = { ...state.controls, stakingDuration: action.payload };\n return {\n ...state,\n controls,\n };\n }\n case \"toggleCompounding\": {\n const toggledCompounding = !state.controls.compounding;\n const controls = { ...state.controls, compounding: toggledCompounding };\n return {\n ...state,\n controls,\n };\n }\n case \"setCompoundingFrequency\": {\n const { index, autoCompoundFrequency } = action.payload;\n if (autoCompoundFrequency) {\n return {\n ...state,\n controls: {\n ...state.controls,\n compoundingFrequency: autoCompoundFrequency,\n },\n };\n }\n const compoundingFrequency = (compoundingIndexToFrequency as any)[index];\n const controls = { ...state.controls, compoundingFrequency, activeCompoundingIndex: index };\n return {\n ...state,\n controls,\n };\n }\n case \"setPrincipal\": {\n const { principalAsUSD, principalAsToken } = action.payload;\n const data = { ...state.data, principalAsUSD, principalAsToken };\n const controls = { ...state.controls, mode: CalculatorMode.ROI_BASED_ON_PRINCIPAL };\n return {\n controls,\n data,\n };\n }\n case \"setPrincipalForTargetRoi\": {\n const { principalAsUSD, principalAsToken, roiPercentage } = action.payload;\n const data = { ...state.data, principalAsUSD, principalAsToken, roiPercentage };\n return {\n ...state,\n data,\n };\n }\n case \"setCalculatorMode\": {\n const mode = action.payload;\n const controls = { ...state.controls, mode };\n if (mode === CalculatorMode.PRINCIPAL_BASED_ON_ROI) {\n const roiUSD = parseFloat(state.data.roiUSD.toFixed(USD_PRECISION));\n const data = { ...state.data, roiUSD };\n return { controls, data };\n }\n return { ...state, controls };\n }\n case \"setRoi\": {\n const data = { ...state.data, ...action.payload };\n return { ...state, data };\n }\n case \"setTargetRoi\": {\n const { roiUSD, roiTokens } = action.payload;\n const data = { ...state.data, roiUSD, roiTokens };\n const controls = { ...state.controls, mode: CalculatorMode.PRINCIPAL_BASED_ON_ROI };\n return { controls, data };\n }\n case \"toggleEditingCurrency\": {\n const currencyAfterChange =\n state.controls.editingCurrency === EditingCurrency.USD ? EditingCurrency.TOKEN : EditingCurrency.USD;\n const controls = { ...state.controls, editingCurrency: currencyAfterChange };\n return { ...state, controls };\n }\n default:\n return state;\n }\n};\n\nconst useRoiCalculatorReducer = (\n {\n stakingTokenPrice,\n earningTokenPrice,\n autoCompoundFrequency,\n }: {\n stakingTokenPrice: number;\n earningTokenPrice: number;\n autoCompoundFrequency: number;\n },\n initialState: any\n) => {\n const [state, dispatch] = useReducer(roiCalculatorReducer, merge(defaultState, initialState));\n\n // If pool is auto-compounding set state's compounding frequency to this pool's auto-compound frequency\n useEffect(() => {\n if (autoCompoundFrequency > 0) {\n dispatch({ type: \"setCompoundingFrequency\", payload: { autoCompoundFrequency } });\n }\n }, [autoCompoundFrequency]);\n\n // Handler for compounding frequency buttons\n const setCompoundingFrequency = (index: number) => {\n dispatch({ type: \"setCompoundingFrequency\", payload: { index } });\n };\n\n // Handler for principal input when in USD mode\n const setPrincipalFromUSDValue = (amount: string) => {\n const principalAsTokenBN = new BigNumber(amount).div(stakingTokenPrice);\n const principalAsToken = principalAsTokenBN.gt(0) ? principalAsTokenBN.toFixed(TOKEN_PRECISION) : \"0.00\";\n dispatch({ type: \"setPrincipal\", payload: { principalAsUSD: amount, principalAsToken } });\n };\n\n // Handler for principal input when in Token mode\n const setPrincipalFromTokenValue = useCallback(\n (amount: string) => {\n const principalAsUsdBN = new BigNumber(amount).times(stakingTokenPrice);\n const principalAsUsdString = principalAsUsdBN.gt(0) ? principalAsUsdBN.toFixed(USD_PRECISION) : \"0.00\";\n dispatch({\n type: \"setPrincipal\",\n payload: { principalAsUSD: principalAsUsdString, principalAsToken: amount },\n });\n },\n [stakingTokenPrice]\n );\n\n // Handler for staking duration buttons\n const setStakingDuration = (stakingDurationIndex: number) => {\n dispatch({ type: \"setStakingDuration\", payload: stakingDurationIndex });\n };\n\n // Handler for compounding checkbox\n const toggleCompounding = () => {\n dispatch({ type: \"toggleCompounding\" });\n };\n\n // Handler for principal input mode switch\n const toggleEditingCurrency = () => {\n dispatch({ type: \"toggleEditingCurrency\" });\n };\n\n const setCalculatorMode = (modeToSet: CalculatorMode) => {\n dispatch({ type: \"setCalculatorMode\", payload: modeToSet });\n };\n\n // Handler for ROI input\n const setTargetRoi = (amount: string) => {\n const targetRoiAsTokens = new BigNumber(amount).div(earningTokenPrice);\n dispatch({\n type: \"setTargetRoi\",\n payload: { roiUSD: +amount, roiTokens: targetRoiAsTokens.isNaN() ? 0 : targetRoiAsTokens.toNumber() },\n });\n };\n\n return {\n state,\n setPrincipalFromUSDValue,\n setPrincipalFromTokenValue,\n setStakingDuration,\n toggleCompounding,\n toggleEditingCurrency,\n setCompoundingFrequency,\n setCalculatorMode,\n setTargetRoi,\n dispatch,\n };\n};\n\nexport default useRoiCalculatorReducer;\n\ninterface DefaultCompoundStrategyProps {\n state: any;\n apr?: number;\n earningTokenPrice: number;\n stakingTokenPrice: number;\n performanceFee: number;\n dispatch: any;\n}\n\nexport function DefaultCompoundStrategy({\n state,\n apr = 0,\n earningTokenPrice,\n stakingTokenPrice,\n performanceFee,\n dispatch,\n}: DefaultCompoundStrategyProps) {\n const { principalAsUSD, roiUSD } = state.data;\n const { compounding, compoundingFrequency, stakingDuration, mode } = state.controls;\n\n // Calculates and sets ROI whenever related values change\n useEffect(() => {\n if (mode === CalculatorMode.ROI_BASED_ON_PRINCIPAL) {\n const principalInUSDAsNumber = parseFloat(principalAsUSD);\n const compoundFrequency = compounding ? compoundingFrequency : 0;\n const interestBreakdown = getInterestBreakdown({\n principalInUSD: principalInUSDAsNumber,\n apr,\n earningTokenPrice,\n compoundFrequency,\n performanceFee,\n });\n const hasInterest = !Number.isNaN(interestBreakdown[stakingDuration]);\n const roiTokens = hasInterest ? interestBreakdown[stakingDuration] : 0;\n const roiAsUSD = hasInterest ? roiTokens * earningTokenPrice : 0;\n const roiPercentage = hasInterest\n ? getRoi({\n amountEarned: roiAsUSD,\n amountInvested: principalInUSDAsNumber,\n })\n : 0;\n dispatch({ type: \"setRoi\", payload: { roiUSD: roiAsUSD, roiTokens, roiPercentage } });\n }\n }, [\n principalAsUSD,\n apr,\n stakingDuration,\n earningTokenPrice,\n performanceFee,\n compounding,\n compoundingFrequency,\n mode,\n dispatch,\n ]);\n\n // Calculates and sets principal based on expected ROI value\n useEffect(() => {\n if (mode === CalculatorMode.PRINCIPAL_BASED_ON_ROI) {\n const principalForExpectedRoi = getPrincipalForInterest(\n roiUSD,\n apr,\n compounding ? compoundingFrequency : 0,\n performanceFee\n );\n const principalUSD = !Number.isNaN(principalForExpectedRoi[stakingDuration])\n ? principalForExpectedRoi[stakingDuration]\n : 0;\n const principalToken = new BigNumber(principalUSD).div(stakingTokenPrice);\n const roiPercentage = getRoi({\n amountEarned: roiUSD,\n amountInvested: principalUSD,\n });\n dispatch({\n type: \"setPrincipalForTargetRoi\",\n payload: {\n principalAsUSD: principalUSD.toFixed(USD_PRECISION),\n principalAsToken: principalToken.toFixed(TOKEN_PRECISION),\n roiPercentage,\n },\n });\n }\n }, [\n stakingDuration,\n apr,\n compounding,\n compoundingFrequency,\n mode,\n roiUSD,\n stakingTokenPrice,\n performanceFee,\n dispatch,\n ]);\n\n return null;\n}\n","import { useRef, useEffect, useState } from \"react\";\nimport { styled } from \"styled-components\";\nimport { useTranslation } from \"@pulsex/localization\";\nimport { CalculatorMode, RoiCalculatorReducerState } from \"./useRoiCalculatorReducer\";\nimport { Box, Flex } from \"../Box\";\nimport { Text } from \"../Text\";\nimport { Input } from \"../Input\";\nimport { IconButton } from \"../Button\";\nimport { CheckmarkIcon, PencilIcon } from \"../Svg\";\n\nexport const MILLION = 1000000;\nexport const TRILLION = 1000000000000;\n\nexport const RoiCardWrapper = styled(Box)`\n background: linear-gradient(180deg, #53dee9, #7645d9);\n padding: 1px;\n width: 100%;\n border-radius: ${({ theme }) => theme.radii.default};\n`;\n\nexport const RoiCardInner = styled(Box)`\n min-height: 120px;\n padding: 24px;\n border-radius: ${({ theme }) => theme.radii.default};\n background: ${({ theme }) => theme.colors.gradientBubblegum};\n`;\n\nexport const RoiInputContainer = styled(Box)`\n position: relative;\n & > input {\n padding-left: 28px;\n max-width: 70%;\n }\n &:before {\n position: absolute;\n content: \"$\";\n color: ${({ theme }) => theme.colors.textSubtle};\n left: 16px;\n top: 8px;\n }\n`;\n\nexport const RoiDisplayContainer = styled(Flex)`\n max-width: 82%;\n margin-right: 8px;\n`;\n\nexport const RoiDollarAmount = styled(Text)<{ fadeOut: boolean }>`\n position: relative;\n overflow-x: auto;\n &::-webkit-scrollbar {\n height: 0px;\n }\n\n ${({ fadeOut, theme }) =>\n fadeOut &&\n `\n &:after {\n background: linear-gradient(\n to right,\n ${theme.colors.background}00,\n ${theme.colors.background}E6\n );\n content: '';\n height: 100%;\n pointer-events: none;\n position: absolute;\n right: 0;\n top: 0;\n width: 40px;\n }\n `}\n`;\n\ninterface RoiCardProps {\n earningTokenSymbol: string;\n calculatorState: RoiCalculatorReducerState;\n setTargetRoi: (amount: string) => void;\n setCalculatorMode: (mode: CalculatorMode) => void;\n}\n\nconst RoiCard: React.FC> = ({\n earningTokenSymbol,\n calculatorState,\n setTargetRoi,\n setCalculatorMode,\n}) => {\n const [expectedRoi, setExpectedRoi] = useState(\"\");\n const inputRef = useRef(null);\n const { roiUSD, roiTokens, roiPercentage } = calculatorState.data;\n const { mode } = calculatorState.controls;\n\n const { t } = useTranslation();\n\n useEffect(() => {\n if (mode === CalculatorMode.PRINCIPAL_BASED_ON_ROI && inputRef.current) {\n inputRef.current.focus();\n }\n }, [mode]);\n\n const onEnterEditing = () => {\n setCalculatorMode(CalculatorMode.PRINCIPAL_BASED_ON_ROI);\n setExpectedRoi(\n roiUSD.toLocaleString(\"en\", {\n minimumFractionDigits: roiUSD > MILLION ? 0 : 2,\n maximumFractionDigits: roiUSD > MILLION ? 0 : 2,\n })\n );\n };\n\n const onExitRoiEditing = () => {\n setCalculatorMode(CalculatorMode.ROI_BASED_ON_PRINCIPAL);\n };\n const handleExpectedRoiChange = (event: React.ChangeEvent) => {\n if (event.currentTarget.validity.valid) {\n const roiAsString = event.target.value.replace(/,/g, \".\");\n setTargetRoi(roiAsString);\n setExpectedRoi(roiAsString);\n }\n };\n return (\n \n \n \n {t(\"ROI at current rates\")}\n \n \n {mode === CalculatorMode.PRINCIPAL_BASED_ON_ROI ? (\n <>\n \n \n \n \n \n \n \n ) : (\n <>\n \n {/* Dollar sign is separate cause its not supposed to scroll with a number if number is huge */}\n \n $\n \n TRILLION}>\n {roiUSD.toLocaleString(\"en\", {\n minimumFractionDigits: roiUSD > MILLION ? 0 : 2,\n maximumFractionDigits: roiUSD > MILLION ? 0 : 2,\n })}\n \n \n \n \n \n \n )}\n \n \n ~ {roiTokens} {earningTokenSymbol}\n \n ({roiPercentage.toLocaleString(\"en\", { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n %)\n \n
    \n \n \n );\n};\n\nexport default RoiCard;\n","import { useState, useEffect } from \"react\";\nimport { styled, keyframes } from \"styled-components\";\nimport { CalculatorMode, RoiCalculatorReducerState } from \"./useRoiCalculatorReducer\";\nimport { Flex } from \"../Box\";\nimport { ArrowDownIcon, ArrowUpIcon } from \"../Svg\";\n\nconst rotate = keyframes`\n 0% {\n transform: scale(1);\n stroke-width: 0;\n }\n 50% {\n transform: scale(1.3);\n stroke-width: 2;\n }\n 100% {\n transform: scale(1);\n stroke-width: 0;\n }\n`;\n\nconst ArrowContainer = styled(Flex)`\n & > svg {\n animation: 0.2s ${rotate} linear;\n stroke: ${({ theme }) => `${theme.colors.primary}3D`};\n stroke-width: 0;\n }\n`;\n\ninterface AnimatedArrowProps {\n calculatorState: RoiCalculatorReducerState;\n}\n\nconst AnimatedArrow: React.FC> = ({ calculatorState }) => {\n const [key, setKey] = useState(\"roiArrow-0\");\n const { mode } = calculatorState.controls;\n\n // Trigger animation on state change\n useEffect(() => {\n setKey((prevKey) => {\n const prevId = parseInt(prevKey.split(\"-\")[1], 10);\n return `roiArrow-${prevId + 1}`;\n });\n }, [calculatorState]);\n\n return (\n \n {mode === CalculatorMode.ROI_BASED_ON_PRINCIPAL ? (\n \n ) : (\n \n )}\n \n );\n};\n\nexport default AnimatedArrow;\n","import React, { MouseEvent } from \"react\";\nimport { styled } from \"styled-components\";\nimport Flex from \"../../components/Box/Flex\";\nimport { MotionBox } from \"../../components/Box\";\nimport { ArrowBackIcon, CloseIcon } from \"../../components/Svg\";\nimport { IconButton } from \"../../components/Button\";\nimport { ModalProps } from \"./types\";\n\nexport const mobileFooterHeight = 73;\n\nexport const ModalHeader = styled(Flex)<{ background?: string; headerBorderColor?: string }>`\n align-items: center;\n background: ${({ background }) => background || \"transparent\"};\n display: flex;\n padding: 10px 20px;\n`;\n\nexport const ModalTitle = styled(Flex)`\n align-items: center;\n flex: 1;\n`;\n\nexport const ModalBody = styled(Flex)`\n flex-direction: column;\n max-height: 90vh;\n overflow-y: auto;\n`;\n\nexport const ModalCloseButton: React.FC> = ({\n onDismiss,\n}) => {\n return (\n ) => {\n e.stopPropagation();\n onDismiss?.();\n }}\n aria-label=\"Close the dialog\"\n >\n \n \n );\n};\n\nexport const ModalBackButton: React.FC> = ({ onBack }) => {\n return (\n \n \n \n );\n};\n\nexport const ModalContainer = styled(MotionBox)`\n overflow: hidden;\n background: ${({ theme }) => theme.modal.background};\n box-shadow: 0px 20px 36px -8px rgba(14, 14, 44, 0.1), 0px 1px 1px rgba(0, 0, 0, 0.05);\n border: 1px solid ${({ theme }) => theme.colors.cardBorder};\n border-radius: 10px;\n width: auto;\n max-height: 100vh;\n z-index: ${({ theme }) => theme.zIndices.modal};\n position: absolute;\n max-width: none !important;\n min-height: 300px;\n\n ${({ theme }) => theme.mediaQueries.md} {\n width: auto;\n position: auto;\n border-radius: 10px;\n max-height: 100vh;\n }\n` as typeof MotionBox;\n","import { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { AnimatePresence, LazyMotion, m } from \"framer-motion\";\nimport React, { createContext, useCallback, useMemo, useRef, useState } from \"react\";\nimport { isMobile } from \"react-device-detect\";\nimport { createPortal } from \"react-dom\";\nimport { styled } from \"styled-components\";\nimport { mountAnimation, unmountAnimation } from \"../../components/BottomDrawer/styles\";\nimport { Overlay } from \"../../components/Overlay\";\nimport { useIsomorphicEffect } from \"../../hooks\";\nimport {\n animationHandler,\n animationMap,\n animationVariants,\n appearAnimation,\n disappearAnimation,\n} from \"../../util/animationToolkit\";\nimport getPortalRoot from \"../../util/getPortalRoot\";\nimport { ModalContainer } from \"./styles\";\nimport { Handler } from \"./types\";\n\nconst DomMax = () => import(\"./motionDomMax\").then((mod) => mod.default);\nconst DomAnimation = () => import(\"./motionDomAnimation\").then((mod) => mod.default);\n\ninterface ModalsContext {\n isOpen: boolean;\n nodeId: string;\n modalNode: React.ReactNode;\n setModalNode: React.Dispatch>;\n onPresent: (node: React.ReactNode, newNodeId: string, closeOverlayClick: boolean) => void;\n onDismiss: Handler;\n}\n\nexport const StyledModalWrapper = styled(m.div)`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: ${({ theme }) => theme.zIndices.modal - 1};\n will-change: opacity;\n opacity: 0;\n &.appear {\n animation: ${appearAnimation} 0.3s ease-in-out forwards;\n ${ModalContainer} {\n animation: ${mountAnimation} 0.3s ease-in-out forwards;\n ${({ theme }) => theme.mediaQueries.md} {\n animation: none;\n }\n }\n }\n &.disappear {\n animation: ${disappearAnimation} 0.3s ease-in-out forwards;\n ${ModalContainer} {\n animation: ${unmountAnimation} 0.3s ease-in-out forwards;\n ${({ theme }) => theme.mediaQueries.md} {\n animation: none;\n }\n }\n }\n` as typeof m.div;\n\nexport const Context = createContext({\n isOpen: false,\n nodeId: \"\",\n modalNode: null,\n setModalNode: () => null,\n onPresent: () => null,\n onDismiss: () => null,\n});\n\nconst ModalProvider: React.FC = ({ children }) => {\n const [isOpen, setIsOpen] = useState(false);\n const [modalNode, setModalNode] = useState();\n const [nodeId, setNodeId] = useState(\"\");\n const [closeOnOverlayClick, setCloseOnOverlayClick] = useState(true);\n const animationRef = useRef(null);\n\n useIsomorphicEffect(() => {\n const setViewportHeight = () => {\n const vh = window.innerHeight * 0.01;\n document.documentElement.style.setProperty(\"--vh\", `${vh}px`);\n };\n setViewportHeight();\n window.addEventListener(\"resize\", setViewportHeight);\n return () => window.removeEventListener(\"resize\", setViewportHeight);\n }, []);\n\n const handlePresent = useCallback((node: React.ReactNode, newNodeId: string, closeOverlayClick: boolean) => {\n setModalNode(node);\n setIsOpen(true);\n setNodeId(newNodeId);\n setCloseOnOverlayClick(closeOverlayClick);\n }, []);\n\n const handleDismiss = useCallback(() => {\n setModalNode(undefined);\n setIsOpen(false);\n setNodeId(\"\");\n setCloseOnOverlayClick(true);\n }, []);\n\n const handleOverlayDismiss = useCallback(() => {\n if (closeOnOverlayClick) {\n handleDismiss();\n }\n }, [closeOnOverlayClick, handleDismiss]);\n\n const providerValue = useMemo(() => {\n return { isOpen, nodeId, modalNode, setModalNode, onPresent: handlePresent, onDismiss: handleDismiss };\n }, [isOpen, nodeId, modalNode, setModalNode, handlePresent, handleDismiss]);\n\n const portal = useMemo(() => getPortalRoot(), []);\n\n return (\n \n {portal &&\n createPortal(\n \n \n {isOpen && (\n \n animationHandler(animationRef.current)}\n {...animationMap}\n variants={animationVariants}\n transition={{ duration: 0.3 }}\n >\n \n {React.isValidElement(modalNode) &&\n React.cloneElement(modalNode, {\n // @ts-ignore\n onDismiss: handleDismiss,\n })}\n \n \n )}\n \n ,\n portal\n )}\n {children}\n \n );\n};\n\nexport default ModalProvider;\n","import { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { AnimatePresence, LazyMotion } from \"framer-motion\";\nimport React, { createContext, useCallback, useRef, useState } from \"react\";\nimport { isMobile } from \"react-device-detect\";\nimport { createPortal } from \"react-dom\";\nimport { BoxProps } from \"../../components/Box\";\nimport { Overlay } from \"../../components/Overlay\";\nimport { animationHandler, animationMap, animationVariants } from \"../../util/animationToolkit\";\nimport getPortalRoot from \"../../util/getPortalRoot\";\nimport { StyledModalWrapper } from \"./ModalContext\";\n\nconst DomMax = () => import(\"./motionDomMax\").then((mod) => mod.default);\nconst DomAnimation = () => import(\"./motionDomAnimation\").then((mod) => mod.default);\n\nexport interface ModalV2Props {\n isOpen?: boolean;\n onDismiss?: () => void;\n closeOnOverlayClick?: boolean;\n children?: React.ReactNode;\n}\n\nexport const ModalV2Context = createContext<{\n onDismiss?: () => void;\n}>({});\n\nexport type UseModalV2Props = ReturnType;\nexport function useModalV2() {\n const [isOpen, setIsOpen] = useState(false);\n\n const onDismiss = useCallback(() => setIsOpen(false), []);\n const onOpen = useCallback(() => setIsOpen(true), []);\n\n return {\n onDismiss,\n onOpen,\n isOpen,\n setIsOpen,\n };\n}\n\nexport function ModalV2({\n isOpen,\n onDismiss,\n closeOnOverlayClick,\n children,\n disableOutsidePointerEvents = false,\n ...props\n}: ModalV2Props & BoxProps & { disableOutsidePointerEvents?: boolean }) {\n const animationRef = useRef(null);\n\n const handleOverlayDismiss = (e: any) => {\n e.stopPropagation();\n e.preventDefault();\n if (closeOnOverlayClick) {\n onDismiss?.();\n }\n };\n const portal = getPortalRoot();\n\n if (portal) {\n return createPortal(\n \n \n \n {isOpen && (\n \n animationHandler(animationRef.current)}\n {...animationMap}\n variants={animationVariants}\n transition={{ duration: 0.3 }}\n {...props}\n >\n \n {children}\n \n \n )}\n \n \n ,\n portal\n );\n }\n\n return null;\n}\n","import React, { PropsWithChildren, useContext, useRef } from \"react\";\nimport { useTheme } from \"styled-components\";\nimport Heading from \"../../components/Heading/Heading\";\nimport getThemeValue from \"../../util/getThemeValue\";\nimport { ModalBody, ModalHeader, ModalTitle, ModalContainer, ModalCloseButton, ModalBackButton } from \"./styles\";\nimport { ModalProps, ModalWrapperProps } from \"./types\";\nimport { useMatchBreakpoints } from \"../../contexts\";\nimport { ModalV2Context } from \"./ModalV2\";\nimport { Box } from \"../../components/Box\";\n\nexport const MODAL_SWIPE_TO_CLOSE_VELOCITY = 300;\n\nexport const ModalWrapper = ({\n children,\n onDismiss,\n hideCloseButton,\n ...props\n}: PropsWithChildren) => {\n const { isMobile } = useMatchBreakpoints();\n const wrapperRef = useRef(null);\n\n return (\n // @ts-ignore\n {\n if (wrapperRef.current) wrapperRef.current.style.animation = \"none\";\n }}\n // @ts-ignore\n onDragEnd={(e, info) => {\n if (info.velocity.y > MODAL_SWIPE_TO_CLOSE_VELOCITY && onDismiss) onDismiss();\n }}\n ref={wrapperRef}\n style={{ overflow: \"visible\" }}\n >\n \n {children}\n \n \n );\n};\n\nconst Modal: React.FC> = ({\n title,\n onDismiss: onDismiss_,\n onBack,\n children,\n hideCloseButton = false,\n headerPadding = \"0 0\",\n bodyPadding = \"1rem 1rem 1rem 1rem\",\n headerBackground = \"transparent\",\n minWidth = \"320px\",\n headerRightSlot,\n bodyAlignItems,\n headerBorderColor,\n bodyTop = \"0px\",\n ...props\n}) => {\n const context = useContext(ModalV2Context);\n const onDismiss = context?.onDismiss || onDismiss_;\n const theme = useTheme();\n return (\n \n \n \n {onBack && }\n {title}\n \n {headerRightSlot}\n {!hideCloseButton && }\n \n e.stopPropagation()}\n p={bodyPadding}\n style={{ alignItems: bodyAlignItems ?? \"normal\" }}\n >\n {children}\n \n \n );\n};\n\nexport default Modal;\n","import React, { useCallback, useContext, useEffect, useRef } from \"react\";\nimport get from \"lodash/get\";\nimport { serialize } from \"wagmi\";\nimport { Context } from \"./ModalContext\";\nimport { Handler } from \"./types\";\n\nconst useModal = (\n modal: React.ReactNode,\n closeOnOverlayClick = true,\n updateOnPropsChange = false,\n modalId = \"defaultNodeId\"\n): [Handler, Handler] => {\n const currentModal = useRef();\n currentModal.current = modal;\n const { isOpen, nodeId, modalNode, setModalNode, onPresent, onDismiss } = useContext(Context);\n const onPresentCallback = useCallback(() => {\n onPresent(currentModal.current, modalId, closeOnOverlayClick);\n }, [modalId, onPresent, closeOnOverlayClick]);\n const onDismissCallback = useCallback(() => {\n if (nodeId === modalId) {\n onDismiss?.();\n }\n }, [modalId, onDismiss, nodeId]);\n\n // Updates the \"modal\" component if props are changed\n // Use carefully since it might result in unnecessary rerenders\n // Typically if modal is static there is no need for updates, use when you expect props to change\n useEffect(() => {\n // NodeId is needed in case there are 2 useModal hooks on the same page and one has updateOnPropsChange\n if (updateOnPropsChange && isOpen && nodeId === modalId) {\n const modalProps = get(modal, \"props\");\n const oldModalProps = get(modalNode, \"props\");\n // Note: I tried to use lodash isEqual to compare props but it is giving false-negatives too easily\n // For example ConfirmSwapModal in exchange has ~500 lines prop object that stringifies to same string\n // and online diff checker says both objects are identical but lodash isEqual thinks they are different\n // Do not try to replace JSON.stringify with isEqual, high risk of infinite rerenders\n // TODO: Find a good way to handle modal updates, this whole flow is just backwards-compatible workaround,\n // would be great to simplify the logic here\n if (modalProps && oldModalProps && serialize(modalProps) !== serialize(oldModalProps)) {\n setModalNode(modal);\n }\n }\n }, [updateOnPropsChange, nodeId, modalId, isOpen, modal, modalNode, setModalNode]);\n\n return [onPresentCallback, onDismissCallback];\n};\n\nexport default useModal;\n","import { useContext } from \"react\";\nimport { styled, ThemeContext } from \"styled-components\";\n\ninterface SpacerProps {\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst Spacer: React.FC> = ({ size = \"md\" }) => {\n const { spacing } = useContext(ThemeContext)!;\n\n let s: string;\n switch (size) {\n case \"lg\":\n s = spacing[\"32px\"];\n break;\n case \"sm\":\n s = spacing[\"12px\"];\n break;\n case \"md\":\n default:\n s = spacing[\"24px\"];\n }\n\n return ;\n};\n\ninterface StyledSpacerProps {\n size: string;\n}\n\nconst StyledSpacer = styled.div`\n height: ${(props) => props.size};\n width: ${(props) => props.size};\n`;\n\nexport default Spacer;\n","import { Children } from \"react\";\nimport { styled } from \"styled-components\";\nimport Spacer from \"./Spacer\";\n\nconst ModalActions: React.FC = ({ children }) => {\n const l = Children.toArray(children).length;\n return (\n \n {Children.map(children, (child, i) => (\n <>\n {child}\n {i < l - 1 && }\n \n ))}\n \n );\n};\n\nconst StyledModalActions = styled.div`\n align-items: center;\n background-color: ${(props) => props.theme.colors.primaryDark}00;\n display: flex;\n margin: 0;\n padding: ${(props) => props.theme.spacing[4]}px 0;\n`\n\nconst StyledModalAction = styled.div`\n flex: 1;\n`\n\nexport default ModalActions\n","// Copy from viem package to avoid unneessary dependency\nexport function parseUnits(value: string, decimals: number) {\n let [integer, fraction = '0'] = value.split('.')\n\n const negative = integer.startsWith('-')\n if (negative) integer = integer.slice(1)\n\n // trim leading zeros.\n fraction = fraction.replace(/(0+)$/, '')\n\n // round off if the fraction is larger than the number of decimals.\n if (decimals === 0) {\n if (Math.round(Number(`.${fraction}`)) === 1) integer = `${BigInt(integer) + 1n}`\n fraction = ''\n } else if (fraction.length > decimals) {\n const [left, unit, right] = [\n fraction.slice(0, decimals - 1),\n fraction.slice(decimals - 1, decimals),\n fraction.slice(decimals),\n ]\n\n const rounded = Math.round(Number(`${unit}.${right}`))\n if (rounded > 9) fraction = `${BigInt(left) + BigInt(1)}0`.padStart(left.length + 1, '0')\n else fraction = `${left}${rounded}`\n\n if (fraction.length > decimals) {\n fraction = fraction.slice(1)\n integer = `${BigInt(integer) + 1n}`\n }\n\n fraction = fraction.slice(0, decimals)\n } else {\n fraction = fraction.padEnd(decimals, '0')\n }\n\n return BigInt(`${negative ? '-' : ''}${integer}${fraction}`)\n}\n","import { formatBigInt } from './formatBalance'\nimport { parseUnits } from './viem/parseUnits'\n\nexport const displayBalance = ({\n balance,\n decimals,\n isBalanceZero,\n}: {\n balance: `${number}`\n decimals: number\n isBalanceZero: boolean\n}) => {\n if (isBalanceZero) {\n return '0'\n }\n\n const balanceUnits = parseUnits(balance, decimals)\n return formatBigInt(balanceUnits, decimals, decimals)\n}\n","export const trimTrailZero = (numberStr?: string) => {\n if (!numberStr || !numberStr.includes('.')) return numberStr\n const splitNum = numberStr.split('.')\n while (splitNum[1][splitNum[1].length - 1] === '0') splitNum[1] = splitNum[1].slice(0, -1)\n return splitNum[1].length ? `${splitNum[0]}.${splitNum[1]}` : splitNum[0]\n}\n","import BigNumber from \"bignumber.js\";\nimport { useMemo } from \"react\";\nimport { styled } from \"styled-components\";\nimport { useTranslation } from \"@pulsex/localization\";\nimport { displayBalance } from \"@pulsex/utils/displayBalance\";\nimport { trimTrailZero } from \"@pulsex/utils/trimTrailZero\";\nimport { Flex } from \"../../components/Box\";\nimport { Text } from \"../../components/Text\";\nimport { Link } from \"../../components/Link\";\nimport { Button } from \"../../components/Button\";\nimport { Balance } from \"../../components/Balance\";\nimport { Input, InputProps } from \"../../components/Input\";\n\ninterface ModalInputProps {\n max: string;\n maxAmount?: BigNumber;\n symbol: string;\n onSelectMax?: () => void;\n onPercentInput?: (percent: number) => void;\n onChange: (e: React.FormEvent) => void;\n placeholder?: string;\n value: string;\n valueUSDPrice?: BigNumber;\n addLiquidityUrl: string;\n inputTitle?: string;\n decimals?: number;\n needEnable?: boolean;\n}\n\nconst StyledTokenInput = styled.div`\n display: flex;\n flex-direction: column;\n background-color: ${({ theme }) => theme.colors.input};\n border-radius: 10px;\n border: none;\n color: ${({ theme }) => theme.colors.text};\n padding: 8px 16px 8px 0;\n width: 100%;\n`;\n\nconst StyledInput = styled(Input)`\n box-shadow: none;\n width: 60px;\n margin: 0 8px;\n padding: 0 8px;\n border: none;\n\n ${({ theme }) => theme.mediaQueries.xs} {\n width: 80px;\n }\n\n ${({ theme }) => theme.mediaQueries.sm} {\n width: auto;\n }\n`;\n\nconst StyledErrorMessage = styled(Text)`\n position: absolute;\n bottom: -22px;\n a {\n display: inline;\n }\n`;\n\nconst ModalInput: React.FC> = ({\n max,\n maxAmount,\n symbol,\n onChange,\n onSelectMax,\n onPercentInput,\n value,\n valueUSDPrice,\n addLiquidityUrl,\n inputTitle,\n decimals = 18,\n needEnable,\n}) => {\n const { t } = useTranslation();\n const isBalanceZero = max === \"0\" || !max;\n\n const percentAmount = useMemo(\n () => ({\n 25: maxAmount ? trimTrailZero(maxAmount.dividedBy(100).multipliedBy(25).toNumber().toFixed(decimals)) : undefined,\n 50: maxAmount ? trimTrailZero(maxAmount.dividedBy(100).multipliedBy(50).toNumber().toFixed(decimals)) : undefined,\n 75: maxAmount ? trimTrailZero(maxAmount.dividedBy(100).multipliedBy(75).toNumber().toFixed(decimals)) : undefined,\n }),\n [maxAmount, decimals]\n );\n\n const isAtPercentMax = maxAmount && value === maxAmount.toString();\n\n return (\n
    \n \n \n {inputTitle}\n \n {t(\"Balance: %balance%\", {\n balance: displayBalance({\n balance: max as `${number}`,\n decimals,\n isBalanceZero,\n }),\n })}\n \n \n \n \n \n {symbol}\n \n \n {valueUSDPrice && (\n \n \n \n \n \n )}\n \n {maxAmount?.isGreaterThan(0) &&\n onPercentInput &&\n [25, 50, 75].map((percent) => {\n let currentPercentAmount;\n if (percent === 25) currentPercentAmount = percentAmount[25];\n else if (percent === 50) currentPercentAmount = percentAmount[50];\n else if (percent === 75) currentPercentAmount = percentAmount[75];\n\n const isAtCurrentPercent = maxAmount && value === currentPercentAmount;\n\n return (\n {\n onPercentInput(percent);\n }}\n scale=\"xs\"\n mr=\"5px\"\n variant={isAtCurrentPercent ? \"primary\" : \"secondary\"}\n style={{ textTransform: \"uppercase\" }}\n >\n {percent}%\n \n );\n })}\n {maxAmount?.isGreaterThan(0) && (\n <>\n \n {t(\"Max\")}\n \n \n )}\n \n \n {isBalanceZero && (\n \n {t(\"No tokens to stake\")}:{\" \"}\n \n {t(\"Add %symbol%\", { symbol })}\n \n \n )}\n {needEnable && (\n \n {t('Insufficient token allowance. Click \"Enable\" to approve.')}\n \n )}\n
    \n );\n};\n\nexport default ModalInput;\n","import { useTranslation } from \"@pulsex/localization\";\nimport { styled, useTheme } from \"styled-components\";\nimport getThemeValue from \"../../util/getThemeValue\";\nimport Modal from \"./Modal\";\nimport { Link } from \"../../components/Link\";\nimport { Text, Button, OpenNewIcon } from \"../../components\";\n\ninterface NotEnoughTokensModalProps {\n tokenSymbol: string;\n tokenAddress?: string;\n onDismiss?: () => void;\n hideLocateAddress?: boolean;\n}\n\nconst StyledLink = styled(Link)`\n width: 100%;\n`;\n\nconst NotEnoughTokensModal: React.FC> = ({\n tokenSymbol,\n tokenAddress,\n onDismiss,\n}) => {\n const { t } = useTranslation();\n const theme = useTheme();\n\n return (\n \n \n {t(\"Insufficient %symbol% balance\", { symbol: tokenSymbol })}\n \n {t(\"You’ll need %symbol% to stake in this pool!\", { symbol: tokenSymbol })}\n \n {t(\"Buy some %symbol%, or make sure your %symbol% isn’t in another pool or LP.\", {\n symbol: tokenSymbol,\n })}\n \n \n \n \n );\n};\n\nexport default NotEnoughTokensModal;\n","import { useTranslation } from \"@pulsex/localization\";\nimport { getBalanceNumber } from \"@pulsex/utils/formatBalance\";\nimport BigNumber from \"bignumber.js\";\nimport { useEffect, useMemo, useRef } from \"react\";\nimport { styled } from \"styled-components\";\nimport RoiCalculatorFooter from \"./RoiCalculatorFooter\";\nimport RoiCard from \"./RoiCard\";\nimport useRoiCalculatorReducer, {\n CalculatorMode,\n DefaultCompoundStrategy,\n EditingCurrency,\n} from \"./useRoiCalculatorReducer\";\nimport AnimatedArrow from \"./AnimatedArrow\";\nimport { Flex } from \"../Box\";\nimport { Text } from \"../Text\";\nimport { HelpIcon } from \"../Svg\";\nimport { Button } from \"../Button\";\nimport { Modal } from \"../../widgets/Modal\";\nimport { BalanceInput } from \"../BalanceInput\";\nimport { useTooltip } from \"../../hooks/useTooltip\";\nimport { ButtonMenu, ButtonMenuItem } from \"../ButtonMenu\";\n\nconst StyledModal = styled(Modal)`\n border-radius: 10px;\n width: 380px;\n & > :nth-child(2) {\n padding: 0;\n }\n\n ${({ theme }) => theme.mediaQueries.md} {\n width: 420px;\n }\n`;\n\nexport const ScrollableContainer = styled.div`\n padding: 24px;\n max-height: 500px;\n overflow-x: hidden;\n overflow-y: auto;\n ${({ theme }) => theme.mediaQueries.sm} {\n max-height: none;\n }\n`;\n\nconst FullWidthButtonMenu = styled(ButtonMenu)<{ disabled?: boolean }>`\n width: 100%;\n\n & > button {\n width: 100%;\n }\n\n opacity: ${({ disabled }) => (disabled ? 0.5 : 1)};\n`;\n\nexport interface RoiCalculatorModalProps {\n account?: string;\n pid?: number;\n earningTokenPrice: number;\n apr?: number;\n apy?: number;\n displayApr?: string;\n linkLabel: string;\n linkHref: string;\n stakingTokenBalance: BigNumber;\n stakingTokenDecimals?: number;\n stakingTokenSymbol: string;\n stakingTokenPrice: number;\n earningTokenSymbol?: string;\n multiplier?: string;\n autoCompoundFrequency?: number;\n performanceFee?: number;\n isFarm?: boolean;\n initialState?: any;\n initialValue?: string;\n strategy?: any;\n header?: React.ReactNode;\n rewardIncPerSecond?: boolean;\n onBack?: () => void;\n onDismiss?: () => void;\n}\n\nconst RoiCalculatorModal: React.FC> = ({\n account,\n earningTokenPrice,\n apr,\n apy,\n displayApr,\n linkLabel,\n linkHref,\n stakingTokenBalance,\n stakingTokenSymbol,\n stakingTokenPrice,\n multiplier,\n initialValue,\n earningTokenSymbol = \"INC\",\n autoCompoundFrequency = 0,\n performanceFee = 0,\n isFarm = false,\n initialState,\n strategy,\n header,\n children,\n stakingTokenDecimals,\n rewardIncPerSecond,\n onBack,\n onDismiss,\n}) => {\n const { t } = useTranslation();\n const balanceInputRef = useRef(null);\n\n const {\n state,\n setPrincipalFromUSDValue,\n setPrincipalFromTokenValue,\n setStakingDuration,\n toggleEditingCurrency,\n setCalculatorMode,\n setTargetRoi,\n dispatch,\n } = useRoiCalculatorReducer({ stakingTokenPrice, earningTokenPrice, autoCompoundFrequency }, initialState);\n\n const { stakingDuration, editingCurrency } = state.controls;\n const { principalAsUSD, principalAsToken } = state.data;\n\n // Auto-focus input on opening modal\n useEffect(() => {\n if (balanceInputRef.current) {\n balanceInputRef.current.focus();\n }\n }, []);\n\n // If user comes to calculator from staking modal - initialize with whatever they put in there\n useEffect(() => {\n if (initialValue) {\n setPrincipalFromTokenValue(initialValue);\n }\n }, [initialValue, setPrincipalFromTokenValue]);\n\n const { targetRef, tooltip, tooltipVisible } = useTooltip(\n isFarm\n ? t(\"“My Balance” here includes both LP Tokens in your wallet, and LP Tokens already staked in this farm.\")\n : t(\n \"“My Balance” here includes both %assetSymbol% in your wallet, and %assetSymbol% already staked in this pool.\",\n { assetSymbol: stakingTokenSymbol }\n ),\n { placement: \"top-end\", tooltipOffset: [20, 10] }\n );\n\n const onBalanceFocus = () => {\n setCalculatorMode(CalculatorMode.ROI_BASED_ON_PRINCIPAL);\n };\n const editingUnit = editingCurrency === EditingCurrency.TOKEN ? stakingTokenSymbol : \"USD\";\n const editingValue = editingCurrency === EditingCurrency.TOKEN ? principalAsToken : principalAsUSD;\n const conversionUnit = editingCurrency === EditingCurrency.TOKEN ? \"USD\" : stakingTokenSymbol;\n const conversionValue = editingCurrency === EditingCurrency.TOKEN ? principalAsUSD : principalAsToken;\n const onUserInput = editingCurrency === EditingCurrency.TOKEN ? setPrincipalFromTokenValue : setPrincipalFromUSDValue;\n\n const DURATION = useMemo(() => [t(\"1D\"), t(\"7D\"), t(\"30D\"), t(\"1Y\"), t(\"5Y\")], [t]);\n\n const isDisableMyBalance = useMemo(() => {\n return (\n !Number.isFinite(stakingTokenPrice) || !stakingTokenBalance.isFinite() || stakingTokenBalance.lte(0) || !account\n );\n }, [account, stakingTokenBalance, stakingTokenPrice]);\n\n return (\n \n \n {strategy ? (\n strategy(state, dispatch)\n ) : (\n \n )}\n {header}\n \n \n {t(\"%asset% staked\", { asset: stakingTokenSymbol })}\n \n \n \n setPrincipalFromUSDValue(\"100\")}\n >\n $100\n \n setPrincipalFromUSDValue(\"1000\")}\n >\n $1000\n \n \n setPrincipalFromUSDValue(\n getBalanceNumber(stakingTokenBalance.times(stakingTokenPrice), stakingTokenDecimals).toString()\n )\n }\n >\n {t(\"My Balance\")}\n \n \n \n \n {tooltipVisible && tooltip}\n \n {children || (\n <>\n \n {t(\"Staked for\")}\n \n \n {DURATION.map((duration) => (\n \n {duration}\n \n ))}\n \n \n )}\n \n \n \n \n \n \n \n \n );\n};\n\nexport default RoiCalculatorModal;\n","import { AtomBox, AtomBoxProps } from \"../AtomBox\";\n\nexport const Row = ({\n width = \"100%\",\n alignItems = \"center\",\n justifyContent = \"flex-start\",\n padding = \"0px\",\n ...props\n}: AtomBoxProps) => (\n \n);\n\nexport const AutoRow = (props: AtomBoxProps) => ;\n\nexport const RowFixed = (props: AtomBoxProps) => ;\n\nexport const RowBetween = (props: AtomBoxProps) => ;\n","import { useState, useMemo, useEffect } from \"react\";\nimport { styled } from \"styled-components\";\nimport debounce from \"lodash/debounce\";\nimport { useTranslation } from \"@pulsex/localization\";\nimport { Input } from \"../Input\";\n\nconst StyledInput = styled(Input)`\n border-radius: 10px;\n margin-left: auto;\n`;\n\nconst InputWrapper = styled.div`\n position: relative;\n ${({ theme }) => theme.mediaQueries.sm} {\n display: block;\n }\n`;\n\ninterface Props {\n onChange: (e: React.ChangeEvent) => void;\n placeholder?: string;\n initialValue?: string;\n}\n\nconst SearchInput: React.FC> = ({\n onChange: onChangeCallback,\n placeholder = \"Search\",\n initialValue,\n}) => {\n const [searchText, setSearchText] = useState(\"\");\n const { t } = useTranslation();\n\n const debouncedOnChange = useMemo(\n () => debounce((e: React.ChangeEvent) => onChangeCallback(e), 500),\n [onChangeCallback]\n );\n\n const onChange = (e: React.ChangeEvent) => {\n setSearchText(e.target.value);\n debouncedOnChange(e);\n };\n useEffect(() => {\n if (initialValue) {\n setSearchText(initialValue);\n }\n }, [initialValue]);\n\n return (\n \n \n \n );\n};\n\nexport default SearchInput;\n","import { useState, useEffect } from \"react\";\nimport { styled, css } from \"styled-components\";\nimport { Box, BoxProps } from \"../Box\";\nimport { ArrowDropDownIcon } from \"../Svg\";\nimport { Text } from \"../Text\";\n\nconst DropDownHeader = styled.div`\n width: 100%;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0px 16px;\n box-shadow: ${({ theme }) => theme.shadows.inset};\n border: 1px solid ${({ theme }) => theme.colors.inputSecondary};\n border-radius: 16px;\n background: ${({ theme }) => theme.colors.input};\n transition: border-radius 0.15s;\n`;\n\nconst DropDownListContainer = styled.div`\n min-width: 136px;\n height: 0;\n position: absolute;\n overflow: hidden;\n background: ${({ theme }) => theme.colors.input};\n z-index: ${({ theme }) => theme.zIndices.dropdown};\n transition: transform 0.15s, opacity 0.15s;\n transform: scaleY(0);\n transform-origin: top;\n opacity: 0;\n width: 100%;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n min-width: 168px;\n }\n`;\n\nconst DropDownContainer = styled(Box)<{ isOpen: boolean }>`\n cursor: pointer;\n width: 100%;\n position: relative;\n background: ${({ theme }) => theme.colors.input};\n border-radius: 16px;\n height: 40px;\n min-width: 136px;\n user-select: none;\n z-index: 20;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n min-width: 168px;\n }\n\n ${(props) =>\n props.isOpen &&\n css`\n ${DropDownHeader} {\n border-bottom: 1px solid ${({ theme }) => theme.colors.inputSecondary};\n box-shadow: ${({ theme }) => theme.tooltip.boxShadow};\n border-radius: 16px 16px 0 0;\n }\n\n ${DropDownListContainer} {\n height: auto;\n transform: scaleY(1);\n opacity: 1;\n border: 1px solid ${({ theme }) => theme.colors.inputSecondary};\n border-top-width: 0;\n border-radius: 0 0 16px 16px;\n box-shadow: ${({ theme }) => theme.tooltip.boxShadow};\n }\n `}\n\n svg {\n position: absolute;\n right: 16px;\n top: 50%;\n transform: translateY(-50%);\n }\n`;\n\nconst DropDownList = styled.ul`\n padding: 0;\n margin: 0;\n box-sizing: border-box;\n z-index: ${({ theme }) => theme.zIndices.dropdown};\n`;\n\nconst ListItem = styled.li`\n list-style: none;\n padding: 8px 16px;\n &:hover {\n background: ${({ theme }) => theme.colors.inputSecondary};\n }\n`;\n\nexport interface SelectProps extends BoxProps {\n options: OptionProps[];\n onOptionChange?: (option: OptionProps) => void;\n placeHolderText?: string;\n defaultOptionIndex?: number;\n}\n\nexport interface OptionProps {\n label: string;\n value: any;\n}\n\nconst Select: React.FunctionComponent> = ({\n options,\n onOptionChange,\n defaultOptionIndex = 0,\n placeHolderText,\n ...props\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [optionSelected, setOptionSelected] = useState(false);\n const [selectedOptionIndex, setSelectedOptionIndex] = useState(defaultOptionIndex);\n\n const toggling = (event: React.MouseEvent) => {\n setIsOpen(!isOpen);\n event.stopPropagation();\n };\n\n const onOptionClicked = (selectedIndex: number) => () => {\n setSelectedOptionIndex(selectedIndex);\n setIsOpen(false);\n setOptionSelected(true);\n\n if (onOptionChange) {\n onOptionChange(options[selectedIndex]);\n }\n };\n\n useEffect(() => {\n const handleClickOutside = () => {\n setIsOpen(false);\n };\n\n document.addEventListener(\"click\", handleClickOutside);\n return () => {\n document.removeEventListener(\"click\", handleClickOutside);\n };\n }, []);\n\n useEffect(() => {\n if (defaultOptionIndex) {\n setSelectedOptionIndex(defaultOptionIndex - 1);\n setOptionSelected(true);\n }\n }, [defaultOptionIndex]);\n\n return (\n \n \n \n {!optionSelected && placeHolderText ? placeHolderText : options[selectedOptionIndex].label}\n \n \n \n \n \n {options.map((option, index) =>\n placeHolderText || index !== selectedOptionIndex ? (\n \n {option.label}\n \n ) : null\n )}\n \n \n \n );\n};\n\nexport default Select;\n","import { InputHTMLAttributes } from \"react\";\nimport { styled } from \"styled-components\";\n\ninterface StyledInputProps extends InputHTMLAttributes {\n isMax: boolean;\n}\n\ninterface DisabledProp {\n disabled?: boolean;\n}\n\nconst getCursorStyle = ({ disabled = false }: DisabledProp) => {\n return disabled ? \"not-allowed\" : \"cursor\";\n};\n\nconst getBaseThumbStyles = ({ disabled }: StyledInputProps) => `\n -webkit-appearance: none;\n box-shadow: none;\n border: 0;\n cursor: ${getCursorStyle};\n width: 24px;\n height: 24px;\n filter: ${disabled ? \"grayscale(100%)\" : \"none\"};\n\n &:hover {\n transform: ${disabled ? \"scale(1.1)\" : \"scale(1.1)\"};\n }\n`;\n\nexport const StyledSlider = styled.div`\n position: absolute;\n\n width: calc(100% - 3px);\n`;\n\nexport const StyledInput = styled.input`\n cursor: ${getCursorStyle};\n height: 32px;\n position: relative;\n\n &::-webkit-slider-thumb {\n width: 40px;\n height: 40px;\n border-radius: 50px;\n background-color: ${({ theme }) => theme.colors.primary};\n ${getBaseThumbStyles}\n }\n\n &::-moz-range-thumb {\n width: 40px;\n height: 40px;\n border-radius: 50px;\n background-color: ${({ theme }) => theme.colors.primary};\n ${getBaseThumbStyles}\n }\n\n &::-ms-thumb {\n width: 40px;\n height: 40px;\n border-radius: 50px;\n background-color: ${({ theme }) => theme.colors.primary};\n ${getBaseThumbStyles}\n }\n`;\n\nexport const BarBackground = styled.div`\n background-color: ${({ theme, disabled }) => theme.colors[disabled ? \"textDisabled\" : \"input\"]};\n height: 2px;\n position: absolute;\n top: 18px;\n width: calc(100% - 18px);\n left: 12px;\n`;\n\nexport const BarProgress = styled.div`\n background-color: ${({ theme }) => theme.colors.primary};\n filter: ${({ disabled }) => (disabled ? \"grayscale(100%)\" : \"none\")};\n height: 10px;\n position: absolute;\n top: 14px;\n left: 12px;\n`;\n","import React, { ChangeEvent } from \"react\";\nimport { Box } from \"../Box\";\nimport { StyledSlider, BarBackground, BarProgress, StyledInput } from \"./styles\";\nimport SliderProps from \"./types\";\n\nconst Slider: React.FC> = ({\n name,\n min,\n max,\n value,\n onValueChanged,\n step = \"any\",\n disabled = false,\n ...props\n}) => {\n const handleChange = ({ target }: ChangeEvent) => {\n onValueChanged(parseFloat(target.value));\n };\n\n const progressPercentage = (value / max) * 100;\n const isMax = value === max;\n let progressWidth: string;\n if (progressPercentage <= 10) {\n progressWidth = `${progressPercentage + 0.5}%`;\n } else if (progressPercentage >= 90) {\n progressWidth = `${progressPercentage - 4}%`;\n } else if (progressPercentage >= 60) {\n progressWidth = `${progressPercentage - 2.5}%`;\n } else {\n progressWidth = `${progressPercentage}%`;\n }\n return (\n \n \n \n \n \n \n \n );\n};\n\nexport default Slider;\n","import React from \"react\";\nimport Svg from \"../Svg/Svg\";\nimport { SvgProps } from \"../Svg/types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport Svg from \"../Svg/Svg\";\nimport { SvgProps } from \"../Svg/types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport { styled, keyframes } from \"styled-components\";\nimport PanIcon from \"./PanIcon\";\nimport PancakeIcon from \"./PancakeIcon\";\nimport { SpinnerProps } from \"./types\";\n\nconst rotate = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`;\n\nconst float = keyframes`\n\t0% {\n\t\ttransform: translatey(0px);\n\t}\n\t50% {\n\t\ttransform: translatey(10px);\n\t}\n\t100% {\n\t\ttransform: translatey(0px);\n\t}\n`;\n\nconst Container = styled.div`\n position: relative;\n`;\n\nconst RotatingPancakeIcon = styled(PancakeIcon)`\n position: absolute;\n top: 0;\n left: 0;\n animation: ${rotate} 2s linear infinite;\n transform: translate3d(0, 0, 0);\n`;\n\nconst FloatingPanIcon = styled(PanIcon)`\n animation: ${float} 6s ease-in-out infinite;\n transform: translate3d(0, 0, 0);\n`;\n\nconst Spinner: React.FC> = ({ size = 128 }) => {\n return (\n \n \n \n \n );\n};\n\nexport default Spinner;\n","import React from \"react\";\nimport Svg from \"../Svg/Svg\";\nimport { SvgProps } from \"../Svg/types\";\n\nconst Icon: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Icon;\n","import React from \"react\";\nimport { styled, keyframes } from \"styled-components\";\nimport PanIcon from \"./PanIcon\";\nimport { SpinnerProps2 } from \"./types\";\n\nconst pulse = keyframes`\n\t0% {\n\t\ttransform: scale(1);\n\t}\n\t50% {\n\t\ttransform: scale(1.4);\n\t}\n 100% {\n\t\ttransform: scale(1);\n\t}\n`;\n\nconst Container = styled.div`\n position: relative;\n`;\n\nconst FloatingPanIcon = styled(PanIcon)`\n animation: ${pulse} 2s ease-in-out infinite;\n transform: translate3d(0, 0, 0);\n`;\n\nconst Spinner2: React.FC> = ({ size = 128 }) => {\n return (\n \n \n \n );\n};\n\nexport default Spinner2;\n","import React from \"react\";\nimport { styled } from \"styled-components\";\nimport { ThemedProps } from \"./types\";\n\nconst StepperWrapper = styled.div`\n display: flex;\n flex-direction: column;\n width: fit-content;\n`;\n\nconst Stepper: React.FC = ({ children }) => {\n const numberOfSteps = React.Children.count(children);\n return (\n \n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n // @ts-ignore\n return React.cloneElement(child, { numberOfSteps });\n }\n return child;\n })}\n \n );\n};\n\nexport default Stepper;\n","import React from \"react\";\nimport { styled } from \"styled-components\";\nimport Flex from \"../Box/Flex\";\nimport Box from \"../Box/Box\";\nimport { StatusProps, StepProps } from \"./types\";\n\nconst getStepNumberFontColor = ({ theme, status }: StatusProps) => {\n if (status === \"past\") {\n return theme.colors.success;\n }\n if (status === \"current\") {\n return theme.colors.invertedContrast;\n }\n return theme.colors.textDisabled;\n};\n\nconst StyledStep = styled(Flex)`\n ${({ theme }) => theme.mediaQueries.md} {\n justify-content: center;\n }\n`;\n\nconst Connector = styled.div`\n position: absolute;\n width: 4px;\n height: calc(50% + 20px);\n ${({ $isFirstStep, $isLastStep, $isFirstPart }) => {\n if ($isFirstStep) return \"top: 50%;\";\n if ($isLastStep) return \"top: 0;\";\n return $isFirstPart ? \"top:0;\" : \"top:50%;\";\n }}\n left: calc(50% - 2px);\n background-color: ${({ theme, status }) =>\n theme.colors[status === \"past\" || status === \"current\" ? \"success\" : \"textDisabled\"]};\n`;\n\nconst ChildrenWrapper = styled(Box)<{ isVisible: boolean }>`\n ${({ theme }) => theme.mediaQueries.md} {\n visibility: ${({ isVisible }) => (isVisible ? \"visible\" : \"hidden\")};\n }\n`;\n\nconst ChildrenLeftWrapper = styled(ChildrenWrapper)`\n display: none;\n ${({ theme }) => theme.mediaQueries.md} {\n display: block;\n margin-right: 16px;\n }\n`;\n\nconst ChildrenRightWrapper = styled(ChildrenWrapper)`\n margin-left: 8px;\n ${({ theme }) => theme.mediaQueries.md} {\n margin-left: 16px;\n }\n`;\n\nconst Wrapper = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n`;\n\nexport const StepNumber = styled.div`\n box-shadow: 0px 1px 4px rgba(25, 19, 38, 0.15);\n background-color: ${({ theme, status }) => theme.colors[status === \"current\" ? \"secondary\" : \"invertedContrast\"]};\n border: 2px solid ${({ theme, status }) => (status === \"past\" ? theme.colors.success : \"transparent\")};\n border-radius: ${({ theme }) => theme.radii.circle};\n color: ${getStepNumberFontColor};\n display: flex;\n justify-content: center;\n align-items: center;\n font-weight: 600;\n font-size: 32px;\n width: 48px;\n height: 48px;\n z-index: 5;\n ${({ theme }) => theme.mediaQueries.md} {\n font-size: 40px;\n width: 80px;\n height: 80px;\n }\n`;\n\n/**\n * ChildrenLeftWrapper and ChildrenRightWrapper are used on the non mobile version, to force the alternate layout.\n * One of the child is hidden based on the step number.\n */\nexport const Step: React.FC> = ({\n index,\n statusFirstPart,\n statusSecondPart,\n numberOfSteps = 0,\n children,\n}) => {\n const isIndexPair = index % 2 === 0;\n const isFirst = index === 0;\n const isLast = index === numberOfSteps - 1;\n return (\n \n {children}\n \n {index + 1}\n \n {!isFirst && !isLast && }\n \n {children}\n \n );\n};\n","import { styled } from \"styled-components\";\nimport { StyledMenuItemProps } from \"./types\";\n\nexport const StyledMenuItemContainer = styled.div`\n position: relative;\n\n ${({ $isActive, $variant, theme }) =>\n $isActive &&\n $variant === \"subMenu\" &&\n `\n &:after{\n content: \"\";\n position: absolute;\n bottom: 0;\n height: 4px;\n width: 100%;\n background-color: ${theme.colors.primary};\n border-radius: 2px 2px 0 0;\n }\n `};\n`;\n\nconst StyledMenuItem = styled.a`\n position: relative;\n display: flex;\n align-items: center;\n\n color: ${({ theme, $isActive }) => ($isActive ? theme.colors.secondary : theme.colors.textSubtle)};\n font-size: 16px;\n font-weight: ${({ $isActive }) => ($isActive ? \"600\" : \"400\")};\n\n ${({ $statusColor, theme }) =>\n $statusColor &&\n `\n &:after {\n content: \"\";\n border-radius: 100%;\n background: ${theme.colors[$statusColor]};\n height: 8px;\n width: 8px;\n margin-left: 12px;\n }\n `}\n\n ${({ $variant }) =>\n $variant === \"default\"\n ? `\n padding: 0 16px;\n height: 48px;\n `\n : `\n padding: 4px 4px 0px 4px;\n height: 42px;\n `}\n\n &:hover {\n background: ${({ theme }) => theme.colors.tertiary};\n ${({ $variant }) => $variant === \"default\" && \"border-radius: 10px;\"};\n }\n`;\n\nexport default StyledMenuItem;\n","import React, { useContext } from \"react\";\nimport { MenuContext } from \"../../widgets/Menu/context\";\nimport StyledMenuItem, { StyledMenuItemContainer } from \"./styles\";\nimport { MenuItemProps } from \"./types\";\n\nconst MenuItem: React.FC> = ({\n children,\n href,\n isActive = false,\n variant = \"default\",\n statusColor,\n ...props\n}) => {\n const { linkComponent } = useContext(MenuContext);\n const itemLinkProps: any = href\n ? {\n as: linkComponent,\n href,\n }\n : {\n as: \"div\",\n };\n return (\n \n \n {children}\n \n \n );\n};\n\nexport default MenuItem;\n","import { styled } from \"styled-components\";\nimport { Flex } from \"../Box\";\n\nconst StyledSubMenuItems = styled(Flex)<{ $isMobileOnly: boolean }>`\n ${({ theme }) => theme.mediaQueries.sm} {\n ${({ $isMobileOnly }) => ($isMobileOnly ? \"display:none\" : \"\")};\n }\n flex-grow: 1;\n background-color: ${({ theme }) => `${theme.colors.backgroundAlt2}`};\n box-shadow: inset 0px -2px 0px -8px rgba(133, 133, 133, 0.1);\n overflow-x: scroll;\n scrollbar-width: none;\n -ms-overflow-style: none;\n &::-webkit-scrollbar {\n display: none;\n }\n`;\n\nexport default StyledSubMenuItems;\n","import React from \"react\";\nimport { Box } from \"../Box\";\nimport MenuItem from \"../MenuItem/MenuItem\";\nimport IconComponent from \"../Svg/IconComponent\";\nimport StyledSubMenuItems from \"./styles\";\nimport { SubMenuItemsProps } from \"./types\";\n\nconst SubMenuItems: React.FC> = ({\n items = [],\n activeItem,\n isMobileOnly = false,\n ...props\n}) => {\n return (\n \n {items.map(\n ({ label, href, iconName, itemProps }) =>\n label && (\n \n \n {iconName && (\n \n )}\n {label}\n \n \n )\n )}\n \n );\n};\n\nexport default SubMenuItems;\n","import { styled } from \"styled-components\";\nimport { typography, TypographyProps } from \"styled-system\";\n\nexport const Td = styled.td`\n border-bottom: 1px solid ${({ theme }) => theme.colors.cardBorder};\n color: ${({ theme }) => theme.colors.text};\n padding: 16px;\n vertical-align: middle;\n\n ${typography}\n`;\n\nexport const Th = styled(Td).attrs({ as: \"th\" })`\n color: ${({ theme }) => theme.colors.secondary};\n font-size: 12px;\n text-transform: uppercase;\n\n ${typography}\n`;\n","import { styled } from \"styled-components\";\nimport { space } from \"styled-system\";\nimport { Td } from \"./Cell\";\n\nconst Table = styled.table`\n max-width: 100%;\n width: 100%;\n\n tbody tr:last-child {\n ${Td} {\n border-bottom: 0;\n }\n }\n\n ${space}\n`;\n\nexport default Table;\n","import React, { cloneElement, Children, ReactElement } from \"react\";\nimport { styled } from \"styled-components\";\nimport Flex from \"../Box/Flex\";\nimport { TabMenuProps } from \"./types\";\n\nconst Wrapper = styled(Flex)<{ fullWidth?: boolean; isShowBorderBottom?: boolean }>`\n border-bottom: ${({ isShowBorderBottom, theme }) =>\n isShowBorderBottom ? `2px solid ${theme.colors.input}` : \"none\"};\n overflow-x: auto;\n padding: ${({ fullWidth }) => (fullWidth ? 0 : \"16px 16px 0 16px\")};\n\n &::-webkit-scrollbar {\n display: none;\n }\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n`;\n\nconst Inner = styled(Flex)<{ fullWidth?: boolean; gap?: string }>`\n justify-content: space-between;\n\n & > button + button {\n margin-left: ${({ gap }) => gap || \"4px\"};\n }\n\n & > button {\n flex-grow: ${({ fullWidth }) => (fullWidth ? 1 : 0)};\n }\n\n ${({ theme }) => theme.mediaQueries.md} {\n flex-grow: ${({ fullWidth }) => (fullWidth ? 1 : 0)};\n }\n\n flex-grow: ${({ fullWidth }) => (fullWidth ? 1 : 0)};\n`;\n\nconst TabMenu: React.FC> = ({\n activeIndex = 0,\n onItemClick,\n children,\n fullWidth,\n gap,\n isColorInverse = false,\n isShowBorderBottom = true,\n}) => {\n return (\n \n \n {Children.map(children, (child: ReactElement, index) => {\n const isActive = activeIndex === index;\n const color = isActive ? \"backgroundAlt\" : \"textSubtle\";\n const inverseColor = isActive ? \"textSubtle\" : \"backgroundAlt\";\n const backgroundColor = isActive ? \"textSubtle\" : \"input\";\n const inverseBackgroundColor = isActive ? \"input\" : \"textSubtle\";\n\n return cloneElement(child, {\n isActive,\n onClick: onItemClick ? () => onItemClick(index) : undefined,\n color: isColorInverse ? inverseColor : color,\n backgroundColor: isColorInverse ? inverseBackgroundColor : backgroundColor,\n });\n })}\n \n \n );\n};\n\nexport default TabMenu;\n","import { styled } from \"styled-components\";\nimport { color } from \"styled-system\";\nimport { TabProps } from \"./types\";\n\nconst getBorderRadius = ({ scale }: TabProps) => (scale === \"md\" ? \"16px 16px 0 0\" : \"24px 24px 0 0\");\n\nconst getPadding = ({ scale }: TabProps) => (scale === \"md\" ? \"8px\" : \"16px\");\n\nconst Tab = styled.button`\n display: inline-flex;\n justify-content: center;\n cursor: pointer;\n border: 0;\n outline: 0;\n flex-grow: 1;\n padding: ${getPadding};\n border-radius: ${getBorderRadius};\n font-size: 16px;\n font-weight: 600;\n\n ${({ theme }) => theme.mediaQueries.md} {\n flex-grow: 0;\n }\n\n ${color}\n`;\n\nTab.defaultProps = {\n scale: \"md\",\n};\n\nexport default Tab;\n","import { ReactNode } from \"react\";\nimport { SpaceProps, TypographyProps } from \"styled-system\";\n\nexport const variants = {\n PRIMARY: \"primary\",\n SECONDARY: \"secondary\",\n SUCCESS: \"success\",\n TEXTDISABLED: \"textDisabled\",\n TEXTSUBTLE: \"textSubtle\",\n BINANCE: \"binance\",\n FAILURE: \"failure\",\n WARNING: \"warning\",\n} as const;\n\nexport const scales = {\n MD: \"md\",\n SM: \"sm\",\n} as const;\n\nexport type Scale = (typeof scales)[keyof typeof scales];\nexport type Variant = (typeof variants)[keyof typeof variants];\n\nexport interface TagProps extends SpaceProps, TypographyProps {\n variant?: Variant;\n scale?: Scale;\n startIcon?: ReactNode;\n endIcon?: ReactNode;\n outline?: boolean;\n textTransform?: \"uppercase\" | \"lowercase\" | \"capitalize\";\n style?: React.CSSProperties;\n protocol?: string;\n}\n","import { scales, variants } from \"./types\";\n\nexport const scaleVariants = {\n [scales.MD]: {\n height: \"28px\",\n padding: \"0 8px\",\n fontSize: \"14px\",\n },\n [scales.SM]: {\n height: \"24px\",\n padding: \"0 4px\",\n fontSize: \"12px\",\n },\n};\n\nexport const styleVariants = {\n [variants.PRIMARY]: {\n backgroundColor: \"primary\",\n },\n [variants.SECONDARY]: {\n backgroundColor: \"secondary\",\n },\n [variants.SUCCESS]: {\n backgroundColor: \"success\",\n },\n [variants.TEXTDISABLED]: {\n backgroundColor: \"textDisabled\",\n },\n [variants.TEXTSUBTLE]: {\n backgroundColor: \"textSubtle\",\n },\n [variants.BINANCE]: {\n backgroundColor: \"binance\",\n },\n [variants.FAILURE]: {\n backgroundColor: \"failure\",\n },\n [variants.WARNING]: {\n backgroundColor: \"warning\",\n },\n};\n","import shouldForwardProp from \"@styled-system/should-forward-prop\";\nimport { styled, DefaultTheme } from \"styled-components\";\nimport { space, variant, typography } from \"styled-system\";\nimport { Colors } from \"../../theme/types\";\nimport { scaleVariants, styleVariants } from \"./theme\";\nimport { TagProps, variants } from \"./types\";\n\ninterface ThemedProps extends TagProps {\n theme: DefaultTheme;\n}\n\nconst getOutlineStyles = ({ outline, theme, variant: variantKey = variants.PRIMARY }: ThemedProps) => {\n if (outline) {\n const themeColorKey = styleVariants[variantKey].backgroundColor as keyof Colors;\n const color = theme.colors[themeColorKey];\n\n return `\n color: ${color};\n background: ${theme.colors.background};\n border: 2px solid ${color};\n `;\n }\n\n return \"\";\n};\n\nexport const StyledTag = styled.div.withConfig({ shouldForwardProp })`\n align-items: center;\n border-radius: 10px;\n color: #ffffff;\n display: inline-flex;\n font-weight: 400;\n white-space: nowrap;\n\n & > svg {\n fill: currentColor;\n }\n\n ${({ textTransform }) => textTransform && `text-transform: ${textTransform};`}\n\n ${variant({\n prop: \"scale\",\n variants: scaleVariants,\n })}\n ${variant({\n variants: styleVariants,\n })}\n ${space}\n ${typography}\n\n ${getOutlineStyles}\n`;\n\nexport default null;\n","import React from \"react\";\nimport { scales, TagProps } from \"./types\";\nimport { StyledTag } from \"./StyledTag\";\n\nconst Tag: React.FC> = ({ startIcon, endIcon, children, ...props }) => (\n \n {React.isValidElement(startIcon) &&\n React.cloneElement(startIcon, {\n // @ts-ignore\n mr: \"0.5em\",\n })}\n {children}\n {React.isValidElement(endIcon) &&\n React.cloneElement(endIcon, {\n // @ts-ignore\n ml: \"0.5em\",\n })}\n \n);\n\n/* eslint-disable react/default-props-match-prop-types */\nTag.defaultProps = {\n variant: \"primary\",\n scale: scales.MD,\n outline: false,\n};\n\nexport default Tag;\n","import { InputHTMLAttributes, ReactNode } from \"react\";\nimport { Colors } from \"../../theme\";\n\nexport const scales = {\n SM: \"sm\",\n MD: \"md\",\n LG: \"lg\",\n} as const;\n\nexport type Scales = (typeof scales)[keyof typeof scales];\n\nexport interface ToggleProps extends InputHTMLAttributes {\n scale?: Scales;\n checked?: boolean;\n checkedColor?: keyof Colors;\n defaultColor?: keyof Colors;\n startIcon?: (isActive?: boolean) => ReactNode;\n endIcon?: (isActive?: boolean) => ReactNode;\n}\n\nexport interface HandleProps {\n scale: Scales;\n}\n\nexport interface InputProps {\n scale: Scales;\n}\n\nexport interface StyleToggleProps {\n $checked: boolean;\n $checkedColor: keyof Colors;\n $defaultColor: keyof Colors;\n scale: Scales;\n}\n\nexport const scaleKeys = {\n handleHeight: \"handleHeight\",\n handleWidth: \"handleWidth\",\n handleLeft: \"handleLeft\",\n handleTop: \"handleTop\",\n checkedLeft: \"checkedLeft\",\n toggleHeight: \"toggleHeight\",\n toggleWidth: \"toggleWidth\",\n} as const;\n\nexport type ScaleKeys = typeof scaleKeys[keyof typeof scaleKeys];\n","import { styled } from \"styled-components\";\nimport { ToggleProps, InputProps, ScaleKeys, scales, StyleToggleProps } from \"./types\";\n\nconst scaleKeyValues = {\n sm: {\n handleHeight: \"16px\",\n handleWidth: \"16px\",\n handleLeft: \"2px\",\n handleTop: \"2px\",\n checkedLeft: \"calc(100% - 18px)\",\n toggleHeight: \"20px\",\n toggleWidth: \"36px\",\n },\n md: {\n handleHeight: \"26px\",\n handleWidth: \"26px\",\n handleLeft: \"3px\",\n handleTop: \"3px\",\n checkedLeft: \"calc(100% - 30px)\",\n toggleHeight: \"32px\",\n toggleWidth: \"56px\",\n },\n lg: {\n handleHeight: \"32px\",\n handleWidth: \"32px\",\n handleLeft: \"4px\",\n handleTop: \"4px\",\n checkedLeft: \"calc(100% - 36px)\",\n toggleHeight: \"40px\",\n toggleWidth: \"72px\",\n },\n};\n\nconst getScale =\n (property: ScaleKeys) =>\n ({ scale = scales.LG }: ToggleProps) => {\n return scaleKeyValues[scale][property];\n };\n\nexport const Handle = styled.div`\n background-color: ${({ theme, $checked, $checkedColor, $defaultColor }) =>\n theme.colors[$checked ? $checkedColor : $defaultColor]};\n border-radius: 50%;\n cursor: pointer;\n height: ${getScale(\"handleHeight\")};\n left: ${getScale(\"handleLeft\")};\n position: absolute;\n top: ${getScale(\"handleTop\")};\n transition: left 200ms ease-in;\n width: ${getScale(\"handleWidth\")};\n z-index: 1;\n`;\n\nexport const Input = styled.input`\n cursor: pointer;\n opacity: 0;\n height: 100%;\n position: absolute;\n width: 100%;\n z-index: 3;\n\n &:checked + ${Handle} {\n left: ${getScale(\"checkedLeft\")};\n }\n\n &:hover + ${Handle}:not(:disabled) {\n opacity: 0.85;\n }\n`;\n\nconst StyledToggle = styled.div`\n align-items: center;\n background-color: ${({ theme }) => theme.toggle.handleBackground};\n border-radius: 24px;\n cursor: pointer;\n display: inline-flex;\n height: ${getScale(\"toggleHeight\")};\n position: relative;\n transition: background-color 200ms;\n width: ${getScale(\"toggleWidth\")};\n`;\n\nexport default StyledToggle;\n","import React from \"react\";\nimport { Flex } from \"../Box\";\nimport StyledToggle, { Input, Handle } from \"./StyledToggle\";\nimport { ToggleProps, scales } from \"./types\";\n\nconst Toggle: React.FC> = ({\n checked,\n defaultColor = \"tertiary\",\n checkedColor = \"primary\",\n scale = scales.LG,\n startIcon,\n endIcon,\n ...props\n}) => {\n const isChecked = !!checked;\n\n return (\n \n \n {startIcon && endIcon ? (\n <>\n \n \n {checked ? endIcon(checked) : startIcon(!checked)}\n \n \n \n {startIcon()}\n {endIcon()}\n \n \n ) : (\n \n )}\n \n );\n};\n\nexport default Toggle;\n","import { vars } from \"../css/vars.css\";\n\nexport const lightColors = vars.colors;\n\nexport const darkColors = vars.colors;\n","import { styled } from \"styled-components\";\nimport { lightColors } from \"../../theme/colors\";\n\nexport const TimelineContainer = styled.ul`\n display: flex;\n flex-direction: column;\n list-style: none;\n`;\n\nexport const TimelineEvent = styled.li<{ $useDark: boolean }>`\n display: flex;\n position: relative;\n margin-bottom: 14px;\n\n &:after {\n content: \"\";\n position: absolute;\n left: 9px;\n top: 26px;\n width: 2px;\n height: 10px;\n background-color: ${({ theme, $useDark }) => ($useDark ? theme.colors.textSubtle : lightColors.textSubtle)};\n }\n\n &:last-child:after {\n display: none;\n }\n`;\n","import { useCallback } from \"react\";\nimport { styled } from \"styled-components\";\nimport IconButton from \"../Button/IconButton\";\nimport { CardViewIcon, ListViewIcon } from \"../Svg\";\n\nexport enum ViewMode {\n TABLE = \"TABLE\",\n CARD = \"CARD\",\n}\n\ninterface ToggleViewProps {\n idPrefix: string;\n viewMode: ViewMode;\n onToggle: (mode: ViewMode) => void;\n}\n\nconst Container = styled.div`\n margin-left: -8px;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n margin-left: 0;\n }\n`;\n\nexport const ToggleView: React.FunctionComponent> = ({\n idPrefix,\n viewMode,\n onToggle,\n}) => {\n const handleToggleCard = useCallback(() => {\n if (viewMode !== ViewMode.CARD) {\n onToggle(ViewMode.CARD);\n }\n }, [onToggle, viewMode]);\n\n const handleToggleTable = useCallback(() => {\n if (viewMode !== ViewMode.TABLE) {\n onToggle(ViewMode.TABLE);\n }\n }, [onToggle, viewMode]);\n\n return (\n \n \n \n \n \n \n \n \n );\n};\n","import { useState } from \"react\";\nimport { HelpIcon } from \"../Svg\";\n\nconst BAD_SRCS: { [imageSrc: string]: true } = {};\n\nexport interface TokenLogoProps extends React.ImgHTMLAttributes {\n srcs: string[];\n useFilledIcon?: boolean;\n}\n\n/**\n * Renders an image by sequentially trying a list of URIs, and then eventually a fallback triangle alert\n */\nconst TokenLogo: React.FC> = ({ srcs, alt, ...rest }) => {\n const [, refresh] = useState(0);\n\n const src: string | undefined = srcs.find((s) => !BAD_SRCS[s]);\n\n if (src) {\n return (\n {\n // eslint-disable-next-line no-param-reassign\n if (src) BAD_SRCS[src] = true;\n refresh((i) => i + 1);\n }}\n />\n );\n }\n\n return ;\n};\n\nexport default TokenLogo;\n","import shouldForwardProp from \"@styled-system/should-forward-prop\";\nimport { styled } from \"styled-components\";\nimport { Colors } from \"../../theme\";\n\nexport const StyledIconContainer = styled.div.withConfig({ shouldForwardProp })<{\n activeBackgroundColor?: keyof Colors;\n}>`\n background: ${({ activeBackgroundColor, theme }) =>\n activeBackgroundColor ? theme.colors[activeBackgroundColor] : \"transparent\"};\n`;\n\nexport const StyledAnimatedIconComponent = styled(\"div\").withConfig({\n shouldForwardProp: (props) => ![\"isActive\", \"hasFillIcon\"].includes(props),\n})<{\n isActive: boolean;\n height?: string;\n width?: string;\n hasFillIcon: boolean;\n}>`\n position: relative;\n ${({ height }) => height && `height: ${height}`};\n ${({ width }) => `width: ${width || \"100%\"}`};\n\n div:first-child {\n ${({ height }) => height && `height: ${height}`};\n ${({ width }) => `width: ${width || \"100%\"}`};\n z-index: 0;\n }\n ${({ hasFillIcon }) =>\n hasFillIcon &&\n `\n div, svg {\n position: absolute;\n left: 0;\n bottom: 0;\n overflow:hidden;\n }\n\n div:last-child {\n height: 0;\n z-index: 5;\n transition: height 0.25s ease;\n }\n `}\n\n ${({ isActive, height, width, hasFillIcon }) =>\n isActive &&\n `\n div:last-child {\n ${height && hasFillIcon && `height:${height}`};\n ${`width: ${width || \"100%\"}`};\n }\n `}\n`;\n","import { StyledAnimatedIconComponent, StyledIconContainer } from \"./styles\";\nimport { IconComponentType } from \"./types\";\n\nconst AnimatedIconComponent: React.FC> = ({\n icon,\n fillIcon,\n color = \"textSubtle\",\n activeColor = \"secondary\",\n activeBackgroundColor,\n isActive = false,\n ...props\n}) => {\n const IconElement = icon;\n const IconElementFill = fillIcon;\n return IconElement ? (\n \n \n \n \n {!!IconElementFill && (\n \n \n \n )}\n \n ) : null;\n};\n\nexport default AnimatedIconComponent;\n","import { styled } from \"styled-components\";\nimport { Text } from \"../Text\";\n\nexport const StyledBottomNavItem = styled.button`\n display: block;\n border: 0;\n background: transparent;\n cursor: pointer;\n height: 44px;\n padding: 4px 12px;\n &:hover {\n border-radius: 10px;\n }\n &:hover,\n &:hover div {\n background: ${({ theme }) => theme.colors.tertiary};\n }\n`;\n\nexport const StyledBottomNavText = styled(Text)`\n display: -webkit-box;\n overflow: hidden;\n user-select: none;\n -webkit-line-clamp: 1;\n -webkit-box-orient: vertical;\n -webkit-user-select: none;\n -webkit-touch-callout: none;\n`;\n","import React, { useContext } from \"react\";\nimport { MenuContext } from \"../../widgets/Menu/context\";\nimport { Flex } from \"../Box\";\nimport AnimatedIconComponent from \"../Svg/AnimatedIconComponent\";\nimport { StyledBottomNavItem, StyledBottomNavText } from \"./styles\";\nimport { BottomNavItemProps } from \"./types\";\n\nconst BottomNavItem: React.FC> = ({\n label,\n icon,\n fillIcon,\n href,\n showItemsOnMobile = false,\n isActive = false,\n disabled = false,\n ...props\n}) => {\n const { linkComponent } = useContext(MenuContext);\n const bottomNavItemContent = (\n \n {icon && (\n \n )}\n \n {label}\n \n \n );\n\n return showItemsOnMobile ? (\n \n {bottomNavItemContent}\n \n ) : (\n \n {bottomNavItemContent}\n \n );\n};\n\nexport default BottomNavItem;\n","import { styled } from \"styled-components\";\nimport { Flex } from \"../Box\";\n\nconst StyledBottomNav = styled(Flex)`\n position: fixed;\n bottom: 0px;\n width: 100%;\n padding: 5px 8px;\n background: ${({ theme }) => theme.colors.backgroundAlt};\n border-top: 1px solid ${({ theme }) => theme.colors.cardBorder};\n padding-bottom: env(safe-area-inset-bottom);\n html[data-useragent*=\"TokenPocket_iOS\"] & {\n padding-bottom: 45px;\n }\n z-index: 20;\n`;\n\nexport default StyledBottomNav;\n","import React, { useState, memo } from \"react\";\nimport BottomNavItem from \"../BottomNavItem\";\nimport StyledBottomNav from \"./styles\";\nimport { Box } from \"../Box\";\nimport DropdownMenu from \"../DropdownMenu/DropdownMenu\";\nimport { BottomNavProps } from \"./types\";\nimport { NotificationDot } from \"../NotificationDot\";\nimport { Overlay } from \"../Overlay\";\n\nconst BottomNav: React.FC> = ({\n items = [],\n activeItem = \"\",\n activeSubItem = \"\",\n ...props\n}) => {\n const [menuOpenByIndex, setMenuOpenByIndex] = useState({});\n const isBottomMenuOpen = Object.values(menuOpenByIndex).some((acc) => acc);\n return (\n <>\n {isBottomMenuOpen && }\n \n {items.map(\n (\n { label, items: menuItems, href, icon, fillIcon, showOnMobile = true, showItemsOnMobile = true, disabled },\n index\n ) => {\n const statusColor = menuItems?.find((menuItem) => menuItem.status !== undefined)?.status?.color;\n return (\n showOnMobile && (\n \n \n \n \n \n \n \n )\n );\n }\n )}\n \n \n );\n};\n\nexport default memo(BottomNav);\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { createElement, memo } from \"react\";\nimport { Flex } from \"../Box\";\nimport isTouchDevice from \"../../util/isTouchDevice\";\nimport DropdownMenu from \"../DropdownMenu/DropdownMenu\";\nimport MenuItem from \"../MenuItem/MenuItem\";\nimport { MenuItemsProps } from \"./types\";\n\nconst MenuItems: React.FC> = ({\n items = [],\n activeItem,\n activeSubItem,\n ...props\n}) => {\n return (\n \n {items.map(({ label, items: menuItems = [], href, icon = \"\" }) => {\n const statusColor = menuItems?.find((menuItem) => menuItem.status !== undefined)?.status?.color;\n const isActive = activeItem === href;\n const linkProps = isTouchDevice() && menuItems && menuItems.length > 0 ? {} : { href };\n const Icon = icon;\n return (\n \n \n {label || (icon && createElement(Icon as any, { color: isActive ? \"secondary\" : \"textSubtle\" }))}\n \n \n );\n })}\n \n );\n};\n\nexport default memo(MenuItems);\n","import React, { useContext } from \"react\";\nimport styled from \"styled-components\";\nimport Flex from \"../../../components/Box/Flex\";\nimport { LogoWithTextIcon } from \"../../../components/Svg\";\nimport { MenuContext } from \"../context\";\n\ninterface Props {\n isDark: boolean;\n href: string;\n}\n\nconst StyledLink = styled(\"a\")`\n display: flex;\n .desktop-icon {\n width: 130px;\n }\n`;\n\nconst DesktopLogo: React.FC> = ({ href }) => {\n const { linkComponent } = useContext(MenuContext);\n const isAbsoluteUrl = href.startsWith(\"http\");\n const innerLogo = (\n <>\n \n \n );\n\n return (\n \n {isAbsoluteUrl ? (\n \n {innerLogo}\n \n ) : (\n \n {innerLogo}\n \n )}\n \n );\n};\n\nexport default React.memo(DesktopLogo);\n","import React, { useContext } from \"react\";\nimport styled from \"styled-components\";\nimport Flex from \"../../../components/Box/Flex\";\nimport { LogoIcon } from \"../../../components/Svg\";\nimport { MenuContext } from \"../context\";\n\ninterface Props {\n isDark: boolean;\n href: string;\n}\n\nconst StyledLink = styled(\"a\")`\n display: flex;\n align-items: center;\n .mobile-icon {\n width: 32px;\n }\n`;\n\nconst MobileLogo: React.FC> = ({ href }) => {\n const { linkComponent } = useContext(MenuContext);\n const isAbsoluteUrl = href.startsWith(\"http\");\n const innerLogo = (\n <>\n \n \n );\n\n return (\n \n {isAbsoluteUrl ? (\n \n {innerLogo}\n \n ) : (\n \n {innerLogo}\n \n )}\n \n );\n};\n\nexport default React.memo(MobileLogo);\n","import { useIsMounted } from \"@pulsex/hooks\";\nimport throttle from \"lodash/throttle\";\nimport React, { useEffect, useRef, useState, useMemo } from \"react\";\nimport { styled } from \"styled-components\";\nimport BottomNav from \"../../components/BottomNav\";\nimport { Box } from \"../../components/Box\";\nimport Flex from \"../../components/Box/Flex\";\nimport { AtomBox } from \"../../components/AtomBox\";\nimport MenuItems from \"../../components/MenuItems/MenuItems\";\nimport { SubMenuItems } from \"../../components/SubMenuItems\";\nimport { useMatchBreakpoints } from \"../../contexts\";\nimport PlsxPrice from \"../../components/PlsxPrice/PlsxPrice\";\nimport { MENU_HEIGHT, TOP_BANNER_HEIGHT, TOP_BANNER_HEIGHT_MOBILE } from \"./config\";\nimport { NavProps } from \"./types\";\nimport LangSelector from \"../../components/LangSelector/LangSelector\";\nimport { MenuContext } from \"./context\";\nimport DesktopLogo from \"./components/DesktopLogo\";\nimport MobileLogo from \"./components/MobileLogo\";\n\nconst Wrapper = styled.div`\n position: relative;\n width: 100%;\n display: grid;\n grid-template-rows: auto 1fr;\n`;\n\nconst StyledNav = styled.nav`\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n height: ${MENU_HEIGHT}px;\n background-color: ${({ theme }) => theme.nav.background};\n border-bottom: 1px solid ${({ theme }) => theme.colors.cardBorder};\n transform: translate3d(0, 0, 0);\n\n padding-left: 16px;\n padding-right: 16px;\n`;\n\nconst FixedContainer = styled(\"div\").withConfig({\n shouldForwardProp: (props) => ![\"showMenu\"].includes(props),\n})<{ showMenu: boolean; height: number }>`\n position: fixed;\n top: ${({ showMenu, height }) => (showMenu ? 0 : `-${height}px`)};\n left: 0;\n transition: top 0.2s;\n height: ${({ height }) => `${height}px`};\n width: 100%;\n z-index: 20;\n`;\n\nconst TopBannerContainer = styled.div<{ height: number }>`\n height: ${({ height }) => `${height}px`};\n min-height: ${({ height }) => `${height}px`};\n max-height: ${({ height }) => `${height}px`};\n width: 100%;\n`;\n\nconst BodyWrapper = styled(Box)`\n position: relative;\n display: flex;\n max-width: 100vw;\n`;\n\nconst Inner = styled.div`\n flex-grow: 1;\n transition: margin-top 0.2s, margin-left 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n transform: translate3d(0, 0, 0);\n max-width: 100%;\n`;\n\nconst Menu: React.FC> = ({\n linkComponent = \"a\",\n userMenu,\n banner,\n globalMenu,\n isDark,\n currentLang,\n setLang,\n plsxPriceUsd,\n links,\n subLinks,\n activeItem,\n activeSubItem,\n langs,\n children,\n}) => {\n const { isMobile } = useMatchBreakpoints();\n const isMounted = useIsMounted();\n const [showMenu, setShowMenu] = useState(true);\n const refPrevOffset = useRef(typeof window === \"undefined\" ? 0 : window.pageYOffset);\n\n const topBannerHeight = isMobile ? TOP_BANNER_HEIGHT_MOBILE : TOP_BANNER_HEIGHT;\n\n const totalTopMenuHeight = isMounted && banner ? MENU_HEIGHT + topBannerHeight : MENU_HEIGHT;\n\n useEffect(() => {\n const handleScroll = () => {\n const currentOffset = window.pageYOffset;\n const isBottomOfPage = window.document.body.clientHeight === currentOffset + window.innerHeight;\n const isTopOfPage = currentOffset === 0;\n // Always show the menu when user reach the top\n if (isTopOfPage) {\n setShowMenu(true);\n }\n // Avoid triggering anything at the bottom because of layout shift\n else if (!isBottomOfPage) {\n if (currentOffset < refPrevOffset.current || currentOffset <= totalTopMenuHeight) {\n // Has scroll up\n setShowMenu(true);\n } else {\n // Has scroll down\n setShowMenu(false);\n }\n }\n refPrevOffset.current = currentOffset;\n };\n const throttledHandleScroll = throttle(handleScroll, 200);\n\n window.addEventListener(\"scroll\", throttledHandleScroll);\n return () => {\n window.removeEventListener(\"scroll\", throttledHandleScroll);\n };\n }, [totalTopMenuHeight]);\n\n const subLinksWithoutMobile = subLinks?.filter((subLink) => !subLink.isMobileOnly);\n const subLinksMobileOnly = subLinks?.filter((subLink) => subLink.isMobileOnly);\n const providerValue = useMemo(() => ({ linkComponent }), [linkComponent]);\n\n return (\n \n \n \n \n {banner && {banner}}\n \n \n {isMobile ? (\n \n ) : (\n \n )}\n \n \n \n \n \n \n \n \n \n \n \n {globalMenu} {userMenu}\n \n \n \n {subLinks && (\n \n \n\n {subLinksMobileOnly?.length > 0 && (\n \n )}\n \n )}\n \n {children}\n \n {isMobile && }\n \n \n \n );\n};\n\nexport default Menu;\n","export const MENU_HEIGHT = 76;\nexport const MENU_ENTRY_HEIGHT = 48;\nexport const MOBILE_MENU_HEIGHT = 44;\nexport const SIDEBAR_WIDTH_FULL = 240;\nexport const SIDEBAR_WIDTH_REDUCED = 56;\nexport const TOP_BANNER_HEIGHT = 70;\nexport const TOP_BANNER_HEIGHT_MOBILE = 84;\n","import { useEffect, useState } from 'react'\n\nexport function useIsMounted() {\n const [isMounted, setIsMounted] = useState(false)\n\n useEffect(() => {\n setIsMounted(true)\n }, [])\n\n return isMounted\n}\n","import noop from \"lodash/noop\";\nimport { LinkStatus } from \"./types\";\nimport { MenuItemsType } from \"../../components/MenuItems/types\";\nimport {\n SwapIcon,\n SwapFillIcon,\n EarnIcon,\n EarnFillIcon,\n TrophyIcon,\n TrophyFillIcon,\n MoreIcon,\n DropdownMenuItems,\n} from \"../../components\";\nimport { DropdownMenuItemType } from \"../../components/DropdownMenu/types\";\n\nexport const status: { NEW: LinkStatus; SOON: LinkStatus; LIVE: LinkStatus } = {\n LIVE: {\n text: \"LIVE\",\n color: \"failure\",\n },\n SOON: {\n text: \"SOON\",\n color: \"warning\",\n },\n NEW: {\n text: \"NEW\",\n color: \"success\",\n },\n};\n\nexport const links: MenuItemsType[] = [\n {\n label: \"Trade\",\n href: \"/swap\",\n icon: SwapIcon,\n fillIcon: SwapFillIcon,\n items: [\n {\n label: \"Exchange\",\n href: \"/swap\",\n },\n {\n label: \"Liquidity\",\n href: \"/liquidity\",\n },\n {\n label: \"Charts\",\n href: \"/charts\",\n iconName: \"Chart\",\n isMobileOnly: true,\n },\n ],\n },\n {\n label: \"Earn\",\n href: \"/earn\",\n icon: EarnIcon,\n fillIcon: EarnFillIcon,\n items: [\n {\n label: \"Earn\",\n href: \"/earn\",\n },\n {\n label: \"Yield Farms\",\n href: \"/farms\",\n },\n {\n label: \"Syrup pools\",\n href: \"/pools\",\n },\n ],\n },\n {\n label: \"Win\",\n href: \"/\",\n icon: TrophyIcon,\n fillIcon: TrophyFillIcon,\n items: [\n {\n label: \"Win\",\n href: \"/\",\n },\n {\n label: \"Predictions\",\n href: \"/\",\n status: status.LIVE,\n },\n {\n label: \"Lottery\",\n href: \"/\",\n },\n ],\n },\n {\n label: \"\",\n href: \"/\",\n icon: MoreIcon,\n items: [\n {\n label: \"Info & Analytics\",\n href: \"/\",\n },\n {\n label: \"IFO Token Sales\",\n href: \"/\",\n status: status.SOON,\n },\n {\n type: DropdownMenuItemType.DIVIDER,\n },\n {\n label: \"NFT Collectibles\",\n href: \"/\",\n },\n {\n label: \"Team Leaderboard\",\n href: \"/\",\n },\n {\n type: DropdownMenuItemType.DIVIDER,\n },\n {\n label: \"Blog\",\n href: \"/\",\n },\n {\n label: \"Docs & Guides\",\n href: \"/\",\n type: DropdownMenuItemType.EXTERNAL_LINK,\n },\n ],\n },\n];\n\nexport const userMenulinks: DropdownMenuItems[] = [\n {\n label: \"Wallet\",\n onClick: noop,\n type: DropdownMenuItemType.BUTTON,\n },\n {\n label: \"Transactions\",\n type: DropdownMenuItemType.BUTTON,\n },\n {\n type: DropdownMenuItemType.DIVIDER,\n },\n {\n type: DropdownMenuItemType.BUTTON,\n disabled: true,\n label: \"Dashboard\",\n },\n {\n type: DropdownMenuItemType.BUTTON,\n disabled: true,\n label: \"Portfolio\",\n },\n {\n label: \"Profile\",\n href: \"/profile\",\n },\n {\n type: DropdownMenuItemType.EXTERNAL_LINK,\n href: \"https://pancakeswap.finance\",\n label: \"Link\",\n },\n {\n type: DropdownMenuItemType.DIVIDER,\n },\n {\n type: DropdownMenuItemType.BUTTON,\n onClick: noop,\n label: \"Disconnect\",\n },\n];\n","import { Placement } from \"@popperjs/core\";\nimport { ReactElement, ReactNode } from \"react\";\nimport { FlexProps } from \"../../../../components/Box\";\n\nexport const variants = {\n DEFAULT: \"default\",\n WARNING: \"warning\",\n DANGER: \"danger\",\n PENDING: \"pending\",\n} as const;\n\nexport type Variant = typeof variants[keyof typeof variants];\n\nexport interface UserMenuProps extends Omit {\n account?: string;\n text?: ReactNode;\n avatarSrc?: string;\n iconRef?: React.MutableRefObject;\n variant?: Variant;\n disabled?: boolean;\n children?: (exposedProps: { isOpen: boolean }) => ReactElement;\n placement?: Placement;\n recalculatePopover?: boolean;\n}\n\nexport interface UserMenuItemProps {\n disabled?: boolean;\n}\n","import React from \"react\";\nimport { styled } from \"styled-components\";\nimport { Variant, variants } from \"./types\";\nimport { RefreshIcon, WalletFilledIcon, WarningIcon } from \"../../../../components/Svg\";\nimport { Colors } from \"../../../../theme/types\";\n\nconst MenuIconWrapper = styled.div<{ borderColor: keyof Colors }>`\n align-items: center;\n background-color: ${({ theme }) => theme.colors.background};\n border-color: ${({ theme, borderColor }) => theme.colors[borderColor]};\n border-radius: 50%;\n border-style: solid;\n border-width: 2px;\n display: flex;\n height: 40px;\n justify-content: center;\n left: 0;\n position: absolute;\n top: -4px;\n width: 40px;\n z-index: 102;\n`;\n\nconst StyledIdenticon = styled.div`\n width: 20px;\n height: 20px;\n border-radius: 50%;\n left: 0;\n top: -4px;\n z-index: 102;\n background-color: ${({ theme }) => theme.colors.background};\n`;\n\nexport const NoProfileMenuIcon: React.FC = () => ;\n\nexport const PendingMenuIcon: React.FC = () => (\n \n \n \n);\n\nexport const WarningMenuIcon: React.FC = () => (\n \n \n \n);\n\nexport const DangerMenuIcon: React.FC = () => (\n \n \n \n);\n\nconst MenuIcon: React.FC;\n variant: Variant\n}>> = ({\n iconRef,\n variant\n}) => {\n if (variant === variants.DANGER) {\n return ;\n }\n\n if (variant === variants.WARNING) {\n return ;\n }\n\n if (variant === variants.PENDING) {\n return ;\n }\n\n if (!iconRef) {\n return ;\n }\n\n return ;\n};\n\nexport default MenuIcon;\n","import { styled } from \"styled-components\";\nimport { UserMenuItemProps } from \"./types\";\n\nexport const UserMenuDivider = styled.hr`\n border-color: ${({ theme }) => theme.colors.cardBorder};\n border-style: solid;\n border-width: 1px 0 0;\n margin: 4px 0;\n`;\n\nexport const UserMenuItem = styled.button`\n align-items: center;\n border: 0;\n background: transparent;\n color: ${({ theme, disabled }) => theme.colors[disabled ? \"textDisabled\" : \"textSubtle\"]};\n cursor: ${({ disabled }) => (disabled ? \"not-allowed\" : \"pointer\")};\n display: flex;\n font-size: 16px;\n height: 48px;\n justify-content: space-between;\n outline: 0;\n padding-left: 16px;\n padding-right: 16px;\n width: 100%;\n\n &:hover:not(:disabled) {\n background-color: ${({ theme }) => theme.colors.tertiary};\n }\n\n &:active:not(:disabled) {\n opacity: 0.85;\n transform: translateY(1px);\n }\n`;\n","import React, { useEffect, useState } from \"react\";\nimport { usePopper } from \"react-popper\";\nimport { styled } from \"styled-components\";\nimport { Box, Flex } from \"../../../../components/Box\";\nimport { ChevronDownIcon } from \"../../../../components/Svg\";\nimport { UserMenuProps, variants } from \"./types\";\nimport MenuIcon from \"./MenuIcon\";\nimport { UserMenuItem } from \"./styles\";\n\nexport const StyledUserMenu = styled(Flex)`\n align-items: center;\n background-color: ${({ theme }) => theme.colors.tertiary};\n border-radius: 10px;\n box-shadow: inset 0px -2px 0px rgba(0, 0, 0, 0.1);\n cursor: pointer;\n display: inline-flex;\n height: 32px;\n padding-left: 8px;\n padding-right: 8px;\n position: relative;\n\n &:hover {\n opacity: 0.65;\n }\n`;\n\nexport const LabelText = styled.div`\n color: ${({ theme }) => theme.colors.text};\n display: none;\n font-weight: 600;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n display: block;\n margin-left: 8px;\n margin-right: 4px;\n }\n`;\n\nconst Menu = styled(\"div\").withConfig({\n shouldForwardProp: (props) => ![\"isOpen\"].includes(props),\n})<{ isOpen: boolean }>`\n background-color: ${({ theme }) => theme.card.background};\n border: 1px solid ${({ theme }) => theme.colors.cardBorder};\n border-radius: 10px;\n padding-bottom: 4px;\n padding-top: 4px;\n pointer-events: auto;\n width: 280px;\n visibility: visible;\n z-index: 1001;\n\n ${({ isOpen }) =>\n !isOpen &&\n `\n pointer-events: none;\n visibility: hidden;\n `}\n\n ${UserMenuItem}:first-child {\n border-radius: 10px 10px 0 0;\n }\n\n ${UserMenuItem}:last-child {\n border-radius: 0 0 10px 10px;\n }\n`;\n\nconst UserMenu: React.FC = ({\n account,\n text,\n iconRef,\n variant = variants.DEFAULT,\n children,\n disabled,\n placement = \"bottom-end\",\n recalculatePopover,\n ...props\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [targetRef, setTargetRef] = useState(null);\n const [tooltipRef, setTooltipRef] = useState(null);\n const accountEllipsis = account ? `${account.substring(0, 6)}...${account.substring(account.length - 4)}` : null;\n const { styles, attributes, update } = usePopper(targetRef, tooltipRef, {\n strategy: \"fixed\",\n placement,\n modifiers: [{ name: \"offset\", options: { offset: [0, 0] } }],\n });\n\n // recalculate the popover position\n useEffect(() => {\n if (recalculatePopover && isOpen && update) update();\n }, [isOpen, update, recalculatePopover]);\n\n useEffect(() => {\n const showDropdownMenu = () => {\n setIsOpen(true);\n };\n\n const hideDropdownMenu = (evt: MouseEvent | TouchEvent) => {\n const target = evt.target as Node;\n if (target && !tooltipRef?.contains(target)) {\n setIsOpen(false);\n evt.stopPropagation();\n }\n };\n\n targetRef?.addEventListener(\"mouseenter\", showDropdownMenu);\n targetRef?.addEventListener(\"mouseleave\", hideDropdownMenu);\n\n return () => {\n targetRef?.removeEventListener(\"mouseenter\", showDropdownMenu);\n targetRef?.removeEventListener(\"mouseleave\", hideDropdownMenu);\n };\n }, [targetRef, tooltipRef, setIsOpen]);\n\n return (\n \n {\n setIsOpen((s) => !s);\n }}\n >\n \n {text || accountEllipsis}\n {!disabled && }\n \n {!disabled && (\n \n setIsOpen(false)}>{children?.({ isOpen })}\n \n )}\n \n );\n};\n\nexport default UserMenu;\n","import React, { useContext } from \"react\";\nimport styled from \"styled-components\";\nimport Flex from \"../../../components/Box/Flex\";\nimport { LogoIcon, LogoWithTextIcon } from \"../../../components/Svg\";\nimport { MenuContext } from \"../context\";\n\ninterface Props {\n href: string;\n}\n\nconst StyledLink = styled(\"a\")`\n display: flex;\n .mobile-icon {\n width: 32px;\n ${({ theme }) => theme.mediaQueries.lg} {\n display: none;\n }\n }\n .desktop-icon {\n width: 130px;\n display: none;\n ${({ theme }) => theme.mediaQueries.lg} {\n display: block;\n }\n }\n`;\n\nconst Logo: React.FC> = ({ href }) => {\n const { linkComponent } = useContext(MenuContext);\n const isAbsoluteUrl = href.startsWith(\"http\");\n const innerLogo = (\n <>\n \n \n \n );\n\n return (\n \n {isAbsoluteUrl ? (\n \n {innerLogo}\n \n ) : (\n \n {innerLogo}\n \n )}\n \n );\n};\n\nexport default React.memo(Logo);\n","import { createGlobalStyle } from \"styled-components\";\n\nconst ResetCSS = createGlobalStyle`\n /* prettier-ignore */\n html, body, div, span, applet, object, iframe,\n h1, h2, h3, h4, h5, h6, p, blockquote, pre,\n a, abbr, acronym, address, big, cite, code,\n del, dfn, em, img, ins, kbd, q, s, samp,\n small, strike, strong, sub, sup, tt, var,\n b, u, i, center,\n dl, dt, dd, ol, ul, li,\n fieldset, form, label, legend,\n table, caption, tbody, tfoot, thead, tr, th, td,\n article, aside, canvas, details, embed, \n figure, figcaption, footer, header, hgroup, \n menu, nav, output, ruby, section, summary,\n time, mark, audio, video {\n margin: 0;\n padding: 0;\n border: 0;\n font-size: 100%;\n vertical-align: baseline;\n }\n /* HTML5 display-role reset for older browsers */\n /* prettier-ignore */\n article, aside, details, figcaption, figure, \n footer, header, hgroup, menu, nav, section {\n display: block;\n }\n body {\n line-height: 1;\n font-size: 16px;\n }\n ol,\n ul {\n list-style: disc;\n list-style-position: inside;\n }\n blockquote,\n q {\n quotes: none;\n }\n blockquote:before,\n blockquote:after,\n q:before,\n q:after {\n content: \"\";\n content: none;\n }\n table {\n border-collapse: collapse;\n border-spacing: 0;\n }\n a {\n color: inherit;\n text-decoration: none;\n }\n [role=\"button\"] {\n cursor: pointer;\n }\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n * {\n font-family: 'Roboto', sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n\n /* Number */\n input::-webkit-outer-spin-button,\n input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n input[type=number] {\n -moz-appearance: textfield;\n }\n\n /* Scrollbar */\n ::-webkit-scrollbar {\n width: 8px;\n }\n ::-webkit-scrollbar-thumb {\n background: ${({ theme }) => theme.colors.textSubtle}; \n border-radius: 8px;\n }\n ::-webkit-scrollbar-track {\n box-shadow: inset 0 0 5px ${({ theme }) => theme.colors.input}; \n border-radius: 10px;\n }\n\n /* Slider */ \n input[type=range] {\n -webkit-appearance: none; /* Hides the slider so that custom slider can be made */\n width: 100%; /* Specific width is required for Firefox. */\n background: transparent; /* Otherwise white in Chrome */\n }\n input[type=range]::-webkit-slider-thumb {\n -webkit-appearance: none;\n }\n input[type=range]:focus {\n outline: none; /* Removes the blue border. You should probably do some kind of focus styling for accessibility reasons though. */\n }\n input[type=range]::-ms-track {\n width: 100%;\n cursor: pointer;\n /* Hides the slider so custom styles can be added */\n background: transparent; \n border-color: transparent;\n color: transparent;\n } \n`;\n\nexport default ResetCSS;\n","import { darkColors, lightColors } from \"../../theme/colors\";\nimport { AlertTheme } from \"./types\";\n\nexport const light: AlertTheme = {\n background: lightColors.backgroundAlt,\n};\n\nexport const dark: AlertTheme = {\n background: darkColors.backgroundAlt,\n};\n","import { vars } from \"../../css/vars.css\";\nimport { darkColors, lightColors } from \"../../theme/colors\";\nimport { CardTheme } from \"./types\";\n\nexport const light: CardTheme = {\n background: lightColors.backgroundAlt,\n boxShadow: vars.shadows.level1,\n boxShadowActive: vars.shadows.active,\n boxShadowSuccess: vars.shadows.success,\n boxShadowWarning: vars.shadows.warning,\n cardHeaderBackground: {\n default: lightColors.gradientCardHeader,\n blue: lightColors.gradientBlue,\n bubblegum: lightColors.gradientBubblegum,\n violet: lightColors.gradientViolet,\n },\n dropShadow: \"drop-shadow(0px 1px 4px rgba(25, 19, 38, 0.15))\",\n};\n\nexport const dark: CardTheme = {\n background: darkColors.backgroundAlt,\n boxShadow: vars.shadows.level1,\n boxShadowActive: vars.shadows.active,\n boxShadowSuccess: vars.shadows.success,\n boxShadowWarning: vars.shadows.warning,\n cardHeaderBackground: {\n default: darkColors.gradientCardHeader,\n blue: darkColors.gradientBlue,\n bubblegum: lightColors.gradientBubblegum,\n violet: darkColors.gradientViolet,\n },\n dropShadow: \"none\",\n};\n","import { darkColors, lightColors } from \"../../theme/colors\";\nimport { PulseXToggleTheme } from \"./types\";\n\nexport const light: PulseXToggleTheme = {\n handleBackground: lightColors.backgroundAlt,\n handleShadow: lightColors.textDisabled,\n};\n\nexport const dark: PulseXToggleTheme = {\n handleBackground: darkColors.backgroundAlt,\n handleShadow: darkColors.textDisabled,\n};\n","import { darkColors, lightColors } from \"../../theme/colors\";\nimport { RadioTheme } from \"./types\";\n\nexport const light: RadioTheme = {\n handleBackground: lightColors.backgroundAlt,\n};\n\nexport const dark: RadioTheme = {\n handleBackground: darkColors.backgroundAlt,\n};\n","import { darkColors, lightColors } from \"../../theme/colors\";\n\nexport type ToggleTheme = {\n handleBackground: string;\n};\n\nexport const light: ToggleTheme = {\n handleBackground: lightColors.backgroundAlt,\n};\n\nexport const dark: ToggleTheme = {\n handleBackground: darkColors.input,\n};\n","import { darkColors, lightColors } from \"../../theme/colors\";\n\nexport interface NavThemeType {\n background: string;\n}\n\nexport const light: NavThemeType = {\n background: lightColors.backgroundAlt,\n};\n\nexport const dark: NavThemeType = {\n background: darkColors.backgroundAlt,\n};\n","import { darkColors, lightColors } from \"../../theme/colors\";\nimport { ModalTheme } from \"./types\";\n\nexport const light: ModalTheme = {\n background: lightColors.backgroundAlt,\n};\n\nexport const dark: ModalTheme = {\n background: darkColors.backgroundAlt,\n};\n","import { darkColors, lightColors } from \"../../theme/colors\";\nimport { vars } from \"../../css/vars.css\";\nimport { TooltipTheme } from \"./types\";\n\nexport const light: TooltipTheme = {\n background: lightColors.input,\n text: lightColors.text,\n boxShadow: vars.shadows.tooltip,\n};\n\nexport const dark: TooltipTheme = {\n background: darkColors.input,\n text: darkColors.text,\n boxShadow: vars.shadows.tooltip,\n};\n","import { breakpoints, mediaQueries } from \"../css/breakpoints\";\nimport { vars } from \"../css/vars.css\";\n\nexport default {\n siteWidth: 1200,\n breakpoints: Object.values(breakpoints).map((bp) => `${bp}px`),\n mediaQueries,\n spacing: vars.space,\n shadows: vars.shadows,\n radii: vars.radii,\n zIndices: { ribbon: 9, dropdown: 10, modal: 100 },\n};\n","import { DefaultTheme } from \"styled-components\";\nimport { dark as darkAlert } from \"../components/Alert/theme\";\nimport { dark as darkCard } from \"../components/Card/theme\";\nimport { dark as darkPulseXToggle } from \"../components/PulseXToggle/theme\";\nimport { dark as darkRadio } from \"../components/Radio/theme\";\nimport { dark as darkToggle } from \"../components/Toggle/theme\";\nimport { dark as darkNav } from \"../widgets/Menu/theme\";\nimport { dark as darkModal } from \"../widgets/Modal/theme\";\nimport { dark as darkTooltip } from \"../components/Tooltip/theme\";\nimport base from \"./base\";\nimport { darkColors } from \"./colors\";\n\nconst darkTheme: DefaultTheme = {\n ...base,\n isDark: true,\n alert: darkAlert,\n colors: darkColors,\n card: darkCard,\n toggle: darkToggle,\n nav: darkNav,\n modal: darkModal,\n plsxToggle: darkPulseXToggle,\n radio: darkRadio,\n tooltip: darkTooltip,\n};\n\nexport default darkTheme;\n","import { ThemeProvider, DefaultTheme } from \"styled-components\";\nimport { MatchBreakpointsProvider } from \"./contexts/MatchBreakpoints/Provider\";\nimport { ToastsProvider } from \"./contexts/ToastsContext/Provider\";\n\nexport const UIKitProvider: React.FC> = ({\n theme,\n children,\n}) => {\n return (\n \n \n {children}\n \n \n );\n};\n","import \"../packages/uikit/src/css/reset.css.ts.vanilla.css!=!../../../../node_modules/@vanilla-extract/webpack-plugin/virtualFileLoader/dist/vanilla-extract-webpack-plugin-virtualFileLoader.cjs.js?{\\\"fileName\\\":\\\"../packages/uikit/src/css/reset.css.ts.vanilla.css\\\",\\\"source\\\":\\\"Ll8xeGE1ejBxMCB7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7CiAgYm9yZGVyOiAwOwogIG1pbi13aWR0aDogMDsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIGZvbnQtc2l6ZTogMTAwJTsKICBmb250OiBpbmhlcml0OwogIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKfQouXzF4YTV6MHExIHsKICBiYWNrZ3JvdW5kOiAwOwogIGJvcmRlcjogMDsKICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7Cn0KLl8xeGE1ejBxMiB7CiAgZGlzcGxheTogYmxvY2s7Cn0KLl8xeGE1ejBxMyB7CiAgbGluZS1oZWlnaHQ6IDE7Cn0KLl8xeGE1ejBxNCB7CiAgbGlzdC1zdHlsZTogbm9uZTsKfQouXzF4YTV6MHE1IHsKICBxdW90ZXM6IG5vbmU7Cn0KLl8xeGE1ejBxNTpiZWZvcmUsIC5fMXhhNXowcTU6YWZ0ZXIgewogIGNvbnRlbnQ6ICcnOwp9Ci5fMXhhNXowcTYgewogIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgYm9yZGVyLXNwYWNpbmc6IDA7Cn0KLl8xeGE1ejBxNyB7CiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgY29sb3I6IGluaGVyaXQ7Cn0KLl8xeGE1ejBxOCB7CiAgYXBwZWFyYW5jZTogbm9uZTsKfQouXzF4YTV6MHE4OjotbXMtZXhwYW5kIHsKICBkaXNwbGF5OiBub25lOwp9\\\"}!../../../../node_modules/@vanilla-extract/webpack-plugin/extracted.js\"\nimport \"../packages/uikit/src/css/vars.css.ts.vanilla.css!=!../../../../node_modules/@vanilla-extract/webpack-plugin/virtualFileLoader/dist/vanilla-extract-webpack-plugin-virtualFileLoader.cjs.js?{\\\"fileName\\\":\\\"../packages/uikit/src/css/vars.css.ts.vanilla.css\\\",\\\"source\\\":\\\"#H4sIAAAAAAAAA+1YW4+jNhh931+BdjXaXSkZ2cbcUvUBArRV1aeR2oeqDw6QDFoGIiCzN+1/r21IYoixyTajvmwyTBL7+Nj+bPD5zqquqtb4+sowlsukKqq6WRb57rFdfnzM22xl8I+fLqu3JC8ONQW82W4BfU1DTFMF2tf5E6k/UwgASYLxNARsZ4DMkIJgvHZCbIbTsKBmvzjfdmtZ08CQ1B84bGOaiQTWHJIkaxrVyHoI9FSgj6Qu83JHIXEcINOZhiA2wyjEgRch2Qx7GIt6vduQd8iyFgZ03IXBvoB79F7SaJOXpEzYaqYbQgCRQKrnrC7I554VUKru796WEe6qIuWTWTvSZW/ygvJRRIDYWzakuiq/sBFFjudg2UybLKnKtNs8jo2t0FOBXHCCubIRbUjyYVdXh5KP24+92FeiwrwhmyJj6MiL/ChQov2i5eFgLx0QiSt3/gfuHVmkE1KnQVWnPJqRE5nSkdAgtDVp2CCgB01kSzBpXe3T6mPJBmqztwITZtme9cdfElxe0uVts3R97ndy8nm5P7QdmR/Lbg4OeBBWO3USkslux5Z2mneYKI5xLLuz2+wT6w25ILRkw2H1nndCeLJdxTDCBgjCNVrLRs5wD4dNW7CN7Ph25Ms2VTpjK+1qkuZZ2QaHDYXuDk8ro8jLjNSnmnfQ9O4dM812C8pjxWEcG+COfo9NGovYgADcSW/Vvv1vbMmabGYHPSnvoO9M18Ga7tRfM8J36gU1hPe221OjaB2jntqNUWxrqYPikElIXdAx+g7lgR2jhyNI2XWMf+ZVkbUKzgitvTjoONdh4Mb+TE7+KJikXQehE/Vx9XwvDoGW9hf+rJ1kjOPQBaDfCqEfmPrJB1LGN5YZRpG3OD5Ghwz01vwwLRp4rVIziIgpycAxSsUgIqYEg4iZ1gsiSiUXRNy0WuAopVgQEVNaoYuxSiqIiGmlIKLmCgXeRqkTOGKuTODgaZXQRUMhErrhKDRCxyAcGlv+UmC4QphCDeQBcIENAhXofDjwOGAaAn4hGmJZXIdCgbcxKZZfeEYbNLMjUS3wBhYF82uqgfIA55Czbpg1hKGEmDXVSzXR7Vi6V9llTvR0FBZU8XhwM1Ev6IpuLHTo/JogPUuMbrb0XsEOvdwpOFcbW8Te8mouNlQAQWnglL3lsJPQSPhLEnk9j0RmsBJSCAeLBe7YCfL8aJDWYD/40QJd+t4YYP+J/gAOe0vOmUEnesWBALjvj7GeUuxLQ6/SG/+JWKM2AOPrj3DoOY671hFqxYa9xp7ndZR2iMNAdoZLKNVaA5vYcqye1bYcN9Sx3kJqDEOpURqeb/tx3BNs6e3fLMuqfiLFynj7Oynz9u3CaEjZ0Kd4nW9F2FNVVivjIf6Dfi6MQ84Lmj1JsoVx+to14F+X9OlPN69YAlcGHpbQx6w7LKGnJ7SHRXhloFE7a0WfJ8Mim5KPuJyVYY8a0hFdDqvO6K3C/g9KGRKOhsvKRv1iVjbqxWVlo8FA3hiOWkPeHI7aswhcxgHxwaPR6BFnGAfI5L2NY4T5wMZhsnhv1qg3m/Oe47fhp9xfedo+NoO1HVRAIWaDCiQEjm3LfMDRlQzD1pWNw9aVjkPRlTZ0HxcX/aTZlhzYfTtiZkf3JXOS1wl76NPn8Hn3P+RfMjo33ik8dSrUjAYp1IxWUqgZrfy5Zjy5cw3mNfi8Ax4JPflptpE9ZwXk8WSz5yMxWDiPSpSepfTuN10mHN33Cw6E/SWBHI2RIz9J2vw56/iPF2tKH82e68PFqZDOxjh1a0LGSUkRRIwVj1hP8v2C1oQh8P3FoAIfaTFjBEweOEDU1Ufak56/oO20+wQtVf4Lw2FhsFwZbUrKHTv5bsu6rZKDEAGrX8Cj2Oc5hGudpdCxXV427IDjH6dl56s+WFJEe0d2t+pDgraqijbfn7sWuz3mGMetgi/3FGTSkl4YHzfMt1d/p6Qly/Yxe8p+fs0z4Nf/DK3wyXxWmcpqslhlAqvJXbVp64yMVZusKvNUTYqqzE61iemVOakyHZ2biU4noar8U5V6aozpGZa0zoyea0PPMKC/y3rWmc5qu1ltNOst5nnmssJWnmMoq63kaRNZbR/rjWOdZaw2i1/CJn5Bg/hFrOFbmsK3tYNvbgTfMi+72vwdHaAsr/txfv44P297fkr8WK1hq/Nqv8emvdKhvdacvcaX1Viy893Yq4zY6z1Yhf16rfM633Sd9ltVVqveZdUarMrWL22rvpyj+hJm6i191NtaqDd3T/+PA/rkmX77F08jnYbdJQAA\\\"}!../../../../node_modules/@vanilla-extract/webpack-plugin/extracted.js\"\nimport \"../packages/uikit/src/css/sprinkles.css.ts.vanilla.css!=!../../../../node_modules/@vanilla-extract/webpack-plugin/virtualFileLoader/dist/vanilla-extract-webpack-plugin-virtualFileLoader.cjs.js?{\\\"fileName\\\":\\\"../packages/uikit/src/css/sprinkles.css.ts.vanilla.css\\\",\\\"source\\\":\\\"#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\\\"}!../../../../node_modules/@vanilla-extract/webpack-plugin/extracted.js\"\nimport \"../packages/uikit/src/ui-wallets/WalletModal.css.ts.vanilla.css!=!../../../../node_modules/@vanilla-extract/webpack-plugin/virtualFileLoader/dist/vanilla-extract-webpack-plugin-virtualFileLoader.cjs.js?{\\\"fileName\\\":\\\"../packages/uikit/src/ui-wallets/WalletModal.css.ts.vanilla.css\\\",\\\"source\\\":\\\"QGtleWZyYW1lcyBfM3A4aTVnMCB7CiAgMCUgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDAlOwogIH0KICA1MCUgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDEwMCU7CiAgfQogIDEwMCUgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDAlOwogIH0KfQouXzNwOGk1ZzIgewogIGFuaW1hdGlvbjogXzNwOGk1ZzAgM3MgZWFzZSBpbmZpbml0ZTsKICBiYWNrZ3JvdW5kLXNpemU6IDQwMCUgNDAwJTsKfQouXzNwOGk1ZzQgewogIGRpc3BsYXk6IGZsZXg7Cn0KLl8zcDhpNWc1IHsKICB3aWR0aDogMTAwJTsKICBtYXJnaW4tYm90dG9tOiAwOwp9Ci5fM3A4aTVnNiB7CiAgbWF4LXdpZHRoOiAxMDAlOwp9Ci5fM3A4aTVnNyB7CiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyIDFmciAxZnI7CiAgcm93LWdhcDogMTBweDsKICBjb2x1bW4tZ2FwOiA4cHg7Cn0KLl8zcDhpNWc4IHsKICB3aWR0aDogNTBweDsKICBoZWlnaHQ6IDUwcHg7CiAgYm9yZGVyLXJhZGl1czogMTJweDsKfQpAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA4NTJweCkgewogIC5fM3A4aTVnNSB7CiAgICBoZWlnaHQ6IDQ5MHB4OwogIH0KfQpAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NzZweCkgewogIC5fM3A4aTVnNiB7CiAgICBtYXgtd2lkdGg6IDM2MHB4OwogIH0KICAuXzNwOGk1ZzcgewogICAgcm93LWdhcDogMjRweDsKICAgIGNvbHVtbi1nYXA6IDE2cHg7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7CiAgfQp9CkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDk2OHB4KSB7CiAgLl8zcDhpNWc1IHsKICAgIHdpZHRoOiA3OTJweDsKICB9CiAgLl8zcDhpNWc2IHsKICAgIG1heC13aWR0aDogNDA4cHg7CiAgfQogIC5fM3A4aTVnNyB7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnIgMWZyOwogIH0KfQ==\\\"}!../../../../node_modules/@vanilla-extract/webpack-plugin/extracted.js\"\nexport var desktopWalletSelectionClass = '_3p8i5g6';\nexport var modalWrapperClass = '_3p8i5g5 _3p8i5g4';\nexport var promotedGradientClass = 'bd70ut3aj _3p8i5g2';\nexport var walletIconClass = '_3p8i5g8';\nexport var walletSelectWrapperClass = '_3p8i5g7';","import { usePreloadImages } from '@pulsex/hooks'\nimport { useTranslation } from '@pulsex/localization'\nimport {\n AtomBox,\n Button,\n Heading,\n Image,\n LinkExternal,\n ModalV2,\n ModalV2Props,\n ModalWrapper,\n MoreHorizontalIcon,\n SvgProps,\n Tab,\n TabMenu,\n Text,\n WarningIcon\n} from '..'\nimport { atom, useAtom } from 'jotai'\nimport { lazy, PropsWithChildren, Suspense, useMemo, useState } from 'react'\nimport { isMobile } from 'react-device-detect'\nimport { StepIntro } from './components/Intro'\nimport {\n desktopWalletSelectionClass,\n modalWrapperClass,\n walletIconClass,\n promotedGradientClass,\n walletSelectWrapperClass,\n} from './WalletModal.css'\n\nconst Qrcode = lazy(() => import('./components/QRCode'))\n\ntype LinkOfTextAndLink = string | { text: string; url: string }\n\ntype DeviceLink = {\n desktop?: LinkOfTextAndLink\n mobile?: LinkOfTextAndLink\n}\n\ntype LinkOfDevice = string | DeviceLink\n\nexport type WalletConfigV2 = {\n id: string\n title: string\n icon: string | React.FC>\n connectorId: T\n deepLink?: string\n installed?: boolean\n guide?: LinkOfDevice\n downloadLink?: LinkOfDevice\n mobileOnly?: boolean\n qrCode?: () => Promise\n}\n\ninterface WalletModalV2Props extends ModalV2Props {\n wallets: WalletConfigV2[]\n login: (connectorId: T) => Promise\n docLink: string\n docText: string\n}\n\nexport class WalletConnectorNotFoundError extends Error {}\n\nexport class WalletSwitchChainError extends Error {}\n\nconst errorAtom = atom('')\n\nconst selectedWalletAtom = atom | null>(null)\n\nexport function useSelectedWallet() {\n // @ts-ignore\n return useAtom | null>(selectedWalletAtom)\n}\n\n// const TabContainer = ({ children, docLink, docText }: PropsWithChildren<{ docLink: string; docText: string }>) => {\n// const [index, setIndex] = useState(0)\n// const { t } = useTranslation()\n\n// return (\n// \n// \n// \n// {t('Connect Wallet')}\n// \n// \n// \n// {index === 0 && children}\n// {index === 1 && }\n// \n// \n// )\n// }\n\nconst MOBILE_DEFAULT_DISPLAY_COUNT = 6\n\nfunction MobileModal({\n wallets,\n connectWallet,\n docLink,\n docText,\n}: Pick, 'wallets' | 'docLink' | 'docText'> & {\n connectWallet: (wallet: WalletConfigV2) => void\n}) {\n const { t } = useTranslation()\n\n const [selected] = useSelectedWallet()\n const [error] = useAtom(errorAtom)\n\n const installedWallets: WalletConfigV2[] = wallets.filter((w) => w.installed)\n const walletsToShow: WalletConfigV2[] = wallets.filter((w) => {\n if (installedWallets.length) {\n return w.installed\n }\n return w.installed !== false || w.deepLink\n })\n\n return (\n \n {error ? (\n \n {selected && typeof selected.icon === 'string' && }\n
    \n \n
    \n
    \n ) : (\n \n {t(\n 'Start by connecting with one of the wallets below. Be sure to store your private keys or seed phrase securely. Never share them with anyone.',\n )}\n \n )}\n \n {\n connectWallet(wallet)\n if (wallet.deepLink && wallet.installed === false) {\n window.open(wallet.deepLink)\n }\n }}\n />\n \n \n \n \n {t('Haven’t got a crypto wallet yet?')}\n \n \n \n \n \n )\n}\n\nfunction WalletSelect({\n wallets,\n onClick,\n displayCount = 6,\n}: {\n wallets: WalletConfigV2[]\n onClick: (wallet: WalletConfigV2) => void\n displayCount?: number\n}) {\n const { t } = useTranslation()\n const [showMore, setShowMore] = useState(false)\n const walletDisplayCount = wallets.length > displayCount ? displayCount - 1 : displayCount\n const walletsToShow = showMore ? wallets : wallets.slice(0, walletDisplayCount)\n const [selected] = useSelectedWallet()\n return (\n \n {walletsToShow.map((wallet) => {\n const isImage = typeof wallet.icon === 'string'\n const Icon = wallet.icon\n\n return (\n onClick(wallet)}\n >\n \n \n {isImage ? (\n \n ) : (\n \n )}\n {wallet.id === selected?.id && (\n \n )}\n \n \n \n {wallet.title}\n \n \n )\n })}\n {!showMore && wallets.length > walletDisplayCount && (\n \n \n \n )}\n \n )\n}\n\nexport const walletLocalStorageKey = 'wallet'\n\nconst lastUsedWalletNameAtom = atom('')\n\nlastUsedWalletNameAtom.onMount = (set) => {\n const preferred = localStorage?.getItem(walletLocalStorageKey)\n if (preferred) {\n set(preferred)\n }\n}\n\nfunction sortWallets(wallets: WalletConfigV2[], lastUsedWalletName: string | null) {\n const sorted = [...wallets].sort((a, b) => {\n if (a.installed === b.installed) return 0\n return a.installed === true ? -1 : 1\n })\n\n if (!lastUsedWalletName) {\n return sorted\n }\n const foundLastUsedWallet = wallets.find((w) => w.title === lastUsedWalletName)\n if (!foundLastUsedWallet) return sorted\n return [foundLastUsedWallet, ...sorted.filter((w) => w.id !== foundLastUsedWallet.id)]\n}\n\nfunction DesktopModal({\n wallets: wallets_,\n connectWallet,\n docLink,\n docText,\n}: Pick, 'wallets' | 'docLink' | 'docText'> & {\n connectWallet: (wallet: WalletConfigV2) => void\n}) {\n const wallets: WalletConfigV2[] = wallets_.filter((w) => {\n return w.installed !== false || (!w.installed && (w.guide || w.downloadLink || w.qrCode))\n })\n\n const [selected] = useSelectedWallet()\n const [error] = useAtom(errorAtom)\n const [qrCode, setQrCode] = useState(undefined)\n const { t } = useTranslation()\n\n const connectToWallet = (wallet: WalletConfigV2) => {\n connectWallet(wallet)\n }\n\n return (\n <>\n \n \n \n {t('Connect Wallet')}\n \n \n {t(\n 'Start by connecting with one of the wallets below. Be sure to store your private keys or seed phrase securely. Never share them with anyone.',\n )}\n \n \n {\n connectToWallet(w)\n setQrCode(undefined)\n if (w.qrCode) {\n w.qrCode().then((uri) => {\n setQrCode(uri)\n })\n }\n }}\n />\n \n \n \n {!selected && }\n {selected && selected.installed !== false && (\n <>\n {/* {typeof selected.icon === 'string' && } */}\n \n {t('Opening')} {selected.title}\n \n {error ? (\n connectToWallet(selected)} />\n ) : (\n {t('Please confirm in %wallet%', { wallet: selected.title })}\n )}\n \n )}\n {selected && selected.installed === false && }\n \n \n \n )\n}\n\nexport function WalletModalV2(props: WalletModalV2Props) {\n const { wallets: _wallets, login, docLink, docText, ...rest } = props\n\n const [lastUsedWalletName] = useAtom(lastUsedWalletNameAtom)\n\n const wallets = useMemo(() => sortWallets(_wallets, lastUsedWalletName), [_wallets, lastUsedWalletName])\n const [, setSelected] = useSelectedWallet()\n const [, setError] = useAtom(errorAtom)\n const { t } = useTranslation()\n\n const imageSources = useMemo(\n () =>\n wallets\n .map((w) => w.icon)\n .filter((icon) => typeof icon === 'string')\n .concat('') as string[],\n [wallets],\n )\n\n usePreloadImages(imageSources.slice(0, MOBILE_DEFAULT_DISPLAY_COUNT))\n\n const connectWallet = (wallet: WalletConfigV2) => {\n setSelected(wallet)\n setError('')\n if (wallet.installed !== false) {\n login(wallet.connectorId)\n .then((v) => {\n if (v) {\n localStorage.setItem(walletLocalStorageKey, wallet.title)\n }\n })\n .catch((err) => {\n if (err instanceof WalletConnectorNotFoundError) {\n setError(t('no provider found'))\n } else if (err instanceof WalletSwitchChainError) {\n setError(err.message)\n } else {\n setError(t('Error connecting, please authorize wallet to access.'))\n }\n })\n }\n }\n\n return (\n \n \n \n {/* \n {isMobile ? (\n \n ) : (\n \n )}\n */}\n {isMobile ? (\n \n ) : (\n \n )}\n \n \n \n )\n}\n\nconst Intro = ({ docLink, docText }: { docLink: string; docText: string }) => {\n const { t } = useTranslation()\n return (\n <>\n {/* \n {t('Haven’t got a wallet yet?')}\n */}\n {/* */}\n \n \n )\n}\n\nconst NotInstalled = ({ wallet, qrCode }: { wallet: WalletConfigV2; qrCode?: string }) => {\n const { t } = useTranslation()\n return (\n <>\n \n {t('%wallet% is not installed', { wallet: wallet.title })}\n \n {qrCode && (\n \n \n \n \n \n )}\n {!qrCode && (\n \n {t('Please install the %wallet% browser extension to connect to %wallet%.', {\n wallet: wallet.title,\n })}\n \n )}\n {wallet.guide && (\n \n )}\n {wallet.downloadLink && (\n \n )}\n \n )\n}\n\nconst ErrorMessage = ({ message }: { message: string }) => (\n \n {message}\n \n)\n\nconst ErrorContent = ({ onRetry, message }: { onRetry: () => void; message: string }) => {\n const { t } = useTranslation()\n return (\n <>\n \n \n \n )\n}\n\nconst getDesktopLink = (linkDevice: LinkOfDevice) =>\n typeof linkDevice === 'string'\n ? linkDevice\n : typeof linkDevice.desktop === 'string'\n ? linkDevice.desktop\n : linkDevice.desktop?.url\n\nconst getDesktopText = (linkDevice: LinkOfDevice, fallback: string) =>\n typeof linkDevice === 'string'\n ? fallback\n : typeof linkDevice.desktop === 'string'\n ? fallback\n : linkDevice.desktop?.text ?? fallback\n","import { Token } from '@pulsex/sdk'\nimport { ChainId } from '@pulsex/chains'\nimport { Address } from 'viem'\n\n// a list of tokens by chain\nexport type ChainMap = {\n readonly [chainId in ChainId]: T\n}\n\nexport type ChainTokenList = ChainMap\n\nexport type TranslatableText =\n | string\n | {\n key: string\n data?: {\n [key: string]: string | number\n }\n }\n\nexport interface SerializedToken {\n chainId: number\n address: Address\n decimals: number\n symbol: string\n name?: string\n projectLink?: string\n}\n\nexport enum PoolIds {\n poolBasic = 'poolBasic',\n poolUnlimited = 'poolUnlimited',\n}\n\nexport enum PoolCategory {\n 'COMMUNITY' = 'Community',\n 'CORE' = 'Core',\n 'PULSE' = 'Pulse', // Pools using native PLS behave differently than pools using a token\n 'AUTO' = 'Auto',\n}\n\ninterface FarmConfigBaseProps {\n pid: number\n lpSymbol: string\n lpAddress: Address\n multiplier?: string\n protocol: string\n isCommunity?: boolean\n dual?: {\n rewardPerBlock: number\n earnLabel: string\n endBlock: number\n }\n}\n\nexport interface SerializedFarmConfig extends FarmConfigBaseProps {\n token: SerializedToken\n quoteToken: SerializedToken\n}\n\nexport interface DeserializedFarmConfig extends FarmConfigBaseProps {\n token: Token\n quoteToken: Token\n}\n\ninterface PoolConfigBaseProps {\n poolId: number\n contractAddress: Address\n poolCategory: PoolCategory\n tokenPerBlock: string\n sortOrder?: number\n harvest?: boolean\n isFinished?: boolean\n enableEmergencyWithdraw?: boolean\n}\n\nexport interface SerializedPoolConfig extends PoolConfigBaseProps {\n earningToken: SerializedToken\n stakingToken: SerializedToken\n}\n\nexport interface DeserializedPoolConfig extends PoolConfigBaseProps {\n earningToken: Token\n stakingToken: Token\n}\n\nexport type Images = {\n lg: string\n md: string\n sm: string\n ipfs?: string\n}\n\nexport type PageMeta = {\n title: string\n description?: string\n image?: string\n}\n\nexport const FetchStatus = {\n Idle: 'idle',\n Fetching: 'loading',\n Fetched: 'success',\n Failed: 'error',\n} as const\n\nexport type TFetchStatus = (typeof FetchStatus)[keyof typeof FetchStatus]\n","var __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\n\nexport { __async };\n","import { __async } from '../chunk-MYWZT2KK.mjs';\nimport { ConnectorNotFoundError } from 'wagmi';\nimport { InjectedConnector } from 'wagmi/connectors/injected';\nimport 'wagmi/window';\nimport { UserRejectedRequestError, ResourceUnavailableRpcError, getAddress } from 'viem';\n\nfunction getTrustWalletProvider() {\n var _a;\n const isTrustWallet = (ethereum) => {\n const trustWallet = !!ethereum.isTrust;\n return trustWallet;\n };\n const injectedProviderExist = typeof window !== \"undefined\" && typeof window.ethereum !== \"undefined\";\n if (!injectedProviderExist) {\n return;\n }\n if (isTrustWallet(window.ethereum)) {\n return window.ethereum;\n }\n if ((_a = window.ethereum) == null ? void 0 : _a.providers) {\n return window.ethereum.providers.find(isTrustWallet);\n }\n return window.trustwallet;\n}\nvar TrustWalletConnector = class extends InjectedConnector {\n constructor({\n chains,\n options: _options\n } = {}) {\n var _a, _b;\n const options = {\n name: \"Trust Wallet\",\n shimDisconnect: (_a = _options == null ? void 0 : _options.shimDisconnect) != null ? _a : false,\n shimChainChangedDisconnect: (_b = _options == null ? void 0 : _options.shimChainChangedDisconnect) != null ? _b : true\n };\n super({\n chains,\n options\n });\n this.id = \"trustWallet\";\n }\n handleFailedConnect(error) {\n if (this.isUserRejectedRequestError(error)) {\n throw new UserRejectedRequestError(error);\n }\n if (error.code === -32002) {\n throw new ResourceUnavailableRpcError(error);\n }\n throw error;\n }\n connect() {\n return __async(this, arguments, function* ({ chainId } = {}) {\n var _a, _b, _c, _d;\n try {\n const provider = yield this.getProvider();\n if (!provider) {\n throw new ConnectorNotFoundError();\n }\n if (provider.on) {\n provider.on(\"accountsChanged\", this.onAccountsChanged);\n provider.on(\"chainChanged\", this.onChainChanged);\n provider.on(\"disconnect\", this.onDisconnect);\n }\n this.emit(\"message\", { type: \"connecting\" });\n let account = null;\n if (((_a = this.options) == null ? void 0 : _a.shimDisconnect) && !((_b = this.storage) == null ? void 0 : _b.getItem(this.shimDisconnectKey))) {\n account = yield this.getAccount().catch(() => null);\n const isConnected = !!account;\n if (isConnected) {\n try {\n yield provider.request({\n method: \"wallet_requestPermissions\",\n params: [{ eth_accounts: {} }]\n });\n account = yield this.getAccount();\n } catch (error) {\n if (this.isUserRejectedRequestError(error)) {\n throw new UserRejectedRequestError(error);\n }\n }\n }\n }\n if (!account) {\n const accounts = yield provider.request({\n method: \"eth_requestAccounts\"\n });\n account = getAddress(accounts[0]);\n }\n let id = yield this.getChainId();\n let unsupported = this.isChainUnsupported(id);\n if (chainId && id !== chainId) {\n const chain = yield this.switchChain(chainId);\n id = chain.id;\n unsupported = this.isChainUnsupported(id);\n }\n if ((_c = this.options) == null ? void 0 : _c.shimDisconnect) {\n (_d = this.storage) == null ? void 0 : _d.setItem(this.shimDisconnectKey, true);\n }\n return { account, chain: { id, unsupported }, provider };\n } catch (error) {\n this.handleFailedConnect(error);\n }\n });\n }\n getProvider() {\n return __async(this, null, function* () {\n return getTrustWalletProvider();\n });\n }\n};\n\nexport { TrustWalletConnector, getTrustWalletProvider };\n","import { ChainId } from '@pulsex/chains'\nimport BigNumber from 'bignumber.js'\nimport { getFullDecimalMultiplier } from '@pulsex/utils/getFullDecimalMultiplier'\n\nBigNumber.config({\n EXPONENTIAL_AT: 1000,\n DECIMAL_PLACES: 80,\n})\n\nexport const PULSECHAIN_BLOCK_TIME = 10\nexport const SECOND = 1\n\nexport const BASE_PULSECHAIN_SCAN_URLS = {\n [ChainId.PULSECHAIN]: 'https://otter.pulsechain.com',\n [ChainId.PULSECHAIN_TESTNET]: 'https://scan.v4.testnet.pulsechain.com',\n}\n\n// INC_PER_SECOND details\n// 1 INC is minted per second\nexport const INC_PER_SECOND = 1\nexport const SECONDS_PER_YEAR = 31536000\nexport const INC_PER_YEAR = INC_PER_SECOND * SECONDS_PER_YEAR\nexport const BASE_PULSECHAIN_SCAN_URL = BASE_PULSECHAIN_SCAN_URLS[ChainId.PULSECHAIN]\nexport const DEFAULT_TOKEN_DECIMAL = getFullDecimalMultiplier(18)\nexport const DEFAULT_GAS_LIMIT = 375000\nexport const IPFS_GATEWAY = 'https://ipfs.io/ipfs'\nexport const DEFAULT_VERSION = 1\nexport const projectId = 'aa241e445efe7ebf5d557e2441eccc0f'\n","import { TrustWalletConnector } from '@pulsex/wagmi/connectors/trustWallet'\nimport { CHAINS } from '@pulsex/chains'\nimport { configureChains, createConfig, createStorage } from 'wagmi'\nimport memoize from 'lodash/memoize'\nimport { InjectedConnector } from 'wagmi/connectors/injected'\nimport { MetaMaskConnector } from 'wagmi/connectors/metaMask'\nimport { WalletConnectConnector } from 'wagmi/connectors/walletConnect'\nimport { LedgerConnector } from 'wagmi/connectors/ledger'\nimport { jsonRpcProvider } from 'wagmi/providers/jsonRpc'\nimport { projectId } from 'config'\n\nexport const { publicClient, chains } = configureChains(\n CHAINS,\n [\n jsonRpcProvider({\n rpc: (chain) => {\n return { http: chain.rpcUrls.default.http[0] }\n },\n }),\n ],\n {\n batch: {\n multicall: {\n batchSize: 1024 * 25,\n wait: 16,\n },\n },\n pollingInterval: 6_000,\n },\n)\n\nexport const injectedConnector = new InjectedConnector({\n chains,\n options: {\n shimDisconnect: false,\n },\n})\n\nexport const walletConnectConnector = new WalletConnectConnector({\n chains,\n options: {\n projectId,\n showQrModal: true,\n },\n})\n\nexport const walletConnectNoQrCodeConnector = new WalletConnectConnector({\n chains,\n options: {\n showQrModal: false,\n projectId,\n },\n})\n\nexport const metaMaskConnector = new MetaMaskConnector({\n chains,\n options: {\n shimDisconnect: false,\n },\n})\n\nconst ledgerConnector = new LedgerConnector({\n chains,\n options: {\n projectId,\n },\n})\n\nexport const trustWalletConnector = new TrustWalletConnector({\n chains,\n options: {\n shimDisconnect: false,\n shimChainChangedDisconnect: true,\n },\n})\n\nexport const noopStorage = {\n getItem: (_key) => '',\n setItem: (_key, _value) => null,\n removeItem: (_key) => null,\n}\n\nexport const wagmiConfig = createConfig({\n storage: createStorage({\n storage: typeof window !== 'undefined' ? window.localStorage : noopStorage,\n key: 'wagmi_v1.1',\n }),\n autoConnect: false,\n publicClient,\n connectors: [metaMaskConnector, injectedConnector, walletConnectConnector, ledgerConnector, trustWalletConnector],\n})\n\nexport const CHAIN_IDS = chains.map((c) => c.id)\n\nexport const isChainSupported = memoize((chainId: number) => CHAIN_IDS.includes(chainId))\nexport const isChainTestnet = memoize((chainId: number) => chains.find((c) => c.id === chainId)?.testnet)\n","import { ChainId } from '@pulsex/chains'\nimport memoize from 'lodash/memoize'\n\nexport const CHAIN_QUERY_NAME = {\n [ChainId.PULSECHAIN]: 'pulsechain',\n [ChainId.PULSECHAIN_TESTNET]: 'pulsechain-testnet',\n} as const;\n\nconst CHAIN_QUERY_NAME_TO_ID = Object.entries(CHAIN_QUERY_NAME).reduce((acc, [chainId, chainName]) => {\n return {\n [chainName.toLowerCase()]: chainId as unknown as ChainId,\n ...acc,\n }\n}, {} as Record)\n\nexport const getChainId = memoize((chainName: string) => {\n if (!chainName) return undefined\n return CHAIN_QUERY_NAME_TO_ID[chainName.toLowerCase()] ? +CHAIN_QUERY_NAME_TO_ID[chainName.toLowerCase()] : undefined\n})\n","import { ChainId } from '@pulsex/chains'\n\nexport const masterChefAddresses = {\n [ChainId.PULSECHAIN]: '0xB2Ca4A66d3e57a5a9A12043B6bAD28249fE302d4',\n [ChainId.PULSECHAIN_TESTNET]: '0x3b34Fff74497cA21771ce9a0c11cb07490686A58',\n} as const\n","export const equalsIgnoreCase = (a?: string, b?: string) => {\n if (!a || !b) return false\n return a.localeCompare(b, undefined, { sensitivity: 'accent' }) === 0\n}\n","import BN from 'bignumber.js'\nimport { BIG_TEN } from '@pulsex/utils/bigNumber'\nimport memoize from 'lodash/memoize'\n\nexport const getFullDecimalMultiplier = memoize((decimals: number): BN => {\n return BIG_TEN.pow(decimals)\n})\n","import { BIG_ONE, BIG_TWO, BIG_ZERO } from '@pulsex/utils/bigNumber'\nimport BN from 'bignumber.js'\nimport { equalsIgnoreCase } from '@pulsex/utils/equalsIgnoreCase'\nimport toNumber from 'lodash/toNumber'\nimport { SerializedFarmPublicData, FarmData } from './types'\nimport { getFullDecimalMultiplier } from './getFullDecimalMultiplier'\n\n// Find USD price for token\n// either via direct calculation if farm is X-PLS or X-USD\n// or via quoteTokenFarm which is quoteToken-PLS or quoteToken-USD farm\nexport const getFarmBaseTokenPrice = (\n farm: SerializedFarmPublicData,\n quoteTokenFarm: SerializedFarmPublicData,\n nativePriceUSD: BN,\n wNative: string,\n stable: string,\n quoteTokenInUsd,\n): BN => {\n const hasTokenPriceVsQuote = Boolean(farm.tokenPriceVsQuote)\n\n if (farm.quoteToken.symbol === stable) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return hasTokenPriceVsQuote ? new BN(farm.tokenPriceVsQuote!) : BIG_ONE\n }\n\n if (farm.quoteToken.symbol === wNative) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return hasTokenPriceVsQuote ? nativePriceUSD.times(new BN(farm.tokenPriceVsQuote!)) : BIG_ONE\n }\n\n // We can only calculate profits without a quoteTokenFarm for USD/PLS farms\n if (!quoteTokenFarm) {\n return BIG_ZERO\n }\n\n // Possible alternative farm quoteTokens:\n // If the farm's quote token isn't USD or WPLS, we then use the quote token, of the original farm's quote token\n if (quoteTokenFarm.quoteToken.symbol === wNative || quoteTokenFarm.quoteToken.symbol === stable) {\n return hasTokenPriceVsQuote && quoteTokenInUsd\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n ? new BN(farm.tokenPriceVsQuote!).times(quoteTokenInUsd)\n : BIG_ONE\n }\n\n // Catch in case token does not have immediate or once-removed USD/WPLS quoteToken\n return BIG_ZERO\n}\n\nexport const getFarmQuoteTokenPrice = (\n farm: SerializedFarmPublicData,\n quoteTokenFarm: SerializedFarmPublicData,\n nativePriceUSD: BN,\n wNative: string,\n stable: string,\n): BN => {\n if (farm.quoteToken.symbol === stable) {\n return BIG_ONE\n }\n\n if (farm.quoteToken.symbol === wNative) {\n return nativePriceUSD\n }\n\n if (!quoteTokenFarm) {\n return BIG_ZERO\n }\n\n if (quoteTokenFarm.quoteToken.symbol === wNative) {\n return quoteTokenFarm.tokenPriceVsQuote\n ? nativePriceUSD.times(new BN(quoteTokenFarm.tokenPriceVsQuote))\n : BIG_ZERO\n }\n\n if (quoteTokenFarm.quoteToken.symbol === stable) {\n return quoteTokenFarm.tokenPriceVsQuote ? new BN(quoteTokenFarm.tokenPriceVsQuote) : BIG_ZERO\n }\n\n return BIG_ZERO\n}\n\nconst getFarmFromTokenAddress = (\n farms: SerializedFarmPublicData[],\n tokenAddress: string,\n preferredQuoteTokens?: string[],\n): SerializedFarmPublicData => {\n const farmsWithTokenSymbol = farms.filter((farm) => equalsIgnoreCase(farm.token.address, tokenAddress))\n const filteredFarm = filterFarmsByQuoteToken(farmsWithTokenSymbol, preferredQuoteTokens)\n return filteredFarm\n}\n\nconst filterFarmsByQuoteToken = (\n farms: SerializedFarmPublicData[],\n preferredQuoteTokens: string[] = ['DAI', 'WPLS'],\n): SerializedFarmPublicData => {\n const preferredFarm = farms.find((farm) => {\n return preferredQuoteTokens.some((quoteToken) => {\n return farm.quoteToken.symbol === quoteToken\n })\n })\n return preferredFarm || farms[0]\n}\n\nexport const getStableLpTokenPrice = (\n lpTotalSupply: BN,\n tokenAmountTotal: BN,\n tokenPriceUsd: BN,\n quoteTokenAmountTotal: BN,\n quoteTokenInUsd: BN,\n decimals: number,\n) => {\n if (lpTotalSupply.isZero()) {\n return BIG_ZERO\n }\n const valueOfBaseTokenInFarm = tokenPriceUsd.times(tokenAmountTotal)\n const valueOfQuoteTokenInFarm = quoteTokenInUsd.times(quoteTokenAmountTotal)\n\n const liquidity = valueOfBaseTokenInFarm.plus(valueOfQuoteTokenInFarm)\n\n const totalLpTokens = lpTotalSupply.div(getFullDecimalMultiplier(decimals))\n\n return liquidity.div(totalLpTokens)\n}\n\nexport const getLpTokenPrice = (\n lpTotalSupply: BN,\n lpTotalInQuoteToken: BN,\n tokenAmountTotal: BN,\n tokenPriceBusd: BN,\n decimals: number,\n) => {\n // LP token price\n let lpTokenPrice = BIG_ZERO\n if (lpTotalSupply.gt(0) && lpTotalInQuoteToken.gt(0)) {\n // Total value of base token in LP\n const valueOfBaseTokenInFarm = tokenPriceBusd.times(tokenAmountTotal)\n // Double it to get overall value in LP\n const overallValueOfAllTokensInFarm = valueOfBaseTokenInFarm.times(BIG_TWO)\n // Divide total value of all tokens, by the number of LP tokens\n const totalLpTokens = lpTotalSupply.div(getFullDecimalMultiplier(decimals))\n lpTokenPrice = overallValueOfAllTokensInFarm.div(totalLpTokens)\n }\n\n return lpTokenPrice\n}\n\nexport type FarmWithPrices = FarmData & {\n tokenPriceUsd: string\n quoteTokenPriceUsd: string\n lpTokenPrice: string\n}\n\nconst isNativeFarm = (\n farm: FarmData,\n nativeStableLp: {\n address: string\n wNative: string\n stable: string\n },\n) => {\n const isLpFound = equalsIgnoreCase(farm.lpAddress, nativeStableLp.address)\n if (!isLpFound) {\n return (\n equalsIgnoreCase(farm.token.symbol, nativeStableLp.stable) &&\n equalsIgnoreCase(farm.quoteToken.symbol, nativeStableLp.wNative)\n )\n }\n return true\n}\n\nexport const getFarmsPrices = (\n farms: FarmData[],\n nativeStableLp: {\n address: string\n wNative: string\n stable: string\n },\n decimals: number,\n): FarmWithPrices[] => {\n if (!farms || !nativeStableLp || farms.length === 0) return []\n\n const nativeStableFarm = farms.find((farm) => isNativeFarm(farm, nativeStableLp))\n\n const isNativeFirst = nativeStableFarm?.token?.symbol === nativeStableLp.wNative\n\n const nativePriceUSD =\n nativeStableFarm && toNumber(nativeStableFarm?.tokenPriceVsQuote) !== 0\n ? isNativeFirst\n ? new BN(nativeStableFarm.tokenPriceVsQuote)\n : BIG_ONE.div(new BN(nativeStableFarm.tokenPriceVsQuote))\n : BIG_ZERO\n\n const farmsWithPrices = farms.map((farm) => {\n const quoteTokenFarm = getFarmFromTokenAddress(farms, farm.quoteToken.address, [\n nativeStableLp.wNative,\n nativeStableLp.stable,\n ])\n\n const quoteTokenPriceUsd = getFarmQuoteTokenPrice(\n farm,\n quoteTokenFarm,\n nativePriceUSD,\n nativeStableLp.wNative,\n nativeStableLp.stable,\n )\n\n const tokenPriceUsd = getFarmBaseTokenPrice(\n farm,\n quoteTokenFarm,\n nativePriceUSD,\n nativeStableLp.wNative,\n nativeStableLp.stable,\n quoteTokenPriceUsd,\n )\n\n const lpTokenPrice = getLpTokenPrice(\n new BN(farm.lpTotalSupply),\n new BN(farm.lpTotalInQuoteToken),\n new BN(farm.tokenAmountTotal),\n tokenPriceUsd,\n decimals,\n )\n\n return {\n ...farm,\n tokenPriceUsd: tokenPriceUsd.toString(),\n quoteTokenPriceUsd: quoteTokenPriceUsd.toString(),\n lpTokenPrice: lpTokenPrice.toString(),\n }\n })\n\n return farmsWithPrices\n}\n","import { Address, PublicClient } from 'viem'\nimport { ChainId } from '@pulsex/chains'\nimport chunk from 'lodash/chunk'\nimport { SerializedFarmPublicData, SerializedFarmConfig } from './types'\n\nconst abi = [\n {\n constant: true,\n inputs: [\n {\n name: '_owner',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n name: 'balance',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n] as const\n\nconst fetchFarmCalls = (farm: SerializedFarmPublicData, masterChefAddress: string) => {\n const { lpAddress, token, quoteToken } = farm\n return [\n // Balance of token in the LP contract\n {\n abi,\n address: token.address,\n functionName: 'balanceOf',\n args: [lpAddress],\n },\n // Balance of quote token on LP contract\n {\n abi,\n address: quoteToken.address,\n functionName: 'balanceOf',\n args: [lpAddress],\n },\n // Balance of LP tokens in the master chef contract\n {\n abi,\n address: lpAddress,\n functionName: 'balanceOf',\n args: [masterChefAddress as Address],\n },\n // Total supply of LP tokens\n {\n abi,\n address: lpAddress,\n functionName: 'totalSupply',\n },\n ] as const\n}\n\nexport const fetchPublicFarmsData = async (\n farms: SerializedFarmConfig[],\n chainId = ChainId.PULSECHAIN,\n provider: ({ chainId }: { chainId: ChainId }) => PublicClient,\n masterChefAddress: string,\n): Promise<[bigint, bigint, bigint, bigint][]> => {\n try {\n const farmCalls = farms.flatMap((farm) => fetchFarmCalls(farm, masterChefAddress))\n const chunkSize = farmCalls.length / farms.length\n const farmMultiCallResult = await provider({ chainId }).multicall({ contracts: farmCalls, allowFailure: false })\n return chunk(farmMultiCallResult, chunkSize) as [bigint, bigint, bigint, bigint][]\n } catch (error) {\n console.error('MasterChef Public Data error ', error)\n throw error\n }\n}\n","import { Address, PublicClient } from 'viem'\nimport BN from 'bignumber.js'\nimport { BIG_TWO, BIG_ZERO } from '@pulsex/utils/bigNumber'\nimport { ChainId } from '@pulsex/chains'\nimport { getFarmsPrices } from './farmPrices'\nimport { fetchPublicFarmsData } from './fetchPublicFarmData'\nimport { SerializedFarmConfig } from './types'\nimport { getFullDecimalMultiplier } from './getFullDecimalMultiplier'\n\nconst evmNativeStableLpMap = {\n [ChainId.PULSECHAIN]: {\n address: '0xE56043671df55dE5CDf8459710433C10324DE0aE',\n wNative: 'WPLS',\n stable: 'DAI',\n },\n [ChainId.PULSECHAIN_TESTNET]: {\n address: '0xA2D510bf42D2B9766DB186F44a902228E76ef262',\n wNative: 'WPLS',\n stable: 'tDAI',\n },\n}\n\nexport const getTokenAmount = (balance: BN, decimals: number) => {\n return balance.div(getFullDecimalMultiplier(decimals))\n}\n\nexport type FetchFarmsParams = {\n farms: SerializedFarmConfig[]\n provider: ({ chainId }: { chainId: ChainId }) => PublicClient\n isTestnet: boolean\n masterChefAddress: string\n chainId: ChainId\n totalAllocPoint: bigint\n}\n\nexport async function farmV2FetchFarms({\n farms,\n provider,\n isTestnet,\n masterChefAddress,\n chainId,\n totalAllocPoint,\n}: FetchFarmsParams) {\n\n const [poolInfos, lpDataResults] = await Promise.all([\n fetchMasterChefData(farms, isTestnet, provider, masterChefAddress),\n fetchPublicFarmsData(farms, chainId, provider, masterChefAddress),\n ])\n\n const lpData = lpDataResults.map(formatClassicFarmResponse)\n\n const farmsData = farms.map((farm, index) => {\n try {\n return {\n ...farm,\n ...(getClassicFarmsDynamicData({\n ...lpData[index],\n token0Decimals: farm.token.decimals,\n token1Decimals: farm.quoteToken.decimals,\n })),\n ...getFarmAllocation({\n allocPoint: poolInfos[index]?.allocPoint,\n totalAllocPoint,\n }),\n }\n } catch (error) {\n console.error(error, farm, index, {\n allocPoint: poolInfos[index]?.allocPoint,\n token0Decimals: farm.token.decimals,\n token1Decimals: farm.quoteToken.decimals,\n totalAllocPoint,\n })\n throw error\n }\n })\n\n const farmsDataWithPrices = getFarmsPrices(farmsData, evmNativeStableLpMap[chainId], 18)\n\n return farmsDataWithPrices\n}\n\nconst masterChefV2Abi = [\n {\n\t\tinputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n\t\tname: \"poolInfo\",\n\t\toutputs: [\n { internalType: \"contract IERC20\", name: \"lpToken\", type: \"address\" },\n\t\t\t{ internalType: \"uint256\", name: \"allocPoint\", type: \"uint256\" },\n\t\t\t{ internalType: \"uint256\", name: \"lastRewardTime\", type: \"uint256\" },\n\t\t\t{ internalType: \"uint256\", name: \"accIncPerShare\", type: \"uint256\" },\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\"\n\t},\n {\n\t\tinputs: [],\n\t\tname: \"poolLength\",\n\t\toutputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\"\n\t},\n {\n\t\tinputs: [],\n\t\tname: \"totalAllocPoint\",\n\t\toutputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\"\n\t},\n {\n\t\tinputs: [],\n\t\tname: \"incPerSecond\",\n\t\toutputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\"\n\t},\n] as const\n\nconst masterChefFarmCalls = (farm: SerializedFarmConfig, masterChefAddress: string) => {\n const { pid } = farm\n\n return pid || pid === 0\n ? ({\n abi: masterChefV2Abi,\n address: masterChefAddress as Address,\n functionName: 'poolInfo',\n args: [BigInt(pid)],\n }) as const\n : null\n}\n\nfunction notEmpty(value: TValue | null | undefined): value is TValue {\n return value !== null && value !== undefined\n}\n\nexport const fetchMasterChefData = async (\n farms: SerializedFarmConfig[],\n isTestnet: boolean,\n provider: ({ chainId }: { chainId: ChainId }) => PublicClient,\n masterChefAddress: string,\n) => {\n try {\n const masterChefCalls = farms.map((farm) => masterChefFarmCalls(farm, masterChefAddress))\n const masterChefAggregatedCalls = masterChefCalls.filter(notEmpty)\n\n const chainId = isTestnet ? ChainId.PULSECHAIN_TESTNET : ChainId.PULSECHAIN\n const masterChefMultiCallResult = await provider({ chainId }).multicall({\n contracts: masterChefAggregatedCalls,\n allowFailure: false,\n })\n\n let masterChefChunkedResultCounter = 0\n return masterChefCalls.map((masterChefCall) => {\n if (masterChefCall === null) {\n return null\n }\n const data = masterChefMultiCallResult[masterChefChunkedResultCounter]\n masterChefChunkedResultCounter++\n return {\n lpToken: data[0],\n allocPoint: data[1],\n lastRewardTime: data[2],\n accIncPerShare: data[3],\n }\n })\n } catch (error) {\n console.error('MasterChef Pool info data error', error)\n throw error\n }\n}\n\nexport const fetchMasterChefV2Data = async ({\n provider,\n isTestnet,\n masterChefAddress,\n}: {\n provider: ({ chainId }: { chainId: ChainId }) => PublicClient\n isTestnet: boolean\n masterChefAddress: Address\n}) => {\n try {\n const chainId = isTestnet ? ChainId.PULSECHAIN_TESTNET : ChainId.PULSECHAIN\n const [poolLength, totalAllocPoint, incPerSecond] = await provider({\n chainId,\n }).multicall({\n contracts: [\n {\n abi: masterChefV2Abi,\n address: masterChefAddress,\n functionName: 'poolLength',\n },\n {\n abi: masterChefV2Abi,\n address: masterChefAddress,\n functionName: 'totalAllocPoint',\n },\n {\n abi: masterChefV2Abi,\n address: masterChefAddress,\n functionName: 'incPerSecond',\n },\n ],\n allowFailure: false,\n })\n\n return {\n poolLength,\n totalAllocPoint,\n incPerSecond,\n }\n } catch (error) {\n console.error('Get MasterChef data error', error)\n throw error\n }\n}\n\nexport const fetchMasterChefFarmPoolLength = async (\n chainId: ChainId, \n provider: ({ chainId }: { chainId: ChainId }) => PublicClient,\n masterchefAddress: Address\n) => {\n try {\n const [poolLength] = await provider({\n chainId,\n }).multicall({\n contracts: [\n {\n abi: masterChefV2Abi,\n functionName: 'poolLength',\n address: masterchefAddress,\n },\n ],\n allowFailure: false,\n })\n\n return poolLength\n } catch (error) {\n console.error('Fetch MasterChef Farm Pool Length Error: ', error)\n return 0\n }\n}\n\ntype balanceResponse = bigint\n\nexport type ClassicLPData = [balanceResponse, balanceResponse, balanceResponse, balanceResponse]\n\ntype FormatClassicFarmResponse = {\n tokenBalanceLP: BN\n quoteTokenBalanceLP: BN\n lpTokenBalanceMC: BN\n lpTotalSupply: BN\n}\n\nconst formatClassicFarmResponse = (farmData: ClassicLPData): FormatClassicFarmResponse => {\n const [tokenBalanceLP, quoteTokenBalanceLP, lpTokenBalanceMC, lpTotalSupply] = farmData\n return {\n tokenBalanceLP: new BN(tokenBalanceLP.toString()),\n quoteTokenBalanceLP: new BN(quoteTokenBalanceLP.toString()),\n lpTokenBalanceMC: new BN(lpTokenBalanceMC.toString()),\n lpTotalSupply: new BN(lpTotalSupply.toString()),\n }\n}\n\ninterface FarmAllocationParams {\n allocPoint?: bigint\n isRegular?: boolean\n totalAllocPoint: bigint\n}\n\nconst getFarmAllocation = ({\n allocPoint,\n totalAllocPoint,\n}: FarmAllocationParams) => {\n const _allocPoint = allocPoint ? new BN(allocPoint.toString()) : BIG_ZERO\n const totalAlloc = totalAllocPoint\n const poolWeight = !!totalAlloc && !!_allocPoint ? _allocPoint.div(totalAlloc.toString()) : BIG_ZERO\n\n return {\n poolWeight: poolWeight.toString(),\n multiplier: !_allocPoint.isZero() ? `${+_allocPoint.div(10).toString()}X` : `0X`,\n }\n}\n\nconst getClassicFarmsDynamicData = ({\n lpTokenBalanceMC,\n lpTotalSupply,\n quoteTokenBalanceLP,\n tokenBalanceLP,\n token0Decimals,\n token1Decimals,\n}: FormatClassicFarmResponse & {\n token0Decimals: number\n token1Decimals: number\n lpTokenStakedAmount?: string\n}) => {\n // Raw amount of token in the LP, including those not staked\n const tokenAmountTotal = getTokenAmount(tokenBalanceLP, token0Decimals)\n const quoteTokenAmountTotal = getTokenAmount(quoteTokenBalanceLP, token1Decimals)\n\n // Ratio in % of LP tokens that are staked in the MC, vs the total number in circulation\n const lpTokenRatio =\n !lpTotalSupply.isZero() && !lpTokenBalanceMC.isZero() ? lpTokenBalanceMC.div(lpTotalSupply) : BIG_ZERO\n\n // // Amount of quoteToken in the LP that are staked in the MC\n const quoteTokenAmountMcFixed = quoteTokenAmountTotal.times(lpTokenRatio)\n\n // // Total staked in LP, in quote token value\n const lpTotalInQuoteToken = quoteTokenAmountMcFixed.times(BIG_TWO)\n\n return {\n tokenAmountTotal: tokenAmountTotal.toString(),\n quoteTokenAmountTotal: quoteTokenAmountTotal.toString(),\n lpTotalSupply: lpTotalSupply.toString(),\n lpTotalInQuoteToken: lpTotalInQuoteToken.toString(),\n tokenPriceVsQuote:\n !quoteTokenAmountTotal.isZero() && !tokenAmountTotal.isZero()\n ? quoteTokenAmountTotal.div(tokenAmountTotal).toString()\n : BIG_ZERO.toString(),\n lpTokenStakedAmount: lpTokenBalanceMC.toString(),\n }\n}\n","import { PublicClient, formatEther } from 'viem'\nimport { ChainId } from '@pulsex/chains'\nimport { masterChefAddresses } from './const'\nimport { farmV2FetchFarms, FetchFarmsParams, fetchMasterChefV2Data } from './fetchFarms'\n\nconst supportedChainId = [ChainId.PULSECHAIN, ChainId.PULSECHAIN_TESTNET]\n\nexport function createFarmFetcher(provider: ({ chainId }: { chainId: ChainId }) => PublicClient) {\n const fetchFarms = async (\n params: {\n isTestnet: boolean\n } & Pick,\n ) => {\n const { isTestnet, farms, chainId } = params\n const masterChefAddress = isTestnet ? masterChefAddresses[ChainId.PULSECHAIN_TESTNET] : masterChefAddresses[ChainId.PULSECHAIN]\n // Fetch public data\n const { poolLength, totalAllocPoint, incPerSecond } = await fetchMasterChefV2Data({\n isTestnet,\n provider,\n masterChefAddress,\n })\n const regularIncPerSecond = formatEther(incPerSecond)\n const farmsWithPrice = await farmV2FetchFarms({\n provider,\n masterChefAddress,\n isTestnet,\n chainId,\n farms: farms.filter((f) => !f.pid || poolLength > f.pid),\n totalAllocPoint,\n })\n\n return {\n farmsWithPrice,\n poolLength: Number(poolLength),\n regularIncPerSecond: +regularIncPerSecond,\n }\n }\n\n return {\n fetchFarms,\n isChainSupported: (chainId: ChainId) => supportedChainId.includes(chainId),\n supportedChainId,\n isTestnet: (chainId: ChainId) => ![ChainId.PULSECHAIN].includes(chainId),\n }\n}\n\nexport * from './apr'\nexport * from './farmsPriceHelpers'\nexport * from './types'\nexport * from './deserializeFarmUserData'\nexport * from './deserializeFarm'\nexport * from './filterFarmsByQuery'\nexport * from './fetchFarms'\n","import { ChainId, CHAINS } from '@pulsex/chains'\nimport { createPublicClient, http, fallback, PublicClient } from 'viem'\n\nexport const viemClients = CHAINS.reduce((prev, cur, index) => {\n return {\n ...prev,\n [cur.id]: createPublicClient({\n chain: cur,\n transport: fallback(\n (CHAINS[index].rpcUrls.default.http as string[]).map((url) =>\n http(url, {\n timeout: 55_000,\n }),\n ),\n {\n rank: false,\n },\n ),\n batch: {\n multicall: {\n batchSize: 1024 * 25,\n wait: 16,\n },\n },\n pollingInterval: 6_000,\n }),\n }\n}, {} as Record)\n\nexport const getViemClients = ({ chainId }: { chainId?: ChainId }) => {\n return viemClients[chainId]\n}\n","import { createAction } from '@reduxjs/toolkit'\nimport { ChainId } from '@pulsex/chains'\n\n// fired once when the app reloads but before the app renders\n// allows any updates to be applied to store data loaded from localStorage\nexport const updateVersion = createAction('global/updateVersion')\n\nexport const resetUserState = createAction<{ chainId: ChainId; newChainId?: ChainId }>('global/resetUserState')\n\nexport const toggleFarmTransactionModal = createAction<{\n showModal: boolean\n}>('transactions/toggleFarmTransactionModal')\n\nexport const pickFarmTransactionTx = createAction<{\n tx: string\n chainId: ChainId\n}>('transactions/pickFarmTransactionTx')\n","export const masterChefAbi = [\n {\n \"inputs\": [\n {\n \"internalType\": \"contract Incentive\",\n \"name\": \"_inc\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_incPerSecond\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_startTime\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"pid\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Deposit\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"pid\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"EmergencyWithdraw\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"pid\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Withdraw\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"MaxAllocPoint\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"inc\",\n \"outputs\": [\n {\n \"internalType\": \"contract Incentive\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"incPerSecond\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"maxIncPerSecond\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"poolInfo\",\n \"outputs\": [\n {\n \"internalType\": \"contract IERC20\",\n \"name\": \"lpToken\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"allocPoint\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"lastRewardTime\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"accIncPerShare\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"startTime\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalAllocPoint\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"userInfo\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"rewardDebt\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"poolLength\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_incPerSecond\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setIncPerSecond\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_allocPoint\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"contract IERC20\",\n \"name\": \"_lpToken\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"add\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_allocPoint\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"set\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_from\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_to\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getMultiplier\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_user\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"pendingInc\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"massUpdatePools\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"updatePool\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"deposit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"withdraw\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"emergencyWithdraw\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n] as const\n","import { ChainId } from '@pulsex/chains'\n\nexport default {\n router: {\n [ChainId.PULSECHAIN]: '0x98bf93ebf5c380C0e6Ae8e192A7e2AE08edAcc02',\n [ChainId.PULSECHAIN_TESTNET]: '0xDaE9dd3d1A52CfCe9d5F2fAC7fDe164D500E50f7',\n },\n multiCall: {\n [ChainId.PULSECHAIN]: '0xdc6ed7C2EE5ab7fd303334B34F7524Cbb463DE57',\n [ChainId.PULSECHAIN_TESTNET]: '0x083F559993227395009596f77496FDc48e84C69a',\n },\n masterChef: {\n [ChainId.PULSECHAIN]: '0xB2Ca4A66d3e57a5a9A12043B6bAD28249fE302d4',\n [ChainId.PULSECHAIN_TESTNET]: '0x3b34Fff74497cA21771ce9a0c11cb07490686A58',\n },\n plsxLab: {\n [ChainId.PULSECHAIN]: '0x3E3EC0af505D6458D18A3AA1E29A9d7f008dd98e',\n [ChainId.PULSECHAIN_TESTNET]: '0x959a437F1444DaDaC8aF997E71EAF0479c810267',\n },\n buyandburnV1: {\n [ChainId.PULSECHAIN]: '0xD46BD969d995A122AD5B803A45d309021A647B87',\n [ChainId.PULSECHAIN_TESTNET]: '0x7cD43983A963c62Add34694E83E896c5AfC3333f',\n },\n buyandburnV2: {\n [ChainId.PULSECHAIN]: '0xd6cA7ee047a6F45d20d2962E4394E070cF27724F',\n [ChainId.PULSECHAIN_TESTNET]: '0x3DdaBc2B4f5D0b74A28481eE6f42C67c495E0E5E',\n },\n} as const\n","import { ChainId } from '@pulsex/chains'\nimport { Address } from 'viem'\nimport addresses from 'config/constants/contracts'\n\nexport interface Addresses {\n [chainId: number]: Address\n}\n\nexport const getAddressFromMap = (address: Addresses, chainId?: number): Address => {\n return address[chainId] ? address[chainId] : address[ChainId.PULSECHAIN]\n}\n\nexport const getRouterAddress = (chainId?: number) => {\n return getAddressFromMap(addresses.router, chainId)\n}\nexport const getMasterChefAddress = (chainId?: number) => {\n return getAddressFromMap(addresses.masterChef, chainId)\n}\nexport const getMulticallAddress = (chainId?: number) => {\n return getAddressFromMap(addresses.multiCall, chainId)\n}\nexport const getPlsxLabAddress = (chainId?: number) => {\n return getAddressFromMap(addresses.plsxLab, chainId)\n}\nexport const getBuyAndBurnAddress = (protocol: string, chainId?: number) => {\n return getAddressFromMap(protocol === 'V1' ? addresses.buyandburnV1 : addresses.buyandburnV2, chainId)\n}\n","import BigNumber from 'bignumber.js'\nimport { ChainId } from '@pulsex/chains'\nimport { masterChefAbi } from 'config/abi/masterchef'\nimport { getMasterChefAddress } from 'utils/addressHelpers'\nimport { SerializedFarmConfig } from 'config/constants/types'\nimport { farmFetcher } from 'state/farms'\nimport { Address, erc20ABI } from 'wagmi'\nimport { publicClient } from 'utils/wagmi'\nimport { ContractFunctionResult } from 'viem'\n\nexport const fetchFarmUserAllowances = async (\n account: Address,\n farmsToFetch: SerializedFarmConfig[],\n chainId: number,\n proxyAddress?: Address,\n) => {\n const masterChefAddress = getMasterChefAddress(chainId)\n\n const lpAllowances = await publicClient({ chainId }).multicall({\n contracts: farmsToFetch.map((farm) => {\n const lpContractAddress = farm.lpAddress\n return {\n abi: erc20ABI,\n address: lpContractAddress,\n functionName: 'allowance',\n args: [account, proxyAddress || masterChefAddress] as const,\n } as const\n }),\n allowFailure: false,\n })\n\n const parsedLpAllowances = lpAllowances.map((lpBalance) => {\n return new BigNumber(lpBalance.toString()).toJSON()\n })\n\n return parsedLpAllowances\n}\n\nexport const fetchFarmUserTokenBalances = async (\n account: string,\n farmsToFetch: SerializedFarmConfig[],\n chainId: number,\n) => {\n const rawTokenBalances = await publicClient({ chainId }).multicall({\n contracts: farmsToFetch.map((farm) => {\n const lpContractAddress = farm.lpAddress\n return {\n abi: erc20ABI,\n address: lpContractAddress,\n functionName: 'balanceOf',\n args: [account as Address] as const,\n } as const\n }),\n allowFailure: false,\n })\n\n const parsedTokenBalances = rawTokenBalances.map((tokenBalance) => {\n return new BigNumber(tokenBalance.toString()).toJSON()\n })\n return parsedTokenBalances\n}\n\nexport const fetchFarmUserStakedBalances = async (\n account: string,\n farmsToFetch: SerializedFarmConfig[],\n chainId: number,\n) => {\n const masterChefAddress = getMasterChefAddress(chainId)\n\n const rawStakedBalances = (await publicClient({ chainId }).multicall({\n contracts: farmsToFetch.map((farm) => {\n return {\n abi: masterChefAbi,\n address: masterChefAddress,\n functionName: 'userInfo',\n args: [BigInt(farm.pid), account as Address] as const,\n } as const\n }),\n allowFailure: false,\n })) as ContractFunctionResult[]\n\n const parsedStakedBalances = rawStakedBalances.map((stakedBalance) => {\n return new BigNumber(stakedBalance[0].toString()).toJSON()\n })\n return parsedStakedBalances\n}\n\nexport const fetchFarmUserEarnings = async (\n account: Address,\n farmsToFetch: SerializedFarmConfig[],\n chainId: number,\n) => {\n const multiCallChainId = farmFetcher.isTestnet(chainId) ? ChainId.PULSECHAIN_TESTNET : ChainId.PULSECHAIN\n const masterChefAddress = getMasterChefAddress(multiCallChainId)\n\n const rawEarnings = await publicClient({ chainId: multiCallChainId }).multicall({\n contracts: farmsToFetch.map((farm) => {\n return {\n abi: masterChefAbi,\n address: masterChefAddress,\n functionName: 'pendingInc',\n args: [BigInt(farm.pid), account as Address] as const,\n } as const\n }),\n allowFailure: false,\n })\n\n const parsedEarnings = rawEarnings.map((earnings) => {\n return new BigNumber(earnings.toString()).toJSON()\n })\n return parsedEarnings\n}\n","import { getFarmsPriceHelperLpFiles } from '@pulsex/farms/constants/priceHelperLps/getFarmsPriceHelperLpFiles'\nimport type {\n UnknownAsyncThunkFulfilledAction,\n UnknownAsyncThunkPendingAction,\n UnknownAsyncThunkRejectedAction,\n} from '@reduxjs/toolkit/dist/matchers'\nimport { createAsyncThunk, createSlice, isAnyOf } from '@reduxjs/toolkit'\nimport stringify from 'fast-json-stable-stringify'\nimport keyBy from 'lodash/keyBy'\nimport { getFarmConfig } from '@pulsex/farms/constants'\nimport { createFarmFetcher, SerializedFarm, SerializedFarmsState } from '@pulsex/farms'\nimport type { AppState } from 'state'\nimport { chains } from 'utils/wagmi'\nimport { getViemClients } from 'utils/viem'\nimport { Address } from 'wagmi'\nimport { resetUserState } from '../global/actions'\nimport {\n fetchFarmUserAllowances,\n fetchFarmUserEarnings,\n fetchFarmUserStakedBalances,\n fetchFarmUserTokenBalances,\n} from './fetchFarmUser'\nimport { fetchMasterChefFarmPoolLength } from './fetchMasterChefData'\n\nconst fetchFarmPublicDataPkg = async ({ pids, chainId, chain }): Promise<[SerializedFarm[], number, number]> => {\n const farmsConfig = await getFarmConfig(chainId)\n const farmsCanFetch = farmsConfig.filter((farmConfig) => pids.includes(farmConfig.pid))\n const priceHelperLpsConfig = getFarmsPriceHelperLpFiles(chainId)\n\n const { farmsWithPrice, poolLength, regularIncPerSecond } = await farmFetcher.fetchFarms({\n chainId,\n isTestnet: chain.testnet,\n farms: farmsCanFetch.concat(priceHelperLpsConfig),\n })\n\n return [farmsWithPrice, poolLength, regularIncPerSecond]\n}\n\nexport const farmFetcher = createFarmFetcher(getViemClients)\n\nconst initialState: SerializedFarmsState = {\n data: [],\n loadArchivedFarmsData: false,\n userDataLoaded: false,\n loadingKeys: {},\n}\n\nexport const fetchInitialFarmsData = createAsyncThunk<\n { data: SerializedFarm[]; chainId: number },\n { chainId: number },\n {\n state: AppState\n }\n>('farms/fetchInitialFarmsData', async ({ chainId }) => {\n return getFarmConfig(chainId).then((farmDataList) => {\n return {\n data: farmDataList.map((farm) => ({\n ...farm,\n userData: {\n allowance: '0',\n tokenBalance: '0',\n stakedBalance: '0',\n earnings: '0',\n },\n })),\n chainId,\n }\n })\n})\n\n// Async thunks\nexport const fetchFarmsPublicDataAsync = createAsyncThunk<\n [SerializedFarm[], number, number],\n { pids: number[]; chainId: number },\n {\n state: AppState\n }\n>(\n 'farms/fetchFarmsPublicDataAsync',\n async ({ pids, chainId }, { dispatch, getState }) => {\n const state = getState()\n if (state.farms.chainId !== chainId) {\n await dispatch(fetchInitialFarmsData({ chainId }))\n }\n const chain = chains.find((c) => c.id === chainId)\n if (!chain || !farmFetcher.isChainSupported(chain.id)) throw new Error('chain not supported')\n return fetchFarmPublicDataPkg({ pids, chainId, chain }).catch((error) => {\n console.error(error)\n throw error\n })\n },\n {\n condition: (arg, { getState }) => {\n const { farms } = getState()\n if (farms.loadingKeys[stringify({ type: fetchFarmsPublicDataAsync.typePrefix, arg })]) {\n console.debug('farms action is fetching, skipping here')\n return false\n }\n return true\n },\n },\n)\n\ninterface FarmUserDataResponse {\n pid: number\n allowance: string\n tokenBalance: string\n stakedBalance: string\n earnings: string\n}\n\nasync function getNormalFarmsStakeValue(chainId, farms, account) {\n const [userFarmAllowances, userFarmTokenBalances, userStakedBalances, userFarmEarnings] = await Promise.all([\n fetchFarmUserAllowances(account, farms, chainId),\n fetchFarmUserTokenBalances(account, farms, chainId),\n fetchFarmUserStakedBalances(account, farms, chainId),\n fetchFarmUserEarnings(account, farms, chainId),\n ])\n\n const normalFarmAllowances = userFarmAllowances.map((_, index) => {\n return {\n pid: farms[index].pid,\n allowance: userFarmAllowances[index],\n tokenBalance: userFarmTokenBalances[index],\n stakedBalance: userStakedBalances[index],\n earnings: userFarmEarnings[index],\n }\n })\n\n return normalFarmAllowances\n}\n\nexport const fetchFarmUserDataAsync = createAsyncThunk<\n FarmUserDataResponse[],\n { account: Address; pids: number[]; chainId: number },\n {\n state: AppState\n }\n>(\n 'farms/fetchFarmUserDataAsync',\n async ({ account, pids, chainId }, { dispatch, getState }) => {\n const state = getState()\n if (state.farms.chainId !== chainId) {\n await dispatch(fetchInitialFarmsData({ chainId }))\n }\n const poolLength = state.farms.poolLength ?? (await fetchMasterChefFarmPoolLength(chainId))\n const farmsConfig = await getFarmConfig(chainId)\n const farmsCanFetch = farmsConfig.filter(\n (farmConfig) => pids.includes(farmConfig.pid) && poolLength > farmConfig.pid,\n )\n return getNormalFarmsStakeValue(chainId, farmsCanFetch, account)\n },\n {\n condition: (arg, { getState }) => {\n const { farms } = getState()\n if (farms.loadingKeys[stringify({ type: fetchFarmUserDataAsync.typePrefix, arg })]) {\n console.debug('farms user action is fetching, skipping here')\n return false\n }\n return true\n },\n },\n)\n\ntype UnknownAsyncThunkFulfilledOrPendingAction =\n | UnknownAsyncThunkFulfilledAction\n | UnknownAsyncThunkPendingAction\n | UnknownAsyncThunkRejectedAction\n\nconst serializeLoadingKey = (\n action: UnknownAsyncThunkFulfilledOrPendingAction,\n suffix: UnknownAsyncThunkFulfilledOrPendingAction['meta']['requestStatus'],\n) => {\n const type = action.type.split(`/${suffix}`)[0]\n return stringify({\n arg: action.meta.arg,\n type,\n })\n}\n\nexport const farmsSlice = createSlice({\n name: 'Farms',\n initialState,\n reducers: {},\n extraReducers: (builder) => {\n builder.addCase(resetUserState, (state) => {\n state.data = state.data.map((farm) => {\n return {\n ...farm,\n userData: {\n allowance: '0',\n tokenBalance: '0',\n stakedBalance: '0',\n earnings: '0',\n },\n }\n })\n state.userDataLoaded = false\n })\n // Init farm data\n builder.addCase(fetchInitialFarmsData.fulfilled, (state, action) => {\n const { data, chainId } = action.payload\n state.data = data\n state.chainId = chainId\n })\n\n // Update farms with live data\n builder.addCase(fetchFarmsPublicDataAsync.fulfilled, (state, action) => {\n const [farmPayload, poolLength, regularIncPerSecond] = action.payload\n const farmPayloadPidMap = keyBy(farmPayload, 'pid')\n\n state.data = state.data.map((farm) => {\n const liveFarmData = farmPayloadPidMap[farm.pid]\n return { ...farm, ...liveFarmData }\n })\n state.poolLength = poolLength\n state.regularIncPerSecond = regularIncPerSecond\n })\n\n // Update farms with user data\n builder.addCase(fetchFarmUserDataAsync.fulfilled, (state, action) => {\n const userDataMap = keyBy(action.payload, 'pid')\n state.data = state.data.map((farm) => {\n const userDataEl = userDataMap[farm.pid]\n if (userDataEl) {\n return { ...farm, userData: userDataEl }\n }\n return farm\n })\n state.userDataLoaded = true\n })\n\n builder.addMatcher(isAnyOf(fetchFarmUserDataAsync.pending, fetchFarmsPublicDataAsync.pending), (state, action) => {\n state.loadingKeys[serializeLoadingKey(action, 'pending')] = true\n })\n builder.addMatcher(\n isAnyOf(fetchFarmUserDataAsync.fulfilled, fetchFarmsPublicDataAsync.fulfilled),\n (state, action) => {\n state.loadingKeys[serializeLoadingKey(action, 'fulfilled')] = false\n },\n )\n builder.addMatcher(\n isAnyOf(fetchFarmsPublicDataAsync.rejected, fetchFarmUserDataAsync.rejected),\n (state, action) => {\n state.loadingKeys[serializeLoadingKey(action, 'rejected')] = false\n },\n )\n },\n})\n\nexport default farmsSlice.reducer\n","import chunk from 'lodash/chunk'\nimport { ChainId } from '@pulsex/chains'\nimport { masterChefAbi } from 'config/abi/masterchef'\nimport { publicClient } from 'utils/wagmi'\nimport { farmFetcher } from 'state/farms'\nimport { ContractFunctionResult } from 'viem'\nimport { SerializedFarm } from '@pulsex/farms'\nimport { SerializedFarmConfig } from '../../config/constants/types'\nimport { getMasterChefAddress } from '../../utils/addressHelpers'\n\nexport const fetchMasterChefFarmPoolLength = async (chainId: number) => {\n try {\n const client = publicClient({ chainId })\n const poolLength = await client.readContract({\n abi: masterChefAbi,\n address: getMasterChefAddress(chainId),\n functionName: 'poolLength',\n })\n\n return Number(poolLength)\n } catch (error) {\n console.error('Fetch MasterChef Farm Pool Length Error: ', error)\n return 0\n }\n}\n\nconst masterChefFarmCalls = (farm: SerializedFarm) => {\n const { pid, quoteToken } = farm\n const multiCallChainId = farmFetcher.isTestnet(quoteToken.chainId) ? ChainId.PULSECHAIN_TESTNET : ChainId.PULSECHAIN\n const masterChefAddress = getMasterChefAddress(multiCallChainId)\n const masterChefPid = pid\n\n return masterChefPid || masterChefPid === 0\n ? ([\n {\n abi: masterChefAbi,\n address: masterChefAddress,\n functionName: 'poolInfo',\n args: [masterChefPid],\n },\n {\n abi: masterChefAbi,\n address: masterChefAddress,\n functionName: 'totalAllocPoint',\n },\n ] as const)\n : ([null, null] as const)\n}\n\nexport type PoolInfo = ContractFunctionResult\nexport type TotalAllocPoint = ContractFunctionResult\n\nexport const fetchMasterChefData = async (\n farms: SerializedFarmConfig[],\n chainId: number,\n): Promise<[PoolInfo | null, TotalAllocPoint | null][]> => {\n const masterChefCalls = farms.map((farm) => masterChefFarmCalls(farm))\n const chunkSize = masterChefCalls.flat().length / farms.length\n const masterChefAggregatedCalls = masterChefCalls\n .filter((masterChefCall) => masterChefCall[0] !== null && masterChefCall[1] !== null)\n .flat()\n\n const multiCallChainId = farmFetcher.isTestnet(chainId) ? ChainId.PULSECHAIN_TESTNET : ChainId.PULSECHAIN\n const client = publicClient({ chainId: multiCallChainId })\n const masterChefMultiCallResult = await client.multicall({\n contracts: masterChefAggregatedCalls,\n allowFailure: false,\n })\n\n const masterChefChunkedResultRaw = chunk(masterChefMultiCallResult, chunkSize)\n\n let masterChefChunkedResultCounter = 0\n return masterChefCalls.map((masterChefCall) => {\n if (masterChefCall[0] === null && masterChefCall[1] === null) {\n return [null, null]\n }\n const data = masterChefChunkedResultRaw[masterChefChunkedResultCounter] as [PoolInfo, TotalAllocPoint]\n masterChefChunkedResultCounter++\n return data\n })\n}\n","import { plsTokens } from '@pulsex/tokens'\nimport { getAddress } from 'viem'\n\nimport { PoolCategory, SerializedPool } from '../../types'\n\nexport const livePools: SerializedPool[] = [\n // {\n // sousId: 0,\n // stakingToken: plsTokens.pls,\n // earningToken: plsTokens.plsx,\n // contractAddress: '0xa5f8C5Dbd5F286960b9d90548680aE5ebFf07652',\n // poolCategory: PoolCategory.CORE,\n // tokenPerBlock: '10',\n // isFinished: false,\n // },\n]\n// .map((p) => ({\n// ...p,\n// contractAddress: getAddress(p.contractAddress),\n// stakingToken: p.stakingToken.serialize,\n// earningToken: p.earningToken.serialize,\n// }))\n\n// known finished pools\nconst finishedPools: SerializedPool[] = [\n // {\n // sousId: 1,\n // stakingToken: plsTokens.pls,\n // earningToken: plsTokens.wbtc,\n // contractAddress: '0x854906693F7bAc4E4c8C31c001b6a42b3d93493E',\n // poolCategory: PoolCategory.CORE,\n // tokenPerBlock: '0.00004813',\n // version: 3,\n // },\n]\n// .map((p) => ({\n// ...p,\n// isFinished: true,\n// contractAddress: getAddress(p.contractAddress),\n// stakingToken: p.stakingToken.serialize,\n// earningToken: p.earningToken.serialize,\n// }))\n\nexport const pools: SerializedPool[] = [...livePools, ...finishedPools]\n","import { plsTestnetTokens } from '@pulsex/tokens'\nimport { getAddress } from 'viem'\n\nimport { PoolCategory, SerializedPool } from '../../types'\n\nexport const livePools: SerializedPool[] = [\n // {\n // sousId: 0,\n // stakingToken: bscTestnetTokens.cake2,\n // earningToken: bscTestnetTokens.cake2,\n // contractAddress: '0x4c650FB471fe4e0f476fD3437C3411B1122c4e3B',\n // poolCategory: PoolCategory.CORE,\n // tokenPerBlock: '0.01',\n // isFinished: false,\n // },\n]\n// .map((p) => ({\n// ...p,\n// contractAddress: getAddress(p.contractAddress, 97),\n// stakingToken: p.stakingToken.serialize,\n// earningToken: p.earningToken.serialize,\n// }))\n\n// known finished pools\nexport const finishedPools: SerializedPool[] = []\n\nexport const pools: SerializedPool[] = [...livePools, ...finishedPools]\n","import { ChainId } from '@pulsex/chains'\n\nexport const SUPPORTED_CHAIN_IDS = [\n ChainId.PULSECHAIN,\n ChainId.PULSECHAIN_TESTNET,\n] as const\n\nexport type SupportedChainId = (typeof SUPPORTED_CHAIN_IDS)[number]\n","import { ChainId } from '@pulsex/chains'\n\nimport { pools as plsPools, livePools as plsLivePools } from './369'\nimport { pools as plsTestnetPools, livePools as plsTestnetLivePools } from './943'\n\nimport { SerializedPool } from '../../types'\nimport { SupportedChainId } from '../supportedChains'\nimport { isPoolsSupported } from '../../utils/isPoolsSupported'\n\nexport type PoolsConfigByChain = {\n [chainId in TChainId]: SerializedPool[]\n}\n\nexport const POOLS_CONFIG_BY_CHAIN = {\n [ChainId.PULSECHAIN]: plsPools,\n [ChainId.PULSECHAIN_TESTNET]: plsTestnetPools,\n} as PoolsConfigByChain\n\nexport const LIVE_POOLS_CONFIG_BY_CHAIN = {\n [ChainId.PULSECHAIN]: plsLivePools,\n [ChainId.PULSECHAIN_TESTNET]: plsTestnetLivePools,\n} as PoolsConfigByChain\n\nexport const getPoolsConfig = (chainId: ChainId) => {\n if (!isPoolsSupported(chainId)) {\n return undefined\n }\n return POOLS_CONFIG_BY_CHAIN[chainId]\n}\n\nexport const getLivePoolsConfig = (chainId: ChainId) => {\n if (!isPoolsSupported(chainId)) {\n return undefined\n }\n return LIVE_POOLS_CONFIG_BY_CHAIN[chainId]\n}\n\nexport const MAX_LOCK_DURATION = 31536000\nexport const UNLOCK_FREE_DURATION = 604800\nexport const ONE_WEEK_DEFAULT = 604800\nexport const BOOST_WEIGHT = 20000000000000n\nexport const DURATION_FACTOR = 31536000n\n","import { ChainId } from '@pulsex/chains'\nimport { PublicClient, Address } from 'viem'\nimport type { SerializedWrappedToken } from '@pulsex/token-lists'\nimport BigNumber from 'bignumber.js'\n\nexport type OnChainProvider = ({ chainId }: { chainId?: ChainId }) => PublicClient\n\nexport type SerializedBigNumber = string\n\nexport enum PoolCategory {\n 'COMMUNITY' = 'Community',\n 'CORE' = 'Core',\n 'PULSE' = 'Pulse', // Pools using native BNB behave differently than pools using a token\n 'AUTO' = 'Auto',\n}\n\nexport interface PoolConfigBaseProps {\n poolId: number\n contractAddress: Address\n poolCategory: PoolCategory\n tokenPerBlock: string\n harvest?: boolean\n isFinished?: boolean\n enableEmergencyWithdraw?: boolean\n version?: number\n}\n\ninterface GenericToken {\n decimals: number\n symbol: string\n address: string\n}\n\nexport interface SerializedPoolConfig extends PoolConfigBaseProps {\n earningToken: T & GenericToken\n stakingToken: T & GenericToken\n}\n\nexport type SerializedPool = SerializedPoolConfig\n\nexport type SerializedPoolWithInfo = SerializedPool & SerializedPoolInfo\n\nexport interface DeserializedPoolConfig extends PoolConfigBaseProps {\n earningToken: T & GenericToken\n stakingToken: T & GenericToken\n}\n\ninterface SerializedPoolInfo extends CorePoolProps {\n totalStaked?: string\n stakingLimit?: string\n userLimitEnd?: number\n stakingLimitEndTimestamp?: number\n profileRequirement?: {\n required: boolean\n thresholdPoints: string\n }\n userDataLoaded?: boolean\n userData?: {\n allowance: string\n stakingTokenBalance: string\n stakedBalance: string\n pendingReward: string\n }\n}\n\ninterface PoolInfo extends CorePoolProps {\n totalStaked?: BigNumber\n stakingLimit?: BigNumber\n stakingLimitEndTimestamp?: number\n profileRequirement?: {\n required: boolean\n thresholdPoints: BigNumber\n }\n userDataLoaded?: boolean\n userData?: {\n allowance: BigNumber\n stakingTokenBalance: BigNumber\n stakedBalance: BigNumber\n pendingReward: BigNumber\n }\n}\n\nexport type DeserializedPool = DeserializedPoolConfig & PoolInfo\n\ninterface CorePoolProps {\n startTimestamp?: number\n endTimestamp?: number\n apr?: number\n rawApr?: number\n stakingTokenPrice?: number\n earningTokenPrice?: number\n timeStamp?: number\n}\n","import { ChainId } from '@pulsex/chains'\nimport { Address } from 'viem'\n\nimport { SupportedChainId } from './supportedChains'\n\nexport type ContractAddresses = {\n [chainId in T]: Address\n}\n\nexport const PLSX = {\n [ChainId.PULSECHAIN]: '0x95B303987A60C71504D99Aa1b13B4DA07b0790ab',\n [ChainId.PULSECHAIN_TESTNET]: '0x8a810ea8B121d08342E9e7696f4a9915cBE494B7',\n} as const satisfies ContractAddresses\n\nexport const PLSX_LAB = {\n [ChainId.PULSECHAIN]: '0x3E3EC0af505D6458D18A3AA1E29A9d7f008dd98e',\n [ChainId.PULSECHAIN_TESTNET]: '0x959a437F1444DaDaC8aF997E71EAF0479c810267',\n} as const satisfies ContractAddresses\n","import { ChainId } from '@pulsex/chains'\nimport BigNumber from 'bignumber.js'\nimport { getPoolsConfig } from '../constants'\nimport { erc20ABI } from 'wagmi'\nimport { BIG_ZERO } from '@pulsex/utils/bigNumber'\nimport { plsxLabAbi } from '../abis/plsxLab'\nimport chunk from 'lodash/chunk.js'\nimport { OnChainProvider } from '../types'\n\nexport const fetchPoolsBlockLimits = async (\n chainId: ChainId,\n provider: OnChainProvider,\n) => {\n const poolsConfig = getPoolsConfig(chainId)\n if (!poolsConfig) {\n return null\n }\n\n const poolInfo = poolsConfig.flatMap((poolConfig) => {\n return [\n {\n abi: plsxLabAbi,\n address: poolConfig.contractAddress,\n functionName: 'poolInfo',\n args: [poolConfig.poolId],\n },\n ] as const\n })\n\n const client = provider({ chainId })\n\n const poolInfoResult = await client.multicall({\n contracts: poolInfo,\n allowFailure: false,\n }) as any\n\n return poolsConfig.map((poolConfig, index) => {\n const { startTime, endTime } = poolInfoResult[index]\n\n return {\n poolId: poolConfig.poolId,\n startTime: Number(startTime),\n endTime: Number(endTime),\n }\n })\n}\n\nexport const fetchPoolsTotalStaking = async (chainId: ChainId, provider: OnChainProvider) => {\n const poolsConfig = getPoolsConfig(chainId)\n if (!poolsConfig) {\n return null\n }\n const poolsBalanceOf = poolsConfig.map(({ contractAddress, stakingToken }) => {\n return {\n abi: erc20ABI,\n address: stakingToken.address,\n functionName: 'balanceOf',\n args: [contractAddress],\n } as const\n })\n\n const client = provider({ chainId })\n const poolsTotalStaked = await client.multicall({\n contracts: poolsBalanceOf,\n allowFailure: false,\n })\n\n return poolsConfig.map((p, index) => ({\n poolId: p.poolId,\n totalStaked: new BigNumber(poolsTotalStaked[index].toString()).toJSON(),\n }))\n}\n\ninterface FetchingPoolsStakingLimitsParams {\n poolsWithStakingLimit: number[]\n chainId: ChainId\n provider: OnChainProvider\n}\n\nexport const fetchPoolsStakingLimits = async ({\n poolsWithStakingLimit,\n chainId,\n provider,\n}: FetchingPoolsStakingLimitsParams): Promise<{\n [key: string]: { stakingLimit: BigNumber; userLimitEnd: number }\n}> => {\n const poolsConfig = getPoolsConfig(chainId)\n if (!poolsConfig) {\n throw new Error(`No pools found on chain ${chainId}`)\n }\n\n const validPools = poolsConfig\n .filter((p) => p.stakingToken.symbol !== 'PLS' && !p.isFinished)\n .filter((p) => !poolsWithStakingLimit.includes(p.poolId))\n\n\n const poolInfo = poolsConfig.flatMap((poolConfig) => {\n return [\n {\n abi: plsxLabAbi,\n address: poolConfig.contractAddress,\n functionName: 'poolInfo',\n args: [poolConfig.poolId],\n },\n ] as const\n })\n\n // Get the staking limit for each valid pool\n const poolStakingCalls = validPools\n .map((validPool) => {\n const contractAddress = validPool.contractAddress\n return (['baseUserLimit'] as const).map((method) => ({\n abi: plsxLabAbi,\n address: contractAddress,\n functionName: method,\n } as const))\n })\n .flat()\n\n const client = provider({ chainId })\n\n const [poolInfoResult, poolStakingResultRaw] = await Promise.all([\n client.multicall({\n contracts: poolInfo,\n allowFailure: false,\n }) as any,\n client.multicall({\n contracts: poolStakingCalls,\n allowFailure: false,\n }),\n ])\n\n if (!poolInfoResult[0]) {\n return {}\n }\n const { userLimitEndTime } = poolInfoResult[0]\n const chunkSize = poolStakingCalls.length / validPools.length\n const poolStakingChunkedResultRaw = chunk(poolStakingResultRaw.flat(), chunkSize)\n return poolStakingChunkedResultRaw.reduce((accum, stakingLimitRaw, index) => {\n // eslint-disable-next-line no-param-reassign\n stakingLimitRaw[1] = userLimitEndTime\n const hasUserLimit = true\n const stakingLimit = hasUserLimit && stakingLimitRaw[0] ? new BigNumber(stakingLimitRaw[0].toString()) : BIG_ZERO\n const userLimitEnd = stakingLimitRaw[1] ? Number(stakingLimitRaw[1]) : 0\n\n return {\n ...accum,\n [validPools[index].poolId]: stakingLimit,\n userLimitEnd,\n }\n }, {})\n}\n","export const plsxLabAbi = [\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IERC20\",\n \"name\": \"_plsx\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"tokenRecovered\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"AdminTokenRecovery\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"pid\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Deposit\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"pid\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"EmergencyWithdraw\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"_gemsPerSecond\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"SetRewardPerSecond\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"pid\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Withdraw\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"baseUserLimit\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"baseUserLimitTime\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"plsx\",\n \"outputs\": [\n {\n \"internalType\": \"contract IERC20\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"poolInfo\",\n \"outputs\": [\n {\n \"internalType\": \"contract IERC20\",\n \"name\": \"RewardToken\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"RewardPerSecond\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"TokenPrecision\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"PLSXStakedAmount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"lastRewardTime\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"accRewardPerShare\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"endTime\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"startTime\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"userLimitEndTime\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"protocolOwnerAddress\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"userInfo\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"rewardDebt\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"poolLength\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_user\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"pendingReward\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"massUpdatePools\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"deposit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"withdraw\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"emergencyWithdraw\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"addSeconds\",\n \"type\": \"uint32\"\n }\n ],\n \"name\": \"changeEndTime\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"stopReward\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_time\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"changePoolUserLimitEndTime\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_limit\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"changeUserLimit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_time\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"changeBaseUserLimitTime\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_tokenAddress\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"recoverWrongTokens\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"emergencyRewardWithdraw\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_rewardPerSecond\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"contract IERC20Ext\",\n \"name\": \"_Token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_startTime\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_endTime\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_protocolOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"add\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_rewardPerSecond\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setRewardPerSecond\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n] as const\n","import { ChainId } from '@pulsex/chains'\nimport BigNumber from 'bignumber.js'\nimport { Address } from 'viem'\nimport fromPairs from 'lodash/fromPairs.js'\nimport { erc20ABI } from 'wagmi'\nimport { getPoolsConfig } from '../constants'\nimport { plsxLabAbi } from '../abis/plsxLab'\nimport { OnChainProvider, SerializedPool } from '../types'\n\nconst getPoolsFactory = (filter: (pool: SerializedPool) => boolean) => (chainId: ChainId) => {\n const poolsConfig = getPoolsConfig(chainId)\n if (!poolsConfig) {\n throw new Error(`Unable to get pools config on chain ${chainId}`)\n }\n return poolsConfig.filter(filter)\n}\nconst getNonPlsPools = getPoolsFactory((pool) => pool.stakingToken.symbol !== 'BNB')\nconst getPlsPools = getPoolsFactory((pool) => pool.stakingToken.symbol === 'BNB')\n\ninterface FetchUserDataParams {\n account: string\n chainId: ChainId\n provider: OnChainProvider\n}\n\nexport const fetchPoolsAllowance = async ({ account, chainId, provider }: FetchUserDataParams) => {\n const nonPlsPools = getNonPlsPools(chainId)\n const client = provider({ chainId })\n\n const allowances = await client.multicall({\n contracts: nonPlsPools.map(\n ({ contractAddress, stakingToken }) =>\n ({\n address: stakingToken.address,\n abi: erc20ABI,\n functionName: 'allowance',\n args: [account as Address, contractAddress] as const,\n } as const),\n ),\n allowFailure: false,\n })\n\n return fromPairs(\n nonPlsPools.map((pool, index) => [pool.poolId, new BigNumber(allowances[index].toString()).toJSON()]),\n )\n}\n\nexport const fetchUserBalances = async ({ account, chainId, provider }: FetchUserDataParams) => {\n const nonPlsPools = getNonPlsPools(chainId)\n const plsPools = getPlsPools(chainId)\n\n const client = provider({ chainId })\n\n // Non PLS pools\n const calls = nonPlsPools.map((pool) => ({\n abi: erc20ABI,\n address: pool.stakingToken.address,\n functionName: 'balanceOf',\n args: [account] as const,\n } as const))\n\n const tokenBalancesRaw = await client.multicall({\n contracts: calls,\n allowFailure: false,\n }) as any\n\n const tokenBalances = fromPairs(nonPlsPools.map((token, index) => [token, tokenBalancesRaw[index].result as bigint]))\n\n // PLS pools\n const plsBalance = await client.getBalance({ address: account as Address})\n const plsBalances = plsPools.reduce(\n (acc, pool) => ({ ...acc, [pool.poolId]: new BigNumber(plsBalance.toString()).toJSON() }),\n {},\n )\n\n return { ...tokenBalances, ...plsBalances }\n}\n\nexport const fetchUserStakeBalances = async ({ account, chainId, provider }: FetchUserDataParams) => {\n const poolsConfig = getPoolsConfig(chainId)\n if (!poolsConfig) {\n throw new Error(`Unable to get pools config on chain ${chainId}`)\n }\n const client = provider({ chainId })\n\n const calls = poolsConfig.map((p) => ({\n abi: plsxLabAbi,\n address: p.contractAddress,\n functionName: 'userInfo',\n args: [p.poolId, account as Address] as const,\n } as const))\n\n const userInfo = await client.multicall({\n contracts: calls,\n allowFailure: false,\n }) as any\n\n const stakedBalances = poolsConfig.reduce(\n (acc, pool, index) => ({\n ...acc,\n [pool.poolId]: new BigNumber(userInfo[index].amount._hex).toJSON(),\n }),\n {},\n )\n\n return { ...stakedBalances }\n}\n\nexport const fetchUserPendingRewards = async ({ account, chainId, provider }: FetchUserDataParams) => {\n const poolsConfig = getPoolsConfig(chainId)\n if (!poolsConfig) {\n throw new Error(`Unable to get pools config on chain ${chainId}`)\n }\n const client = provider({ chainId })\n\n const res = await client.multicall({\n contracts: poolsConfig.map(\n ({ contractAddress }) =>\n ({\n abi: plsxLabAbi,\n address: contractAddress,\n functionName: 'pendingReward',\n args: [account as Address] as const,\n } as const),\n ),\n allowFailure: false,\n }) as any\n\n return fromPairs(poolsConfig.map((pool, index) => [pool.poolId, new BigNumber(res[index].toString()).toJSON()]))\n}\n","// src/wrappedTokenInfo.ts\nimport { Token } from \"@pulsex/swap-sdk-core\";\nvar WrappedTokenInfo = class extends Token {\n constructor(tokenInfo) {\n super(tokenInfo.chainId, tokenInfo.address, tokenInfo.decimals, tokenInfo.symbol, tokenInfo.name);\n this.logoURI = tokenInfo.logoURI;\n }\n get serialize() {\n return {\n address: this.address,\n chainId: this.chainId,\n decimals: this.decimals,\n symbol: this.symbol,\n name: this.name,\n projectLink: this.projectLink,\n logoURI: this.logoURI\n };\n }\n};\nfunction deserializeToken(serializedToken) {\n if (serializedToken.logoURI) {\n return new WrappedTokenInfo({\n chainId: serializedToken.chainId,\n address: serializedToken.address,\n decimals: serializedToken.decimals,\n symbol: serializedToken.symbol || \"Unknown\",\n name: serializedToken.name || \"Unknown\",\n logoURI: serializedToken.logoURI\n });\n }\n return new Token(\n serializedToken.chainId,\n serializedToken.address,\n serializedToken.decimals,\n serializedToken.symbol,\n serializedToken.name,\n serializedToken.projectLink\n );\n}\n\n// src/getVersionUpgrade.ts\nvar VersionUpgrade = /* @__PURE__ */ ((VersionUpgrade2) => {\n VersionUpgrade2[VersionUpgrade2[\"NONE\"] = 0] = \"NONE\";\n VersionUpgrade2[VersionUpgrade2[\"PATCH\"] = 1] = \"PATCH\";\n VersionUpgrade2[VersionUpgrade2[\"MINOR\"] = 2] = \"MINOR\";\n VersionUpgrade2[VersionUpgrade2[\"MAJOR\"] = 3] = \"MAJOR\";\n return VersionUpgrade2;\n})(VersionUpgrade || {});\nfunction getVersionUpgrade(base, update) {\n if (update.major > base.major) {\n return 3 /* MAJOR */;\n }\n if (update.major < base.major) {\n return 0 /* NONE */;\n }\n if (update.minor > base.minor) {\n return 2 /* MINOR */;\n }\n if (update.minor < base.minor) {\n return 0 /* NONE */;\n }\n return update.patch > base.patch ? 1 /* PATCH */ : 0 /* NONE */;\n}\n\n// src/filtering.ts\nfunction createFilterToken(search, isAddress) {\n if (isAddress(search)) {\n const address = search.toLowerCase();\n return (t) => \"address\" in t && address === t.address.toLowerCase();\n }\n const lowerSearchParts = search.toLowerCase().split(/\\s+/).filter((s) => s.length > 0);\n if (lowerSearchParts.length === 0) {\n return () => true;\n }\n const matchesSearch = (s) => {\n const sParts = s.toLowerCase().split(/\\s+/).filter((s_) => s_.length > 0);\n return lowerSearchParts.every((p) => p.length === 0 || sParts.some((sp) => sp.startsWith(p) || sp.endsWith(p)));\n };\n return (token) => {\n const { symbol, name } = token;\n return Boolean(symbol && matchesSearch(symbol) || name && matchesSearch(name));\n };\n}\n\nexport {\n WrappedTokenInfo,\n deserializeToken,\n VersionUpgrade,\n getVersionUpgrade,\n createFilterToken\n};\n","import BigNumber from 'bignumber.js'\nimport { SerializedPool } from 'state/types'\nimport { Token } from '@pulsex/sdk'\nimport { SerializedFarm } from '@pulsex/farms'\nimport { DeserializedPool } from '@pulsex/pools'\nimport { deserializeToken } from '@pulsex/token-lists'\nimport { BIG_ZERO } from '@pulsex/utils/bigNumber'\n\ntype UserData =\n | DeserializedPool['userData']\n | {\n allowance: number | string\n stakingTokenBalance: number | string\n stakedBalance: number | string\n pendingReward: number | string\n }\n\nexport const transformUserData = (userData: UserData) => {\n return {\n allowance: userData ? new BigNumber(userData.allowance) : BIG_ZERO,\n stakingTokenBalance: userData ? new BigNumber(userData.stakingTokenBalance) : BIG_ZERO,\n stakedBalance: userData ? new BigNumber(userData.stakedBalance) : BIG_ZERO,\n pendingReward: userData ? new BigNumber(userData.pendingReward) : BIG_ZERO,\n }\n}\n\nconst transformProfileRequirement = (profileRequirement?: { required: boolean; thresholdPoints: string }) => {\n return profileRequirement\n ? {\n required: profileRequirement.required,\n thresholdPoints: profileRequirement.thresholdPoints\n ? new BigNumber(profileRequirement.thresholdPoints)\n : BIG_ZERO,\n }\n : undefined\n}\n\nexport const transformPool = (pool: SerializedPool): DeserializedPool => {\n const { totalStaked, stakingLimit, userLimitEnd, userData, profileRequirement, startTimestamp, ...rest } = pool\n\n return {\n ...rest,\n startTimestamp,\n profileRequirement: transformProfileRequirement(profileRequirement),\n stakingToken: deserializeToken(null),\n earningToken: deserializeToken(null),\n userData: transformUserData(userData),\n totalStaked: new BigNumber(totalStaked),\n stakingLimit: new BigNumber(stakingLimit),\n stakingLimitEndTimestamp: userLimitEnd,\n }\n}\n\nexport const getTokenPricesFromFarm = (farms: SerializedFarm[]) => {\n return farms.reduce((prices, farm) => {\n const quoteTokenAddress = farm.quoteToken.address.toLocaleLowerCase()\n const tokenAddress = farm.token.address.toLocaleLowerCase()\n /* eslint-disable no-param-reassign */\n if (!prices[quoteTokenAddress]) {\n prices[quoteTokenAddress] = new BigNumber(farm.quoteTokenPriceUsd).toNumber()\n }\n if (!prices[tokenAddress]) {\n prices[tokenAddress] = new BigNumber(farm.tokenPriceUsd).toNumber()\n }\n /* eslint-enable no-param-reassign */\n return prices\n }, {})\n}\n","import { ChainId } from '@pulsex/chains'\nimport { createSlice } from '@reduxjs/toolkit'\nimport BigNumber from 'bignumber.js'\nimport {\n PoolsState,\n SerializedPool\n} from 'state/types'\nimport { getViemClients } from 'utils/viem'\nimport { getPoolApr } from 'utils/apr'\nimport { BIG_ZERO } from '@pulsex/utils/bigNumber'\nimport { getBalanceNumber } from '@pulsex/utils/formatBalance'\nimport {\n fetchPoolsTotalStaking,\n fetchPoolsStakingLimits,\n fetchPoolsBlockLimits,\n fetchPoolsAllowance,\n fetchUserBalances,\n fetchUserPendingRewards,\n fetchUserStakeBalances,\n getPoolsConfig,\n} from '@pulsex/pools'\nimport { getTokenPricesFromFarm } from './helpers'\n\nexport const initialPoolVaultState = Object.freeze({\n totalShares: null,\n pricePerFullShare: null,\n totalPlsxInVault: null,\n estimatedPlsxBountyReward: null,\n totalPendingPlsxHarvest: null,\n fees: {\n performanceFee: null,\n callFee: null,\n withdrawalFee: null,\n withdrawalFeePeriod: null,\n },\n userData: {\n isLoading: true,\n userShares: null,\n plsxAtLastUserAction: null,\n lastDepositedTime: null,\n lastUserActionTime: null,\n credit: null,\n },\n creditStartBlock: null,\n})\n\nconst initialState: PoolsState = {\n data: [],\n userDataLoaded: false\n}\n\n// Thunks\nexport const fetchPoolsPublicDataAsync = (chainId: number) => async (dispatch, getState) => {\n try {\n const [block, timeLimits, totalStakings] = await Promise.all([\n getViemClients({ chainId })?.getBlock({ blockTag: 'latest' }),\n fetchPoolsBlockLimits(chainId, getViemClients),\n fetchPoolsTotalStaking(chainId, getViemClients),\n ])\n let currentTime\n if (!currentTime) {\n currentTime = Number(block.timestamp)\n }\n\n const poolsConfig = getPoolsConfig(chainId) || []\n const prices = getTokenPricesFromFarm(getState().farms.data)\n const liveData = poolsConfig.map((pool) => {\n const timeLimit = timeLimits.find((entry) => entry.poolId === pool.poolId)\n const totalStaking = totalStakings.find((entry) => entry.poolId === pool.poolId)\n const isPoolEndTimeExceeded = currentTime > 0 && timeLimit ? currentTime > Number(timeLimit.endTime) : false\n const isPoolFinished = pool.isFinished || isPoolEndTimeExceeded\n\n const stakingTokenAddress = pool.stakingToken.address ? pool.stakingToken.address.toLowerCase() : null\n const stakingTokenPrice = stakingTokenAddress ? prices[stakingTokenAddress] : 0\n const earningTokenAddress = pool.earningToken.address ? pool.earningToken.address.toLowerCase() : null\n const earningTokenPrice = earningTokenAddress ? prices[earningTokenAddress] : 0\n const apr = !isPoolFinished\n ? getPoolApr(\n stakingTokenPrice,\n earningTokenPrice,\n getBalanceNumber(new BigNumber(totalStaking.totalStaked), pool.stakingToken.decimals),\n parseFloat(pool.tokenPerBlock),\n )\n : 0\n\n return {\n ...timeLimit,\n ...totalStaking,\n stakingTokenPrice,\n earningTokenPrice,\n apr,\n isFinished: isPoolFinished,\n timeStamp: currentTime,\n }\n })\n\n dispatch(setPoolsPublicData(liveData))\n } catch (error) {\n console.error('[Pools Action] error when getting public data', error)\n }\n}\n\nexport const fetchPoolsStakingLimitsAsync = (chainId: ChainId) => async (dispatch, getState) => {\n const poolsWithStakingLimit = getState()\n .pools.data.filter(({ stakingLimit }) => stakingLimit !== null && stakingLimit !== undefined)\n .map((pool) => pool.poolId)\n try {\n const stakingLimits = await fetchPoolsStakingLimits({ poolsWithStakingLimit, chainId, provider: getViemClients })\n const poolsConfig = getPoolsConfig(chainId)\n const stakingLimitData = poolsConfig.map((pool) => {\n if (poolsWithStakingLimit.includes(pool.poolId)) {\n return { poolId: pool.poolId }\n }\n const stakingLimit = stakingLimits[pool.poolId] || BIG_ZERO\n const userLimitEnd = stakingLimits.userLimitEnd || 0\n\n return {\n poolId: pool.poolId,\n stakingLimit: stakingLimit.toString(),\n userLimitEnd,\n }\n })\n\n dispatch(setPoolsPublicData(stakingLimitData))\n } catch (error) {\n console.error('[Pools Action] error when getting staking limits', error)\n }\n}\n\nexport const fetchPoolsUserDataAsync =\n (account: string, chainId: ChainId) => async (dispatch) => {\n try {\n const allowances = await fetchPoolsAllowance({ account, chainId, provider: getViemClients })\n const stakingTokenBalances = await fetchUserBalances({ account, chainId, provider: getViemClients })\n const stakedBalances = await fetchUserStakeBalances({ account, chainId, provider: getViemClients })\n const pendingRewards = await fetchUserPendingRewards({ account, chainId, provider: getViemClients })\n\n const poolsConfig = getPoolsConfig(chainId)\n\n const userData = poolsConfig.map((pool) => ({\n sousId: pool.poolId,\n allowance: allowances[pool.poolId],\n stakingTokenBalance: stakingTokenBalances[pool.poolId],\n stakedBalance: stakedBalances[pool.poolId],\n pendingReward: pendingRewards[pool.poolId],\n }))\n\n dispatch(setPoolsUserData(userData))\n } catch (error) {\n console.error('[Pools Action] Error fetching pool user data', error)\n }\n }\n\nexport const updateUserAllowance =\n (sousId: number, account: string, chainId: ChainId) =>\n async (dispatch) => {\n const allowances = await fetchPoolsAllowance({ account, chainId, provider: getViemClients })\n dispatch(updatePoolsUserData({ sousId, field: 'allowance', value: allowances[sousId] }))\n }\n\nexport const updateUserBalance =\n (sousId: number, account: string, chainId: ChainId) =>\n async (dispatch) => {\n const tokenBalances = await fetchUserBalances({ account, chainId, provider: getViemClients })\n dispatch(updatePoolsUserData({ sousId, field: 'stakingTokenBalance', value: tokenBalances[sousId] }))\n }\n\nexport const updateUserStakedBalance =\n (sousId: number, account: string, chainId: ChainId) =>\n async (dispatch) => {\n const stakedBalances = await fetchUserStakeBalances({ account, chainId, provider: getViemClients })\n dispatch(updatePoolsUserData({ sousId, field: 'stakedBalance', value: stakedBalances[sousId] }))\n }\n\nexport const updateUserPendingReward =\n (sousId: number, account: string, chainId: ChainId) =>\n async (dispatch) => {\n const pendingRewards = await fetchUserPendingRewards({ chainId, account, provider: getViemClients })\n dispatch(updatePoolsUserData({ sousId, field: 'pendingReward', value: pendingRewards[sousId] }))\n }\n\nexport const PoolsSlice = createSlice({\n name: 'Pools',\n initialState,\n reducers: {\n setInitialPoolConfig: (state, action) => {\n const { chainId } = action.payload\n const allPools = getPoolsConfig(chainId) || []\n state.data = [...allPools]\n state.userDataLoaded = false\n },\n setPoolPublicData: (state, action) => {\n const { poolId } = action.payload\n const poolIndex = state.data.findIndex((pool) => pool.poolId === poolId)\n state.data[poolIndex] = {\n ...state.data[poolIndex],\n ...action.payload.data,\n }\n },\n setPoolUserData: (state, action) => {\n const { poolId } = action.payload\n const poolIndex = state.data.findIndex((pool) => pool.poolId === poolId)\n state.data[poolIndex].userData = action.payload.data\n },\n setPoolsPublicData: (state, action) => {\n const livePoolsData: SerializedPool[] = action.payload\n state.data = state.data.map((pool) => {\n const livePoolData = livePoolsData.find((entry) => entry.poolId === pool.poolId)\n return { ...pool, ...livePoolData }\n })\n },\n setPoolsUserData: (state, action) => {\n const userData = action.payload\n state.data = state.data.map((pool) => {\n const userPoolData = userData.find((entry) => entry.poolId === pool.poolId)\n return { ...pool, userData: userPoolData }\n })\n state.userDataLoaded = true\n },\n updatePoolsUserData: (state, action) => {\n const { field, value, poolId } = action.payload\n const index = state.data.findIndex((p) => p.poolId === poolId)\n\n if (index >= 0) {\n state.data[index] = { ...state.data[index], userData: { ...state.data[index].userData, [field]: value } }\n }\n },\n },\n})\n\n// Actions\nexport const { setPoolsPublicData, setPoolsUserData, updatePoolsUserData, setPoolPublicData, setPoolUserData, setInitialPoolConfig } =\n PoolsSlice.actions\n\nexport default PoolsSlice.reducer\n","import BigNumber from 'bignumber.js'\nimport { SECONDS_PER_YEAR, INC_PER_YEAR } from 'config'\nimport lpAprs from 'config/constants/lpAprs.json'\n\n/**\n * Get the APR value in %\n * @param stakingTokenPrice Token price in the same quote currency\n * @param rewardTokenPrice Token price in the same quote currency\n * @param totalStaked Total amount of stakingToken in the pool\n * @param tokenPerBlock Amount of new cake allocated to the pool for each new block\n * @returns Null if the APR is NaN or infinite.\n */\nexport const getPoolApr = (\n stakingTokenPrice: number,\n rewardTokenPrice: number,\n totalStaked: number,\n tokenPerBlock: number,\n): number => {\n const totalRewardPricePerYear = new BigNumber(rewardTokenPrice).times(tokenPerBlock).times(SECONDS_PER_YEAR)\n const totalStakingTokenInPool = new BigNumber(stakingTokenPrice).times(totalStaked)\n const apr = totalRewardPricePerYear.div(totalStakingTokenInPool).times(100)\n return apr.isNaN() || !apr.isFinite() ? null : apr.toNumber()\n}\n\n/**\n * Get farm APR value in %\n * @param poolWeight allocationPoint / totalAllocationPoint\n * @param incentivePriceUsd INC price in USD\n * @param poolLiquidityUsd Total pool liquidity in USD\n * @param farmAddress Farm Address\n * @returns Farm Apr\n */\nexport const getFarmApr = (\n poolWeight: BigNumber,\n incentivePriceUsd: BigNumber,\n poolLiquidityUsd: BigNumber,\n farmAddress: string,\n): { incentiveRewardsApr: number; lpRewardsApr: number } => {\n const yearlyIncentiveRewardAllocation = poolWeight ? poolWeight.times(INC_PER_YEAR) : new BigNumber(NaN)\n const incentiveRewardsApr = yearlyIncentiveRewardAllocation.times(incentivePriceUsd).div(poolLiquidityUsd).times(100)\n let incentiveRewardsAprAsNumber = null\n if (!incentiveRewardsApr.isNaN() && incentiveRewardsApr.isFinite()) {\n incentiveRewardsAprAsNumber = incentiveRewardsApr.toNumber()\n }\n const lpRewardsApr = (lpAprs[farmAddress?.toLowerCase()] || lpAprs[farmAddress]) ?? 0\n return { incentiveRewardsApr: incentiveRewardsAprAsNumber, lpRewardsApr }\n}\n\nexport default null\n","import { createAction } from '@reduxjs/toolkit'\nimport { ChainId } from '@pulsex/chains'\n\nexport type TransactionType =\n | 'approve'\n | 'swap'\n | 'wrap'\n | 'add-liquidity'\n | 'remove-liquidity'\n\nexport interface SerializableTransactionReceipt {\n to: string\n from: string\n contractAddress: string\n transactionIndex: number\n blockHash: string\n transactionHash: string\n blockNumber: number\n status?: number\n}\n\nexport const addTransaction = createAction<{\n chainId: ChainId\n hash: string\n from: string\n approval?: { tokenAddress: string; spender: string }\n claim?: { recipient: string }\n summary?: string\n translatableSummary?: { text: string; data?: Record }\n type?: TransactionType\n}>('transactions/addTransaction')\nexport const clearAllTransactions = createAction('transactions/clearAllTransactions')\nexport const clearAllChainTransactions = createAction<{ chainId: ChainId }>('transactions/clearAllChainTransactions')\nexport const finalizeTransaction = createAction<{\n chainId: ChainId\n hash: string\n receipt: SerializableTransactionReceipt\n}>('transactions/finalizeTransaction')\nexport const checkedTransaction = createAction<{\n chainId: ChainId\n hash: string\n blockNumber: number\n}>('transactions/checkedTransaction')\n","/* eslint-disable no-param-reassign */\nimport { createReducer } from '@reduxjs/toolkit'\nimport { Hash } from 'viem'\nimport {\n addTransaction,\n checkedTransaction,\n clearAllTransactions,\n finalizeTransaction,\n SerializableTransactionReceipt,\n TransactionType,\n clearAllChainTransactions,\n} from './actions'\nimport { resetUserState } from '../global/actions'\n\nconst now = () => Date.now()\n\nexport interface TransactionDetails {\n hash: Hash\n approval?: { tokenAddress: string; spender: string }\n type?: TransactionType\n summary?: string\n translatableSummary?: { text: string; data?: Record }\n claim?: { recipient: string }\n receipt?: SerializableTransactionReceipt\n lastCheckedBlockNumber?: number\n addedTime: number\n confirmedTime?: number\n from: string\n}\n\nexport interface TransactionState {\n [chainId: number]: {\n [txHash: string]: TransactionDetails\n }\n}\n\nexport const initialState: TransactionState = {}\n\nexport default createReducer(initialState, (builder) =>\n builder\n .addCase(\n addTransaction,\n (\n transactions,\n { payload: { chainId, from, hash, approval, summary, translatableSummary, claim, type } },\n ) => {\n if (transactions[chainId]?.[hash]) {\n throw Error('Attempted to add existing transaction.')\n }\n const txs = transactions[chainId] ?? {}\n txs[hash as Hash] = {\n hash: hash as Hash,\n approval,\n summary,\n translatableSummary,\n claim,\n from,\n addedTime: now(),\n type,\n }\n transactions[chainId] = txs\n },\n )\n .addCase(clearAllTransactions, () => {\n return {}\n })\n .addCase(clearAllChainTransactions, (transactions, { payload: { chainId } }) => {\n if (!transactions[chainId]) return\n transactions[chainId] = {}\n })\n .addCase(checkedTransaction, (transactions, { payload: { chainId, hash, blockNumber } }) => {\n const tx = transactions[chainId]?.[hash]\n if (!tx) {\n return\n }\n if (!tx.lastCheckedBlockNumber) {\n tx.lastCheckedBlockNumber = blockNumber\n } else {\n tx.lastCheckedBlockNumber = Math.max(blockNumber, tx.lastCheckedBlockNumber)\n }\n })\n .addCase(finalizeTransaction, (transactions, { payload: { hash, chainId, receipt } }) => {\n const tx = transactions[chainId]?.[hash]\n if (!tx) {\n return\n }\n tx.receipt = receipt\n tx.confirmedTime = now()\n\n })\n .addCase(resetUserState, (transactions, { payload: { chainId, newChainId } }) => {\n if (!newChainId && transactions[chainId]) {\n transactions[chainId] = {}\n }\n }),\n)\n","import { Percent, Token } from '@pulsex/sdk'\nimport { ChainId } from '@pulsex/chains'\nimport { plsTokens } from '@pulsex/tokens'\nimport { ChainMap, ChainTokenList } from './types'\n\nexport const ROUTER_ADDRESS_V1: ChainMap = {\n [ChainId.PULSECHAIN]: '0x98bf93ebf5c380C0e6Ae8e192A7e2AE08edAcc02',\n [ChainId.PULSECHAIN_TESTNET]: '0xDaE9dd3d1A52CfCe9d5F2fAC7fDe164D500E50f7',\n}\n\nexport const ROUTER_ADDRESS_V2: ChainMap = {\n [ChainId.PULSECHAIN]: '0x165C3410fC91EF562C50559f7d2289fEbed552d9',\n [ChainId.PULSECHAIN_TESTNET]: '0x636f6407B90661b73b1C0F7e24F4C79f624d0738',\n}\n\n// used to construct intermediary pairs for trading\nexport const BASES_TO_CHECK_TRADES_AGAINST: ChainTokenList = {\n [ChainId.PULSECHAIN]: [plsTokens.wpls, plsTokens.plsx, plsTokens.inc, plsTokens.hex],\n [ChainId.PULSECHAIN_TESTNET]: [],\n}\n\n/**\n * Addittional bases for specific tokens\n * @example { [WBTC.address]: [renBTC], [renBTC.address]: [WBTC] }\n */\nexport const ADDITIONAL_BASES: { [chainId in ChainId]?: { [tokenAddress: string]: Token[] } } = {\n [ChainId.PULSECHAIN]: {},\n}\n\n/**\n * Some tokens can only be swapped via certain pairs, so we override the list of bases that are considered for these\n * tokens.\n * @example [AMPL.address]: [DAI, WETH[ChainId.MAINNET]]\n */\nexport const CUSTOM_BASES: { [chainId in ChainId]?: { [tokenAddress: string]: Token[] } } = {\n [ChainId.PULSECHAIN]: {},\n}\n\n// used for display in the default list when adding liquidity\nexport const SUGGESTED_BASES: ChainTokenList = {\n [ChainId.PULSECHAIN]: [\n plsTokens.plsx,\n plsTokens.hex,\n plsTokens.inc,\n plsTokens.dai,\n plsTokens.usdc,\n plsTokens.wpls,\n plsTokens.weth\n ],\n [ChainId.PULSECHAIN_TESTNET]: [],\n}\n\n// used to construct the list of all pairs we consider by default in the frontend\nexport const BASES_TO_TRACK_LIQUIDITY_FOR: ChainTokenList = {\n [ChainId.PULSECHAIN]: [plsTokens.wpls, plsTokens.hex],\n [ChainId.PULSECHAIN_TESTNET]: [],\n}\n\nexport const PINNED_PAIRS: { readonly [chainId in ChainId]?: [Token, Token][] } = {\n [ChainId.PULSECHAIN]: [\n [plsTokens.plsx, plsTokens.wpls],\n // [mainnetTokens.usdc, mainnetTokens.usdt],\n // [mainnetTokens.dai, mainnetTokens.usdt],\n ],\n}\n\nexport const NetworkContextName = 'NETWORK'\n\n// Second constants\nexport const HOUR_SECONDS = 3600\nexport const DAY_SECONDS = HOUR_SECONDS * 24\nexport const WEEK_SECONDS = DAY_SECONDS * 7\nexport const MONTH_SECONDS = DAY_SECONDS * 30\nexport const YEAR_SECONDS = DAY_SECONDS * 365\n\n// default allowed slippage, in bips\nexport const INITIAL_ALLOWED_SLIPPAGE = 50\n// 20 minutes, denominated in seconds\nexport const DEFAULT_DEADLINE_FROM_NOW = 60 * 20\n\nexport const BIG_INT_ZERO = 0n\nexport const BIG_INT_TEN = 10n\n\n// one basis point\nexport const BIPS_BASE = 10000n\nexport const ONE_BIPS = new Percent(1n, BIPS_BASE)\n\nexport const ZERO_PERCENT = new Percent('0')\nexport const ONE_HUNDRED_PERCENT = new Percent('1')\n\nexport const BASE_FEE = new Percent(29n, BIPS_BASE)\nexport const INPUT_FRACTION_AFTER_FEE = ONE_HUNDRED_PERCENT.subtract(BASE_FEE)\n// used for warning states\nexport const ALLOWED_PRICE_IMPACT_LOW: Percent = new Percent(100n, BIPS_BASE) // 1%\nexport const ALLOWED_PRICE_IMPACT_MEDIUM: Percent = new Percent(300n, BIPS_BASE) // 3%\nexport const ALLOWED_PRICE_IMPACT_HIGH: Percent = new Percent(500n, BIPS_BASE) // 5%\n// if the price slippage exceeds this number, force the user to type 'confirm' to execute\nexport const PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN: Percent = new Percent(1000n, BIPS_BASE) // 10%\n// for non expert mode disable swaps above this\nexport const BLOCKED_PRICE_IMPACT_NON_EXPERT: Percent = new Percent(1500n, BIPS_BASE) // 15%\n\n// used to ensure the user doesn't send so much PLS so they end up with <.01\nexport const MIN_PLS = BIG_INT_TEN ** 15n // .001 PLS\nexport const BETTER_TRADE_LESS_HOPS_THRESHOLD = new Percent(50n, BIPS_BASE)\n\n// SDN OFAC addresses\nexport const BLOCKED_ADDRESSES: string[] = [\n '0x01e2919679362dFBC9ee1644Ba9C6da6D6245BB1',\n '0x03893a7c7463AE47D46bc7f091665f1893656003',\n '0x04DBA1194ee10112fE6C3207C0687DEf0e78baCf',\n '0x05E0b5B40B7b66098C2161A5EE11C5740A3A7C45',\n '0x07687e702b410Fa43f4cB4Af7FA097918ffD2730',\n '0x0836222F2B2B24A3F36f98668Ed8F0B38D1a872f',\n '0x08723392Ed15743cc38513C4925f5e6be5c17243',\n '0x08b2eFdcdB8822EfE5ad0Eae55517cf5DC544251',\n '0x09193888b3f38C82dEdfda55259A82C0E7De875E',\n '0x098B716B8Aaf21512996dC57EB0615e2383E2f96',\n '0x0E3A09dDA6B20aFbB34aC7cD4A6881493f3E7bf7',\n '0x0Ee5067b06776A89CcC7dC8Ee369984AD7Db5e06',\n '0x12D66f87A04A9E220743712cE6d9bB1B5616B8Fc',\n '0x1356c899D8C9467C7f71C195612F8A395aBf2f0a',\n '0x169AD27A470D064DEDE56a2D3ff727986b15D52B',\n '0x178169B423a011fff22B9e3F3abeA13414dDD0F1',\n '0x179f48C78f57A3A78f0608cC9197B8972921d1D2',\n '0x1967D8Af5Bd86A497fb3DD7899A020e47560dAAF',\n '0x19Aa5Fe80D33a56D56c78e82eA5E50E5d80b4Dff',\n '0x1E34A77868E19A6647b1f2F47B51ed72dEDE95DD',\n '0x1da5821544e25c636c1417Ba96Ade4Cf6D2f9B5A',\n '0x22aaA7720ddd5388A3c0A3333430953C68f1849b',\n '0x23173fE8b96A4Ad8d2E17fB83EA5dcccdCa1Ae52',\n '0x23773E65ed146A459791799d01336DB287f25334',\n '0x242654336ca2205714071898f67E254EB49ACdCe',\n '0x2573BAc39EBe2901B4389CD468F2872cF7767FAF',\n '0x26903a5a198D571422b2b4EA08b56a37cbD68c89',\n '0x2717c5e28cf931547B621a5dddb772Ab6A35B701',\n '0x2F50508a8a3D323B91336FA3eA6ae50E55f32185',\n '0x2FC93484614a34f26F7970CBB94615bA109BB4bf',\n '0x2f389cE8bD8ff92De3402FFCe4691d17fC4f6535',\n '0x308eD4B7b49797e1A98D3818bFF6fe5385410370',\n '0x330bdFADE01eE9bF63C209Ee33102DD334618e0a',\n '0x35fB6f6DB4fb05e6A4cE86f2C93691425626d4b1',\n '0x39D908dac893CBCB53Cc86e0ECc369aA4DeF1A29',\n '0x3AD9dB589d201A710Ed237c829c7860Ba86510Fc',\n '0x3CBdeD43EFdAf0FC77b9C55F6fC9988fCC9b757d',\n '0x3Cffd56B47B7b41c56258D9C7731ABaDc360E073',\n '0x3aac1cC67c2ec5Db4eA850957b967Ba153aD6279',\n '0x3e37627dEAA754090fBFbb8bd226c1CE66D255e9',\n '0x3eFA30704D2b8BBAc821307230376556cF8CC39e',\n '0x407CcEeaA7c95d2FE2250Bf9F2c105aA7AAFB512',\n '0x4736dCf1b7A3d580672CcE6E7c65cd5cc9cFBa9D',\n '0x47CE0C6eD5B0Ce3d3A51fdb1C52DC66a7c3c2936',\n '0x48549A34AE37b12F6a30566245176994e17C6b4A',\n '0x4F47Bc496083C727c5fbe3CE9CDf2B0f6496270c',\n '0x502371699497d08D5339c870851898D6D72521Dd',\n '0x527653eA119F3E6a1F5BD18fbF4714081D7B31ce',\n '0x538Ab61E8A9fc1b2f93b3dd9011d662d89bE6FE6',\n '0x53b6936513e738f44FB50d2b9476730C0Ab3Bfc1',\n '0x5512d943eD1f7c8a43F3435C85F7aB68b30121b0',\n '0x57b2B8c82F065de8Ef5573f9730fC1449B403C9f',\n '0x58E8dCC13BE9780fC42E8723D8EaD4CF46943dF2',\n '0x5A14E72060c11313E38738009254a90968F58f51',\n '0x5cab7692D4E94096462119ab7bF57319726Eed2A',\n '0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce',\n '0x5f6c97C6AD7bdd0AE7E0Dd4ca33A4ED3fDabD4D7',\n '0x610B717796ad172B316836AC95a2ffad065CeaB4',\n '0x653477c392c16b0765603074f157314Cc4f40c32',\n '0x67d40EE1A85bf4a4Bb7Ffae16De985e8427B6b45',\n '0x6Bf694a291DF3FeC1f7e69701E3ab6c592435Ae7',\n '0x6F1cA141A28907F78Ebaa64fb83A9088b02A8352',\n '0x6aCDFBA02D390b97Ac2b2d42A63E85293BCc160e',\n '0x722122dF12D4e14e13Ac3b6895a86e84145b6967',\n '0x723B78e67497E85279CB204544566F4dC5d2acA0',\n '0x72a5843cc08275C8171E582972Aa4fDa8C397B2A',\n '0x743494b60097A2230018079c02fe21a7B687EAA5',\n '0x746Aebc06D2aE31B71ac51429A19D54E797878E9',\n '0x756C4628E57F7e7f8a459EC2752968360Cf4D1AA',\n '0x76D85B4C0Fc497EeCc38902397aC608000A06607',\n '0x776198CCF446DFa168347089d7338879273172cF',\n '0x77777FeDdddFfC19Ff86DB637967013e6C6A116C',\n '0x7Db418b5D567A4e0E8c59Ad71BE1FcE48f3E6107',\n '0x7F19720A857F834887FC9A7bC0a0fBe7Fc7f8102',\n '0x7F367cC41522cE07553e823bf3be79A889DEbe1B',\n '0x7FF9cFad3877F21d41Da833E2F775dB0569eE3D9',\n '0x8281Aa6795aDE17C8973e1aedcA380258Bc124F9',\n '0x833481186f16Cece3f1Eeea1a694c42034c3a0dB',\n '0x83E5bC4Ffa856BB84Bb88581f5Dd62A433A25e0D',\n '0x84443CFd09A48AF6eF360C6976C5392aC5023a1F',\n '0x8576aCC5C05D6Ce88f4e49bf65BdF0C62F91353C',\n '0x8589427373D6D84E98730D7795D8f6f8731FDA16',\n '0x88fd245fEdeC4A936e700f9173454D1931B4C307',\n '0x901bb9583b24D97e995513C6778dc6888AB6870e',\n '0x910Cbd523D972eb0a6f4cAe4618aD62622b39DbF',\n '0x94A1B5CdB22c43faab4AbEb5c74999895464Ddaf',\n '0x94Be88213a387E992Dd87DE56950a9aef34b9448',\n '0x94C92F096437ab9958fC0A37F09348f30389Ae79',\n '0x9AD122c22B14202B4490eDAf288FDb3C7cb3ff5E',\n '0x9F4cda013E354b8fC285BF4b9A60460cEe7f7Ea9',\n '0xA160cdAB225685dA1d56aa342Ad8841c3b53f291',\n '0xA60C772958a3eD56c1F15dD055bA37AC8e523a0D',\n '0xA7e5d5A720f06526557c513402f2e6B5fA20b008',\n '0xB20c66C4DE72433F3cE747b58B86830c459CA911',\n '0xBA214C1c1928a32Bffe790263E38B4Af9bFCD659',\n '0xC455f7fd3e0e12afd51fba5c106909934D8A0e4a',\n '0xCC84179FFD19A1627E79F8648d09e095252Bc418',\n '0xCEe71753C9820f063b38FDbE4cFDAf1d3D928A80',\n '0xCa0840578f57fE71599D29375e16783424023357',\n '0xD0975B32cEa532eaDDdFC9c60481976e39dB3472',\n '0xD21be7248e0197Ee08E0c20D4a96DEBdaC3D20Af',\n '0xD4B88Df4D29F5CedD6857912842cff3b20C8Cfa3',\n '0xD5d6f8D9e784d0e26222ad3834500801a68D027D',\n '0xD691F27f38B395864Ea86CfC7253969B409c362d',\n '0xD692Fd2D0b2Fbd2e52CFa5B5b9424bC981C30696',\n '0xD82ed8786D7c69DC7e052F7A542AB047971E73d2',\n '0xDD4c48C0B24039969fC16D1cdF626eaB821d3384',\n '0xDF3A408c53E5078af6e8fb2A85088D46Ee09A61b',\n '0xEFE301d259F525cA1ba74A7977b80D5b060B3ccA',\n '0xF60dD140cFf0706bAE9Cd734Ac3ae76AD9eBC32A',\n '0xF67721A2D8F736E75a49FdD7FAd2e31D8676542a',\n '0xF7B31119c2682c88d88D455dBb9d5932c65Cf1bE',\n '0xFD8610d20aA15b7B2E3Be39B396a1bC3516c7144',\n '0xa0e1c89Ef1a489c9C7dE96311eD5Ce5D32c20E4B',\n '0xa5C2254e4253490C54cef0a4347fddb8f75A4998',\n '0xaEaaC358560e11f52454D997AAFF2c5731B6f8a6',\n '0xaf4c0B70B2Ea9FB7487C7CbB37aDa259579fe040',\n '0xaf8d1839c3c67cf571aa74B5c12398d4901147B3',\n '0xb04E030140b30C27bcdfaafFFA98C57d80eDa7B4',\n '0xb1C8094B234DcE6e03f10a5b673c1d8C69739A00',\n '0xb541fc07bC7619fD4062A54d96268525cBC6FfEF',\n '0xbB93e510BbCD0B7beb5A853875f9eC60275CF498',\n '0xc2a3829F459B3Edd87791c74cD45402BA0a20Be3',\n '0xd47438C816c9E7f2E2888E060936a499Af9582b3',\n '0xd882cFc20F52f2599D84b8e8D58C7FB62cfE344b',\n '0xd8D7DE3349ccaA0Fde6298fe6D7b7d0d34586193',\n '0xd90e2f925DA726b50C4Ed8D0Fb90Ad053324F31b',\n '0xd96f2B1c14Db8458374d9Aca76E26c3D18364307',\n '0xdf231d99Ff8b6c6CBF4E9B9a945CBAcEF9339178',\n '0xe7aa314c77F4233C18C6CC84384A9247c0cf367B',\n '0xeDC5d01286f99A066559F60a585406f3878a033e',\n '0xf4B067dD14e95Bab89Be928c07Cb22E3c94E0DAA',\n '0xfEC8A60023265364D066a1212fDE3930F6Ae8da7',\n '0xffbaC21a641Dcfe4552920138D90F3638B3c9fba',\n]\n\nexport const FAST_INTERVAL = 10000\nexport const SLOW_INTERVAL = 60000\n\n// PLS\nexport const DEFAULT_INPUT_CURRENCY = {\n [ChainId.PULSECHAIN]: 'PLS',\n [ChainId.PULSECHAIN_TESTNET]: 'tPLS',\n}\n\n// PLSX\nexport const DEFAULT_OUTPUT_CURRENCY = {\n [ChainId.PULSECHAIN]: '0x95B303987A60C71504D99Aa1b13B4DA07b0790ab',\n [ChainId.PULSECHAIN_TESTNET]: '0x8a810ea8B121d08342E9e7696f4a9915cBE494B7',\n}\n\n// Handler string is passed to Gelato to use PCS router\nexport const GELATO_HANDLER = 'pulsex'\nexport const GENERIC_GAS_LIMIT_ORDER_EXECUTION = 500000n\n\nexport const EXCHANGE_PAGE_PATHS = ['/swap', 'liquidity', '/add', '/find', '/remove']\n","import { createAction } from '@reduxjs/toolkit'\nimport { SerializedWrappedToken } from '@pulsex/token-lists'\n\nexport interface SerializedPair {\n token0: SerializedWrappedToken\n token1: SerializedWrappedToken\n}\n\nexport enum FarmStakedOnly {\n ON_FINISHED = 'onFinished',\n TRUE = 'true',\n FALSE = 'false',\n}\n\nexport enum ViewMode {\n TABLE = 'TABLE',\n CARD = 'CARD',\n}\n\nexport enum ChartViewMode {\n BASIC = 'BASIC',\n TRADING_VIEW = 'TRADING_VIEW',\n}\n\nexport const updateUserExpertMode = createAction<{ userExpertMode: boolean }>('user/updateUserExpertMode')\nexport const updateUserSingleHopOnly = createAction<{ userSingleHopOnly: boolean }>('user/updateUserSingleHopOnly')\nexport const updateUserSlippageTolerance = createAction<{ userSlippageTolerance: number }>(\n 'user/updateUserSlippageTolerance',\n)\nexport const updateUserDeadline = createAction<{ userDeadline: number }>('user/updateUserDeadline')\nexport const addSerializedToken = createAction<{ serializedToken: SerializedWrappedToken }>('user/addSerializedToken')\nexport const removeSerializedToken = createAction<{ chainId: number; address: string }>('user/removeSerializedToken')\nexport const addSerializedPair = createAction<{ serializedPair: SerializedPair }>('user/addSerializedPair')\nexport const removeSerializedPair =\n createAction<{ chainId: number; tokenAAddress: string; tokenBAddress: string }>('user/removeSerializedPair')\n\nexport const muteAudio = createAction('user/muteAudio')\nexport const unmuteAudio = createAction('user/unmuteAudio')\nexport const toggleTheme = createAction('user/toggleTheme')\nexport const updateUserFarmStakedOnly = createAction<{ userFarmStakedOnly: FarmStakedOnly }>(\n 'user/updateUserFarmStakedOnly',\n)\nexport const updateUserPoolStakedOnly = createAction<{ userPoolStakedOnly: boolean }>('user/updateUserPoolStakedOnly')\nexport const updateUserPoolsViewMode = createAction<{ userPoolsViewMode: ViewMode }>('user/updateUserPoolsViewMode')\nexport const updateUserFarmsViewMode = createAction<{ userFarmsViewMode: ViewMode }>('user/updateUserFarmsViewMode')\nexport const updateUserPredictionAcceptedRisk = createAction<{ userAcceptedRisk: boolean }>(\n 'user/updateUserPredictionAcceptedRisk',\n)\nexport const updateUserPredictionChartDisclaimerShow = createAction<{ userShowDisclaimer: boolean }>(\n 'user/updateUserPredictionChartDisclaimerShow',\n)\nexport const updateUserExpertModeAcknowledgementShow = createAction<{ userExpertModeAcknowledgementShow: boolean }>(\n 'user/updateUserExpertModeAcknowledgementShow',\n)\nexport const updateUserUsernameVisibility = createAction<{ userUsernameVisibility: boolean }>(\n 'user/updateUserUsernameVisibility',\n)\nexport const updateGasPrice = createAction<{ gasPrice: string }>('user/updateGasPrice')\n\nexport const hidePhishingWarningBanner = createAction('user/hidePhishingWarningBanner')\n\nexport const setIsExchangeChartDisplayed = createAction('user/toggleIsExchangeChartDisplayed')\nexport const setChartViewMode = createAction('user/setChartViewMode')\nexport const setSubgraphHealthIndicatorDisplayed = createAction('user/setSubgraphHealthIndicatorDisplayed')\nexport const updateSmartRouter = createAction<{ userSmartRouterMode: boolean }>('user/userSmartRouterMode')\n","import { createReducer } from '@reduxjs/toolkit'\nimport { SerializedWrappedToken } from '@pulsex/token-lists'\nimport { DEFAULT_DEADLINE_FROM_NOW, INITIAL_ALLOWED_SLIPPAGE } from '../../config/constants/exchange'\nimport { updateVersion } from '../global/actions'\nimport {\n addSerializedPair,\n addSerializedToken,\n FarmStakedOnly,\n removeSerializedPair,\n removeSerializedToken,\n SerializedPair,\n muteAudio,\n toggleTheme,\n unmuteAudio,\n updateGasPrice,\n updateUserDeadline,\n updateUserExpertMode,\n updateUserFarmStakedOnly,\n updateUserFarmsViewMode,\n updateUserPoolStakedOnly,\n updateUserPoolsViewMode,\n updateUserSingleHopOnly,\n updateUserSlippageTolerance,\n ViewMode,\n updateUserPredictionAcceptedRisk,\n updateUserPredictionChartDisclaimerShow,\n updateUserUsernameVisibility,\n updateUserExpertModeAcknowledgementShow,\n hidePhishingWarningBanner,\n setIsExchangeChartDisplayed,\n setChartViewMode,\n ChartViewMode,\n setSubgraphHealthIndicatorDisplayed,\n updateSmartRouter,\n} from './actions'\n\nconst currentTimestamp = () => new Date().getTime()\n\nexport interface UserState {\n // the timestamp of the last updateVersion action\n lastUpdateVersionTimestamp?: number\n\n userExpertMode: boolean\n\n // only allow swaps on direct pairs\n userSingleHopOnly: boolean\n\n // user defined slippage tolerance in bips, used in all txns\n userSlippageTolerance: number\n\n // deadline set by user in minutes, used in all txns\n userDeadline: number\n\n tokens: {\n [chainId: number]: {\n [address: string]: SerializedWrappedToken\n }\n }\n\n pairs: {\n [chainId: number]: {\n // keyed by token0Address:token1Address\n [key: string]: SerializedPair\n }\n }\n\n timestamp: number\n audioPlay: boolean\n isDark: boolean\n isExchangeChartDisplayed: boolean\n isSubgraphHealthIndicatorDisplayed: boolean\n userChartViewMode: ChartViewMode\n userFarmStakedOnly: FarmStakedOnly\n userPoolStakedOnly: boolean\n userPoolsViewMode: ViewMode\n userFarmsViewMode: ViewMode\n userPredictionAcceptedRisk: boolean\n userPredictionChartDisclaimerShow: boolean\n userExpertModeAcknowledgementShow: boolean\n userUsernameVisibility: boolean\n gasPrice: string\n watchlistTokens: string[]\n watchlistPools: string[]\n hideTimestampPhishingWarningBanner: number\n userSmartRouterMode: boolean\n}\n\nfunction pairKey(token0Address: string, token1Address: string) {\n return `${token0Address};${token1Address}`\n}\n\nexport const initialState: UserState = {\n userExpertMode: false,\n userSingleHopOnly: false,\n userSlippageTolerance: INITIAL_ALLOWED_SLIPPAGE,\n userDeadline: DEFAULT_DEADLINE_FROM_NOW,\n tokens: {},\n pairs: {},\n timestamp: currentTimestamp(),\n audioPlay: false,\n isDark: true,\n isExchangeChartDisplayed: false,\n isSubgraphHealthIndicatorDisplayed: false,\n userChartViewMode: ChartViewMode.BASIC,\n userFarmStakedOnly: FarmStakedOnly.ON_FINISHED,\n userPoolStakedOnly: false,\n userPoolsViewMode: ViewMode.TABLE,\n userFarmsViewMode: ViewMode.TABLE,\n userPredictionAcceptedRisk: false,\n userPredictionChartDisclaimerShow: true,\n userExpertModeAcknowledgementShow: true,\n userUsernameVisibility: false,\n gasPrice: null,\n watchlistTokens: [],\n watchlistPools: [],\n hideTimestampPhishingWarningBanner: null,\n userSmartRouterMode: true,\n}\n\nexport default createReducer(initialState, (builder) =>\n builder\n .addCase(updateVersion, (state) => {\n // slippage isnt being tracked in local storage, reset to default\n // noinspection SuspiciousTypeOfGuard\n if (typeof state.userSlippageTolerance !== 'number') {\n state.userSlippageTolerance = INITIAL_ALLOWED_SLIPPAGE\n }\n\n // deadline isnt being tracked in local storage, reset to default\n // noinspection SuspiciousTypeOfGuard\n if (typeof state.userDeadline !== 'number') {\n state.userDeadline = DEFAULT_DEADLINE_FROM_NOW\n }\n\n state.lastUpdateVersionTimestamp = currentTimestamp()\n })\n .addCase(updateUserExpertMode, (state, action) => {\n state.userExpertMode = action.payload.userExpertMode\n state.timestamp = currentTimestamp()\n })\n .addCase(updateUserSlippageTolerance, (state, action) => {\n state.userSlippageTolerance = action.payload.userSlippageTolerance\n state.timestamp = currentTimestamp()\n })\n .addCase(updateUserDeadline, (state, action) => {\n state.userDeadline = action.payload.userDeadline\n state.timestamp = currentTimestamp()\n })\n .addCase(updateUserSingleHopOnly, (state, action) => {\n state.userSingleHopOnly = action.payload.userSingleHopOnly\n })\n .addCase(addSerializedToken, (state, { payload: { serializedToken } }) => {\n if (!state.tokens) {\n state.tokens = {}\n }\n state.tokens[serializedToken.chainId] = state.tokens[serializedToken.chainId] || {}\n state.tokens[serializedToken.chainId][serializedToken.address] = serializedToken\n state.timestamp = currentTimestamp()\n })\n .addCase(removeSerializedToken, (state, { payload: { address, chainId } }) => {\n if (!state.tokens) {\n state.tokens = {}\n }\n state.tokens[chainId] = state.tokens[chainId] || {}\n delete state.tokens[chainId][address]\n state.timestamp = currentTimestamp()\n })\n .addCase(addSerializedPair, (state, { payload: { serializedPair } }) => {\n if (\n serializedPair.token0.chainId === serializedPair.token1.chainId &&\n serializedPair.token0.address !== serializedPair.token1.address\n ) {\n const { chainId } = serializedPair.token0\n state.pairs[chainId] = state.pairs[chainId] || {}\n state.pairs[chainId][pairKey(serializedPair.token0.address, serializedPair.token1.address)] = serializedPair\n }\n state.timestamp = currentTimestamp()\n })\n .addCase(removeSerializedPair, (state, { payload: { chainId, tokenAAddress, tokenBAddress } }) => {\n if (state.pairs[chainId]) {\n // just delete both keys if either exists\n delete state.pairs[chainId][pairKey(tokenAAddress, tokenBAddress)]\n delete state.pairs[chainId][pairKey(tokenBAddress, tokenAAddress)]\n }\n state.timestamp = currentTimestamp()\n })\n .addCase(muteAudio, (state) => {\n state.audioPlay = false\n })\n .addCase(unmuteAudio, (state) => {\n state.audioPlay = true\n })\n .addCase(toggleTheme, (state) => {\n state.isDark = !state.isDark\n })\n .addCase(updateUserFarmStakedOnly, (state, { payload: { userFarmStakedOnly } }) => {\n state.userFarmStakedOnly = userFarmStakedOnly\n })\n .addCase(updateUserPoolStakedOnly, (state, { payload: { userPoolStakedOnly } }) => {\n state.userPoolStakedOnly = userPoolStakedOnly\n })\n .addCase(updateUserPoolsViewMode, (state, { payload: { userPoolsViewMode } }) => {\n state.userPoolsViewMode = userPoolsViewMode\n })\n .addCase(updateUserFarmsViewMode, (state, { payload: { userFarmsViewMode } }) => {\n state.userFarmsViewMode = userFarmsViewMode\n })\n .addCase(updateUserPredictionAcceptedRisk, (state, { payload: { userAcceptedRisk } }) => {\n state.userPredictionAcceptedRisk = userAcceptedRisk\n })\n .addCase(updateUserPredictionChartDisclaimerShow, (state, { payload: { userShowDisclaimer } }) => {\n state.userPredictionChartDisclaimerShow = userShowDisclaimer\n })\n .addCase(updateUserExpertModeAcknowledgementShow, (state, { payload: { userExpertModeAcknowledgementShow } }) => {\n state.userExpertModeAcknowledgementShow = userExpertModeAcknowledgementShow\n })\n .addCase(updateUserUsernameVisibility, (state, { payload: { userUsernameVisibility } }) => {\n state.userUsernameVisibility = userUsernameVisibility\n })\n .addCase(updateGasPrice, (state, action) => {\n state.gasPrice = action.payload.gasPrice\n })\n .addCase(hidePhishingWarningBanner, (state) => {\n state.hideTimestampPhishingWarningBanner = currentTimestamp()\n })\n .addCase(setIsExchangeChartDisplayed, (state, { payload }) => {\n state.isExchangeChartDisplayed = payload\n })\n .addCase(setChartViewMode, (state, { payload }) => {\n state.userChartViewMode = payload\n })\n .addCase(setSubgraphHealthIndicatorDisplayed, (state, { payload }) => {\n state.isSubgraphHealthIndicatorDisplayed = payload\n })\n .addCase(updateSmartRouter, (state, { payload: { userSmartRouterMode } }) => {\n state.userSmartRouterMode = userSmartRouterMode\n })\n)\n","/* eslint-disable no-param-reassign */\nimport { createReducer } from '@reduxjs/toolkit'\nimport { ChainId } from '@pulsex/chains'\nimport { toggleFarmTransactionModal, pickFarmTransactionTx } from './actions'\n\nexport interface GlobalState {\n showFarmTransactionModal: boolean\n pickedFarmTransactionModalTx: {\n tx: string\n chainId: ChainId\n }\n}\n\nexport const initialState: GlobalState = {\n showFarmTransactionModal: false,\n pickedFarmTransactionModalTx: {\n tx: '',\n chainId: ChainId.PULSECHAIN,\n },\n}\n\nexport default createReducer(initialState, (builder) =>\n builder\n .addCase(toggleFarmTransactionModal, (state, { payload: { showModal } }) => {\n state.showFarmTransactionModal = showModal\n })\n .addCase(pickFarmTransactionTx, (state, { payload: { tx, chainId } }) => {\n state.pickedFarmTransactionModalTx = { tx, chainId }\n state.showFarmTransactionModal = true\n }),\n)\n","import { combineReducers, configureStore } from '@reduxjs/toolkit'\nimport { setupListeners } from '@reduxjs/toolkit/query/react'\nimport { load, save } from 'redux-localstorage-simple'\nimport { useDispatch } from 'react-redux'\nimport { FLUSH, PAUSE, PERSIST, persistReducer, persistStore, PURGE, REGISTER, REHYDRATE } from 'redux-persist'\nimport storage from 'redux-persist/lib/storage'\nimport farmsReducer from './farms'\nimport { updateVersion } from './global/actions'\nimport poolsReducer from './pools'\nimport transactions from './transactions/reducer'\nimport user from './user/reducer'\nimport globalReducer from './global/reducer'\n\nexport function isTestEnv(): boolean {\n return process.env.NODE_ENV === 'test'\n}\n\nconst PERSISTED_KEYS: string[] = ['user', 'transactions']\n\nconst persistConfig = {\n key: 'primary',\n whitelist: PERSISTED_KEYS,\n blacklist: ['profile'],\n storage,\n version: 1,\n}\n\nconst persistedReducer = persistReducer(\n persistConfig,\n combineReducers({\n global: globalReducer,\n farms: farmsReducer,\n pools: poolsReducer,\n\n // Exchange\n user,\n transactions,\n }),\n)\n\nconst store = configureStore({\n reducer: persistedReducer,\n middleware: (getDefaultMiddleware) =>\n getDefaultMiddleware({\n thunk: true,\n serializableCheck: {\n ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],\n },\n })\n .concat(save({ states: PERSISTED_KEYS, debounce: 1000 })),\n preloadedState: load({ states: PERSISTED_KEYS, disableWarnings: isTestEnv() }),\n})\n\nstore.dispatch(updateVersion())\n\nsetupListeners(store.dispatch)\n\nexport default store\n\n/**\n * @see https://redux-toolkit.js.org/usage/usage-with-typescript#getting-the-dispatch-type\n */\nexport type AppDispatch = typeof store.dispatch\nexport type AppState = ReturnType\nexport const useAppDispatch = () => useDispatch()\n\nexport const persistor = persistStore(store, undefined, () => {\n store.dispatch(updateVersion())\n})\n","import { Dispatch } from '@reduxjs/toolkit'\nimport { resetUserState, toggleFarmTransactionModal } from 'state/global/actions'\n\nexport const clearUserStates = (\n dispatch: Dispatch,\n {\n chainId,\n newChainId,\n }: {\n chainId?: number\n newChainId?: number\n },\n) => {\n dispatch(resetUserState({ chainId, newChainId }))\n dispatch(toggleFarmTransactionModal({ showModal: false }))\n}\n","import { atom, useAtom } from 'jotai'\n\nconst sessionChainIdAtom = atom(0)\n\nexport const useSessionChainId = () => {\n return useAtom(sessionChainIdAtom)\n}\n","import { ChainId } from '@pulsex/chains'\nimport { atom, useAtomValue } from 'jotai'\nimport { useLocation } from 'react-router'\nimport React, { useDeferredValue } from 'react'\nimport { useNetwork } from 'wagmi'\nimport { isChainSupported } from 'utils/wagmi'\nimport { getChainId } from 'config/chains'\nimport { useSessionChainId } from './useSessionChainId'\n\nconst queryChainIdAtom = atom(-1) // -1 unload, 0 no chainId on query\n\nqueryChainIdAtom.onMount = (set) => {\n const params = new URL(window.location.href).searchParams\n let chainId\n // chain has higher priority than chainId\n // keep chainId for backward compatible\n const c = params.get('chain')\n if (!c) {\n chainId = params.get('chainId')\n } else {\n chainId = getChainId(c)\n }\n if (isChainSupported(+chainId)) {\n set(+chainId)\n } else {\n set(0)\n }\n}\n\nexport function useLocalNetworkChain() {\n const [sessionChainId] = useSessionChainId()\n // useRouter is kind of slow, we only get this query chainId once\n const queryChainId = useAtomValue(queryChainIdAtom)\n\n function useQuery() {\n const { search } = useLocation();\n return React.useMemo(() => new URLSearchParams(search), [search]);\n }\n const query = useQuery()\n const chainQuery = query.get(\"chainId\")\n\n const chainId = +(sessionChainId || getChainId(chainQuery as string) || queryChainId)\n\n if (isChainSupported(chainId)) {\n return chainId\n }\n\n return undefined\n}\n\nexport const useActiveChainId = () => {\n const localChainId = useLocalNetworkChain()\n const queryChainId = useAtomValue(queryChainIdAtom)\n\n const { chain } = useNetwork()\n const chainId = localChainId ?? chain?.id ?? (queryChainId >= 0 ? ChainId.PULSECHAIN : undefined)\n \n const isNotMatched = useDeferredValue(chain && localChainId && chain.id !== localChainId)\n\n return {\n chainId,\n isWrongNetwork: (chain?.unsupported ?? false) || isNotMatched,\n isNotMatched,\n }\n}\n","import { useEffect, useMemo } from 'react'\nimport { ExtendEthereum } from 'global'\nimport { useLocation } from 'react-router'\nimport { createSearchParams, useNavigate } from 'react-router-dom'\nimport { ConnectorData, useAccount } from 'wagmi'\nimport { CHAIN_QUERY_NAME } from 'config/chains'\nimport { useAppDispatch } from 'state'\nimport { clearUserStates } from 'utils/clearUserStates'\nimport { useSessionChainId } from './useSessionChainId'\nimport { useActiveChainId } from './useActiveChainId'\n\nexport const useAccountEventListener = () => {\n const { chainId } = useActiveChainId()\n const { connector, address } = useAccount()\n const [, setSessionChainId] = useSessionChainId()\n const navigate = useNavigate()\n const { pathname } = useLocation()\n const dispatch = useAppDispatch()\n\n const isBloctoMobileApp = useMemo(() => {\n return typeof window !== 'undefined' && Boolean((window.ethereum as ExtendEthereum)?.isBlocto)\n }, [])\n\n useEffect(() => {\n if (address && connector) {\n const handleUpdateEvent = (e: ConnectorData) => {\n if (e?.chain?.id && !(e?.chain?.unsupported ?? false)) {\n navigate({\n pathname,\n search: createSearchParams({ chain: CHAIN_QUERY_NAME[e.chain.id] }).toString(),\n },\n { replace: true }\n )\n setSessionChainId(e.chain.id)\n }\n // Blocto in-app browser throws change event when no account change which causes user state reset therefore\n // this event should not be handled to avoid unexpected behaviour.\n if (!isBloctoMobileApp) {\n clearUserStates(dispatch, { chainId, newChainId: e?.chain?.id })\n }\n }\n\n const handleDeactiveEvent = () => {\n clearUserStates(dispatch, { chainId })\n }\n\n connector.addListener('disconnect', handleDeactiveEvent)\n connector.addListener('change', handleUpdateEvent)\n\n return () => {\n connector.removeListener('disconnect', handleDeactiveEvent)\n connector.removeListener('change', handleUpdateEvent)\n }\n }\n return undefined\n }, [address, chainId, connector, dispatch, navigate, pathname, setSessionChainId, isBloctoMobileApp])\n}\n","import { CHAINS } from '@pulsex/chains'\nimport { useConfig, useConnect } from 'wagmi'\nimport { useEffect } from 'react'\n\nconst useEagerConnect = () => {\n const config = useConfig()\n const { connectAsync, connectors } = useConnect()\n useEffect(() => {\n if (\n !(typeof window === 'undefined') &&\n window?.parent !== window &&\n // @ts-ignore\n !window.cy\n ) {\n import('wagmi/connectors/safe').then(({ SafeConnector }) => {\n const safe = new SafeConnector({ chains: CHAINS })\n connectAsync({ connector: safe }).catch(() => {\n config.autoConnect()\n })\n })\n } else {\n config.autoConnect()\n }\n }, [config, connectAsync, connectors])\n}\n\nexport default useEagerConnect\n","import { useEffect } from 'react'\n\nconst useUserAgent = () => {\n useEffect(() => {\n document.documentElement.setAttribute('data-useragent', navigator.userAgent)\n }, [])\n}\n\nexport default useUserAgent\n","import { atom, useAtom } from 'jotai'\n\nconst switchNetworkLoadingAtom = atom(false)\n\nexport const useSwitchNetworkLoading = () => {\n return useAtom(switchNetworkLoadingAtom)\n}\n","import { useWeb3React } from '@pulsex/wagmi'\nimport { useLocation } from 'react-router'\nimport { createSearchParams, useNavigate, useSearchParams } from \"react-router-dom\"\nimport { useEffect, useRef } from 'react'\nimport { ChainId } from '@pulsex/chains'\nimport { isChainSupported } from 'utils/wagmi'\nimport { CHAIN_QUERY_NAME, getChainId } from 'config/chains'\nimport { useActiveChainId } from './useActiveChainId'\nimport { useSwitchNetworkLoading } from './useSwitchNetworkLoading'\n\n// TODO: workaround React Hash router does not work well with query params\n// This hook is only used by NetworkSwitcher component that we dont use currently\n\nexport function useNetworkConnectorUpdater() {\n const { chainId } = useActiveChainId()\n const previousChainIdRef = useRef(chainId)\n const [loading] = useSwitchNetworkLoading()\n const { hash: uriHash } = useLocation()\n const navigate = useNavigate()\n const [searchParams] = useSearchParams()\n const chainQuery = searchParams.get(\"chain\")\n\n useEffect(() => {\n const setPrevChainId = () => {\n previousChainIdRef.current = chainId\n }\n if (loading) return setPrevChainId()\n const parsedQueryChainId = getChainId(chainQuery as string)\n\n if (!parsedQueryChainId && chainId === ChainId.PULSECHAIN) return setPrevChainId()\n if (parsedQueryChainId !== chainId && isChainSupported(chainId)) {\n navigate({\n search: createSearchParams({ chain: CHAIN_QUERY_NAME[chainId] }).toString(),\n hash: uriHash\n },\n { replace: true }\n )\n }\n return setPrevChainId()\n }, [chainId, chainQuery, loading, navigate, uriHash])\n}\n\n/**\n * Provides a web3 provider with or without user's signer\n * Recreate web3 instance only if the provider change\n */\nconst useActiveWeb3React = () => {\n const web3React = useWeb3React()\n const { chainId, isWrongNetwork } = useActiveChainId()\n\n return {\n ...web3React,\n chainId,\n isWrongNetwork,\n }\n}\n\nexport default useActiveWeb3React\n","import { __async } from './chunk-MYWZT2KK.mjs';\nimport { useNetwork, useAccount, useSignMessage as useSignMessage$1 } from 'wagmi';\nimport { useCallback } from 'react';\n\nfunction useWeb3React() {\n const { chain } = useNetwork();\n const { address, connector, isConnected, isConnecting } = useAccount();\n return {\n chainId: chain == null ? void 0 : chain.id,\n account: isConnected ? address : null,\n // TODO: migrate using `isConnected` instead of account to check wallet auth\n isConnected,\n isConnecting,\n chain,\n connector\n };\n}\nfunction useSignMessage() {\n const { address, connector } = useAccount();\n const { signMessageAsync: sign } = useSignMessage$1();\n return {\n signMessageAsync: useCallback(\n (args) => __async(this, null, function* () {\n var _a, _b;\n if ((connector == null ? void 0 : connector.id) === \"bsc\" && window.BinanceChain && address) {\n const res = yield (_b = (_a = window.BinanceChain).bnbSign) == null ? void 0 : _b.call(_a, address, args.message);\n if (res) {\n return res.signature;\n }\n return null;\n }\n return sign(args);\n }),\n [address, connector == null ? void 0 : connector.id, sign]\n )\n };\n}\n\nexport { useSignMessage, useWeb3React };\n","import { Currency } from '@pulsex/sdk'\nimport { ChainId, pulsechain } from '@pulsex/chains'\nimport { TokenAddressMap } from '@pulsex/token-lists'\nimport { Address, getAddress } from 'viem'\nimport memoize from 'lodash/memoize'\nimport { BASE_PULSECHAIN_SCAN_URLS } from '../config'\nimport { chains } from './wagmi'\n\n// returns the checksummed address if the address is valid, otherwise returns undefined\nexport const safeGetAddress = memoize((value: any): Address | undefined => {\n try {\n let value_ = value\n if (typeof value === 'string' && !value.startsWith('0x')) {\n value_ = `0x${value}`\n }\n return getAddress(value_)\n } catch {\n return undefined\n }\n})\n\nexport function getBlockExplorerLink(\n data: string | number,\n type: 'transaction' | 'token' | 'address' | 'block' | 'countdown',\n chainIdOverride?: number,\n): string {\n const chainId = chainIdOverride || ChainId.PULSECHAIN\n const chain = chains.find((c) => c.id === chainId)\n if (!chain) return pulsechain.blockExplorers.default.url\n switch (type) {\n case 'transaction': {\n return `${BASE_PULSECHAIN_SCAN_URLS[chainId]}/tx/${data}`\n }\n case 'token': {\n return `${BASE_PULSECHAIN_SCAN_URLS[chainId]}/token/${data}`\n }\n case 'block': {\n return `${BASE_PULSECHAIN_SCAN_URLS[chainId]}/block/${data}`\n }\n case 'countdown': {\n return `${BASE_PULSECHAIN_SCAN_URLS[chainId]}/block/countdown/${data}`\n }\n default: {\n return `${BASE_PULSECHAIN_SCAN_URLS[chainId]}/address/${data}`\n }\n }\n}\n\nexport function getBlockExploreName(chainIdOverride?: number) {\n const chainId = chainIdOverride || ChainId.PULSECHAIN\n const chain = chains.find((c) => c.id === chainId)\n\n return chain?.blockExplorers?.default.name || pulsechain.blockExplorers.default.name\n}\n\nexport function getPulseScanLinkForNft(\n collectionAddress: string,\n tokenId: string,\n chainId: ChainId = ChainId.PULSECHAIN,\n): string {\n return `${BASE_PULSECHAIN_SCAN_URLS[chainId]}/token/${collectionAddress}?a=${tokenId}`\n}\n\n// add 100%\nexport function calculateGasMargin(value: bigint, margin = 10000n): bigint {\n return (value * (10000n + margin)) / 10000n\n}\n\nexport function escapeRegExp(string: string): string {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&') // $& means the whole matched string\n}\n\nexport function isTokenOnList(defaultTokens: TokenAddressMap, currency?: Currency): boolean {\n if (currency?.isNative) return true\n return Boolean(currency?.isToken && defaultTokens[currency.chainId]?.[currency.address])\n}\n","export function enumValues(enumObj: { [key: string]: T }): IterableIterator\nexport function enumValues(enumObj: {\n [key: string]: T\n}): IterableIterator>\nexport function* enumValues(enumObj: { [key: string]: T }): IterableIterator {\n let isStringEnum = true\n for (const property in enumObj) {\n if (typeof enumObj[property] === 'number') {\n isStringEnum = false\n break\n }\n }\n for (const property in enumObj) {\n if (isStringEnum || typeof enumObj[property] === 'number') {\n yield enumObj[property]\n }\n }\n}\n","import { ChainId } from '@pulsex/chains'\n\nexport const PLSX_EXTENDED = 'https://tokens.app.pulsex.com/pulsex-extended.tokenlist.json'\n\nconst PULSECHAIN_URLS = [PLSX_EXTENDED]\n\n// List of official tokens list\nexport const OFFICIAL_LISTS = [PLSX_EXTENDED]\n\nexport const UNSUPPORTED_LIST_URLS: string[] = []\nexport const WARNING_LIST_URLS: string[] = []\n\n// lower index == higher priority for token import\nexport const DEFAULT_LIST_OF_LISTS: string[] = [\n ...PULSECHAIN_URLS,\n ...UNSUPPORTED_LIST_URLS, // need to load unsupported tokens as well\n]\n\n// default lists to be 'active' aka searched across\nexport const DEFAULT_ACTIVE_LIST_URLS: string[] = [\n PLSX_EXTENDED\n]\n\nexport const MULTI_CHAIN_LIST_URLS: { [chainId: number]: string[] } = {\n [ChainId.PULSECHAIN]: PULSECHAIN_URLS,\n [ChainId.PULSECHAIN_TESTNET]: [],\n}\n","import {\n getVersionUpgrade\n} from \"./chunk-3ODAR5LU.mjs\";\nimport {\n __async,\n __spreadProps,\n __spreadValues\n} from \"./chunk-2L3ZO4UM.mjs\";\n\n// react/reducer.ts\nimport { createReducer } from \"@reduxjs/toolkit\";\n\n// react/actions.ts\nimport { createAction } from \"@reduxjs/toolkit\";\nvar fetchTokenList = {\n pending: createAction(\"lists/fetchTokenList/pending\"),\n fulfilled: createAction(\"lists/fetchTokenList/fulfilled\"),\n rejected: createAction(\"lists/fetchTokenList/rejected\")\n};\nvar addList = createAction(\"lists/addList\");\nvar removeList = createAction(\"lists/removeList\");\nvar enableList = createAction(\"lists/enableList\");\nvar disableList = createAction(\"lists/disableList\");\nvar acceptListUpdate = createAction(\"lists/acceptListUpdate\");\nvar rejectVersionUpdate = createAction(\"lists/rejectVersionUpdate\");\nvar updateListVersion = createAction(\"lists/updateListVersion\");\n\n// react/reducer.ts\nvar NEW_LIST_STATE = {\n error: null,\n current: null,\n loadingRequestId: null,\n pendingUpdate: null\n};\nvar createTokenListReducer = (initialState, DEFAULT_LIST_OF_LISTS, DEFAULT_ACTIVE_LIST_URLS) => createReducer(\n initialState,\n (builder) => builder.addCase(fetchTokenList.pending, (state, { payload: { requestId, url } }) => {\n var _a, _b, _c, _d;\n const current = (_b = (_a = state.byUrl[url]) == null ? void 0 : _a.current) != null ? _b : null;\n const pendingUpdate = (_d = (_c = state.byUrl[url]) == null ? void 0 : _c.pendingUpdate) != null ? _d : null;\n state.byUrl[url] = {\n current,\n pendingUpdate,\n loadingRequestId: requestId,\n error: null\n };\n }).addCase(fetchTokenList.fulfilled, (state, { payload: { requestId, tokenList, url } }) => {\n var _a, _b;\n const current = (_a = state.byUrl[url]) == null ? void 0 : _a.current;\n const loadingRequestId = (_b = state.byUrl[url]) == null ? void 0 : _b.loadingRequestId;\n if (current) {\n const upgradeType = getVersionUpgrade(current.version, tokenList.version);\n if (upgradeType === 0 /* NONE */)\n return;\n if (loadingRequestId === null || loadingRequestId === requestId) {\n state.byUrl[url] = __spreadProps(__spreadValues({}, state.byUrl[url]), {\n loadingRequestId: null,\n error: null,\n current,\n pendingUpdate: tokenList\n });\n }\n } else {\n if (DEFAULT_ACTIVE_LIST_URLS.includes(url) && state.activeListUrls && !state.activeListUrls.includes(url)) {\n state.activeListUrls.push(url);\n }\n state.byUrl[url] = __spreadProps(__spreadValues({}, state.byUrl[url]), {\n loadingRequestId: null,\n error: null,\n current: tokenList,\n pendingUpdate: null\n });\n }\n }).addCase(fetchTokenList.rejected, (state, { payload: { url, requestId, errorMessage } }) => {\n var _a;\n if (((_a = state.byUrl[url]) == null ? void 0 : _a.loadingRequestId) !== requestId) {\n return;\n }\n state.byUrl[url] = __spreadProps(__spreadValues({}, state.byUrl[url]), {\n loadingRequestId: null,\n error: errorMessage,\n current: null,\n pendingUpdate: null\n });\n }).addCase(addList, (state, { payload: url }) => {\n if (!state.byUrl[url]) {\n state.byUrl[url] = NEW_LIST_STATE;\n }\n }).addCase(removeList, (state, { payload: url }) => {\n if (state.byUrl[url]) {\n delete state.byUrl[url];\n }\n if (state.activeListUrls && state.activeListUrls.includes(url)) {\n state.activeListUrls = state.activeListUrls.filter((u) => u !== url);\n }\n }).addCase(enableList, (state, { payload: url }) => {\n if (!state.byUrl[url]) {\n state.byUrl[url] = NEW_LIST_STATE;\n }\n if (state.activeListUrls && !state.activeListUrls.includes(url)) {\n state.activeListUrls.push(url);\n }\n if (!state.activeListUrls) {\n state.activeListUrls = [url];\n }\n }).addCase(disableList, (state, { payload: url }) => {\n if (state.activeListUrls && state.activeListUrls.includes(url)) {\n state.activeListUrls = state.activeListUrls.filter((u) => u !== url);\n }\n }).addCase(acceptListUpdate, (state, { payload: url }) => {\n var _a;\n if (!((_a = state.byUrl[url]) == null ? void 0 : _a.pendingUpdate)) {\n throw new Error(\"accept list update called without pending update\");\n }\n state.byUrl[url] = __spreadProps(__spreadValues({}, state.byUrl[url]), {\n pendingUpdate: null,\n current: state.byUrl[url].pendingUpdate\n });\n }).addCase(updateListVersion, (state) => {\n if (!state.lastInitializedDefaultListOfLists) {\n state.byUrl = initialState.byUrl;\n state.activeListUrls = initialState.activeListUrls;\n } else if (state.lastInitializedDefaultListOfLists) {\n const lastInitializedSet = state.lastInitializedDefaultListOfLists.reduce(\n (s, l) => s.add(l),\n /* @__PURE__ */ new Set()\n );\n const newListOfListsSet = DEFAULT_LIST_OF_LISTS.reduce((s, l) => s.add(l), /* @__PURE__ */ new Set());\n DEFAULT_LIST_OF_LISTS.forEach((listUrl) => {\n if (!lastInitializedSet.has(listUrl)) {\n state.byUrl[listUrl] = NEW_LIST_STATE;\n }\n });\n state.lastInitializedDefaultListOfLists.forEach((listUrl) => {\n if (!newListOfListsSet.has(listUrl)) {\n delete state.byUrl[listUrl];\n }\n });\n }\n state.lastInitializedDefaultListOfLists = DEFAULT_LIST_OF_LISTS;\n if (!state.activeListUrls) {\n state.activeListUrls = DEFAULT_ACTIVE_LIST_URLS;\n DEFAULT_ACTIVE_LIST_URLS.forEach((listUrl) => {\n if (!state.byUrl[listUrl]) {\n state.byUrl[listUrl] = NEW_LIST_STATE;\n }\n return true;\n });\n }\n })\n);\n\n// react/lists.ts\nimport { atom, useAtom, useAtomValue } from \"jotai\";\nimport { atomWithStorage, loadable } from \"jotai/utils\";\nimport localForage from \"localforage\";\nfunction noop() {\n}\nvar noopStorage = {\n getItem: () => Promise.resolve(noop()),\n setItem: () => Promise.resolve(noop()),\n removeItem: () => Promise.resolve(noop())\n};\nvar EMPTY = Symbol();\nvar createListsAtom = (storeName, reducer, initialState) => {\n function IndexedDBStorage(dbName) {\n if (typeof window !== \"undefined\") {\n const db = localForage.createInstance({\n name: dbName,\n storeName\n });\n return {\n getItem: (key) => __async(this, null, function* () {\n const value = yield db.getItem(key);\n if (value) {\n return value;\n }\n return initialState;\n }),\n setItem: (k, v) => __async(this, null, function* () {\n if (v === EMPTY)\n return;\n yield db.setItem(k, v);\n }),\n removeItem: db.removeItem\n };\n }\n return noopStorage;\n }\n const listsStorageAtom = atomWithStorage(\"lists\", EMPTY, IndexedDBStorage(\"lists\"));\n const defaultStateAtom = atom(\n (get) => {\n const value = get(loadable(listsStorageAtom));\n if (value.state === \"hasData\" && value.data !== EMPTY) {\n return value.data;\n }\n return initialState;\n },\n (get, set, action) => __async(void 0, null, function* () {\n set(listsStorageAtom, reducer(yield get(defaultStateAtom), action));\n })\n );\n const isReadyAtom = loadable(listsStorageAtom);\n function useListState() {\n return useAtom(defaultStateAtom);\n }\n function useListStateReady() {\n const value = useAtomValue(isReadyAtom);\n return value.state === \"hasData\" && value.data !== EMPTY;\n }\n return {\n listsAtom: defaultStateAtom,\n useListStateReady,\n useListState\n };\n};\n\n// react/useFetchListCallback.ts\nimport { nanoid } from \"@reduxjs/toolkit\";\nimport { useCallback } from \"react\";\nfunction useFetchListCallback(dispatch) {\n return useCallback(\n (listUrl, sendDispatch = true) => __async(this, null, function* () {\n const requestId = nanoid();\n if (sendDispatch) {\n dispatch(fetchTokenList.pending({ requestId, url: listUrl }));\n }\n const getTokenList = (yield import(\"./getTokenList-Q3ZXQSEZ.mjs\")).default;\n return getTokenList(listUrl).then((tokenList) => {\n if (sendDispatch) {\n dispatch(fetchTokenList.fulfilled({ url: listUrl, tokenList, requestId }));\n }\n return tokenList;\n }).catch((error) => {\n console.error(`Failed to get list at url ${listUrl}`, error);\n if (sendDispatch) {\n dispatch(fetchTokenList.rejected({ url: listUrl, requestId, errorMessage: error.message }));\n }\n throw error;\n });\n }),\n [dispatch]\n );\n}\nvar useFetchListCallback_default = useFetchListCallback;\nexport {\n NEW_LIST_STATE,\n acceptListUpdate,\n addList,\n createListsAtom,\n createTokenListReducer,\n disableList,\n enableList,\n fetchTokenList,\n rejectVersionUpdate,\n removeList,\n updateListVersion,\n useFetchListCallback_default as useFetchListCallback\n};\n","import { createListsAtom, createTokenListReducer, NEW_LIST_STATE } from '@pulsex/token-lists/react'\nimport { DEFAULT_ACTIVE_LIST_URLS, DEFAULT_LIST_OF_LISTS, UNSUPPORTED_LIST_URLS } from 'config/constants/lists'\n\nexport const initialState = {\n lastInitializedDefaultListOfLists: DEFAULT_LIST_OF_LISTS,\n byUrl: {\n ...DEFAULT_LIST_OF_LISTS.concat(...UNSUPPORTED_LIST_URLS).reduce((memo, listUrl) => {\n memo[listUrl] = NEW_LIST_STATE\n return memo\n }, {}),\n },\n activeListUrls: DEFAULT_ACTIVE_LIST_URLS,\n}\n\nconst listReducer = createTokenListReducer(initialState, DEFAULT_LIST_OF_LISTS, DEFAULT_ACTIVE_LIST_URLS)\n\nexport const { listsAtom, useListState, useListStateReady } = createListsAtom('listv4', listReducer, initialState)\n","import { ChainId } from '@pulsex/chains'\nimport { TokenAddressMap as TTokenAddressMap, WrappedTokenInfo, TokenList, TokenInfo } from '@pulsex/token-lists'\nimport { ListsState } from '@pulsex/token-lists/react'\nimport { enumValues } from '@pulsex/utils/enumValues'\nimport { DEFAULT_LIST_OF_LISTS, MULTI_CHAIN_LIST_URLS, OFFICIAL_LISTS, UNSUPPORTED_LIST_URLS, WARNING_LIST_URLS } from 'config/constants/lists'\nimport { atom, useAtomValue } from 'jotai'\nimport mapValues from 'lodash/mapValues'\nimport groupBy from 'lodash/groupBy'\nimport keyBy from 'lodash/keyBy'\nimport _pickBy from 'lodash/pickBy'\nimport { EMPTY_LIST } from '@pulsex/tokens'\nimport uniqBy from 'lodash/uniqBy'\nimport { useMemo } from 'react'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport DEFAULT_TOKEN_LIST from '../../config/constants/tokenLists/pulsex-default.tokenlist.json'\nimport UNSUPPORTED_TOKEN_LIST from '../../config/constants/tokenLists/pulsex-unsupported.tokenlist.json'\nimport WARNING_TOKEN_LIST from '../../config/constants/tokenLists/pulsex-warning.tokenlist.json'\nimport { listsAtom } from './lists'\nimport { safeGetAddress } from '../../utils'\n\ntype TokenAddressMap = TTokenAddressMap\n\n// use ordering of default list of lists to assign priority\nfunction sortByListPriority(urlA: string, urlB: string) {\n const first = DEFAULT_LIST_OF_LISTS.includes(urlA) ? DEFAULT_LIST_OF_LISTS.indexOf(urlA) : Number.MAX_SAFE_INTEGER\n const second = DEFAULT_LIST_OF_LISTS.includes(urlB) ? DEFAULT_LIST_OF_LISTS.indexOf(urlB) : Number.MAX_SAFE_INTEGER\n\n // need reverse order to make sure mapping includes top priority last\n if (first < second) return 1\n if (first > second) return -1\n return 0\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction enumKeys(obj: O): K[] {\n return Object.keys(obj).filter((k) => Number.isNaN(+k)) as K[]\n}\n\n// -------------------------------------\n// Selectors\n// -------------------------------------\nconst selectorActiveUrlsAtom = atom((get) => get(listsAtom)?.activeListUrls ?? [])\nexport const selectorByUrlsAtom = atom((get) => get(listsAtom)?.byUrl ?? {})\n\nconst activeListUrlsAtom = atom((get) => {\n const urls = get(selectorActiveUrlsAtom)\n return urls?.filter((url) => !UNSUPPORTED_LIST_URLS.includes(url))\n})\n\nconst combineTokenMapsWithDefault = (lists: ListsState['byUrl'], urls: string[]) => {\n const defaultTokenMap = listToTokenMap(DEFAULT_TOKEN_LIST as TokenList, 'address')\n if (!urls) return defaultTokenMap\n return combineMaps(combineTokenMaps(lists, urls), defaultTokenMap)\n}\n\nconst combineTokenMaps = (lists: ListsState['byUrl'], urls: string[]): any => {\n if (!urls) return EMPTY_LIST\n return (\n [...urls]\n // sort by priority so top priority goes last\n .sort(sortByListPriority)\n .reduce((allTokens, currentUrl) => {\n const current = lists[currentUrl]?.current\n if (!current) return allTokens\n try {\n const newTokens = Object.assign(listToTokenMap(current, 'address'))\n return combineMaps(allTokens, newTokens)\n } catch (error) {\n console.error('Could not show token list due to error', error)\n return allTokens\n }\n }, EMPTY_LIST)\n )\n}\n\nexport const combinedTokenMapFromActiveUrlsAtom = atom((get) => {\n const [selectorByUrls, selectorActiveUrls] = [get(selectorByUrlsAtom), get(selectorActiveUrlsAtom)]\n return combineTokenMapsWithDefault(selectorByUrls, selectorActiveUrls)\n})\n\nconst inactiveUrlAtom = atom((get) => {\n const [lists, urls] = [get(selectorByUrlsAtom), get(selectorActiveUrlsAtom)]\n return Object.keys(lists).filter((url) => !urls?.includes(url) && !UNSUPPORTED_LIST_URLS.includes(url))\n})\n\nexport const combinedTokenMapFromInActiveUrlsAtom = atom((get) => {\n const [lists, inactiveUrl] = [get(selectorByUrlsAtom), get(inactiveUrlAtom)]\n return combineTokenMaps(lists, inactiveUrl)\n})\n\nexport const combinedTokenMapFromOfficialsUrlsAtom = atom((get) => {\n const lists = get(selectorByUrlsAtom)\n return combineTokenMapsWithDefault(lists, OFFICIAL_LISTS)\n})\n\nexport const tokenListFromOfficialsUrlsAtom = atom((get) => {\n const lists: ListsState['byUrl'] = get(selectorByUrlsAtom)\n\n const mergedTokenLists: TokenInfo[] = OFFICIAL_LISTS.reduce((acc, url) => {\n if (lists?.[url]?.current?.tokens) {\n acc.push(...(lists?.[url]?.current?.tokens || []))\n }\n return acc\n }, [])\n\n const mergedList =\n mergedTokenLists.length > 0 ? [...DEFAULT_TOKEN_LIST.tokens, ...mergedTokenLists] : DEFAULT_TOKEN_LIST.tokens\n return mapValues(\n groupBy(\n uniqBy(mergedList, (tokenInfo) => `${tokenInfo.chainId}#${tokenInfo.address}`),\n 'chainId',\n ),\n (tokenInfos) => keyBy(tokenInfos, 'address'),\n )\n})\n\nexport const combinedTokenMapFromUnsupportedUrlsAtom = atom((get) => {\n const lists = get(selectorByUrlsAtom)\n // get hard coded unsupported tokens\n const localUnsupportedListMap = listToTokenMap(UNSUPPORTED_TOKEN_LIST as TokenList, 'address')\n // get any loaded unsupported tokens\n const loadedUnsupportedListMap = combineTokenMaps(lists, UNSUPPORTED_LIST_URLS)\n\n return combineMaps(localUnsupportedListMap, loadedUnsupportedListMap)\n})\n\nexport const combinedTokenMapFromWarningUrlsAtom = atom((get) => {\n const lists = get(selectorByUrlsAtom)\n // get hard coded unsupported tokens\n const localUnsupportedListMap = listToTokenMap(WARNING_TOKEN_LIST as TokenList, 'address')\n // get any loaded unsupported tokens\n const loadedUnsupportedListMap = combineTokenMaps(lists, WARNING_LIST_URLS)\n\n return combineMaps(localUnsupportedListMap, loadedUnsupportedListMap)\n})\nconst listCache: WeakMap | null =\n typeof WeakMap !== 'undefined' ? new WeakMap() : null\n\nexport function listToTokenMap(list: TokenList, key?: string): TokenAddressMap {\n const result = listCache?.get(list)\n if (result) return result\n\n const tokenMap: WrappedTokenInfo[] = uniqBy(\n list.tokens,\n (tokenInfo: TokenInfo) => `${tokenInfo.chainId}#${tokenInfo.address}`,\n )\n .map((tokenInfo) => {\n const checksummedAddress = safeGetAddress(tokenInfo.address)\n if (checksummedAddress) {\n return new WrappedTokenInfo({ ...tokenInfo, address: checksummedAddress })\n }\n return null\n })\n .filter(Boolean)\n\n const groupedTokenMap: { [chainId: string]: WrappedTokenInfo[] } = groupBy(tokenMap, 'chainId')\n\n const tokenAddressMap = mapValues(groupedTokenMap, (tokenInfoList) =>\n mapValues(keyBy(tokenInfoList, key), (tokenInfo) => ({ token: tokenInfo, list })),\n ) as TokenAddressMap\n\n // add chain id item if not exist\n enumKeys(ChainId).forEach((chainId) => {\n if (!(ChainId[chainId] in tokenAddressMap)) {\n Object.defineProperty(tokenAddressMap, ChainId[chainId], {\n value: {},\n })\n }\n })\n\n listCache?.set(list, tokenAddressMap)\n return tokenAddressMap\n}\n\n// -------------------------------------\n// Hooks\n// -------------------------------------\nexport function useAllLists(): {\n readonly [url: string]: {\n readonly current: TokenList | null\n readonly pendingUpdate: TokenList | null\n readonly loadingRequestId: string | null\n readonly error: string | null\n }\n} {\n const { chainId } = useActiveChainId()\n\n const urls = useAtomValue(selectorByUrlsAtom)\n\n return useMemo(() => _pickBy(urls, (_, url) => MULTI_CHAIN_LIST_URLS[chainId]?.includes(url)), [chainId, urls])\n}\n\nfunction combineMaps(map1: TokenAddressMap, map2: TokenAddressMap): TokenAddressMap {\n const combinedMap: TokenAddressMap = {} as TokenAddressMap\n for (const chainId of enumValues(ChainId)) {\n combinedMap[chainId as number] = { ...map1[chainId], ...map2[chainId] }\n }\n return combinedMap\n}\n\n// filter out unsupported lists\nexport function useActiveListUrls(): string[] | undefined {\n const { chainId } = useActiveChainId()\n const urls = useAtomValue(activeListUrlsAtom)\n\n return useMemo(() => urls.filter((url) => MULTI_CHAIN_LIST_URLS[chainId]?.includes(url)), [urls, chainId])\n}\n\nexport function useInactiveListUrls() {\n return useAtomValue(inactiveUrlAtom)\n}\n\n// get all the tokens from active lists, combine with local default tokens\nexport function useCombinedActiveList(): TokenAddressMap {\n const activeTokens = useAtomValue(combinedTokenMapFromActiveUrlsAtom)\n return activeTokens\n}\n\n// all tokens from inactive lists\nexport function useCombinedInactiveList(): TokenAddressMap {\n return useAtomValue(combinedTokenMapFromInActiveUrlsAtom)\n}\n\n// list of tokens not supported on interface, used to show warnings and prevent swaps and adds\nexport function useUnsupportedTokenList(): TokenAddressMap {\n return useAtomValue(combinedTokenMapFromUnsupportedUrlsAtom)\n}\n\n// list of warning tokens on interface, used to show warnings and prevent adds\nexport function useWarningTokenList(): TokenAddressMap {\n return useAtomValue(combinedTokenMapFromWarningUrlsAtom)\n}\n\nexport function useIsListActive(url: string): boolean {\n const activeListUrls = useActiveListUrls()\n return useMemo(() => Boolean(activeListUrls?.includes(url)), [activeListUrls, url])\n}\n","import { useMemo } from 'react'\nimport { Token } from '@pulsex/sdk'\nimport { createSelector } from '@reduxjs/toolkit'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport { deserializeToken } from '@pulsex/token-lists'\nimport { useSelector } from 'react-redux'\nimport { AppState } from '../../index'\n\nconst selectUserTokens = ({ user: { tokens } }: AppState) => tokens\n\nexport const userAddedTokenSelector = (chainId: number) =>\n createSelector(selectUserTokens, (serializedTokensMap) =>\n Object.values(serializedTokensMap?.[chainId] ?? {}).map(deserializeToken),\n )\n\nexport default function useUserAddedTokens(): Token[] {\n const { chainId } = useActiveChainId()\n return useSelector(useMemo(() => userAddedTokenSelector(chainId), [chainId]))\n}\n","import { Native, NativeCurrency } from '@pulsex/sdk'\nimport { ChainId } from '@pulsex/chains'\nimport { useMemo } from 'react'\nimport { useActiveChainId } from './useActiveChainId'\n\nexport default function useNativeCurrency(): NativeCurrency {\n const { chainId } = useActiveChainId()\n return useMemo(() => {\n try {\n return Native.onChain(chainId)\n } catch (e) {\n return Native.onChain(ChainId.PULSECHAIN)\n }\n }, [chainId])\n}\n","/* eslint-disable no-param-reassign */\nimport { ERC20Token } from '@pulsex/sdk'\nimport { ChainId } from '@pulsex/chains'\nimport { Currency } from '@pulsex/swap-sdk-core'\n\nimport { TokenAddressMap } from '@pulsex/token-lists'\nimport { useAtomValue } from 'jotai'\nimport { useMemo } from 'react'\nimport { useToken as useToken_ } from 'wagmi'\nimport { safeGetAddress } from 'utils'\nimport {\n combinedTokenMapFromActiveUrlsAtom,\n combinedTokenMapFromOfficialsUrlsAtom,\n useUnsupportedTokenList,\n useWarningTokenList,\n} from '../state/lists/hooks'\nimport useUserAddedTokens from '../state/user/hooks/useUserAddedTokens'\nimport { useActiveChainId } from './useActiveChainId'\nimport useNativeCurrency from './useNativeCurrency'\n\nconst mapWithoutUrls = (tokenMap: TokenAddressMap, chainId: number) =>\n Object.keys(tokenMap[chainId] || {}).reduce<{ [address: string]: ERC20Token }>((newMap, address) => {\n const checksummedAddress = safeGetAddress(address)\n\n if (checksummedAddress && !newMap[checksummedAddress]) {\n newMap[checksummedAddress] = tokenMap[chainId][address].token\n }\n\n return newMap\n }, {})\n\n/**\n * Returns all tokens that are from active urls and user added tokens\n */\nexport function useAllTokens(): { [address: string]: ERC20Token } {\n const { chainId } = useActiveChainId()\n const tokenMap = useAtomValue(combinedTokenMapFromActiveUrlsAtom)\n const userAddedTokens = useUserAddedTokens()\n return useMemo(() => {\n return (\n userAddedTokens\n // reduce into all ALL_TOKENS filtered by the current chain\n .reduce<{ [address: string]: ERC20Token }>(\n (tokenMap_, token) => {\n const checksummedAddress = safeGetAddress(token.address)\n\n if (checksummedAddress) {\n tokenMap_[checksummedAddress] = token\n }\n\n return tokenMap_\n },\n // must make a copy because reduce modifies the map, and we do not\n // want to make a copy in every iteration\n mapWithoutUrls(tokenMap, chainId),\n )\n )\n }, [userAddedTokens, tokenMap, chainId])\n}\n\n/**\n * Returns all tokens that are from officials token list and user added tokens\n */\nexport function useOfficialsAndUserAddedTokens(): { [address: string]: ERC20Token } {\n const { chainId } = useActiveChainId()\n const tokenMap = useAtomValue(combinedTokenMapFromOfficialsUrlsAtom)\n\n const userAddedTokens = useUserAddedTokens()\n return useMemo(() => {\n return (\n userAddedTokens\n // reduce into all ALL_TOKENS filtered by the current chain\n .reduce<{ [address: string]: ERC20Token }>(\n (tokenMap_, token) => {\n const checksummedAddress = safeGetAddress(token.address)\n\n if (checksummedAddress) {\n tokenMap_[checksummedAddress] = token\n }\n\n return tokenMap_\n },\n // must make a copy because reduce modifies the map, and we do not\n // want to make a copy in every iteration\n mapWithoutUrls(tokenMap, chainId),\n )\n )\n }, [userAddedTokens, tokenMap, chainId])\n}\n\nexport function useUnsupportedTokens(): { [address: string]: ERC20Token } {\n const { chainId } = useActiveChainId()\n const unsupportedTokensMap = useUnsupportedTokenList()\n return useMemo(() => mapWithoutUrls(unsupportedTokensMap, chainId), [unsupportedTokensMap, chainId])\n}\n\nexport function useWarningTokens(): { [address: string]: ERC20Token } {\n const warningTokensMap = useWarningTokenList()\n const { chainId } = useActiveChainId()\n return useMemo(() => mapWithoutUrls(warningTokensMap, chainId), [warningTokensMap, chainId])\n}\n\nexport function useIsTokenActive(token: ERC20Token | undefined | null): boolean {\n const activeTokens = useAllTokens()\n\n if (!activeTokens || !token) {\n return false\n }\n\n const tokenAddress = safeGetAddress(token.address)\n\n return tokenAddress && !!activeTokens[tokenAddress]\n}\n\n// Check if currency is included in custom list from user storage\nexport function useIsUserAddedToken(currency: Currency | undefined | null): boolean {\n const userAddedTokens = useUserAddedTokens()\n\n if (!currency) {\n return false\n }\n\n return !!userAddedTokens.find((token) => currency?.equals(token))\n}\n\n// undefined if invalid or does not exist\n// null if loading\n// otherwise returns the token\nexport function useToken(tokenAddress?: string): ERC20Token | undefined | null {\n const { chainId } = useActiveChainId()\n const tokens = useAllTokens()\n\n const address = safeGetAddress(tokenAddress)\n\n const token: ERC20Token | undefined = address ? tokens[address] : undefined\n\n const { data, isLoading } = useToken_({\n address: address || undefined,\n chainId,\n enabled: Boolean(!!address && !token),\n // consider longer stale time\n })\n\n return useMemo(() => {\n if (token) return token\n if (!chainId || !address) return undefined\n if (isLoading) return null\n if (data) {\n return new ERC20Token(\n chainId,\n data.address,\n data.decimals,\n data.symbol ?? 'UNKNOWN',\n data.name ?? 'Unknown Token',\n )\n }\n return undefined\n }, [token, chainId, address, isLoading, data])\n}\n\nexport function useCurrency(currencyId: string | undefined): Currency | ERC20Token | null | undefined {\n const native = useNativeCurrency()\n const isPLS = currencyId?.toUpperCase() === native.symbol?.toUpperCase()\n const token = useToken(isPLS ? undefined : currencyId)\n return isPLS ? native : token\n}\n","import { PairV1, PairV2, ERC20Token } from '@pulsex/sdk'\nimport { ChainId } from '@pulsex/chains'\nimport dayjs from 'dayjs'\nimport flatMap from 'lodash/flatMap'\nimport { getFarmConfig } from '@pulsex/farms/constants'\nimport { useCallback, useMemo } from 'react'\nimport { useSelector } from 'react-redux'\nimport { BASES_TO_TRACK_LIQUIDITY_FOR, PINNED_PAIRS } from 'config/constants/exchange'\nimport { useOfficialsAndUserAddedTokens } from 'hooks/Tokens'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport useSWRImmutable from 'swr/immutable'\nimport { deserializeToken } from '@pulsex/token-lists'\nimport { AppState, useAppDispatch } from '../../index'\nimport {\n addSerializedPair,\n addSerializedToken,\n FarmStakedOnly,\n muteAudio,\n removeSerializedToken,\n SerializedPair,\n toggleTheme as toggleThemeAction,\n unmuteAudio,\n updateUserDeadline,\n updateUserExpertMode,\n updateUserFarmStakedOnly,\n updateUserSingleHopOnly,\n updateUserSlippageTolerance,\n updateGasPrice,\n updateUserPoolStakedOnly,\n updateUserPoolsViewMode,\n ViewMode,\n updateUserFarmsViewMode,\n updateUserPredictionChartDisclaimerShow,\n updateUserPredictionAcceptedRisk,\n updateUserUsernameVisibility,\n updateUserExpertModeAcknowledgementShow,\n hidePhishingWarningBanner,\n setIsExchangeChartDisplayed,\n ChartViewMode,\n setChartViewMode,\n setSubgraphHealthIndicatorDisplayed,\n updateSmartRouter,\n} from '../actions'\n\nexport function useAudioModeManager(): [boolean, () => void] {\n const dispatch = useAppDispatch()\n const audioPlay = useSelector((state) => state.user.audioPlay)\n\n const toggleSetAudioMode = useCallback(() => {\n if (audioPlay) {\n dispatch(muteAudio())\n } else {\n dispatch(unmuteAudio())\n }\n }, [audioPlay, dispatch])\n\n return [audioPlay, toggleSetAudioMode]\n}\n\nexport function usePhishingBannerManager(): [boolean, () => void] {\n const dispatch = useAppDispatch()\n const hideTimestampPhishingWarningBanner = useSelector<\n AppState,\n AppState['user']['hideTimestampPhishingWarningBanner']\n >((state) => state.user.hideTimestampPhishingWarningBanner)\n const now = dayjs()\n const showPhishingWarningBanner = hideTimestampPhishingWarningBanner\n ? now.diff(hideTimestampPhishingWarningBanner, 'days') >= 1\n : true\n const hideBanner = useCallback(() => {\n dispatch(hidePhishingWarningBanner())\n }, [dispatch])\n\n return [showPhishingWarningBanner, hideBanner]\n}\n\n// Get user preference for exchange price chart\n// For mobile layout chart is hidden by default\nexport function useExchangeChartManager(isMobile: boolean): [boolean, (isDisplayed: boolean) => void] {\n const dispatch = useAppDispatch()\n const isChartDisplayed = useSelector(\n (state) => state.user.isExchangeChartDisplayed,\n )\n\n const setUserChartPreference = useCallback(\n (isDisplayed: boolean) => {\n dispatch(setIsExchangeChartDisplayed(isDisplayed))\n },\n [dispatch],\n )\n\n return [isMobile ? false : isChartDisplayed, setUserChartPreference]\n}\n\nexport function useExchangeChartViewManager() {\n const dispatch = useAppDispatch()\n const chartViewMode = useSelector(\n (state) => state.user.userChartViewMode,\n )\n\n const setUserChartViewPreference = useCallback(\n (view: ChartViewMode) => {\n dispatch(setChartViewMode(view))\n },\n [dispatch],\n )\n\n return [chartViewMode, setUserChartViewPreference] as const\n}\n\nexport function useSubgraphHealthIndicatorManager() {\n const dispatch = useAppDispatch()\n const isSubgraphHealthIndicatorDisplayed = useSelector<\n AppState,\n AppState['user']['isSubgraphHealthIndicatorDisplayed']\n >((state) => state.user.isSubgraphHealthIndicatorDisplayed)\n\n const setSubgraphHealthIndicatorDisplayedPreference = useCallback(\n (newIsDisplayed: boolean) => {\n dispatch(setSubgraphHealthIndicatorDisplayed(newIsDisplayed))\n },\n [dispatch],\n )\n\n return [isSubgraphHealthIndicatorDisplayed, setSubgraphHealthIndicatorDisplayedPreference] as const\n}\n\nexport function useIsExpertMode(): boolean {\n return useSelector((state) => state.user.userExpertMode)\n}\n\nexport function useExpertModeManager(): [boolean, () => void] {\n const dispatch = useAppDispatch()\n const expertMode = useIsExpertMode()\n\n const toggleSetExpertMode = useCallback(() => {\n dispatch(updateUserExpertMode({ userExpertMode: !expertMode }))\n }, [expertMode, dispatch])\n\n return [expertMode, toggleSetExpertMode]\n}\n\nexport function useThemeManager(): [boolean, () => void] {\n const dispatch = useAppDispatch()\n const isDark = useSelector((state) => state.user.isDark)\n\n const toggleTheme = useCallback(() => {\n dispatch(toggleThemeAction())\n }, [dispatch])\n\n return [isDark, toggleTheme]\n}\n\nexport function useUserSingleHopOnly(): [boolean, (newSingleHopOnly: boolean) => void] {\n const dispatch = useAppDispatch()\n\n const singleHopOnly = useSelector(\n (state) => state.user.userSingleHopOnly,\n )\n\n const setSingleHopOnly = useCallback(\n (newSingleHopOnly: boolean) => {\n dispatch(updateUserSingleHopOnly({ userSingleHopOnly: newSingleHopOnly }))\n },\n [dispatch],\n )\n\n return [singleHopOnly, setSingleHopOnly]\n}\n\nexport function useUserSlippageTolerance(): [number, (slippage: number) => void] {\n const dispatch = useAppDispatch()\n const userSlippageTolerance = useSelector((state) => {\n return state.user.userSlippageTolerance\n })\n\n const setUserSlippageTolerance = useCallback(\n (slippage: number) => {\n dispatch(updateUserSlippageTolerance({ userSlippageTolerance: slippage }))\n },\n [dispatch],\n )\n\n return [userSlippageTolerance, setUserSlippageTolerance]\n}\n\nexport function useUserFarmStakedOnly(isActive: boolean): [boolean, (stakedOnly: boolean) => void] {\n const dispatch = useAppDispatch()\n const userFarmStakedOnly = useSelector((state) => {\n return state.user.userFarmStakedOnly\n })\n\n const setUserFarmStakedOnly = useCallback(\n (stakedOnly: boolean) => {\n const farmStakedOnly = stakedOnly ? FarmStakedOnly.TRUE : FarmStakedOnly.FALSE\n dispatch(updateUserFarmStakedOnly({ userFarmStakedOnly: farmStakedOnly }))\n },\n [dispatch],\n )\n\n return [\n userFarmStakedOnly === FarmStakedOnly.ON_FINISHED ? !isActive : userFarmStakedOnly === FarmStakedOnly.TRUE,\n setUserFarmStakedOnly,\n ]\n}\n\nexport function useUserPoolStakedOnly(): [boolean, (stakedOnly: boolean) => void] {\n const dispatch = useAppDispatch()\n const userPoolStakedOnly = useSelector((state) => {\n return state.user.userPoolStakedOnly\n })\n\n const setUserPoolStakedOnly = useCallback(\n (stakedOnly: boolean) => {\n dispatch(updateUserPoolStakedOnly({ userPoolStakedOnly: stakedOnly }))\n },\n [dispatch],\n )\n\n return [userPoolStakedOnly, setUserPoolStakedOnly]\n}\n\nexport function useUserPoolsViewMode(): [ViewMode, (viewMode: ViewMode) => void] {\n const dispatch = useAppDispatch()\n const userPoolsViewMode = useSelector((state) => {\n return state.user.userPoolsViewMode\n })\n\n const setUserPoolsViewMode = useCallback(\n (viewMode: ViewMode) => {\n dispatch(updateUserPoolsViewMode({ userPoolsViewMode: viewMode }))\n },\n [dispatch],\n )\n\n return [userPoolsViewMode, setUserPoolsViewMode]\n}\n\nexport function useUserFarmsViewMode(): [ViewMode, (viewMode: ViewMode) => void] {\n const dispatch = useAppDispatch()\n const userFarmsViewMode = useSelector((state) => {\n return state.user.userFarmsViewMode\n })\n\n const setUserFarmsViewMode = useCallback(\n (viewMode: ViewMode) => {\n dispatch(updateUserFarmsViewMode({ userFarmsViewMode: viewMode }))\n },\n [dispatch],\n )\n\n return [userFarmsViewMode, setUserFarmsViewMode]\n}\n\nexport function useUserPredictionAcceptedRisk(): [boolean, (acceptedRisk: boolean) => void] {\n const dispatch = useAppDispatch()\n const userPredictionAcceptedRisk = useSelector((state) => {\n return state.user.userPredictionAcceptedRisk\n })\n\n const setUserPredictionAcceptedRisk = useCallback(\n (acceptedRisk: boolean) => {\n dispatch(updateUserPredictionAcceptedRisk({ userAcceptedRisk: acceptedRisk }))\n },\n [dispatch],\n )\n\n return [userPredictionAcceptedRisk, setUserPredictionAcceptedRisk]\n}\n\nexport function useUserPredictionChartDisclaimerShow(): [boolean, (showDisclaimer: boolean) => void] {\n const dispatch = useAppDispatch()\n const userPredictionChartDisclaimerShow = useSelector<\n AppState,\n AppState['user']['userPredictionChartDisclaimerShow']\n >((state) => {\n return state.user.userPredictionChartDisclaimerShow\n })\n\n const setPredictionUserChartDisclaimerShow = useCallback(\n (showDisclaimer: boolean) => {\n dispatch(updateUserPredictionChartDisclaimerShow({ userShowDisclaimer: showDisclaimer }))\n },\n [dispatch],\n )\n\n return [userPredictionChartDisclaimerShow, setPredictionUserChartDisclaimerShow]\n}\n\nexport function useUserExpertModeAcknowledgementShow(): [boolean, (showAcknowledgement: boolean) => void] {\n const dispatch = useAppDispatch()\n const userExpertModeAcknowledgementShow = useSelector<\n AppState,\n AppState['user']['userExpertModeAcknowledgementShow']\n >((state) => {\n return state.user.userExpertModeAcknowledgementShow\n })\n\n const setUserExpertModeAcknowledgementShow = useCallback(\n (showAcknowledgement: boolean) => {\n dispatch(updateUserExpertModeAcknowledgementShow({ userExpertModeAcknowledgementShow: showAcknowledgement }))\n },\n [dispatch],\n )\n\n return [userExpertModeAcknowledgementShow, setUserExpertModeAcknowledgementShow]\n}\n\nexport function useUserUsernameVisibility(): [boolean, (usernameVisibility: boolean) => void] {\n const dispatch = useAppDispatch()\n const userUsernameVisibility = useSelector((state) => {\n return state.user.userUsernameVisibility\n })\n\n const setUserUsernameVisibility = useCallback(\n (usernameVisibility: boolean) => {\n dispatch(updateUserUsernameVisibility({ userUsernameVisibility: usernameVisibility }))\n },\n [dispatch],\n )\n\n return [userUsernameVisibility, setUserUsernameVisibility]\n}\n\nexport function useUserTransactionTTL(): [number, (slippage: number) => void] {\n const dispatch = useAppDispatch()\n const userDeadline = useSelector((state) => {\n return state.user.userDeadline\n })\n\n const setUserDeadline = useCallback(\n (deadline: number) => {\n dispatch(updateUserDeadline({ userDeadline: deadline }))\n },\n [dispatch],\n )\n\n return [userDeadline, setUserDeadline]\n}\n\nexport function useAddUserToken(): (token: ERC20Token) => void {\n const dispatch = useAppDispatch()\n return useCallback(\n (token: ERC20Token) => {\n dispatch(addSerializedToken({ serializedToken: token.serialize }))\n },\n [dispatch],\n )\n}\n\nexport function useRemoveUserAddedToken(): (chainId: number, address: string) => void {\n const dispatch = useAppDispatch()\n return useCallback(\n (chainId: number, address: string) => {\n dispatch(removeSerializedToken({ chainId, address }))\n },\n [dispatch],\n )\n}\n\nexport function useGasPrice(): string {\n const chainId = process.env.NEXT_PUBLIC_CHAIN_ID\n const userGas = useSelector((state) => state.user.gasPrice)\n return chainId === ChainId.PULSECHAIN.toString() ? userGas : \"10000000000\"\n}\n\nexport function useGasPriceManager(): [string, (userGasPrice: string) => void] {\n const dispatch = useAppDispatch()\n const userGasPrice = useGasPrice()\n\n const setGasPrice = useCallback(\n (gasPrice: string) => {\n dispatch(updateGasPrice({ gasPrice }))\n },\n [dispatch],\n )\n\n return [userGasPrice, setGasPrice]\n}\n\nfunction serializePair(pair: PairV1 | PairV2): SerializedPair {\n return {\n token0: pair.token0.serialize,\n token1: pair.token1.serialize,\n }\n}\n\nexport function usePairAdder(): (pair: PairV1 | PairV2) => void {\n const dispatch = useAppDispatch()\n\n return useCallback(\n (pair: PairV1 | PairV2) => {\n dispatch(addSerializedPair({ serializedPair: serializePair(pair) }))\n },\n [dispatch],\n )\n}\n\n/**\n * Given two tokens return the liquidity token that represents its liquidity shares\n * @param tokenA one of the two tokens\n * @param tokenB the other token\n */\nexport function toV1LiquidityToken([tokenA, tokenB]: [ERC20Token, ERC20Token]): ERC20Token {\n return new ERC20Token(tokenA.chainId, PairV1.getAddress(tokenA, tokenB), 18, 'PLP', 'PulseX LP')\n}\n\n/**\n * Given two tokens return the liquidity token that represents its liquidity shares\n * @param tokenA one of the two tokens\n * @param tokenB the other token\n */\nexport function toV2LiquidityToken([tokenA, tokenB]: [ERC20Token, ERC20Token]): ERC20Token {\n return new ERC20Token(tokenA.chainId, PairV2.getAddress(tokenA, tokenB), 18, 'PLP', 'PulseX LP')\n}\n\n/**\n * Returns all the pairs of tokens that are tracked by the user for the current chain ID.\n */\nexport function useTrackedTokenPairs(): [ERC20Token, ERC20Token][] {\n const { chainId } = useActiveWeb3React()\n const tokens = useOfficialsAndUserAddedTokens()\n\n // pinned pairs\n const pinnedPairs = useMemo(() => (chainId ? PINNED_PAIRS[chainId] ?? [] : []), [chainId])\n\n const { data: farmPairs = [] } = useSWRImmutable(chainId && ['track-farms-pairs', chainId], async () => {\n const farms = await getFarmConfig(chainId)\n\n const fPairs: [ERC20Token, ERC20Token][] = farms\n .filter((farm) => farm.pid !== 0)\n .map((farm) => [deserializeToken(farm.token), deserializeToken(farm.quoteToken)])\n\n return fPairs\n })\n\n // pairs for every token against every base\n const generatedPairs: [ERC20Token, ERC20Token][] = useMemo(\n () =>\n chainId\n ? flatMap(Object.keys(tokens), (tokenAddress) => {\n const token = tokens[tokenAddress]\n // for each token on the current chain,\n return (\n // loop through all bases on the current chain\n (BASES_TO_TRACK_LIQUIDITY_FOR[chainId] ?? [])\n // to construct pairs of the given token with each base\n .map((base) => {\n if (base.address === token.address) {\n return null\n }\n return [base, token]\n })\n .filter((p): p is [ERC20Token, ERC20Token] => p !== null)\n )\n })\n : [],\n [tokens, chainId],\n )\n\n // pairs saved by users\n const savedSerializedPairs = useSelector(({ user: { pairs } }) => pairs)\n\n const userPairs: [ERC20Token, ERC20Token][] = useMemo(() => {\n if (!chainId || !savedSerializedPairs) return []\n const forChain = savedSerializedPairs[chainId]\n if (!forChain) return []\n\n return Object.keys(forChain).map((pairId) => {\n return [deserializeToken(forChain[pairId].token0), deserializeToken(forChain[pairId].token1)]\n })\n }, [savedSerializedPairs, chainId])\n\n const combinedList = useMemo(\n () => userPairs.concat(generatedPairs).concat(pinnedPairs).concat(farmPairs),\n [generatedPairs, pinnedPairs, userPairs, farmPairs],\n )\n\n return useMemo(() => {\n // dedupes pairs of tokens in the combined list\n const keyed = combinedList.reduce<{ [key: string]: [ERC20Token, ERC20Token] }>((memo, [tokenA, tokenB]) => {\n const sorted = tokenA.sortsBefore(tokenB)\n const key = sorted ? `${tokenA.address}:${tokenB.address}` : `${tokenB.address}:${tokenA.address}`\n if (memo[key]) return memo\n memo[key] = sorted ? [tokenA, tokenB] : [tokenB, tokenA]\n return memo\n }, {})\n\n return Object.keys(keyed).map((key) => keyed[key])\n }, [combinedList])\n}\n\nexport function useIsSmartRouter(): boolean {\n return useSelector((state) => state.user.userSmartRouterMode)\n}\n\nexport function useSmartRouterManager(): [boolean, () => void] {\n const dispatch = useAppDispatch()\n const isSmartRouter = useIsSmartRouter()\n\n const toggleSetSmartRouter = useCallback(() => {\n dispatch(updateSmartRouter({ userSmartRouterMode: !isSmartRouter }))\n }, [isSmartRouter, dispatch])\n\n return [isSmartRouter, toggleSetSmartRouter]\n}\n","import { DependencyList, EffectCallback, useEffect } from 'react'\nimport useSWR from 'swr'\nimport { useActiveChainId } from './useActiveChainId'\n\ntype BlockEffectCallback = (blockNumber: number) => ReturnType\n\nconst EMPTY_ARRAY = []\n\nexport function useRefreshEffect(interval: number, effect: BlockEffectCallback, deps?: DependencyList) {\n const { chainId } = useActiveChainId()\n const { data = 0 } = useSWR(chainId && [interval, 'blockNumber', chainId])\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(effect.bind(null, data), [data, ...(deps || EMPTY_ARRAY)])\n}\n","import { Trade } from '@pulsex/smart-order-router/src/routers/sdk'\nimport { Currency, Fraction, TradeType, PairV1, Percent, Price } from '@pulsex/sdk'\n\nimport {\n ONE_HUNDRED_PERCENT,\n ZERO_PERCENT,\n INPUT_FRACTION_AFTER_FEE\n} from 'config/constants/exchange'\n\nexport function computeRealizedPriceImpact(trade: Trade): Percent {\n const realizedLpFeePercent = computeRealizedLPFeePercent(trade)\n return trade.priceImpact.subtract(realizedLpFeePercent)\n}\n\n// computes realized lp fee as a percent\nfunction computeRealizedLPFeePercent(trade: Trade): Percent {\n let percent: Percent\n\n // Since routes are either all v2 or all v3 right now, calculate separately\n if (trade.swaps[0].route.pools instanceof PairV1) {\n // for each hop in our trade, take away the x*y=k price impact from 0.3% fees\n // e.g. for 3 tokens/2 hops: 1 - ((1 - .03) * (1-.03))\n percent = ONE_HUNDRED_PERCENT.subtract(\n trade.swaps.reduce(\n (currentFee: Percent): Percent => currentFee.multiply(INPUT_FRACTION_AFTER_FEE),\n ONE_HUNDRED_PERCENT\n )\n )\n } else {\n percent = ZERO_PERCENT\n for (const swap of trade.swaps) {\n const { numerator, denominator } = swap.inputAmount.divide(trade.inputAmount)\n const overallPercent = new Percent(numerator, denominator)\n\n const routeRealizedLPFeePercent = overallPercent.multiply(\n ONE_HUNDRED_PERCENT.subtract(\n swap.route.pools.reduce((currentFee: Percent): Percent => {\n const fee = 2900\n return currentFee.multiply(ONE_HUNDRED_PERCENT.subtract(new Fraction(fee, 1_000_000)))\n }, ONE_HUNDRED_PERCENT)\n )\n )\n\n percent = percent.add(routeRealizedLPFeePercent)\n }\n }\n\n return new Percent(percent.numerator, percent.denominator)\n}\n\n/**\n * Helper to multiply a Price object by an arbitrary amount\n */\nexport const multiplyPriceByAmount = (price: Price, amount: number, significantDigits = 18) => {\n if (!price) {\n return 0\n }\n\n try {\n return parseFloat(price.toSignificant(significantDigits)) * amount\n } catch (error) {\n return 0\n }\n}\n","import { ERC20Token, PairV1, PairV2 } from '@pulsex/sdk'\nimport { ChainId } from '@pulsex/chains'\nimport { safeGetAddress } from 'utils'\nimport memoize from 'lodash/memoize'\n\nconst getLpAddress = memoize(\n (protocol: string, token1: string | ERC20Token, token2: string | ERC20Token, chainId: number = ChainId.PULSECHAIN) => {\n let token1AsTokenInstance = token1\n let token2AsTokenInstance = token2\n if (!token1 || !token2) {\n return null\n }\n if (typeof token1 === 'string' || token1 instanceof String) {\n const checksummedToken1Address = safeGetAddress(token1)\n if (!checksummedToken1Address) {\n return null\n }\n token1AsTokenInstance = new ERC20Token(chainId, checksummedToken1Address, 18, 'PLP')\n }\n if (typeof token2 === 'string' || token2 instanceof String) {\n const checksummedToken2Address = safeGetAddress(token2)\n if (!checksummedToken2Address) {\n return null\n }\n token2AsTokenInstance = new ERC20Token(chainId, checksummedToken2Address, 18, 'PLP')\n }\n if (protocol === 'V1') {\n return PairV1.getAddress(token1AsTokenInstance as ERC20Token, token2AsTokenInstance as ERC20Token)\n }\n return PairV2.getAddress(token1AsTokenInstance as ERC20Token, token2AsTokenInstance as ERC20Token)\n },\n (token1, token2, chainId) => {\n // @ts-ignore\n return `${token1?.address || token1}#${token2?.address || token2}#${chainId}`\n },\n)\n\nexport default getLpAddress\n","import { Currency, CurrencyAmount } from '@pulsex/swap-sdk-core'\nimport { parseUnits } from './viem/parseUnits'\n\n// try to parse a user entered amount for a given token\nfunction tryParseAmount(value?: string, currency?: T): CurrencyAmount | undefined {\n if (!value || !currency) {\n return undefined\n }\n try {\n const typedValueParsed = parseUnits(value.replace(/,/g, '') as `${number}`, currency.decimals).toString()\n // const typedValueParsed = parseUnits(value as `${number}`, currency.decimals).toString()\n\n if (typedValueParsed !== '0') {\n return CurrencyAmount.fromRawAmount(currency, BigInt(typedValueParsed))\n }\n } catch (error) {\n // should fail if the user specifies too many decimal places of precision (or maybe exceed max uint?)\n console.debug(`Failed to parse input amount: \"${value}\"`, error)\n }\n // necessary for all paths to return a value\n return undefined\n}\n\nexport default tryParseAmount\n","import { ChainId } from '@pulsex/chains'\nimport { Currency, CurrencyAmount, Native, Token, WNATIVE } from '@pulsex/sdk'\n\nexport function wrappedCurrency(currency: Currency | undefined, chainId: ChainId | undefined): Token | undefined {\n return chainId && currency?.isNative ? WNATIVE[chainId] : currency?.isToken ? currency : undefined\n}\n\nexport function wrappedCurrencyAmount(\n currencyAmount: CurrencyAmount | undefined,\n chainId: ChainId | undefined,\n): CurrencyAmount | undefined {\n const token = currencyAmount && chainId ? wrappedCurrency(currencyAmount.currency, chainId) : undefined\n return token && currencyAmount ? CurrencyAmount.fromRawAmount(token, currencyAmount.quotient) : undefined\n}\n\nexport function unwrappedToken(token: Token): Currency {\n if (token.equals(WNATIVE[token.chainId])) return Native.onChain(token.chainId)\n return token\n}\n","export const plsxAbi = [\n\t{\n\t\t\"inputs\": [],\n\t\t\"stateMutability\": \"nonpayable\",\n\t\t\"type\": \"constructor\"\n\t},\n\t{\n\t\t\"anonymous\": false,\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"indexed\": true,\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"owner\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"indexed\": true,\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"spender\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"indexed\": false,\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"value\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"Approval\",\n\t\t\"type\": \"event\"\n\t},\n\t{\n\t\t\"anonymous\": false,\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"indexed\": true,\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"delegator\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"indexed\": true,\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"fromDelegate\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"indexed\": true,\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"toDelegate\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"DelegateChanged\",\n\t\t\"type\": \"event\"\n\t},\n\t{\n\t\t\"anonymous\": false,\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"indexed\": true,\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"delegate\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"indexed\": false,\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"previousBalance\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"indexed\": false,\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"newBalance\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"DelegateVotesChanged\",\n\t\t\"type\": \"event\"\n\t},\n\t{\n\t\t\"anonymous\": false,\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"indexed\": true,\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"previousOwner\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"indexed\": true,\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"newOwner\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"OwnershipTransferred\",\n\t\t\"type\": \"event\"\n\t},\n\t{\n\t\t\"anonymous\": false,\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"indexed\": true,\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"from\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"indexed\": true,\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"to\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"indexed\": false,\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"value\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"Transfer\",\n\t\t\"type\": \"event\"\n\t},\n\t{\n\t\t\"inputs\": [],\n\t\t\"name\": \"DELEGATION_TYPEHASH\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"bytes32\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"bytes32\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [],\n\t\t\"name\": \"DOMAIN_SEPARATOR\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"bytes32\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"bytes32\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [],\n\t\t\"name\": \"DOMAIN_TYPEHASH\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"bytes32\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"bytes32\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"owner\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"spender\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"allowance\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"spender\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"amount\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"approve\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"bool\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"bool\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"nonpayable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"account\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"balanceOf\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint32\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"uint32\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"checkpoints\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint32\",\n\t\t\t\t\"name\": \"fromBlock\",\n\t\t\t\t\"type\": \"uint32\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"votes\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [],\n\t\t\"name\": \"decimals\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint8\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"uint8\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"spender\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"subtractedValue\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"decreaseAllowance\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"bool\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"bool\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"nonpayable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"spender\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"addedValue\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"increaseAllowance\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"bool\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"bool\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"nonpayable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [],\n\t\t\"name\": \"name\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"string\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"string\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"owner\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"nonces\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"numCheckpoints\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint32\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"uint32\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [],\n\t\t\"name\": \"owner\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"owner\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"spender\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"value\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"deadline\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint8\",\n\t\t\t\t\"name\": \"v\",\n\t\t\t\t\"type\": \"uint8\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"bytes32\",\n\t\t\t\t\"name\": \"r\",\n\t\t\t\t\"type\": \"bytes32\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"bytes32\",\n\t\t\t\t\"name\": \"s\",\n\t\t\t\t\"type\": \"bytes32\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"permit\",\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"nonpayable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [],\n\t\t\"name\": \"renounceOwnership\",\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"nonpayable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [],\n\t\t\"name\": \"symbol\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"string\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"string\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [],\n\t\t\"name\": \"totalSupply\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"newOwner\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"transferOwnership\",\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"nonpayable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"_to\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"_amount\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"mint\",\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"nonpayable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [],\n\t\t\"name\": \"getMaxTotalSupply\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"pure\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"sender\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"recipient\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"amount\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"transferFrom\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"bool\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"bool\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"nonpayable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"recipient\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"amount\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"transfer\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"bool\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"bool\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"nonpayable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"delegator\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"delegates\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"delegatee\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"delegate\",\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"nonpayable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"delegatee\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"nonce\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"expiry\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint8\",\n\t\t\t\t\"name\": \"v\",\n\t\t\t\t\"type\": \"uint8\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"bytes32\",\n\t\t\t\t\"name\": \"r\",\n\t\t\t\t\"type\": \"bytes32\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"bytes32\",\n\t\t\t\t\"name\": \"s\",\n\t\t\t\t\"type\": \"bytes32\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"delegateBySig\",\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"nonpayable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"account\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"getCurrentVotes\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"account\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"blockNumber\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"getPriorVotes\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\",\n\t\t\"type\": \"function\"\n\t}\n] as const\n","export const plsxLabAbi = [\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IERC20\",\n \"name\": \"_plsx\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"tokenRecovered\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"AdminTokenRecovery\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"pid\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Deposit\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"pid\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"EmergencyWithdraw\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"_gemsPerSecond\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"SetRewardPerSecond\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"pid\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Withdraw\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"baseUserLimit\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"baseUserLimitTime\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"plsx\",\n \"outputs\": [\n {\n \"internalType\": \"contract IERC20\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"poolInfo\",\n \"outputs\": [\n {\n \"internalType\": \"contract IERC20\",\n \"name\": \"RewardToken\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"RewardPerSecond\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"TokenPrecision\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"PLSXStakedAmount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"lastRewardTime\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"accRewardPerShare\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"endTime\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"startTime\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"userLimitEndTime\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"protocolOwnerAddress\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"userInfo\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"rewardDebt\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"poolLength\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_user\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"pendingReward\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"massUpdatePools\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"deposit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"withdraw\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"emergencyWithdraw\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"addSeconds\",\n \"type\": \"uint32\"\n }\n ],\n \"name\": \"changeEndTime\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"stopReward\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_time\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"changePoolUserLimitEndTime\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_limit\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"changeUserLimit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_time\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"changeBaseUserLimitTime\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_tokenAddress\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"recoverWrongTokens\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"emergencyRewardWithdraw\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_rewardPerSecond\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"contract IERC20Ext\",\n \"name\": \"_Token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_startTime\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_endTime\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_protocolOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"add\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_pid\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_rewardPerSecond\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setRewardPerSecond\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n] as const\n","export const buyandburnAbi = [\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"previousAdmin\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"newAdmin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AdminChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"beacon\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"BeaconUpgraded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint8\",\n \"name\": \"version\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"Initialized\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"bridge\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"LogBridgeSet\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"server\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"paidBounty\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amountBurned\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"LogBurn\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"_adr\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"LogOverridePreventSwap\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"_adr\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"LogSlippageOverrode\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"_addr\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"SetDevAddr\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"_amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"SetDevCut\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [],\n \"name\": \"ToggleAnyAuth\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Upgraded\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"BOUNTY_FEE\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"PLSX\",\n \"outputs\": [\n {\n \"internalType\": \"contract ERC20BurnableUpgradeable\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"PLSX_STARTING_SUPPLY\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"WPLS\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_auth\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"addAuth\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"anyAuth\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"authorized\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"bridgeFor\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"bridge\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"burnedPLSX\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"totalBurned\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"tokens0\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"tokens1\",\n \"type\": \"address[]\"\n }\n ],\n \"name\": \"convertLps\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"devAddr\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"devCut\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"factory\",\n \"outputs\": [\n {\n \"internalType\": \"contract IPulseXFactory\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_factory\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"contract ERC20BurnableUpgradeable\",\n \"name\": \"_PLSX\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_WPLS\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_devAddr\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_devCut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_startingPLSXSupply\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isAuth\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"overridePreventSwap\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_token\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"overrideSlippage\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"proxiableUUID\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_auth\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"revokeAuth\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setBounty\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"bridge\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setBridge\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_addr\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setDevAddr\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setDevCut\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_amt\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setSlippage\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"slippage\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"slippageOverrode\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"toggleAnyAuth\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_token\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"toggleOverridePreventSwap\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newImplementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"upgradeTo\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newImplementation\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"upgradeToAndCall\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n }\n] as const\n","import { ChainId } from '@pulsex/chains'\nimport { viemClients } from 'utils/viem'\nimport { Abi, PublicClient, WalletClient, getContract as viemGetContract } from 'viem'\nimport { Address, erc20ABI } from 'wagmi'\nimport { PLSX } from '@pulsex/tokens'\n\n// Addresses\nimport {\n getMasterChefAddress,\n getPlsxLabAddress,\n getBuyAndBurnAddress,\n} from 'utils/addressHelpers'\n\n// ABI\nimport { plsxAbi } from 'config/abi/plsx'\nimport { plsxLabAbi } from 'config/abi/plsxLab'\nimport { lpTokenAbi } from 'config/abi/lpToken'\nimport { masterChefAbi } from 'config/abi/masterchef'\nimport { buyandburnAbi } from 'config/abi/buyandburn'\n\nexport const getContract = ({\n abi,\n address,\n chainId = ChainId.PULSECHAIN,\n publicClient,\n signer,\n}: {\n abi: TAbi\n address: Address\n chainId?: ChainId\n signer?: TWalletClient\n publicClient?: PublicClient\n}) => {\n const c = viemGetContract({\n abi,\n address,\n publicClient: publicClient ?? viemClients[chainId],\n walletClient: signer,\n })\n return {\n ...c,\n account: signer?.account,\n chain: signer?.chain,\n }\n}\n\nexport const getPrc20Contract = (address: Address, signer?: WalletClient) => {\n return getContract({ abi: erc20ABI, address, signer })\n}\n\nexport const getLpContract = (address: Address, chainId?: number, signer?: WalletClient) => {\n return getContract({ abi: lpTokenAbi, address, signer, chainId })\n}\n\nexport const getPlsxContract = (chainId: number, walletClient?: WalletClient) => {\n return getContract({\n abi: plsxAbi,\n address: chainId ? PLSX[chainId]?.address : PLSX[ChainId.PULSECHAIN].address,\n signer: walletClient\n })\n}\n\nexport const getMasterChefContract = (signer?: WalletClient, chainId?: number) => {\n return getContract({\n abi: masterChefAbi,\n address: getMasterChefAddress(chainId),\n chainId,\n signer,\n })\n}\n\nexport const getPlsxLabContract = (walletClient?: WalletClient, chainId?: number) => {\n return getContract({\n abi: plsxLabAbi, \n address: getPlsxLabAddress(chainId), \n signer: walletClient\n })\n}\n\nexport const getBuyAndBurnContract = (protocol: string, walletClient?: WalletClient, chainId?: number) => {\n return getContract({\n abi: buyandburnAbi, \n address: getBuyAndBurnAddress(protocol, chainId), \n chainId,\n signer: walletClient\n })\n}\n","export const multicallAbi = [\n {\n inputs: [\n {\n components: [\n { internalType: 'address', name: 'target', type: 'address' },\n { internalType: 'bytes', name: 'callData', type: 'bytes' },\n ],\n internalType: 'struct Multicall2.Call[]',\n name: 'calls',\n type: 'tuple[]',\n },\n ],\n name: 'aggregate',\n outputs: [\n { internalType: 'uint256', name: 'blockNumber', type: 'uint256' },\n { internalType: 'bytes[]', name: 'returnData', type: 'bytes[]' },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n { internalType: 'address', name: 'target', type: 'address' },\n { internalType: 'bytes', name: 'callData', type: 'bytes' },\n ],\n internalType: 'struct Multicall2.Call[]',\n name: 'calls',\n type: 'tuple[]',\n },\n ],\n name: 'blockAndAggregate',\n outputs: [\n { internalType: 'uint256', name: 'blockNumber', type: 'uint256' },\n { internalType: 'bytes32', name: 'blockHash', type: 'bytes32' },\n {\n components: [\n { internalType: 'bool', name: 'success', type: 'bool' },\n { internalType: 'bytes', name: 'returnData', type: 'bytes' },\n ],\n internalType: 'struct Multicall2.Result[]',\n name: 'returnData',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'uint256', name: 'blockNumber', type: 'uint256' }],\n name: 'getBlockHash',\n outputs: [{ internalType: 'bytes32', name: 'blockHash', type: 'bytes32' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'getBlockNumber',\n outputs: [{ internalType: 'uint256', name: 'blockNumber', type: 'uint256' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'getCurrentBlockCoinbase',\n outputs: [{ internalType: 'address', name: 'coinbase', type: 'address' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'getCurrentBlockDifficulty',\n outputs: [{ internalType: 'uint256', name: 'difficulty', type: 'uint256' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'getCurrentBlockGasLimit',\n outputs: [{ internalType: 'uint256', name: 'gaslimit', type: 'uint256' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'getCurrentBlockTimestamp',\n outputs: [{ internalType: 'uint256', name: 'timestamp', type: 'uint256' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'address', name: 'addr', type: 'address' }],\n name: 'getEthBalance',\n outputs: [{ internalType: 'uint256', name: 'balance', type: 'uint256' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'getLastBlockHash',\n outputs: [{ internalType: 'bytes32', name: 'blockHash', type: 'bytes32' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n { internalType: 'bool', name: 'requireSuccess', type: 'bool' },\n {\n components: [\n { internalType: 'address', name: 'target', type: 'address' },\n { internalType: 'bytes', name: 'callData', type: 'bytes' },\n ],\n internalType: 'struct Multicall2.Call[]',\n name: 'calls',\n type: 'tuple[]',\n },\n ],\n name: 'tryAggregate',\n outputs: [\n {\n components: [\n { internalType: 'bool', name: 'success', type: 'bool' },\n { internalType: 'bytes', name: 'returnData', type: 'bytes' },\n ],\n internalType: 'struct Multicall2.Result[]',\n name: 'returnData',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n { internalType: 'bool', name: 'requireSuccess', type: 'bool' },\n {\n components: [\n { internalType: 'address', name: 'target', type: 'address' },\n { internalType: 'bytes', name: 'callData', type: 'bytes' },\n ],\n internalType: 'struct Multicall2.Call[]',\n name: 'calls',\n type: 'tuple[]',\n },\n ],\n name: 'tryBlockAndAggregate',\n outputs: [\n { internalType: 'uint256', name: 'blockNumber', type: 'uint256' },\n { internalType: 'bytes32', name: 'blockHash', type: 'bytes32' },\n {\n components: [\n { internalType: 'bool', name: 'success', type: 'bool' },\n { internalType: 'bytes', name: 'returnData', type: 'bytes' },\n ],\n internalType: 'struct Multicall2.Result[]',\n name: 'returnData',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const\n","export const pulsexPairAbi = [\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount0\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount1\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Burn\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount0\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount1\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Mint\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount0In\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount1In\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount0Out\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount1Out\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Swap\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint112\",\n \"name\": \"reserve0\",\n \"type\": \"uint112\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint112\",\n \"name\": \"reserve1\",\n \"type\": \"uint112\"\n }\n ],\n \"name\": \"Sync\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"DOMAIN_SEPARATOR\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"PERMIT_TYPEHASH\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"nonces\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"permit\",\n \"outputs\": [],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"MINIMUM_LIQUIDITY\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"factory\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"token0\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"token1\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"getReserves\",\n \"outputs\": [\n {\n \"internalType\": \"uint112\",\n \"name\": \"reserve0\",\n \"type\": \"uint112\"\n },\n {\n \"internalType\": \"uint112\",\n \"name\": \"reserve1\",\n \"type\": \"uint112\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"blockTimestampLast\",\n \"type\": \"uint32\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"price0CumulativeLast\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"price1CumulativeLast\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"kLast\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"mint\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"liquidity\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"burn\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount0\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount1\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount0Out\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount1Out\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"swap\",\n \"outputs\": [],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"skim\",\n \"outputs\": [],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [],\n \"name\": \"sync\",\n \"outputs\": [],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n] as const\n","export const wethAbi = [\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [{ \"name\": \"\", \"type\": \"string\" }],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n { \"name\": \"guy\", \"type\": \"address\" },\n { \"name\": \"wad\", \"type\": \"uint256\" }\n ],\n \"name\": \"approve\",\n \"outputs\": [{ \"name\": \"\", \"type\": \"bool\" }],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\" }],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n { \"name\": \"src\", \"type\": \"address\" },\n { \"name\": \"dst\", \"type\": \"address\" },\n { \"name\": \"wad\", \"type\": \"uint256\" }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [{ \"name\": \"\", \"type\": \"bool\" }],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [{ \"name\": \"wad\", \"type\": \"uint256\" }],\n \"name\": \"withdraw\",\n \"outputs\": [],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint8\" }],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [{ \"name\": \"\", \"type\": \"address\" }],\n \"name\": \"balanceOf\",\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\" }],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [{ \"name\": \"\", \"type\": \"string\" }],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n { \"name\": \"dst\", \"type\": \"address\" },\n { \"name\": \"wad\", \"type\": \"uint256\" }\n ],\n \"name\": \"transfer\",\n \"outputs\": [{ \"name\": \"\", \"type\": \"bool\" }],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [],\n \"name\": \"deposit\",\n \"outputs\": [],\n \"payable\": true,\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n { \"name\": \"\", \"type\": \"address\" },\n { \"name\": \"\", \"type\": \"address\" }\n ],\n \"name\": \"allowance\",\n \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\" }],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n { \"payable\": true, \"stateMutability\": \"payable\", \"type\": \"fallback\" },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"name\": \"src\", \"type\": \"address\" },\n { \"indexed\": true, \"name\": \"guy\", \"type\": \"address\" },\n { \"indexed\": false, \"name\": \"wad\", \"type\": \"uint256\" }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"name\": \"src\", \"type\": \"address\" },\n { \"indexed\": true, \"name\": \"dst\", \"type\": \"address\" },\n { \"indexed\": false, \"name\": \"wad\", \"type\": \"uint256\" }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"name\": \"dst\", \"type\": \"address\" },\n { \"indexed\": false, \"name\": \"wad\", \"type\": \"uint256\" }\n ],\n \"name\": \"Deposit\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"name\": \"src\", \"type\": \"address\" },\n { \"indexed\": false, \"name\": \"wad\", \"type\": \"uint256\" }\n ],\n \"name\": \"Withdrawal\",\n \"type\": \"event\"\n }\n] as const\n","import { Abi, Address } from 'viem'\nimport { useMemo } from 'react'\nimport { WNATIVE } from '@pulsex/sdk'\nimport { erc20ABI, useWalletClient } from 'wagmi'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\n\nimport { getMulticallAddress } from 'utils/addressHelpers'\nimport {\n getContract,\n getPlsxContract,\n getMasterChefContract,\n getPlsxLabContract,\n getBuyAndBurnContract,\n} from 'utils/contractHelpers'\n\nimport { multicallAbi } from 'config/abi/multicall'\nimport { erc20BytesAbi } from 'config/abi/erc20_bytes32'\nimport { pulsexPairAbi } from 'config/abi/IPulseXPair'\nimport { wethAbi } from 'config/abi/weth'\n\n/**\n * Helper hooks to get specific contracts (by ABI)\n */\n\nexport const useERC20 = (address: Address) => {\n return useContract(address, erc20ABI)\n}\n\nexport const usePlsx = () => {\n const { chainId } = useActiveChainId()\n return useMemo(() => getPlsxContract(chainId), [chainId])\n}\n\nexport const useMasterchef = () => {\n const { chainId } = useActiveChainId()\n const { data: signer } = useWalletClient()\n return useMemo(() => getMasterChefContract(signer ?? undefined, chainId), [signer, chainId])\n}\n\nexport const usePlsxLab = () => {\n const { data: signer } = useWalletClient()\n return useMemo(() => getPlsxLabContract(signer), [signer])\n}\n\nexport const useBuyAndBurnContract = (protocol: string) => {\n const { chainId } = useActiveChainId()\n const { data: signer } = useWalletClient()\n return useMemo(() => getBuyAndBurnContract(protocol, signer, chainId), [chainId, protocol, signer])\n}\n\n// Code below migrated from Exchange useContract.ts\n\n// returns null on errors\nexport function useContract(\n addressOrAddressMap?: Address | { [chainId: number]: Address },\n abi?: TAbi,\n) {\n const { chainId } = useActiveChainId()\n const { data: walletClient } = useWalletClient()\n\n return useMemo(() => {\n if (!addressOrAddressMap || !abi || !chainId) return null\n let address: Address | undefined\n if (typeof addressOrAddressMap === 'string') address = addressOrAddressMap\n else address = addressOrAddressMap[chainId]\n if (!address) return null\n try {\n return getContract({\n abi,\n address,\n chainId,\n signer: walletClient ?? undefined,\n })\n } catch (error) {\n console.error('Failed to get contract', error)\n return null\n }\n }, [addressOrAddressMap, abi, chainId, walletClient])\n}\n\nexport function useTokenContract(tokenAddress?: Address) {\n return useContract(tokenAddress, erc20ABI)\n}\n\nexport function useWETHContract() {\n const { chainId } = useActiveChainId()\n return useContract(chainId ? WNATIVE[chainId]?.address : undefined, wethAbi)\n}\n\nexport function useBytes32TokenContract(tokenAddress?: Address) {\n return useContract(tokenAddress, erc20BytesAbi)\n}\n\nexport function usePairContract(pairAddress?: Address) {\n return useContract(pairAddress, pulsexPairAbi)\n}\n\nexport function useMulticallContract() {\n const { chainId } = useActiveChainId()\n return useContract(getMulticallAddress(chainId), multicallAbi)\n}\n","import { createAction } from '@reduxjs/toolkit'\nimport { Hex } from 'viem'\nimport { Address } from 'wagmi'\n\nexport interface Call {\n address: Address\n callData: Hex\n}\n\nconst ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/\nconst LOWER_HEX_REGEX = /^0x[a-f0-9]*$/\nexport function toCallKey(call: Call): string {\n if (!ADDRESS_REGEX.test(call.address)) {\n throw new Error(`Invalid address: ${call.address}`)\n }\n if (!LOWER_HEX_REGEX.test(call.callData)) {\n throw new Error(`Invalid hex: ${call.callData}`)\n }\n return `${call.address}-${call.callData}`\n}\n\nexport function parseCallKey(callKey: string): Call {\n const pcs = callKey.split('-')\n if (pcs.length !== 2) {\n throw new Error(`Invalid call key: ${callKey}`)\n }\n return {\n address: pcs[0] as Hex,\n callData: pcs[1] as Hex,\n }\n}\n\nexport interface ListenerOptions {\n // how often this data should be fetched, by default 1\n readonly blocksPerFetch?: number\n enabled?: boolean\n}\n\nexport interface ListenerOptionsWithGas extends ListenerOptions {\n readonly gasRequired?: number\n}\n\nexport const addMulticallListeners = createAction<{ chainId: number; calls: Call[]; options?: ListenerOptions }>(\n 'multicall/addMulticallListeners',\n)\nexport const removeMulticallListeners = createAction<{ chainId: number; calls: Call[]; options?: ListenerOptions }>(\n 'multicall/removeMulticallListeners',\n)\nexport const fetchingMulticallResults = createAction<{ chainId: number; calls: Call[]; fetchingBlockNumber: number }>(\n 'multicall/fetchingMulticallResults',\n)\nexport const errorFetchingMulticallResults = createAction<{\n chainId: number\n calls: Call[]\n fetchingBlockNumber: number\n}>('multicall/errorFetchingMulticallResults')\nexport const updateMulticallResults = createAction<{\n chainId: number\n blockNumber: number\n results: {\n [callKey: string]: string | null\n }\n}>('multicall/updateMulticallResults')\n","import { createReducer } from '@reduxjs/toolkit'\nimport { atomWithReducer } from 'jotai/utils'\nimport {\n addMulticallListeners,\n errorFetchingMulticallResults,\n fetchingMulticallResults,\n removeMulticallListeners,\n toCallKey,\n updateMulticallResults,\n} from './actions'\n\nexport interface MulticallState {\n callListeners?: {\n // on a per-chain basis\n [chainId: number]: {\n // stores for each call key the listeners' preferences\n [callKey: string]: {\n // stores how many listeners there are per each blocks per fetch preference\n [blocksPerFetch: number]: number\n }\n }\n }\n\n callResults: {\n [chainId: number]: {\n [callKey: string]: {\n data?: string | null\n blockNumber?: number\n fetchingBlockNumber?: number\n }\n }\n }\n}\n\nconst initialState: MulticallState = {\n callResults: {},\n}\n\nexport const multicallReducer = createReducer(initialState, (builder) =>\n builder\n .addCase(addMulticallListeners, (state, { payload: { calls, chainId, options: { blocksPerFetch = 1 } = {} } }) => {\n const listeners: MulticallState['callListeners'] = state.callListeners\n ? state.callListeners\n : (state.callListeners = {})\n listeners[chainId] = listeners[chainId] ?? {}\n calls.forEach((call) => {\n const callKey = toCallKey(call)\n listeners[chainId][callKey] = listeners[chainId][callKey] ?? {}\n listeners[chainId][callKey][blocksPerFetch] = (listeners[chainId][callKey][blocksPerFetch] ?? 0) + 1\n })\n })\n .addCase(\n removeMulticallListeners,\n (state, { payload: { chainId, calls, options: { blocksPerFetch = 1 } = {} } }) => {\n const listeners: MulticallState['callListeners'] = state.callListeners\n ? state.callListeners\n : (state.callListeners = {})\n\n if (!listeners[chainId]) return\n calls.forEach((call) => {\n const callKey = toCallKey(call)\n if (!listeners[chainId][callKey]) return\n if (!listeners[chainId][callKey][blocksPerFetch]) return\n\n if (listeners[chainId][callKey][blocksPerFetch] === 1) {\n delete listeners[chainId][callKey][blocksPerFetch]\n } else {\n listeners[chainId][callKey][blocksPerFetch]--\n }\n })\n },\n )\n .addCase(fetchingMulticallResults, (state, { payload: { chainId, fetchingBlockNumber, calls } }) => {\n state.callResults[chainId] = state.callResults[chainId] ?? {}\n calls.forEach((call) => {\n const callKey = toCallKey(call)\n const current = state.callResults[chainId][callKey]\n if (!current) {\n state.callResults[chainId][callKey] = {\n fetchingBlockNumber,\n }\n } else {\n if ((current.fetchingBlockNumber ?? 0) >= fetchingBlockNumber) return\n state.callResults[chainId][callKey].fetchingBlockNumber = fetchingBlockNumber\n }\n })\n })\n .addCase(errorFetchingMulticallResults, (state, { payload: { fetchingBlockNumber, chainId, calls } }) => {\n state.callResults[chainId] = state.callResults[chainId] ?? {}\n calls.forEach((call) => {\n const callKey = toCallKey(call)\n const current = state.callResults[chainId][callKey]\n if (!current) return // only should be dispatched if we are already fetching\n if (current.fetchingBlockNumber === fetchingBlockNumber) {\n delete current.fetchingBlockNumber\n current.data = null\n current.blockNumber = fetchingBlockNumber\n }\n })\n })\n .addCase(updateMulticallResults, (state, { payload: { chainId, results, blockNumber } }) => {\n state.callResults[chainId] = state.callResults[chainId] ?? {}\n Object.keys(results).forEach((callKey) => {\n const current = state.callResults[chainId][callKey]\n if ((current?.blockNumber ?? 0) > blockNumber) return\n state.callResults[chainId][callKey] = {\n data: results[callKey],\n blockNumber,\n }\n })\n }),\n)\n\nexport const multicallReducerAtom = atomWithReducer(initialState, multicallReducer)\n","import { useActiveChainId } from 'hooks/useActiveChainId'\nimport { useAtom } from 'jotai'\nimport { useEffect, useMemo } from 'react'\nimport { multicallReducerAtom } from 'state/multicall/reducer'\nimport { useQueryClient } from '@tanstack/react-query'\nimport {\n Abi,\n Address,\n ContractFunctionResult,\n DecodeFunctionResultParameters,\n decodeFunctionResult,\n encodeFunctionData,\n EncodeFunctionDataParameters,\n GetFunctionArgs,\n Hex,\n InferFunctionName,\n} from 'viem'\nimport {\n addMulticallListeners,\n Call,\n ListenerOptions,\n ListenerOptionsWithGas,\n parseCallKey,\n removeMulticallListeners,\n toCallKey,\n} from './actions'\n\ntype AbiStateMutability = 'pure' | 'view' | 'nonpayable' | 'payable'\n\ninterface CallResult {\n readonly valid: boolean\n readonly data: Hex | undefined\n readonly blockNumber: number | undefined\n}\n\nconst INVALID_RESULT: CallResult = { valid: false, blockNumber: undefined, data: undefined }\n\n// use this options object\nexport const NEVER_RELOAD: ListenerOptions = {\n blocksPerFetch: Infinity,\n}\n\n// the lowest level call for subscribing to contract data\nfunction useCallsData(calls: (Call | undefined)[], options?: ListenerOptions): CallResult[] {\n const { chainId } = useActiveChainId()\n const [{ callResults }, dispatch] = useAtom(multicallReducerAtom)\n\n const serializedCallKeys: string = useMemo(\n () =>\n JSON.stringify(\n calls\n ?.filter((c): c is Call => Boolean(c))\n ?.map(toCallKey)\n ?.sort() ?? [],\n ),\n [calls],\n )\n\n // update listeners when there is an actual change that persists for at least 100ms\n useEffect(() => {\n const callKeys: string[] = JSON.parse(serializedCallKeys)\n if (!chainId || callKeys.length === 0) return undefined\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const calls = callKeys.map((key) => parseCallKey(key))\n dispatch(\n addMulticallListeners({\n chainId,\n calls,\n options,\n }),\n )\n\n return () => {\n dispatch(\n removeMulticallListeners({\n chainId,\n calls,\n options,\n }),\n )\n }\n }, [chainId, dispatch, options, serializedCallKeys])\n\n return useMemo(\n () =>\n calls.map((call) => {\n if (!chainId || !call) return INVALID_RESULT\n\n const result = callResults[chainId]?.[toCallKey(call)]\n let data\n if (result?.data && result?.data !== '0x') {\n // eslint-disable-next-line prefer-destructuring\n data = result.data\n }\n\n return { valid: true, data, blockNumber: result?.blockNumber }\n }),\n [callResults, calls, chainId],\n )\n}\n\nexport interface CallState {\n readonly valid: boolean\n // the result, or undefined if loading or errored/no data\n readonly result: T | undefined\n // true if the result has never been fetched\n readonly loading: boolean\n // true if the result is not for the latest block\n readonly syncing: boolean\n // true if the call was made and is synced, but the return data is invalid\n readonly error: boolean\n readonly blockNumber?: number\n}\n\nconst INVALID_CALL_STATE: CallState = { valid: false, result: undefined, loading: false, syncing: false, error: false }\nconst LOADING_CALL_STATE: CallState = { valid: true, result: undefined, loading: true, syncing: true, error: false }\n\nfunction toCallState<\n TAbi extends Abi | readonly unknown[] = Abi,\n TFunctionName extends string = string,\n TAbiStateMutability extends AbiStateMutability = AbiStateMutability,\n>(\n callResult: CallResult | undefined,\n abi: TAbi,\n functionName: InferFunctionName,\n latestBlockNumber: number | undefined,\n): CallState> {\n if (!callResult) return INVALID_CALL_STATE\n const { valid, data, blockNumber } = callResult\n if (!valid) return INVALID_CALL_STATE\n if (valid && !blockNumber) return LOADING_CALL_STATE\n if (!functionName || !abi || !latestBlockNumber) return LOADING_CALL_STATE\n const success = data && data.length > 2\n const syncing = (blockNumber ?? 0) < latestBlockNumber\n let result\n if (success && data) {\n try {\n result = decodeFunctionResult({\n abi,\n data,\n functionName,\n } as unknown as DecodeFunctionResultParameters)\n } catch (error) {\n console.debug('Result data parsing failed', abi, data)\n return {\n valid: true,\n loading: false,\n error: true,\n syncing,\n result,\n blockNumber,\n }\n }\n }\n\n return {\n valid: true,\n loading: false,\n syncing,\n result,\n error: !success,\n blockNumber,\n }\n}\n\n// export interface MultiContractsMultiMethodsCallInput {\n// contract: Contract | null | undefined\n// methodName: string\n// inputs?: OptionalMethodInputs\n// }\n\n// export function useMultiContractsMultiMethods(\n// callInputs: MultiContractsMultiMethodsCallInput[],\n// options?: ListenerOptions,\n// ) {\n// const { chainId } = useActiveChainId()\n\n// const { calls, fragments, contracts } = useMemo(() => {\n// if (!callInputs || !callInputs.length) {\n// return { calls: [], fragments: [], contracts: [] }\n// }\n// const validFragments: FunctionFragment[] = []\n// const validContracts: Contract[] = []\n// const validCalls: Call[] = []\n// for (const { methodName, inputs, contract } of callInputs) {\n// const fragment = contract?.interface.getFunction(methodName)\n// if (!contract || !fragment) {\n// // eslint-disable-next-line no-continue\n// continue\n// }\n// validFragments.push(fragment)\n// validContracts.push(contract)\n// validCalls.push({\n// address: contract.address,\n// callData: contract.interface.encodeFunctionData(fragment, inputs),\n// })\n// }\n// return { calls: validCalls, fragments: validFragments, contracts: validContracts }\n// }, [callInputs])\n\n// const results = useCallsData(calls, options)\n\n// const { cache } = useSWRConfig()\n\n// return useMemo(() => {\n// const currentBlockNumber = cache.get(unstable_serialize(['blockNumber', chainId]))?.data\n// return results.map((result, i) => toCallState(result, contracts[i]?.interface, fragments[i], currentBlockNumber))\n// }, [cache, chainId, results, fragments, contracts])\n// }\n\nexport type SingleContractMultipleDataCallParameters<\n TAbi extends Abi | readonly unknown[] = Abi,\n TFunctionName extends string = string,\n TAbiStateMutability extends AbiStateMutability = AbiStateMutability,\n> = {\n contract: {\n abi?: TAbi\n address?: Address\n }\n functionName: InferFunctionName\n options?: ListenerOptionsWithGas\n args: GetFunctionArgs['args'][]\n}\n\nexport function useSingleContractMultipleData({\n contract,\n args,\n functionName,\n options,\n}: SingleContractMultipleDataCallParameters): CallState<\n ContractFunctionResult\n>[] {\n const { chainId } = useActiveChainId()\n\n const calls = useMemo(\n () =>\n contract && contract.abi && contract.address && args && args.length > 0\n ? args.map((inputs) => {\n if (!contract.address) return undefined\n return {\n address: contract.address,\n callData: encodeFunctionData({\n abi: contract.abi,\n functionName,\n args: inputs,\n } as unknown as EncodeFunctionDataParameters),\n }\n })\n : [],\n [args, contract, functionName],\n )\n\n const results = useCallsData(calls, options)\n\n const queryClient = useQueryClient()\n\n return useMemo(() => {\n const currentBlockNumber = queryClient.getQueryCache().find({ queryKey: ['blockNumber', chainId] })?.state?.data\n return results.map((result) => toCallState(result, contract.abi, functionName, currentBlockNumber))\n }, [queryClient, chainId, results, contract.abi, functionName])\n}\n\nconst DEFAULT_OPTIONS = {\n blocksPerFetch: undefined as number | undefined,\n}\n\nexport type MultipleSameDataCallParameters<\n TAbi extends Abi | readonly unknown[] = Abi,\n TFunctionName extends string = string,\n TAbiStateMutability extends AbiStateMutability = AbiStateMutability,\n> = {\n addresses: (Address | undefined)[]\n abi: TAbi\n functionName: InferFunctionName\n options?: ListenerOptionsWithGas\n} & GetFunctionArgs\n\nexport function useMultipleContractSingleData({\n abi,\n addresses,\n functionName,\n args,\n options,\n}: MultipleSameDataCallParameters): CallState>[] {\n const { enabled, blocksPerFetch } = options ?? { enabled: true }\n const callData: Hex | undefined = useMemo(\n () =>\n abi && enabled\n ? encodeFunctionData({\n abi,\n functionName,\n args,\n } as unknown as EncodeFunctionDataParameters)\n : undefined,\n [abi, args, enabled, functionName],\n )\n\n const calls = useMemo(\n () =>\n addresses && addresses.length > 0 && callData\n ? addresses.map((address) => {\n return address && callData\n ? {\n address,\n callData,\n }\n : undefined\n })\n : [],\n [addresses, callData],\n )\n\n const results = useCallsData(calls, options?.blocksPerFetch ? { blocksPerFetch } : DEFAULT_OPTIONS)\n const { chainId } = useActiveChainId()\n\n const queryClient = useQueryClient()\n\n return useMemo(() => {\n const currentBlockNumber = queryClient.getQueryCache().find({ queryKey: ['blockNumber', chainId] })?.state?.data\n return results.map((result) => toCallState(result, abi, functionName, currentBlockNumber))\n }, [queryClient, chainId, results, abi, functionName])\n}\n\nexport type SingleCallParameters<\n TAbi extends Abi | readonly unknown[] = Abi,\n TFunctionName extends string = string,\n TAbiStateMutability extends AbiStateMutability = AbiStateMutability,\n> = {\n contract: {\n abi?: TAbi\n address?: Address\n }\n functionName: InferFunctionName\n options?: ListenerOptionsWithGas\n} & GetFunctionArgs\n\nexport function useSingleCallResult({\n contract,\n functionName,\n args,\n options,\n}: SingleCallParameters): CallState> {\n const calls = useMemo(() => {\n return contract && contract.abi && contract.address\n ? [\n {\n address: contract.address,\n callData: encodeFunctionData({\n abi: contract.abi,\n args,\n functionName,\n } as unknown as EncodeFunctionDataParameters),\n },\n ]\n : []\n }, [contract, args, functionName])\n\n const result = useCallsData(calls, options)[0]\n\n const queryClient = useQueryClient()\n const { chainId } = useActiveChainId()\n\n return useMemo(() => {\n const currentBlockNumber = queryClient.getQueryCache().find({ queryKey: ['blockNumber', chainId] })?.state?.data\n return toCallState(result, contract?.abi, functionName, currentBlockNumber)\n }, [queryClient, chainId, result, contract?.abi, functionName])\n}\n","import { Currency, CurrencyAmount, Native, Token, } from '@pulsex/sdk'\nimport { multicallAbi } from 'config/abi/multicall'\nimport { useMemo } from 'react'\nimport { safeGetAddress } from 'utils'\nimport { useAllTokens } from 'hooks/Tokens'\nimport { getMulticallAddress } from 'utils/addressHelpers'\nimport { Address, isAddress } from 'viem'\nimport orderBy from 'lodash/orderBy'\nimport useNativeCurrency from 'hooks/useNativeCurrency'\nimport { erc20ABI, useAccount } from 'wagmi'\nimport { useSingleContractMultipleData, useMultipleContractSingleData } from '../multicall/hooks'\n\n/**\n * Returns a map of the given addresses to their eventually consistent PLS balances.\n */\nexport function usePLSBalances(uncheckedAddresses?: (string | undefined)[]): {\n [address: string]: CurrencyAmount | undefined\n} {\n const native = useNativeCurrency()\n\n const addresses: Address[] = useMemo(\n () =>\n uncheckedAddresses\n ? orderBy(uncheckedAddresses.map(safeGetAddress).filter((a): a is Address => a !== undefined))\n : [],\n [uncheckedAddresses],\n )\n\n const results = useSingleContractMultipleData({\n contract: useMemo(\n () => ({\n abi: multicallAbi,\n address: getMulticallAddress(native.chainId),\n }),\n [native],\n ),\n functionName: 'getEthBalance',\n args: useMemo(() => addresses.map((address) => [address] as const), [addresses]),\n })\n\n return useMemo(\n () =>\n addresses.reduce<{ [address: string]: CurrencyAmount }>((memo, address, i) => {\n const value = results?.[i]?.result\n if (typeof value !== 'undefined') memo[address] = CurrencyAmount.fromRawAmount(native, BigInt(value.toString()))\n return memo\n }, {}),\n [addresses, results, native],\n )\n}\n\n/**\n * Returns a map of token addresses to their eventually consistent token balances for a single account.\n */\nexport function useTokenBalancesWithLoadingIndicator(\n address?: string,\n tokens?: (Token | undefined)[],\n): [{ [tokenAddress: string]: CurrencyAmount | undefined }, boolean] {\n const validatedTokens: Token[] = useMemo(\n () => tokens?.filter((t?: Token): t is Token => isAddress(t?.address) !== false) ?? [],\n [tokens],\n )\n\n const validatedTokenAddresses = useMemo(() => validatedTokens.map((vt) => vt.address), [validatedTokens])\n\n const balances = useMultipleContractSingleData({\n abi: erc20ABI,\n addresses: validatedTokenAddresses,\n functionName: 'balanceOf',\n args: useMemo(() => [address as Address] as const, [address]),\n options: {\n enabled: Boolean(address && validatedTokenAddresses.length > 0),\n },\n })\n\n const anyLoading: boolean = useMemo(() => balances.some((callState) => callState.loading), [balances])\n\n return [\n useMemo(\n () =>\n address && validatedTokens.length > 0\n ? validatedTokens.reduce<{ [tokenAddress: string]: CurrencyAmount | undefined }>((memo, token, i) => {\n const value = balances?.[i]?.result\n const amount = typeof value !== 'undefined' ? BigInt(value.toString()) : undefined\n if (typeof amount !== 'undefined') {\n memo[token.address] = CurrencyAmount.fromRawAmount(token, amount)\n }\n return memo\n }, {})\n : {},\n [address, validatedTokens, balances],\n ),\n anyLoading,\n ]\n}\n\nexport function useTokenBalances(\n address?: string,\n tokens?: (Token | undefined)[],\n): { [tokenAddress: string]: CurrencyAmount | undefined } {\n return useTokenBalancesWithLoadingIndicator(address, tokens)[0]\n}\n\n// get the balance for a single token/account combo\nexport function useTokenBalance(account?: string, token?: Token): CurrencyAmount | undefined {\n const tokenBalances = useTokenBalances(\n account,\n useMemo(() => [token], [token]),\n )\n if (!token) return undefined\n return tokenBalances[token.address]\n}\n\nexport function useCurrencyBalances(\n account?: string,\n currencies?: (Currency | undefined)[],\n): (CurrencyAmount | undefined)[] {\n const tokens = useMemo(\n () => currencies?.filter((currency): currency is Token => currency?.isToken) ?? [],\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [...currencies],\n )\n\n const tokenBalances = useTokenBalances(account, tokens)\n const containsNative: boolean = useMemo(\n () => currencies?.some((currency) => currency?.isNative) ?? false,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [...currencies],\n )\n const uncheckedAddresses = useMemo(() => (containsNative ? [account] : []), [containsNative, account])\n const nativeBalance = usePLSBalances(uncheckedAddresses)\n\n return useMemo(\n () =>\n currencies?.map((currency) => {\n if (!account || !currency) return undefined\n if (currency?.isToken) return tokenBalances[currency.address]\n if (currency?.isNative) return nativeBalance[account]\n return undefined\n }) ?? [],\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [account, ...currencies, nativeBalance, tokenBalances],\n )\n}\n\nexport function useCurrencyBalance(account?: string, currency?: Currency): CurrencyAmount | undefined {\n return useCurrencyBalances(\n account,\n useMemo(() => [currency], [currency]),\n )[0]\n}\n\n// mimics useAllBalances\nexport function useAllTokenBalances(): { [tokenAddress: string]: CurrencyAmount | undefined } {\n const { address: account } = useAccount()\n const allTokens = useAllTokens()\n const allTokensArray = useMemo(() => Object.values(allTokens ?? {}), [allTokens])\n const balances = useTokenBalances(account ?? undefined, allTokensArray)\n return balances ?? {}\n}\n","import { PairV1, PairV2, Currency, CurrencyAmount, IPulseXPair } from '@pulsex/sdk'\nimport { useMemo } from 'react'\n\nimport { toV1LiquidityToken, toV2LiquidityToken, useTrackedTokenPairs } from 'state/user/hooks'\nimport { useTokenBalancesWithLoadingIndicator } from 'state/wallet/hooks'\nimport { useMultipleContractSingleData } from '../state/multicall/hooks'\nimport { wrappedCurrency } from '../utils/wrappedCurrency'\nimport { useActiveChainId } from './useActiveChainId'\n\nexport enum PairState {\n LOADING,\n NOT_EXISTS,\n EXISTS,\n INVALID,\n}\n\nexport function useV1Pairs(currencies: [Currency | undefined, Currency | undefined][]): [PairState, PairV1 | null][] {\n const { chainId } = useActiveChainId()\n\n const tokens = useMemo(\n () =>\n currencies.map(([currencyA, currencyB]) => [\n wrappedCurrency(currencyA, chainId),\n wrappedCurrency(currencyB, chainId),\n ]),\n [chainId, currencies],\n )\n\n const pairAddresses = useMemo(\n () =>\n tokens.map(([tokenA, tokenB]) => {\n try {\n return tokenA && tokenB && !tokenA.equals(tokenB) ? PairV1.getAddress(tokenA, tokenB) : undefined\n } catch (error: any) {\n // Debug Invariant failed related to this line\n console.error(\n error.msg,\n `- pairAddresses: ${tokenA?.address}-${tokenB?.address}`,\n `chainId: ${tokenA?.chainId}`,\n )\n\n return undefined\n }\n }),\n [tokens],\n )\n\n const results = useMultipleContractSingleData({\n addresses: pairAddresses,\n abi: IPulseXPair,\n functionName: 'getReserves',\n })\n\n return useMemo(() => {\n return results.map((result, i) => {\n const { result: reserves, loading } = result\n const tokenA = tokens[i][0]\n const tokenB = tokens[i][1]\n\n if (loading) return [PairState.LOADING, null]\n if (!tokenA || !tokenB || tokenA.equals(tokenB)) return [PairState.INVALID, null]\n if (!reserves) return [PairState.NOT_EXISTS, null]\n const [reserve0, reserve1] = reserves\n const [token0, token1] = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA]\n return [\n PairState.EXISTS,\n new PairV1(\n CurrencyAmount.fromRawAmount(token0, reserve0.toString()),\n CurrencyAmount.fromRawAmount(token1, reserve1.toString()),\n ),\n ]\n })\n }, [results, tokens])\n}\n\nexport function useV1Pair(tokenA?: Currency, tokenB?: Currency): [PairState, PairV1 | null] {\n const pairCurrencies = useMemo<[Currency, Currency][]>(() => [[tokenA, tokenB]], [tokenA, tokenB])\n return useV1Pairs(pairCurrencies)[0]\n}\n\nexport function useV1PairsByAccount(account: string) {\n // fetch the user's balances of all tracked V1 LP tokens\n const trackedTokenPairs = useTrackedTokenPairs()\n\n const tokenPairsWithLiquidityTokens = useMemo(\n () => trackedTokenPairs.map((tokens) => ({ liquidityToken: toV1LiquidityToken(tokens), tokens })),\n [trackedTokenPairs],\n )\n const liquidityTokens = useMemo(\n () => tokenPairsWithLiquidityTokens.map((tpwlt) => tpwlt.liquidityToken),\n [tokenPairsWithLiquidityTokens],\n )\n const [v1PairsBalances, fetchingV1PairBalances] = useTokenBalancesWithLoadingIndicator(\n account ?? undefined,\n liquidityTokens,\n )\n\n // fetch the reserves for all V1 pools in which the user has a balance\n const liquidityTokensWithBalances = useMemo(\n () =>\n tokenPairsWithLiquidityTokens.filter(({ liquidityToken }) =>\n v1PairsBalances[liquidityToken.address]?.greaterThan('0'),\n ),\n [tokenPairsWithLiquidityTokens, v1PairsBalances],\n )\n\n const v1Pairs = useV1Pairs(liquidityTokensWithBalances.map(({ tokens }) => tokens))\n\n return useMemo(() => {\n const v1IsLoading =\n fetchingV1PairBalances ||\n v1Pairs?.length < liquidityTokensWithBalances.length ||\n (v1Pairs?.length && v1Pairs.every(([pairState]) => pairState === PairState.LOADING))\n const allV1PairsWithLiquidity: PairV1[] = v1Pairs\n ?.filter(([pairState, pair]) => pairState === PairState.EXISTS && Boolean(pair))\n .map(([, pair]) => pair)\n\n return {\n data: allV1PairsWithLiquidity,\n loading: v1IsLoading,\n }\n }, [fetchingV1PairBalances, liquidityTokensWithBalances.length, v1Pairs])\n}\n\n\nexport function useV2Pairs(currencies: [Currency | undefined, Currency | undefined][]): [PairState, PairV2 | null][] {\n const { chainId } = useActiveChainId()\n\n const tokens = useMemo(\n () =>\n currencies.map(([currencyA, currencyB]) => [\n wrappedCurrency(currencyA, chainId),\n wrappedCurrency(currencyB, chainId),\n ]),\n [chainId, currencies],\n )\n\n const pairAddresses = useMemo(\n () =>\n tokens.map(([tokenA, tokenB]) => {\n try {\n return tokenA && tokenB && !tokenA.equals(tokenB) ? PairV2.getAddress(tokenA, tokenB) : undefined\n } catch (error: any) {\n // Debug Invariant failed related to this line\n console.error(\n error.msg,\n `- pairAddresses: ${tokenA?.address}-${tokenB?.address}`,\n `chainId: ${tokenA?.chainId}`,\n )\n\n return undefined\n }\n }),\n [tokens],\n )\n\n const results = useMultipleContractSingleData({\n addresses: pairAddresses,\n abi: IPulseXPair,\n functionName: 'getReserves',\n })\n\n return useMemo(() => {\n return results.map((result, i) => {\n const { result: reserves, loading } = result\n const tokenA = tokens[i][0]\n const tokenB = tokens[i][1]\n\n if (loading) return [PairState.LOADING, null]\n if (!tokenA || !tokenB || tokenA.equals(tokenB)) return [PairState.INVALID, null]\n if (!reserves) return [PairState.NOT_EXISTS, null]\n const [reserve0, reserve1] = reserves\n const [token0, token1] = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA]\n return [\n PairState.EXISTS,\n new PairV2(\n CurrencyAmount.fromRawAmount(token0, reserve0.toString()),\n CurrencyAmount.fromRawAmount(token1, reserve1.toString()),\n ),\n ]\n })\n }, [results, tokens])\n}\n\nexport function useV2Pair(tokenA?: Currency, tokenB?: Currency): [PairState, PairV2 | null] {\n const pairCurrencies = useMemo<[Currency, Currency][]>(() => [[tokenA, tokenB]], [tokenA, tokenB])\n return useV2Pairs(pairCurrencies)[0]\n}\n\nexport function useV2PairsByAccount(account: string) {\n // fetch the user's balances of all tracked V2 LP tokens\n const trackedTokenPairs = useTrackedTokenPairs()\n\n const tokenPairsWithLiquidityTokens = useMemo(\n () => trackedTokenPairs.map((tokens) => ({ liquidityToken: toV2LiquidityToken(tokens), tokens })),\n [trackedTokenPairs],\n )\n const liquidityTokens = useMemo(\n () => tokenPairsWithLiquidityTokens.map((tpwlt) => tpwlt.liquidityToken),\n [tokenPairsWithLiquidityTokens],\n )\n const [v2PairsBalances, fetchingV2PairBalances] = useTokenBalancesWithLoadingIndicator(\n account ?? undefined,\n liquidityTokens,\n )\n\n // fetch the reserves for all V2 pools in which the user has a balance\n const liquidityTokensWithBalances = useMemo(\n () =>\n tokenPairsWithLiquidityTokens.filter(({ liquidityToken }) =>\n v2PairsBalances[liquidityToken.address]?.greaterThan('0'),\n ),\n [tokenPairsWithLiquidityTokens, v2PairsBalances],\n )\n\n const v2Pairs = useV2Pairs(liquidityTokensWithBalances.map(({ tokens }) => tokens))\n\n return useMemo(() => {\n const v2IsLoading =\n fetchingV2PairBalances ||\n v2Pairs?.length < liquidityTokensWithBalances.length ||\n (v2Pairs?.length && v2Pairs.every(([pairState]) => pairState === PairState.LOADING))\n const allV2PairsWithLiquidity: PairV2[] = v2Pairs\n ?.filter(([pairState, pair]) => pairState === PairState.EXISTS && Boolean(pair))\n .map(([, pair]) => pair)\n\n return {\n data: allV2PairsWithLiquidity,\n loading: v2IsLoading,\n }\n }, [fetchingV2PairBalances, liquidityTokensWithBalances.length, v2Pairs])\n}\n\nexport function usePairsBothProtocols(\n currencies: [Currency | undefined, Currency | undefined][],\n protocol: string):\n [PairState, PairV1 | PairV2 | null][] {\n const { chainId } = useActiveChainId()\n\n const tokens = useMemo(\n () =>\n currencies.map(([currencyA, currencyB]) => [\n wrappedCurrency(currencyA, chainId),\n wrappedCurrency(currencyB, chainId),\n ]),\n [chainId, currencies],\n )\n\n const pairAddresses = useMemo(\n () =>\n tokens.map(([tokenA, tokenB]) => {\n try {\n if (protocol === 'V1') {\n return tokenA && tokenB && !tokenA.equals(tokenB) ? PairV1.getAddress(tokenA, tokenB) : undefined\n } \n if (protocol === 'V2') {\n return tokenA && tokenB && !tokenA.equals(tokenB) ? PairV2.getAddress(tokenA, tokenB) : undefined\n }\n return undefined\n } catch (error: any) {\n // Debug Invariant failed related to this line\n console.error(\n error.msg,\n `- pairAddresses: ${tokenA?.address}-${tokenB?.address}`,\n `chainId: ${tokenA?.chainId}`,\n )\n\n return undefined\n }\n }),\n [tokens, protocol],\n )\n\n const results = useMultipleContractSingleData({\n addresses: pairAddresses,\n abi: IPulseXPair,\n functionName: 'getReserves',\n })\n\n return useMemo(() => {\n return results.map((result, i) => {\n const { result: reserves, loading } = result\n const tokenA = tokens[i][0]\n const tokenB = tokens[i][1]\n\n if (loading) return [PairState.LOADING, null]\n if (!tokenA || !tokenB || tokenA.equals(tokenB)) return [PairState.INVALID, null]\n if (!reserves) return [PairState.NOT_EXISTS, null]\n const [reserve0, reserve1] = reserves\n const [token0, token1] = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA]\n return [\n PairState.EXISTS,\n protocol === 'V1' ? new PairV1(\n CurrencyAmount.fromRawAmount(token0, reserve0.toString()),\n CurrencyAmount.fromRawAmount(token1, reserve1.toString()),\n ) : new PairV2(\n CurrencyAmount.fromRawAmount(token0, reserve0.toString()),\n CurrencyAmount.fromRawAmount(token1, reserve1.toString()),\n ),\n ]\n })\n }, [results, tokens, protocol])\n}\n\nexport function usePairBothProtocols(\n tokenA?: Currency,\n tokenB?: Currency,\n protocol?: string):\n [PairState, PairV1 | PairV2 | null] {\n const pairCurrencies = useMemo<[Currency, Currency][]>(() => [[tokenA, tokenB]], [tokenA, tokenB])\n return usePairsBothProtocols(pairCurrencies, protocol)[0]\n}\n","import { Currency, CurrencyAmount, ERC20Token, Token, PairV1, PairV2, Price, WNATIVE } from '@pulsex/sdk'\nimport { ChainId } from '@pulsex/chains'\nimport { PLSX, STABLE_COIN } from '@pulsex/tokens'\nimport { FAST_INTERVAL } from 'config/constants/exchange'\nimport { useMemo } from 'react'\nimport useSWR from 'swr'\nimport { multiplyPriceByAmount } from 'utils/prices'\nimport getLpAddress from 'utils/getLpAddress'\nimport { isChainTestnet } from 'utils/wagmi'\nimport tryParseCurrencyAmount from '@pulsex/utils/tryParseAmount'\nimport { useActiveChainId } from './useActiveChainId'\nimport { wrappedCurrency } from '../utils/wrappedCurrency'\nimport { usePairContract } from './useContract'\nimport { PairState, useV1Pairs, useV2Pairs } from './usePairs'\n\n/**\n * Returns the price in USDC of the input currency\n * @param currency currency to compute the USDC price of\n */\nexport default function useUSDCPrice(currency?: Currency): Price | undefined {\n const { chainId } = useActiveChainId()\n const wrapped = currency?.wrapped\n const wnative = WNATIVE[chainId]\n const stable = STABLE_COIN[chainId]\n const tokenPairs: [Currency | undefined, Currency | undefined][] = useMemo(\n () => [\n [chainId && wrapped && wnative?.equals(wrapped) ? undefined : currency, chainId ? wnative : undefined],\n [stable && wrapped?.equals(stable) ? undefined : wrapped, stable],\n [chainId ? wnative : undefined, stable],\n ],\n [chainId, currency, stable, wnative, wrapped],\n )\n const [[ethPairState, ethPair], [usdcPairState, usdcPair], [usdcEthPairState, usdcEthPair]] = useV1Pairs(tokenPairs)\n const [[ethPairState2, ethPair2], [usdcPairState2, usdcPair2], [usdcEthPairState2, usdcEthPair2]] =\n useV2Pairs(tokenPairs)\n\n return useMemo(() => {\n if (!currency || !wrapped || !chainId || !wnative) {\n return undefined\n }\n // handle wpls/pls V1\n if (wrapped.equals(wnative)) {\n if (usdcPair) {\n const price = usdcPair.priceOf(wnative)\n return new Price(currency, stable, price.denominator, price.numerator)\n }\n return undefined\n }\n // handle wpls/pls V2\n if (wrapped.equals(wnative)) {\n if (usdcPair2) {\n const price = usdcPair2.priceOf(wnative)\n return new Price(currency, stable, price.denominator, price.numerator)\n }\n return undefined\n }\n\n // handle stable\n if (wrapped.equals(stable)) {\n return new Price(stable, stable, '1', '1')\n }\n\n const ethPairETHAmount = ethPair?.reserveOf(wnative)\n const ethPairETHUSDCValue: bigint =\n ethPairETHAmount && usdcEthPair ? usdcEthPair.priceOf(wnative).quote(ethPairETHAmount).quotient : 0n\n\n const ethPairETHAmount2 = ethPair2?.reserveOf(wnative)\n const ethPairETHUSDCValue2: bigint =\n ethPairETHAmount2 && usdcEthPair2 ? usdcEthPair2.priceOf(wnative).quote(ethPairETHAmount2).quotient : 0n\n\n // all other tokens V1\n // first try the stable pair\n if (usdcPairState === PairState.EXISTS && usdcPair && usdcPair.reserveOf(stable).greaterThan(ethPairETHUSDCValue)) {\n const price = usdcPair.priceOf(wrapped)\n return new Price(currency, stable, price.denominator, price.numerator)\n }\n if (ethPairState === PairState.EXISTS && ethPair && usdcEthPairState === PairState.EXISTS && usdcEthPair) {\n if (usdcEthPair.reserveOf(stable).greaterThan('0') && ethPair.reserveOf(wnative).greaterThan('0')) {\n const ethUSDCPrice = usdcEthPair.priceOf(stable)\n const currencyEthPrice = ethPair.priceOf(wnative)\n const usdcPrice = ethUSDCPrice.multiply(currencyEthPrice).invert()\n return new Price(currency, stable, usdcPrice.denominator, usdcPrice.numerator)\n }\n }\n\n // all other tokens V2\n // first try the stable pair\n if (\n usdcPairState2 === PairState.EXISTS &&\n usdcPair2 &&\n usdcPair2.reserveOf(stable).greaterThan(ethPairETHUSDCValue2)\n ) {\n const price = usdcPair2.priceOf(wrapped)\n return new Price(currency, stable, price.denominator, price.numerator)\n }\n if (ethPairState2 === PairState.EXISTS && ethPair2 && usdcEthPairState2 === PairState.EXISTS && usdcEthPair2) {\n if (usdcEthPair2.reserveOf(stable).greaterThan('0') && ethPair2.reserveOf(wnative).greaterThan('0')) {\n const ethUSDCPrice2 = usdcEthPair2.priceOf(stable)\n const currencyEthPrice2 = ethPair2.priceOf(wnative)\n const usdcPrice2 = ethUSDCPrice2.multiply(currencyEthPrice2).invert()\n return new Price(currency, stable, usdcPrice2.denominator, usdcPrice2.numerator)\n }\n }\n\n return undefined\n }, [\n chainId,\n currency,\n ethPair,\n ethPairState,\n stable,\n usdcEthPair,\n usdcEthPairState,\n usdcPair,\n usdcPairState,\n wnative,\n wrapped,\n ethPair2,\n ethPairState2,\n usdcEthPair2,\n usdcEthPairState2,\n usdcPair2,\n usdcPairState2,\n ])\n}\n\nexport const usePlsxUsdcPrice = (): Price | undefined => {\n const { chainId } = useActiveChainId()\n const plsxUsdcPrice = useUSDCPrice(PLSX[chainId])\n return plsxUsdcPrice\n}\n\nexport const useUSDCCurrencyAmount = (currency: Currency, amount: number): number | undefined => {\n const { chainId } = useActiveChainId()\n const usdcPrice = useUSDCPrice(currency)\n const wrapped = wrappedCurrency(currency, chainId)\n if (usdcPrice) {\n return multiplyPriceByAmount(usdcPrice, amount, wrapped.decimals)\n }\n return undefined\n}\n\nexport const useUSDCPlsxAmount = (amount: number): number | undefined => {\n const plsxUsdcPrice = usePlsxUsdcPrice()\n if (plsxUsdcPrice) {\n return multiplyPriceByAmount(plsxUsdcPrice, amount)\n }\n return undefined\n}\n\nexport const usePriceByPairs = (protocol: string, currencyA?: Currency, currencyB?: Currency) => {\n const [tokenA, tokenB] = [currencyA?.wrapped, currencyB?.wrapped]\n const pairAddress = getLpAddress(protocol, tokenA, tokenB)\n const pairContract = usePairContract(pairAddress)\n\n const { data: price } = useSWR(\n currencyA && currencyB && ['pair-price', currencyA, currencyB],\n async () => {\n const reserves = await pairContract.read.getReserves()\n if (!reserves) {\n return null\n }\n const [reserve0, reserve1] = reserves\n const [token0, token1] = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA]\n\n let pair: PairV1 | PairV2\n if (protocol === 'V1') {\n pair = new PairV1(\n CurrencyAmount.fromRawAmount(token0, reserve0.toString()),\n CurrencyAmount.fromRawAmount(token1, reserve1.toString()),\n )\n } else {\n pair = new PairV2(\n CurrencyAmount.fromRawAmount(token0, reserve0.toString()),\n CurrencyAmount.fromRawAmount(token1, reserve1.toString()),\n )\n }\n\n return pair.priceOf(tokenB)\n },\n { dedupingInterval: FAST_INTERVAL, refreshInterval: FAST_INTERVAL },\n )\n\n return price\n}\n\n// @Note: only fetch from one pair\nexport const usePlsxUsdPrice = (\n protocol: string,\n { forceMainnet } = { forceMainnet: false },\n): Price | undefined => {\n const { chainId } = useActiveChainId()\n const isTestnet = !forceMainnet && isChainTestnet(chainId)\n // Return bsc testnet cake if chain is testnet\n const plsx: Token = isTestnet ? PLSX[ChainId.PULSECHAIN_TESTNET] : PLSX[ChainId.PULSECHAIN]\n const stable = STABLE_COIN[plsx.chainId]\n return usePriceByPairs(protocol, stable, plsx)\n}\n\nexport const usePLSUsdcPrice = (): Price | undefined => {\n const { chainId } = useActiveChainId()\n const wnative = WNATIVE[chainId]\n const plsUsdcPrice = useUSDCPrice(wnative)\n return plsUsdcPrice\n}\n\n/**\n *\n * @param fiatValue string representation of a USD amount\n * @returns CurrencyAmount where currency is stablecoin on active chain\n */\nexport function useStablecoinAmountFromFiatValue(fiatValue: string | null | undefined) {\n const { chainId } = useActiveChainId()\n const stable = STABLE_COIN[chainId]\n\n return useMemo(() => {\n if (fiatValue === null || fiatValue === undefined || !chainId || !stable) {\n return undefined\n }\n\n // trim for decimal precision when parsing\n const parsedForDecimals = parseFloat(fiatValue).toFixed(stable.decimals).toString()\n try {\n // parse USD string into CurrencyAmount based on stablecoin decimals\n return tryParseCurrencyAmount(parsedForDecimals, stable)\n } catch (error) {\n return undefined\n }\n }, [chainId, fiatValue, stable])\n}\n\nexport function useUSDPrice(currencyAmount?: CurrencyAmount): number {\n const currency = currencyAmount?.currency\n\n // Use USDC price for chains not supported by backend yet\n const stablecoinPrice = useUSDCPrice(currency)\n if (currencyAmount && stablecoinPrice) {\n return parseFloat(stablecoinPrice.quote(currencyAmount).toSignificant())\n }\n return 0\n}\n","import { useAccount } from 'wagmi'\nimport { useMemo } from 'react'\nimport { useActiveChainId } from './useActiveChainId'\n\n/**\n * Provides a web3 provider with or without user's signer\n * Recreate web3 instance only if the provider change\n */\nconst useAccountActiveChain = () => {\n const { address: account } = useAccount()\n const { chainId } = useActiveChainId()\n\n return useMemo(() => ({ account, chainId }), [account, chainId])\n}\n\nexport default useAccountActiveChain\n","import BigNumber from 'bignumber.js'\nimport { BIG_ZERO } from '@pulsex/utils/bigNumber'\nimport { SerializedFarm, DeserializedFarmUserData } from './types'\n\nexport const deserializeFarmUserData = (farm: SerializedFarm): DeserializedFarmUserData => {\n return {\n allowance: farm.userData ? new BigNumber(farm.userData.allowance) : BIG_ZERO,\n tokenBalance: farm.userData ? new BigNumber(farm.userData.tokenBalance) : BIG_ZERO,\n stakedBalance: farm.userData ? new BigNumber(farm.userData.stakedBalance) : BIG_ZERO,\n earnings: farm.userData ? new BigNumber(farm.userData.earnings) : BIG_ZERO,\n }\n}\n","import BigNumber from 'bignumber.js'\nimport { deserializeToken } from '@pulsex/token-lists'\nimport { BIG_ZERO } from '@pulsex/utils/bigNumber'\nimport { SerializedFarm, DeserializedFarm } from './types'\nimport { deserializeFarmUserData } from './deserializeFarmUserData'\n\nexport const deserializeFarm = (\n farm: SerializedFarm,\n): DeserializedFarm => {\n const {\n lpAddress,\n lpSymbol,\n pid,\n multiplier,\n quoteTokenPriceUsd,\n tokenPriceUsd,\n protocol\n } = farm\n\n return {\n lpAddress,\n lpSymbol,\n pid,\n multiplier,\n quoteTokenPriceUsd,\n tokenPriceUsd,\n protocol,\n token: deserializeToken(farm.token),\n quoteToken: deserializeToken(farm.quoteToken),\n userData: deserializeFarmUserData(farm),\n tokenAmountTotal: farm.tokenAmountTotal ? new BigNumber(farm.tokenAmountTotal) : BIG_ZERO,\n quoteTokenAmountTotal: farm.quoteTokenAmountTotal ? new BigNumber(farm.quoteTokenAmountTotal) : BIG_ZERO,\n lpTotalInQuoteToken: farm.lpTotalInQuoteToken ? new BigNumber(farm.lpTotalInQuoteToken) : BIG_ZERO,\n lpTotalSupply: farm.lpTotalSupply ? new BigNumber(farm.lpTotalSupply) : BIG_ZERO,\n lpTokenPrice: farm.lpTokenPrice ? new BigNumber(farm.lpTokenPrice) : BIG_ZERO,\n tokenPriceVsQuote: farm.tokenPriceVsQuote ? new BigNumber(farm.tokenPriceVsQuote) : BIG_ZERO,\n poolWeight: farm.poolWeight ? new BigNumber(farm.poolWeight) : BIG_ZERO,\n lpTokenStakedAmount: farm.lpTokenStakedAmount ? new BigNumber(farm.lpTokenStakedAmount) : BIG_ZERO,\n }\n}\n","import BigNumber from 'bignumber.js'\nimport { BIG_ZERO } from '@pulsex/utils/bigNumber'\nimport { getBalanceAmount } from '@pulsex/utils/formatBalance'\nimport { createSelector } from '@reduxjs/toolkit'\nimport { deserializeFarm, deserializeFarmUserData } from '@pulsex/farms'\nimport { State } from '../types'\n\nconst selectCakeFarm = (state: State) => state.farms.data.find((f) => f.pid === 2)\nconst selectFarmByKey = (key: string, value: string | number) => (state: State) =>\n state.farms.data.find((f) => f[key] === value)\n\nexport const makeFarmFromPidSelector = (pid: number) =>\n createSelector([selectFarmByKey('pid', pid)], (farm) => deserializeFarm(farm))\n\nexport const makeBusdPriceFromPidSelector = (pid: number) =>\n createSelector([selectFarmByKey('pid', pid)], (farm) => {\n return farm && new BigNumber(farm.tokenPriceUsd)\n })\n\nexport const makeUserFarmFromPidSelector = (pid: number) =>\n createSelector([selectFarmByKey('pid', pid)], (farm) => {\n const { allowance, tokenBalance, stakedBalance, earnings } = deserializeFarmUserData(farm)\n return {\n allowance,\n tokenBalance,\n stakedBalance,\n earnings,\n }\n })\n\nexport const priceCakeFromPidSelector = createSelector([selectCakeFarm], (cakeBnbFarm) => {\n const cakePriceBusdAsString = cakeBnbFarm?.tokenPriceUsd\n return new BigNumber(cakePriceBusdAsString)\n})\n\nexport const farmFromLpSymbolSelector = (lpSymbol: string) =>\n createSelector([selectFarmByKey('lpSymbol', lpSymbol)], (farm) => deserializeFarm(farm))\n\nexport const makeLpTokenPriceFromLpSymbolSelector = (lpSymbol: string) =>\n createSelector([selectFarmByKey('lpSymbol', lpSymbol)], (farm) => {\n let lpTokenPrice = BIG_ZERO\n if (farm) {\n const lpTotalInQuoteToken = farm.lpTotalInQuoteToken ? new BigNumber(farm.lpTotalInQuoteToken) : BIG_ZERO\n const lpTotalSupply = farm.lpTotalSupply ? new BigNumber(farm.lpTotalSupply) : BIG_ZERO\n\n if (lpTotalSupply.gt(0) && lpTotalInQuoteToken.gt(0)) {\n const farmTokenPriceInUsd = new BigNumber(farm.tokenPriceUsd)\n const tokenAmountTotal = farm.tokenAmountTotal ? new BigNumber(farm.tokenAmountTotal) : BIG_ZERO\n // Total value of base token in LP\n const valueOfBaseTokenInFarm = farmTokenPriceInUsd.times(tokenAmountTotal)\n // Double it to get overall value in LP\n const overallValueOfAllTokensInFarm = valueOfBaseTokenInFarm.times(2)\n // Divide total value of all tokens, by the number of LP tokens\n const totalLpTokens = getBalanceAmount(lpTotalSupply)\n lpTokenPrice = overallValueOfAllTokensInFarm.div(totalLpTokens)\n }\n }\n\n return lpTokenPrice\n })\n\nexport const farmSelector = (chainId: number) =>\n createSelector(\n (state: State) => state.farms,\n (farms) => {\n const deserializedFarmsData = farms.data.map(deserializeFarm).filter((farm) => farm.token.chainId === chainId)\n const { loadArchivedFarmsData, userDataLoaded, poolLength, regularIncPerSecond } = farms\n\n return {\n loadArchivedFarmsData,\n userDataLoaded,\n data: deserializedFarmsData,\n poolLength,\n regularIncPerSecond,\n }\n },\n )\n","import BigNumber from 'bignumber.js'\nimport { SLOW_INTERVAL, FAST_INTERVAL } from 'config/constants/exchange'\nimport { ChainId } from '@pulsex/chains'\nimport { getFarmConfig } from '@pulsex/farms/constants'\nimport { useRefreshEffect } from 'hooks/useRefreshEffect'\nimport useUSDCPrice from 'hooks/useUSDCPrice'\nimport { useEffect, useMemo } from 'react'\nimport { useSelector } from 'react-redux'\nimport { useAppDispatch } from 'state'\nimport { useQuery } from '@tanstack/react-query'\nimport { getMasterChefContract } from 'utils/contractHelpers'\nimport { INC } from '@pulsex/tokens'\nimport { DeserializedFarm, DeserializedFarmsState, DeserializedFarmUserData } from '@pulsex/farms'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport useAccountActiveChain from 'hooks/useAccountActiveChain'\nimport { fetchFarmsPublicDataAsync, fetchFarmUserDataAsync, fetchInitialFarmsData } from '.'\nimport { State } from '../types'\nimport {\n farmFromLpSymbolSelector,\n farmSelector,\n makeBusdPriceFromPidSelector,\n makeFarmFromPidSelector,\n makeLpTokenPriceFromLpSymbolSelector,\n makeUserFarmFromPidSelector,\n} from './selectors'\n\nexport function useFarmsLength() {\n const { chainId } = useActiveChainId()\n return useQuery({\n queryKey: ['farmsLength', chainId],\n queryFn: async () => {\n const mc = getMasterChefContract(undefined, chainId)\n return Number(await mc.read.poolLength())\n },\n enabled: Boolean(chainId),\n refetchOnReconnect: false,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n })\n}\n\nexport const usePollFarmsWithUserData = () => {\n const dispatch = useAppDispatch()\n const { account, chainId } = useAccountActiveChain()\n\n useQuery({\n queryKey: ['publicFarmData', chainId],\n queryFn: async () => {\n const farmsConfig = await getFarmConfig(chainId)\n if (!farmsConfig) return false\n const pids = farmsConfig.map((farmToFetch) => farmToFetch.pid)\n dispatch(fetchFarmsPublicDataAsync({ pids, chainId }))\n return true\n },\n enabled: Boolean(chainId),\n refetchInterval: SLOW_INTERVAL,\n refetchOnReconnect: false,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n })\n\n useQuery({\n queryKey: ['farmsWithUserData', account, chainId],\n queryFn: async () => {\n const farmsConfig = await getFarmConfig(chainId)\n if (!farmsConfig) return false\n const pids = farmsConfig.map((farmToFetch) => farmToFetch.pid)\n const params = { account, pids, chainId }\n dispatch(fetchFarmUserDataAsync(params))\n return true\n },\n enabled: Boolean(account && chainId),\n refetchInterval: SLOW_INTERVAL,\n refetchOnReconnect: false,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n })\n}\n\n/**\n * Fetches the \"core\" farm data used globally\n * 0 = PLSX-PLS LP\n * 1 = USDC-PLS LP\n */\nconst coreFarmPIDs = {\n [ChainId.PULSECHAIN]: [0, 1],\n [ChainId.PULSECHAIN_TESTNET]: [0, 1],\n}\nexport const usePollCoreFarmData = () => {\n const dispatch = useAppDispatch()\n const { chainId } = useActiveChainId()\n\n useEffect(() => {\n if (chainId) {\n dispatch(fetchInitialFarmsData({ chainId }))\n }\n }, [chainId, dispatch])\n\n useRefreshEffect(FAST_INTERVAL, () => {\n if (chainId) {\n dispatch(fetchFarmsPublicDataAsync({ pids: coreFarmPIDs[chainId], chainId }))\n }\n }, [dispatch, chainId])\n}\n\nexport const useFarms = (): DeserializedFarmsState => {\n const { chainId } = useActiveChainId()\n return useSelector(useMemo(() => farmSelector(chainId), [chainId]))\n}\n\nexport const useFarmsPoolLength = (): number => {\n return useSelector((state: State) => state.farms.poolLength)\n}\n\nexport const useFarmFromPid = (pid: number): DeserializedFarm => {\n const farmFromPid = useMemo(() => makeFarmFromPidSelector(pid), [pid])\n return useSelector(farmFromPid)\n}\n\nexport const useFarmFromLpSymbol = (lpSymbol: string): DeserializedFarm => {\n const farmFromLpSymbol = useMemo(() => farmFromLpSymbolSelector(lpSymbol), [lpSymbol])\n return useSelector(farmFromLpSymbol)\n}\n\nexport const useFarmUser = (pid): DeserializedFarmUserData => {\n const farmFromPidUser = useMemo(() => makeUserFarmFromPidSelector(pid), [pid])\n return useSelector(farmFromPidUser)\n}\n\n// Return the base token price for a farm, from a given pid\nexport const useUsdcPriceFromPid = (pid: number): BigNumber => {\n const usdPriceFromPid = useMemo(() => makeBusdPriceFromPidSelector(pid), [pid])\n return useSelector(usdPriceFromPid)\n}\n\nexport const useLpTokenPrice = (symbol: string) => {\n const lpTokenPriceFromLpSymbol = useMemo(() => makeLpTokenPriceFromLpSymbolSelector(symbol), [symbol])\n return useSelector(lpTokenPriceFromLpSymbol)\n}\n\n// Return the Incentive token price in USD\nexport const usePriceINCUsdc = (): BigNumber => {\n const { chainId } = useActiveChainId()\n const incentivePrice = useUSDCPrice(INC[chainId])?.toFixed()\n\n const incPriceBusd = useMemo(() => {\n return new BigNumber(incentivePrice)\n }, [incentivePrice])\n\n return incPriceBusd\n}\n","import { FAST_INTERVAL, SLOW_INTERVAL } from 'config/constants/exchange'\n// eslint-disable-next-line camelcase\nimport { useBlockNumber, usePublicClient } from 'wagmi'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport { viemClients } from 'utils/viem'\nimport { useQuery, useQueryClient } from '@tanstack/react-query'\n\nconst REFRESH_BLOCK_INTERVAL = 12000\n\nexport const usePollBlockNumber = () => {\n const queryClient = useQueryClient()\n const { chainId } = useActiveChainId()\n\n const { data: blockNumber } = useBlockNumber({\n chainId,\n onBlock: (data) => {\n queryClient.setQueryData(['blockNumber', chainId], Number(data))\n },\n onSuccess: (data) => {\n if (!queryClient.getQueryCache().find({ queryKey: ['initialBlockNumber', chainId] })?.state?.data) {\n queryClient.setQueryData(['initialBlockNumber', chainId], Number(data))\n }\n if (!queryClient.getQueryCache().find({ queryKey: ['initialBlockTimestamp', chainId] })?.state?.data) {\n const fetchInitialBlockTimestamp = async () => {\n const provider = viemClients[chainId as keyof typeof viemClients]\n if (provider) {\n const block = await provider.getBlock({ blockNumber: data })\n queryClient.setQueryData(['initialBlockTimestamp', chainId], Number(block.timestamp))\n }\n }\n fetchInitialBlockTimestamp()\n }\n },\n })\n\n useQuery({\n queryKey: ['blockNumberFetcher', chainId],\n queryFn: async () => {\n queryClient.setQueryData(['blockNumber', chainId], Number(blockNumber))\n return null\n },\n enabled: false,\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n })\n\n useQuery({\n queryKey: [FAST_INTERVAL, 'blockNumber', chainId],\n queryFn: async () => Number(blockNumber),\n enabled: Boolean(chainId),\n refetchInterval: FAST_INTERVAL,\n })\n\n useQuery({\n queryKey: [SLOW_INTERVAL, 'blockNumber', chainId],\n queryFn: async () => Number(blockNumber),\n enabled: Boolean(chainId),\n refetchInterval: SLOW_INTERVAL,\n })\n}\n\nexport const useCurrentBlock = (): number => {\n const { chainId } = useActiveChainId()\n const { data: currentBlock = 0 } = useQuery({\n queryKey: ['blockNumber', chainId],\n enabled: false,\n refetchOnReconnect: false,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n })\n return Number(currentBlock)\n}\n\nexport const useChainCurrentBlock = (chainId: number): number => {\n const { chainId: activeChainId } = useActiveChainId()\n const provider = usePublicClient({ chainId })\n\n const { data: currentBlock = 0 } = useQuery({\n queryKey: activeChainId === chainId ? ['blockNumber', chainId] : ['chainBlockNumber', chainId],\n queryFn: async () => {\n const blockNumber = await provider.getBlockNumber()\n return Number(blockNumber)\n },\n enabled: activeChainId !== chainId,\n ...(activeChainId !== chainId && { refetchInterval: REFRESH_BLOCK_INTERVAL }),\n })\n return currentBlock\n}\n\nexport const useInitialBlock = (): number => {\n const { chainId } = useActiveChainId()\n const { data: initialBlock = 0 } = useQuery({\n queryKey: ['initialBlockNumber', chainId],\n enabled: false,\n refetchOnReconnect: false,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n })\n return Number(initialBlock)\n}\n\nexport const useInitialBlockTimestamp = (): number => {\n const { chainId } = useActiveChainId()\n const { data: initialBlockTimestamp = 0 } = useQuery({\n queryKey: ['initialBlockTimestamp', chainId],\n enabled: false,\n refetchOnReconnect: false,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n })\n return Number(initialBlockTimestamp)\n}\n","import { getVersionUpgrade, VersionUpgrade } from '@pulsex/token-lists'\nimport { acceptListUpdate, updateListVersion, useFetchListCallback } from '@pulsex/token-lists/react'\nimport { EXCHANGE_PAGE_PATHS } from 'config/constants/exchange'\nimport { UNSUPPORTED_LIST_URLS } from 'config/constants/lists'\nimport { usePublicClient } from 'wagmi'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport { useLocation } from 'react-router'\nimport { useEffect, useMemo } from 'react'\nimport { useAllLists } from 'state/lists/hooks'\nimport useSWRImmutable from 'swr/immutable'\nimport { useQuery } from '@tanstack/react-query'\nimport { useActiveListUrls } from './hooks'\nimport { useListState, useListStateReady, initialState } from './lists'\n\nexport default function Updater(): null {\n const { chainId } = useActiveChainId()\n const provider = usePublicClient({ chainId })\n \n const [listState, dispatch] = useListState()\n const { pathname } = useLocation()\n const includeListUpdater = useMemo(() => {\n return EXCHANGE_PAGE_PATHS.some((item) => {\n return pathname.startsWith(item)\n })\n }, [pathname])\n\n const isReady = useListStateReady()\n\n // get all loaded lists, and the active urls\n const lists = useAllLists()\n const activeListUrls = useActiveListUrls()\n\n useEffect(() => {\n if (isReady) {\n dispatch(updateListVersion())\n }\n }, [dispatch, isReady])\n\n const fetchList = useFetchListCallback(dispatch)\n\n // whenever a list is not loaded and not loading, try again to load it\n useSWRImmutable(isReady && ['first-fetch-token-list', lists], () => {\n Object.keys(lists).forEach((listUrl) => {\n const list = lists[listUrl]\n if (!list.current && !list.loadingRequestId && !list.error) {\n fetchList(listUrl).catch((error) => console.debug('list added fetching error', error))\n }\n })\n })\n\n useQuery({\n queryKey: ['token-list'],\n queryFn: async () => {\n return Promise.all(\n Object.keys(lists).map((url) =>\n fetchList(url).catch((error) => console.debug('interval list fetching error', error)),\n ),\n )\n },\n enabled: Boolean(includeListUpdater && isReady && listState !== initialState),\n refetchInterval: 1000 * 60 * 10,\n staleTime: 1000 * 60 * 10,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n })\n\n // if any lists from unsupported lists are loaded, check them too (in case new updates since last visit)\n useEffect(() => {\n if (isReady) {\n Object.keys(UNSUPPORTED_LIST_URLS).forEach((listUrl) => {\n const list = lists[listUrl]\n if (!list || (!list.current && !list.loadingRequestId && !list.error)) {\n fetchList(listUrl).catch((error) => console.debug('list added fetching error', error))\n }\n })\n }\n }, [fetchList, provider, lists, isReady])\n\n // automatically update lists if versions are minor/patch\n useEffect(() => {\n if (!isReady) return\n Object.keys(lists).forEach((listUrl) => {\n const list = lists[listUrl]\n if (list.current && list.pendingUpdate) {\n const bump = getVersionUpgrade(list.current.version, list.pendingUpdate.version)\n // eslint-disable-next-line default-case\n switch (bump) {\n case VersionUpgrade.NONE:\n throw new Error('unexpected no version bump')\n // update any active or inactive lists\n case VersionUpgrade.PATCH:\n case VersionUpgrade.MINOR:\n case VersionUpgrade.MAJOR:\n dispatch(acceptListUpdate(listUrl))\n }\n }\n })\n }, [dispatch, lists, activeListUrls, isReady])\n\n return null\n}\n","/* eslint-disable */\n\nfunction wait(ms: number): Promise {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nfunction waitRandom(min: number, max: number): Promise {\n return wait(min + Math.round(Math.random() * Math.max(0, max - min)))\n}\n\n/**\n * This error is thrown if the function is cancelled before completing\n */\nexport class CancelledError extends Error {\n constructor() {\n super('Cancelled')\n }\n}\n\n/**\n * Throw this error if the function should retry\n */\nexport class RetryableError extends Error {}\n\n/**\n * Retries the function that returns the promise until the promise successfully resolves up to n retries\n * @param fn function to retry\n * @param n how many times to retry\n * @param minWait min wait between retries in ms\n * @param maxWait max wait between retries in ms\n */\nexport function retry(\n fn: () => Promise,\n { n, minWait, maxWait }: { n: number; minWait: number; maxWait: number },\n): { promise: Promise; cancel: () => void } {\n let completed = false\n let rejectCancelled: (error: Error) => void\n const promise = new Promise(async (resolve, reject) => {\n rejectCancelled = reject\n while (true) {\n let result: T\n try {\n result = await fn()\n if (!completed) {\n resolve(result)\n completed = true\n }\n break\n } catch (error) {\n console.debug(error)\n if (completed) {\n break\n }\n if (n <= 0 || !(error instanceof RetryableError)) {\n reject(error)\n completed = true\n break\n }\n n--\n }\n await waitRandom(minWait, maxWait)\n }\n })\n return {\n promise,\n cancel: () => {\n if (completed) return\n completed = true\n rejectCancelled(new CancelledError())\n },\n }\n}\n\n/* eslint-enable */\n","import { useDebounce } from '@pulsex/hooks'\nimport { useAtom } from 'jotai'\nimport { multicallAbi } from 'config/abi/multicall'\nimport { useEffect, useMemo, useRef } from 'react'\nimport { useCurrentBlock } from 'state/block/hooks'\nimport { multicallReducerAtom, MulticallState } from 'state/multicall/reducer'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport { getMulticallAddress } from 'utils/addressHelpers'\nimport { getViemClients } from 'utils/viem'\nimport { useMulticallContract } from '../../hooks/useContract'\nimport {\n Call,\n errorFetchingMulticallResults,\n fetchingMulticallResults,\n parseCallKey,\n updateMulticallResults,\n} from './actions'\nimport chunkArray from './chunkArray'\nimport { CancelledError, retry, RetryableError } from './retry'\n\n// chunk calls so we do not exceed the gas limit\nconst CALL_CHUNK_SIZE = 500\n\n/**\n * Fetches a chunk of calls, enforcing a minimum block number constraint\n * @param chainId\n * @param chunk chunk of calls to make\n * @param minBlockNumber minimum block number of the result set\n */\nasync function fetchChunk(\n chainId: number,\n chunk: Call[],\n minBlockNumber: number,\n): Promise<{ results: any[]; blockNumber: number }> {\n console.debug('Fetching chunk', chainId, chunk, minBlockNumber)\n let resultsBlockNumber: bigint | undefined\n let returnData: any\n const client = getViemClients({ chainId })\n try {\n // prettier-ignore\n [resultsBlockNumber, , returnData] = await client.readContract({\n abi: multicallAbi,\n address: getMulticallAddress(chainId),\n functionName: 'tryBlockAndAggregate',\n args: [false, chunk.map((obj) => ({ callData: obj.callData, target: obj.address }))],\n blockNumber: BigInt(minBlockNumber),\n })\n } catch (err) {\n const error = err as any\n if (\n error.code === -32000 ||\n (error?.data?.message && error?.data?.message?.indexOf('not found') !== -1) ||\n error.message?.indexOf('not found') !== -1\n ) {\n throw new RetryableError(`header not found for block number ${minBlockNumber}`)\n } else if (error.code === -32603 || error.message?.indexOf('execution ran out of gas') !== -1) {\n if (chunk.length > 1) {\n if (process.env.NODE_ENV === 'development') {\n console.debug('Splitting a chunk in 2', chunk)\n }\n const half = Math.floor(chunk.length / 2)\n const [c0, c1] = await Promise.all([\n fetchChunk(chainId, chunk.slice(0, half), minBlockNumber),\n fetchChunk(chainId, chunk.slice(half, chunk.length), minBlockNumber),\n ])\n return {\n results: c0.results.concat(c1.results),\n blockNumber: c1.blockNumber,\n }\n }\n }\n console.debug('Failed to fetch chunk inside retry', error)\n throw error\n }\n\n if (Number(resultsBlockNumber) < minBlockNumber) {\n console.debug(`Fetched results for old block number: ${resultsBlockNumber.toString()} vs. ${minBlockNumber}`)\n }\n\n return { results: returnData, blockNumber: Number(resultsBlockNumber) }\n}\n\n/**\n * From the current all listeners state, return each call key mapped to the\n * minimum number of blocks per fetch. This is how often each key must be fetched.\n * @param allListeners the all listeners state\n * @param chainId the current chain id\n */\nexport function activeListeningKeys(\n allListeners: MulticallState['callListeners'],\n chainId?: number,\n): { [callKey: string]: number } {\n if (!allListeners || !chainId) return {}\n const listeners = allListeners[chainId]\n if (!listeners) return {}\n\n return Object.keys(listeners).reduce<{ [callKey: string]: number }>((memo, callKey) => {\n const keyListeners = listeners[callKey]\n\n memo[callKey] = Object.keys(keyListeners)\n .filter((key) => {\n const blocksPerFetch = parseInt(key)\n if (blocksPerFetch <= 0) return false\n return keyListeners[blocksPerFetch] > 0\n })\n .reduce((previousMin, current) => {\n return Math.min(previousMin, parseInt(current))\n }, Infinity)\n return memo\n }, {})\n}\n\n/**\n * Return the keys that need to be refetched\n * @param callResults current call result state\n * @param listeningKeys each call key mapped to how old the data can be in blocks\n * @param chainId the current chain id\n * @param currentBlock the latest block number\n */\nexport function outdatedListeningKeys(\n callResults: MulticallState['callResults'],\n listeningKeys: { [callKey: string]: number },\n chainId: number | undefined,\n currentBlock: number | undefined,\n): string[] {\n if (!chainId || !currentBlock) return []\n const results = callResults[chainId]\n // no results at all, load everything\n if (!results) return Object.keys(listeningKeys)\n\n return Object.keys(listeningKeys).filter((callKey) => {\n const data = callResults[chainId][callKey]\n // no data, must fetch\n if (!data) return true\n\n const blocksPerFetch = listeningKeys[callKey]\n const minDataBlockNumber = currentBlock - (blocksPerFetch - 1)\n\n // already fetching it for a recent enough block, don't refetch it\n if (data.fetchingBlockNumber && data.fetchingBlockNumber >= minDataBlockNumber) return false\n\n // if data is older than minDataBlockNumber, fetch it\n return !data.blockNumber || data.blockNumber < minDataBlockNumber\n })\n}\n\nexport default function Updater(): null {\n const [state, dispatch] = useAtom(multicallReducerAtom)\n\n // wait for listeners to settle before triggering updates\n const debouncedListeners = useDebounce(state.callListeners, 100)\n const currentBlock = useCurrentBlock()\n const { chainId } = useActiveChainId()\n const multicallContract = useMulticallContract()\n const cancellations = useRef<{ blockNumber: number; cancellations: (() => void)[] }>()\n\n const listeningKeys: { [callKey: string]: number } = useMemo(() => {\n return activeListeningKeys(debouncedListeners, chainId)\n }, [debouncedListeners, chainId])\n\n const unserializedOutdatedCallKeys = useMemo(() => {\n return outdatedListeningKeys(state.callResults, listeningKeys, chainId, currentBlock)\n }, [chainId, state.callResults, listeningKeys, currentBlock])\n\n const serializedOutdatedCallKeys = useMemo(\n () => JSON.stringify(unserializedOutdatedCallKeys.sort()),\n [unserializedOutdatedCallKeys],\n )\n\n useEffect(() => {\n if (!currentBlock || !chainId || !multicallContract) return\n\n const outdatedCallKeys: string[] = JSON.parse(serializedOutdatedCallKeys)\n if (outdatedCallKeys.length === 0) return\n const calls = outdatedCallKeys.map((key) => parseCallKey(key))\n\n const chunkedCalls = chunkArray(calls, CALL_CHUNK_SIZE)\n\n if (cancellations.current?.blockNumber !== currentBlock) {\n cancellations.current?.cancellations?.forEach((c) => c())\n }\n\n dispatch(\n fetchingMulticallResults({\n calls,\n chainId,\n fetchingBlockNumber: currentBlock,\n }),\n )\n\n cancellations.current = {\n blockNumber: currentBlock,\n cancellations: chunkedCalls.map((chunk, index) => {\n const { cancel, promise } = retry(() => fetchChunk(chainId, chunk, currentBlock), {\n n: Infinity,\n minWait: 2500,\n maxWait: 12500,\n })\n promise\n .then(({ results: returnData, blockNumber: fetchBlockNumber }) => {\n cancellations.current = { cancellations: [], blockNumber: currentBlock }\n\n // accumulates the length of all previous indices\n const firstCallKeyIndex = chunkedCalls.slice(0, index).reduce((memo, curr) => memo + curr.length, 0)\n const lastCallKeyIndex = firstCallKeyIndex + returnData.length\n\n const { erroredCalls, results } = outdatedCallKeys.slice(firstCallKeyIndex, lastCallKeyIndex).reduce<{\n erroredCalls: Call[]\n results: { [callKey: string]: string | null }\n }>(\n (memo, callKey, i) => {\n if (returnData[i].success) {\n memo.results[callKey] = returnData[i].returnData ?? null\n } else {\n memo.erroredCalls.push(parseCallKey(callKey))\n }\n return memo\n },\n { erroredCalls: [], results: {} },\n )\n\n if (Object.keys(results).length > 0) {\n dispatch(\n updateMulticallResults({\n chainId,\n results,\n blockNumber: fetchBlockNumber,\n }),\n )\n }\n\n if (erroredCalls.length > 0) {\n dispatch(\n errorFetchingMulticallResults({\n calls: erroredCalls,\n chainId,\n fetchingBlockNumber: fetchBlockNumber,\n }),\n )\n }\n })\n .catch((error: any) => {\n const REVERT_STR = 'revert exception'\n const ZERO_DATA = 'Cannot decode zero data' // workaround for erigon node not throwing header error\n\n // when revert error, should not update new state and keep current state.\n if (\n error instanceof CancelledError ||\n error?.message?.indexOf(REVERT_STR) >= 0 ||\n error?.message?.indexOf(ZERO_DATA) >= 0\n ) {\n console.debug('Cancelled fetch for blockNumber', currentBlock)\n return\n }\n console.debug('Failed to fetch multicall chunk', chunk, chainId, error, currentBlock)\n dispatch(\n errorFetchingMulticallResults({\n calls: chunk,\n chainId,\n fetchingBlockNumber: currentBlock,\n }),\n )\n })\n return cancel\n }),\n }\n }, [chainId, multicallContract, dispatch, serializedOutdatedCallKeys, currentBlock])\n\n return null\n}\n","// chunks array into chunks of maximum size\n// evenly distributes items among the chunks\nexport default function chunkArray(items: T[], maxChunkSize: number): T[][] {\n if (maxChunkSize < 1) throw new Error('maxChunkSize must be gte 1')\n if (items.length <= maxChunkSize) return [items]\n\n const numChunks: number = Math.ceil(items.length / maxChunkSize)\n const chunkSize = Math.ceil(items.length / numChunks)\n\n return [...Array(numChunks).keys()].map((ix) => items.slice(ix * chunkSize, ix * chunkSize + chunkSize))\n}\n","import { ReactNode } from 'react'\n\nexport const types = {\n SUCCESS: 'success',\n DANGER: 'danger',\n WARNING: 'warning',\n INFO: 'info',\n}\n\nexport type Types = typeof types[keyof typeof types]\n\nexport interface Toast {\n id: string\n type: Types\n title: string\n description?: ReactNode\n}\n\nexport interface ToastContainerProps {\n toasts: Toast[]\n stackSpacing?: number\n ttl?: number\n onRemove: (id: string) => void\n}\n\nexport interface ToastProps {\n toast: Toast\n onRemove: ToastContainerProps['onRemove']\n ttl: number\n style: Partial\n}\n","import { useCallback, useEffect, useRef } from 'react'\nimport { CSSTransition } from 'react-transition-group'\nimport { styled } from 'styled-components'\nimport { Alert, alertVariants } from '@pulsex/uikit'\nimport { ToastProps, types } from './types'\n\nconst alertTypeMap = {\n [types.INFO]: alertVariants.INFO,\n [types.SUCCESS]: alertVariants.SUCCESS,\n [types.DANGER]: alertVariants.DANGER,\n [types.WARNING]: alertVariants.WARNING,\n}\n\nconst StyledToast = styled.div`\n right: 16px;\n position: fixed;\n max-width: calc(100% - 32px);\n transition: all 250ms ease-in;\n width: 100%;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n max-width: 400px;\n }\n`\n\nconst Toast: React.FC = ({ toast, onRemove, style, ttl, ...props }) => {\n const timer = useRef()\n const ref = useRef(null)\n const removeHandler = useRef(onRemove)\n const { id, title, description, type } = toast\n\n const handleRemove = useCallback(() => removeHandler.current(id), [id, removeHandler])\n\n const handleMouseEnter = () => {\n clearTimeout(timer.current)\n }\n\n const handleMouseLeave = () => {\n if (timer.current) {\n clearTimeout(timer.current)\n }\n\n timer.current = window.setTimeout(() => {\n handleRemove()\n }, ttl)\n }\n\n useEffect(() => {\n if (timer.current) {\n clearTimeout(timer.current)\n }\n\n timer.current = window.setTimeout(() => {\n handleRemove()\n }, ttl)\n\n return () => {\n clearTimeout(timer.current)\n }\n }, [timer, ttl, handleRemove])\n\n return (\n \n \n \n {description}\n \n \n \n )\n}\n\nexport default Toast\n","import { TransitionGroup } from 'react-transition-group'\nimport { styled } from 'styled-components'\nimport Toast from './Toast'\nimport { ToastContainerProps } from './types'\n\nconst ZINDEX = 1000\nconst TOP_POSITION = 80 // Initial position from the top\n\nconst StyledToastContainer = styled.div`\n .enter,\n .appear {\n opacity: 0.01;\n }\n\n .enter.enter-active,\n .appear.appear-active {\n opacity: 1;\n transition: opacity 250ms ease-in;\n }\n\n .exit {\n opacity: 1;\n }\n\n .exit.exit-active {\n opacity: 0.01;\n transition: opacity 250ms ease-out;\n }\n`\n\nconst ToastContainer: React.FC = ({ toasts, onRemove, ttl = 6000, stackSpacing = 24 }) => {\n return (\n \n \n {toasts.map((toast, index) => {\n const zIndex = (ZINDEX - index).toString()\n const top = TOP_POSITION + index * stackSpacing\n\n return (\n \n )\n })}\n \n \n )\n}\n\nexport default ToastContainer\n","/**\n * Truncate a transaction or address hash\n */\nconst truncateHash = (address: string, startLength = 4, endLength = 4) => {\n return `${address.substring(0, startLength)}...${address.substring(address.length - endLength)}`\n}\n\nexport default truncateHash\n","import { Link, PulseLogo, Text } from '@pulsex/uikit'\nimport { ChainId } from '@pulsex/chains'\nimport { getBlockExplorerLink, getBlockExploreName } from 'utils'\nimport { useTranslation } from '@pulsex/localization'\nimport truncateHash from 'utils/truncateHash'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\n\ninterface DescriptionWithTxProps {\n description?: string\n txHash?: string\n txChainId?: number\n}\n\nconst DescriptionWithTx: React.FC> = ({\n txHash,\n txChainId,\n children,\n}) => {\n const { chainId } = useActiveChainId()\n const { t } = useTranslation()\n\n return (\n <>\n {typeof children === 'string' ? {children} : children}\n {txHash && (\n \n {t(`View on ${getBlockExploreName(chainId)}`)}: {truncateHash(txHash, 8, 0)}\n {(txChainId || chainId) === ChainId.PULSECHAIN && }\n \n )}\n \n )\n}\n\nexport default DescriptionWithTx\n","import { useCallback, useMemo } from 'react'\nimport { useSelector } from 'react-redux'\nimport useAccountActiveChain from 'hooks/useAccountActiveChain'\nimport pickBy from 'lodash/pickBy'\nimport mapValues from 'lodash/mapValues'\nimport keyBy from 'lodash/keyBy'\nimport orderBy from 'lodash/orderBy'\nimport omitBy from 'lodash/omitBy'\nimport isEmpty from 'lodash/isEmpty'\nimport { useAccount } from 'wagmi'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport { Hash } from 'viem'\nimport { TransactionDetails } from './reducer'\nimport { addTransaction, TransactionType } from './actions'\nimport { AppState, useAppDispatch } from '../index'\n\n// helper that can take a ethers library transaction response and add it to the list of transactions\nexport function useTransactionAdder(): (\n response: { hash: Hash | string } | { transactionHash: Hash | string },\n customData?: {\n summary?: string\n translatableSummary?: { text: string; data?: Record }\n approval?: { tokenAddress: string; spender: string }\n claim?: { recipient: string }\n type?: TransactionType\n },\n) => void {\n const { account, chainId } = useAccountActiveChain()\n const dispatch = useAppDispatch()\n\n return useCallback(\n (\n response,\n {\n summary,\n translatableSummary,\n approval,\n claim,\n type,\n }: {\n summary?: string\n translatableSummary?: { text: string; data?: Record }\n claim?: { recipient: string }\n approval?: { tokenAddress: string; spender: string }\n type?: TransactionType\n } = {},\n ) => {\n if (!account) return\n if (!chainId) return\n\n let hash: Hash | string\n\n if ('hash' in response) {\n // eslint-disable-next-line prefer-destructuring\n hash = response.hash\n } else if ('transactionHash' in response) {\n hash = response.transactionHash\n }\n\n if (!hash) {\n throw Error('No transaction hash found.')\n }\n dispatch(\n addTransaction({\n hash,\n from: account,\n chainId,\n approval,\n summary,\n translatableSummary,\n claim,\n type,\n }),\n )\n },\n [dispatch, chainId, account],\n )\n}\n\n// returns all the transactions\nexport function useAllTransactions(): { [chainId: number]: { [txHash: string]: TransactionDetails } } {\n const { address: account } = useAccount()\n\n const state: {\n [chainId: number]: {\n [txHash: string]: TransactionDetails\n }\n } = useSelector((s) => s.transactions)\n\n return useMemo(() => {\n return mapValues(state, (transactions) =>\n pickBy(transactions, (transactionDetails) => transactionDetails.from.toLowerCase() === account?.toLowerCase()),\n )\n }, [account, state])\n}\n\nexport function useAllSortedRecentTransactions(): { [chainId: number]: { [txHash: string]: TransactionDetails } } {\n const allTransactions = useAllTransactions()\n return useMemo(() => {\n return omitBy(\n mapValues(allTransactions, (transactions) =>\n keyBy(\n orderBy(\n pickBy(transactions, (trxDetails) => isTransactionRecent(trxDetails)),\n ['addedTime'],\n 'desc',\n ),\n 'hash',\n ),\n ),\n isEmpty,\n )\n }, [allTransactions])\n}\n\n// returns all the transactions for the current chain\nexport function useAllActiveChainTransactions(): { [txHash: string]: TransactionDetails } {\n const { chainId } = useActiveChainId()\n\n return useAllChainTransactions(chainId)\n}\n\nexport function useAllChainTransactions(chainId: number): { [txHash: string]: TransactionDetails } {\n const { address: account } = useAccount()\n\n const state = useSelector((s) => s.transactions)\n\n return useMemo(() => {\n if (chainId && state[chainId]) {\n return pickBy(\n state[chainId],\n (transactionDetails) => transactionDetails.from.toLowerCase() === account?.toLowerCase(),\n )\n }\n return {}\n }, [account, chainId, state])\n}\n\nexport function useIsTransactionPending(transactionHash?: string): boolean {\n const transactions = useAllActiveChainTransactions()\n\n if (!transactionHash || !transactions[transactionHash]) return false\n\n return !transactions[transactionHash].receipt\n}\n\n/**\n * Returns whether a transaction happened in the last day (86400 seconds * 1000 milliseconds / second)\n * @param tx to check for recency\n */\nexport function isTransactionRecent(tx: TransactionDetails): boolean {\n return new Date().getTime() - tx.addedTime < 86_400_000\n}\n\n// returns whether a token has a pending approval transaction\nexport function useHasPendingApproval(tokenAddress: string | undefined, spender: string | undefined): boolean {\n const allTransactions = useAllActiveChainTransactions()\n return useMemo(\n () =>\n typeof tokenAddress === 'string' &&\n typeof spender === 'string' &&\n Object.keys(allTransactions).some((hash) => {\n const tx = allTransactions[hash]\n if (!tx) return false\n if (tx.receipt) {\n return false\n }\n const { approval } = tx\n if (!approval) return false\n return approval.spender === spender && approval.tokenAddress === tokenAddress && isTransactionRecent(tx)\n }),\n [allTransactions, spender, tokenAddress],\n )\n}\n\n// we want the latest one to come first, so return negative if a is after b\nfunction newTransactionsFirst(a: TransactionDetails, b: TransactionDetails) {\n return b.addedTime - a.addedTime\n}\n\n// calculate pending transactions\nexport function usePendingTransactions(): {\n hasPendingTransactions: boolean\n pendingNumber: number\n} {\n const allTransactions = useAllTransactions()\n const sortedRecentTransactions = useMemo(() => {\n const txs = Object.values(allTransactions).flatMap((trxObjects) => Object.values(trxObjects))\n return txs.filter(isTransactionRecent).sort(newTransactionsFirst)\n }, [allTransactions])\n\n const pending = sortedRecentTransactions\n .filter((tx) => !tx.receipt)\n .map((tx) => tx.hash)\n const hasPendingTransactions = !!pending.length\n\n return {\n hasPendingTransactions,\n pendingNumber: pending.length,\n }\n}\n","import React, { useEffect, useRef } from 'react'\nimport merge from 'lodash/merge'\nimport pickBy from 'lodash/pickBy'\nimport forEach from 'lodash/forEach'\nimport { useTranslation } from '@pulsex/localization'\nimport { usePublicClient } from 'wagmi'\nimport { ToastDescriptionWithTx } from 'components/Toast'\nimport { useToast } from '@pulsex/uikit'\nimport {\n BlockNotFoundError,\n TransactionNotFoundError,\n TransactionReceiptNotFoundError,\n WaitForTransactionReceiptTimeoutError,\n} from 'viem'\nimport { retry, RetryableError } from 'state/multicall/retry'\nimport { useAppDispatch } from '../index'\nimport { finalizeTransaction } from './actions'\nimport { useAllChainTransactions } from './hooks'\nimport { TransactionDetails } from './reducer'\n\nexport function shouldCheck(\n fetchedTransactions: { [txHash: string]: TransactionDetails },\n tx: TransactionDetails,\n): boolean {\n if (tx.receipt) return false\n return !fetchedTransactions[tx.hash]\n}\n\nexport const Updater: React.FC<{ chainId: number }> = ({ chainId }) => {\n const provider = usePublicClient({ chainId })\n const { t } = useTranslation()\n\n const dispatch = useAppDispatch()\n const transactions = useAllChainTransactions(chainId)\n\n const { toastError, toastSuccess } = useToast()\n\n const fetchedTransactions = useRef<{ [txHash: string]: TransactionDetails }>({})\n\n useEffect(() => {\n if (!chainId || !provider) return\n\n forEach(\n pickBy(transactions, (transaction) => shouldCheck(fetchedTransactions.current, transaction)),\n (transaction) => {\n const getTransaction = async () => {\n try {\n const receipt: any = await provider.waitForTransactionReceipt({ hash: transaction.hash, timeout: 60_000 })\n\n dispatch(\n finalizeTransaction({\n chainId,\n hash: transaction.hash,\n receipt: {\n blockHash: receipt.blockHash,\n blockNumber: Number(receipt.blockNumber),\n contractAddress: receipt.contractAddress,\n from: receipt.from,\n status: receipt.status === 'success' ? 1 : 0,\n to: receipt.to,\n transactionHash: receipt.transactionHash,\n transactionIndex: receipt.transactionIndex,\n },\n }),\n )\n const toast = receipt.status === 'success' ? toastSuccess : toastError\n toast(\n t('Transaction receipt'),\n ,\n )\n\n merge(fetchedTransactions.current, { [transaction.hash]: transactions[transaction.hash] })\n } catch (error) {\n console.error(error)\n if (error instanceof TransactionNotFoundError) {\n throw new RetryableError(`Transaction not found: ${transaction.hash}`)\n } else if (error instanceof TransactionReceiptNotFoundError) {\n throw new RetryableError(`Transaction receipt not found: ${transaction.hash}`)\n } else if (error instanceof BlockNotFoundError) {\n throw new RetryableError(`Block not found for transaction: ${transaction.hash}`)\n } else if (error instanceof WaitForTransactionReceiptTimeoutError) {\n throw new RetryableError(`Timeout reached when fetching transaction receipt: ${transaction.hash}`)\n }\n }\n merge(fetchedTransactions.current, { [transaction.hash]: transactions[transaction.hash] })\n }\n retry(getTransaction, {\n n: 10,\n minWait: 5000,\n maxWait: 10000,\n })\n },\n )\n }, [chainId, provider, transactions, dispatch, toastSuccess, toastError, t])\n\n return null\n}\n\nexport default Updater\n","import { ChainId } from '@pulsex/chains'\n\nexport const SUPPORT_ONLY_PULSE = [ChainId.PULSECHAIN, ChainId.PULSECHAIN_TESTNET]\nexport const SUPPORT_FARMS = [ChainId.PULSECHAIN, ChainId.PULSECHAIN_TESTNET]\n\nexport const SUPPORT_ZAP = [ChainId.PULSECHAIN, ChainId.PULSECHAIN_TESTNET]\n","/* eslint-disable consistent-return */\nimport { useTranslation } from '@pulsex/localization'\nimport { useToast } from '@pulsex/uikit'\nimport { useCallback, useMemo } from 'react'\nimport { useLocation } from 'react-router'\nimport { createSearchParams, useNavigate } from 'react-router-dom'\nimport { useAccount, useSwitchNetwork as useSwitchNetworkWallet } from 'wagmi'\nimport { CHAIN_QUERY_NAME } from 'config/chains'\nimport { useSessionChainId } from './useSessionChainId'\nimport { useSwitchNetworkLoading } from './useSwitchNetworkLoading'\n\nexport function useSwitchNetworkLocal() {\n const { pathname } = useLocation()\n const navigate = useNavigate()\n const [, setSessionChainId] = useSessionChainId()\n\n return useCallback(\n (chainId: number) => {\n setSessionChainId(chainId)\n navigate({\n pathname,\n search: createSearchParams({ chain: CHAIN_QUERY_NAME[chainId] }).toString(),\n },\n { replace: true }\n )\n },\n [pathname, navigate, setSessionChainId],\n )\n}\n\nexport function useSwitchNetwork() {\n const [loading, setLoading] = useSwitchNetworkLoading()\n const {\n switchNetworkAsync: _switchNetworkAsync,\n isLoading: _isLoading,\n switchNetwork: _switchNetwork,\n ...switchNetworkArgs\n } = useSwitchNetworkWallet()\n const { t } = useTranslation()\n const { toastError } = useToast()\n const { isConnected } = useAccount()\n\n const switchNetworkLocal = useSwitchNetworkLocal()\n const isLoading = _isLoading || loading\n\n const switchNetworkAsync = useCallback(\n async (chainId: number) => {\n if (isConnected && typeof _switchNetworkAsync === 'function') {\n if (isLoading) return\n setLoading(true)\n return _switchNetworkAsync(chainId)\n .then((c) => {\n // well token pocket\n if (window.ethereum?.isTokenPocket === true) {\n switchNetworkLocal(chainId)\n window.location.reload()\n }\n return c\n })\n .catch(() => {\n // TODO: review the error\n toastError(t('Error connecting, please retry and confirm in wallet!'))\n })\n .finally(() => setLoading(false))\n }\n return new Promise(() => {\n switchNetworkLocal(chainId)\n })\n },\n [isConnected, _switchNetworkAsync, isLoading, setLoading, toastError, t, switchNetworkLocal],\n )\n\n const switchNetwork = useCallback(\n (chainId: number) => {\n if (isConnected && typeof _switchNetwork === 'function') {\n return _switchNetwork(chainId)\n }\n return switchNetworkLocal(chainId)\n },\n [_switchNetwork, isConnected, switchNetworkLocal],\n )\n\n const canSwitch = useMemo(\n () =>\n isConnected\n ? !!_switchNetworkAsync &&\n !(\n typeof window !== 'undefined' &&\n // @ts-ignore // TODO: add type later\n window.ethereum?.isMathWallet\n )\n : true,\n [_switchNetworkAsync, isConnected],\n )\n\n return {\n ...switchNetworkArgs,\n switchNetwork,\n switchNetworkAsync,\n isLoading,\n canSwitch,\n }\n}\n","import { useTranslation } from '@pulsex/localization'\nimport { WalletConnectorNotFoundError, WalletSwitchChainError } from '@pulsex/uikit'\nimport { useLocation } from 'react-router'\nimport { createSearchParams, useNavigate } from 'react-router-dom'\nimport { ConnectorNames } from 'config/wallet'\nimport { useCallback } from 'react'\nimport { useAppDispatch } from 'state'\nimport { ConnectorNotFoundError, SwitchChainNotSupportedError, useConnect, useDisconnect, useNetwork } from 'wagmi'\nimport { CHAIN_QUERY_NAME } from 'config/chains'\nimport { clearUserStates } from 'utils/clearUserStates'\nimport { useActiveChainId } from './useActiveChainId'\nimport { useSessionChainId } from './useSessionChainId'\n\nconst useAuth = () => {\n const dispatch = useAppDispatch()\n const { connectAsync, connectors } = useConnect()\n const { chain } = useNetwork()\n const { disconnectAsync } = useDisconnect()\n const { chainId } = useActiveChainId()\n const [, setSessionChainId] = useSessionChainId()\n const navigate = useNavigate()\n const { pathname } = useLocation()\n const { t } = useTranslation()\n\n const login = useCallback(\n async (connectorID: ConnectorNames) => {\n const findConnector = connectors.find((c) => c.id === connectorID)\n try {\n const connected = await connectAsync({ connector: findConnector, chainId })\n if (!connected.chain.unsupported && connected.chain.id !== chainId) {\n navigate({\n pathname,\n search: createSearchParams({ chain: CHAIN_QUERY_NAME[connected.chain.id] }).toString(),\n },\n { replace: true }\n )\n setSessionChainId(connected.chain.id)\n }\n return connected\n } catch (error) {\n if (error instanceof ConnectorNotFoundError) {\n throw new WalletConnectorNotFoundError()\n }\n if (\n error instanceof SwitchChainNotSupportedError\n // TODO: wagmi\n // || error instanceof SwitchChainError\n ) {\n throw new WalletSwitchChainError(t('Unable to switch network. Please try it on your wallet'))\n }\n }\n return undefined\n },\n [connectors, connectAsync, chainId, pathname, navigate, setSessionChainId, t],\n )\n\n const logout = useCallback(async () => {\n try {\n await disconnectAsync()\n } catch (error) {\n console.error(error)\n } finally {\n clearUserStates(dispatch, { chainId: chain?.id })\n }\n }, [disconnectAsync, dispatch, chain?.id])\n\n return { login, logout }\n}\n\nexport default useAuth\n","import { Button, Modal, Grid, Message, MessageText } from '@pulsex/uikit'\nimport { ChainId } from '@pulsex/chains'\nimport { useSwitchNetwork, useSwitchNetworkLocal } from 'hooks/useSwitchNetwork'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport { useTranslation } from '@pulsex/localization'\nimport { useMemo } from 'react'\nimport { useNavigate } from 'react-router-dom'\nimport useAuth from 'hooks/useAuth'\nimport { chains } from 'utils/wagmi'\n\nexport function PageNetworkSupportModal() {\n const { t } = useTranslation()\n const { switchNetworkAsync, isLoading, canSwitch } = useSwitchNetwork()\n const switchNetworkLocal = useSwitchNetworkLocal()\n const { chainId, isConnected, isWrongNetwork } = useActiveWeb3React()\n const { logout } = useAuth()\n\n const foundChain = useMemo(() => chains.find((c) => c.id === chainId), [chainId])\n\n // const lastValidPath = historyManager?.history?.find((h) => ['/swap', 'liquidity', '/', '/info'].includes(h))\n\n const navigate = useNavigate()\n\n return (\n \n \n {canSwitch ? (\n (isWrongNetwork ? switchNetworkLocal(ChainId.PULSECHAIN) : switchNetworkAsync(ChainId.PULSECHAIN))}\n >\n {t('Switch to %chain%', { chain: 'PulseChain' })}\n \n ) : (\n \n {t('Unable to switch network. Please try it on your wallet')}\n \n )}\n {isConnected && (\n \n logout().then(() => {\n navigate('/')\n })\n }\n >\n {t('Disconnect Wallet')}\n \n )}\n {/* {foundChain && (\n \n \n \n )} */}\n \n \n )\n}\n","import { HelpIcon } from '@pulsex/uikit'\nimport { memo } from 'react'\nimport { isChainSupported } from '../../utils/wagmi'\n\nexport const ChainLogo = memo(\n ({ chainId, width = 24, height = 24 }: { chainId: number; width?: number; height?: number }) => {\n if (isChainSupported(chainId)) {\n return (\n \n )\n }\n\n return \n },\n)\n","import { styled } from 'styled-components'\n\nconst Dots = styled.span`\n &::after {\n display: inline-block;\n animation: ellipsis 1.25s infinite;\n content: '.';\n width: 1em;\n text-align: left;\n }\n @keyframes ellipsis {\n 0% {\n content: '.';\n }\n 33% {\n content: '..';\n }\n 66% {\n content: '...';\n }\n }\n`\n\nexport default Dots\n","import { useTranslation } from '@pulsex/localization'\nimport { ChainId } from '@pulsex/chains'\nimport { ArrowForwardIcon, Button, Grid, Message, MessageText, Modal, Text, FlexGap } from '@pulsex/uikit'\nimport { ChainLogo } from 'components/Logo/ChainLogo'\nimport useAuth from 'hooks/useAuth'\nimport { useSessionChainId } from 'hooks/useSessionChainId'\nimport { useSwitchNetwork } from 'hooks/useSwitchNetwork'\nimport { Chain, useAccount, useNetwork } from 'wagmi'\nimport Dots from '../Loader/Dots'\n\n// Where page network is not equal to wallet network\nexport function WrongNetworkModal({ currentChain, onDismiss }: { currentChain: Chain; onDismiss: () => void }) {\n const { switchNetworkAsync, isLoading, canSwitch } = useSwitchNetwork()\n const { chain } = useNetwork()\n const { logout } = useAuth()\n const { isConnected } = useAccount()\n const [, setSessionChainId] = useSessionChainId()\n const chainId = currentChain.id || ChainId.PULSECHAIN\n const { t } = useTranslation()\n\n const switchText = t('Switch to %network%', { network: currentChain.name })\n\n return (\n \n \n {t('This page is located for %network%.', { network: currentChain.name })}\n \n {t('You are under %network% now, please switch the network to continue.', { network: chain?.name ?? '' })}\n \n \n \n \n \n \n \n \n {t('Switch network to continue.')}\n \n \n \n {canSwitch ? (\n \n ) : (\n \n {t('Unable to switch network. Please try it on your wallet')}\n \n )}\n {isConnected && (\n \n logout().then(() => {\n setSessionChainId(chainId)\n })\n }\n variant=\"secondary\"\n >\n {t('Disconnect Wallet')}\n \n )}\n \n \n )\n}\n","import { Button, Grid, Message, MessageText, Modal } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport { useAccount, useNetwork } from 'wagmi'\nimport { useMemo } from 'react'\nimport { ChainId } from '@pulsex/chains'\nimport useAuth from 'hooks/useAuth'\nimport { useSwitchNetwork, useSwitchNetworkLocal } from 'hooks/useSwitchNetwork'\nimport { useLocalNetworkChain } from 'hooks/useActiveChainId'\nimport Dots from '../Loader/Dots'\n\n// Where chain is not supported or page not supported\nexport function UnsupportedNetworkModal({ pageSupportedChains }: { pageSupportedChains: number[] }) {\n const { switchNetworkAsync, isLoading, canSwitch } = useSwitchNetwork()\n const switchNetworkLocal = useSwitchNetworkLocal()\n const { chains } = useNetwork()\n const chainId = useLocalNetworkChain() || ChainId.PULSECHAIN\n const { isConnected } = useAccount()\n const { logout } = useAuth()\n const { t } = useTranslation()\n\n const supportedMainnetChains = useMemo(\n () => chains.filter((chain) => !chain.testnet && pageSupportedChains?.includes(chain.id)),\n [chains, pageSupportedChains],\n )\n\n return (\n \n \n \n {t('Please switch your network to continue.')}\n \n {canSwitch ? (\n {\n if (supportedMainnetChains.map((c) => c.id).includes(chainId)) {\n switchNetworkAsync(chainId)\n } else {\n switchNetworkAsync(ChainId.PULSECHAIN)\n }\n }}\n >\n {isLoading ? {t('Switch network in wallet')} : t('Switch network in wallet')}\n \n ) : (\n \n {t('Unable to switch network. Please try it on your wallet')}\n \n )}\n {isConnected && (\n \n logout().then(() => {\n switchNetworkLocal(ChainId.PULSECHAIN)\n })\n }\n >\n {t('Disconnect Wallet')}\n \n )}\n \n \n )\n}\n","import { ModalV2 } from '@pulsex/uikit'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport { ChainId } from '@pulsex/chains'\nimport { useMemo } from 'react'\nimport { useNetwork } from 'wagmi'\nimport { atom, useAtom } from 'jotai'\nimport { SUPPORT_ONLY_PULSE } from 'config/constants/supportChains'\nimport { CHAIN_IDS } from 'utils/wagmi'\nimport { PageNetworkSupportModal } from './PageNetworkSupportModal'\nimport { WrongNetworkModal } from './WrongNetworkModal'\nimport { UnsupportedNetworkModal } from './UnsupportedNetworkModal'\n\nexport const hideWrongNetworkModalAtom = atom(false)\n\nexport const NetworkModal = ({ pageSupportedChains = SUPPORT_ONLY_PULSE }: { pageSupportedChains?: number[] }) => {\n const { chainId, chain, isWrongNetwork } = useActiveWeb3React()\n const { chains } = useNetwork()\n const [dismissWrongNetwork, setDismissWrongNetwork] = useAtom(hideWrongNetworkModalAtom)\n\n const isPLSOnlyPage = useMemo(() => {\n return pageSupportedChains?.length === 1 && pageSupportedChains[0] === ChainId.PULSECHAIN\n }, [pageSupportedChains])\n\n const isPageNotSupported = useMemo(\n () => Boolean(pageSupportedChains.length) && !pageSupportedChains.includes(chainId),\n [chainId, pageSupportedChains],\n )\n\n if (isPageNotSupported && isPLSOnlyPage) {\n return (\n \n \n \n )\n }\n\n if ((chain?.unsupported ?? false) || isPageNotSupported) {\n return (\n \n \n \n )\n }\n\n if (isWrongNetwork && !dismissWrongNetwork) {\n const currentChain = chains.find((c) => c.id === chainId)\n if (!currentChain) return null\n return (\n setDismissWrongNetwork(true)}>\n setDismissWrongNetwork(true)} />\n \n )\n }\n\n return null\n}\n","import { UserRejectedRequestError, UnknownRpcError } from 'viem'\n\nconst possibleRejectMessage = ['Cancelled by User', 'cancel', 'Transaction was rejected']\n\n// provider user rejected error code\nexport const isUserRejected = (err) => {\n if (err instanceof UserRejectedRequestError) {\n return true\n }\n if (err instanceof UnknownRpcError) {\n // fallback for some wallets that don't follow EIP 1193, trust, safe\n if (possibleRejectMessage.some((msg) => err.details?.includes(msg))) {\n return true\n }\n }\n\n // fallback for raw rpc error code\n if (err && typeof err === 'object') {\n if (\n ('code' in err && (err.code === 4001 || err.code === 'ACTION_REJECTED')) ||\n ('cause' in err && 'code' in err.cause && err.cause.code === 4001)\n ) {\n return true\n }\n\n if ('cause' in err) {\n return isUserRejected(err.cause)\n }\n }\n return false\n}\n","import { TranslateFunction } from '@pulsex/localization'\n\n/**\n * This is hacking out the revert reason from the ethers provider thrown error however it can.\n * This object seems to be undocumented by ethers.\n * @param error an error from the ethers provider\n * @param t Translation function\n */\nexport function transactionErrorToUserReadableMessage(error: any, t: TranslateFunction) {\n let reason: string | undefined\n while (error) {\n reason = error.reason ?? error.data?.message ?? error.message ?? reason\n // eslint-disable-next-line no-param-reassign\n error = error.error ?? error.data?.originalError\n }\n\n if (reason?.indexOf('execution reverted: ') === 0) reason = reason.substring('execution reverted: '.length)\n\n const formatErrorMessage = (message: string) => [message, `(${reason})`].join(' ')\n switch (reason) {\n case 'PulseXRouter: EXPIRED':\n return formatErrorMessage(\n t(\n 'The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.',\n ),\n )\n case 'PulseXRouter: INSUFFICIENT_OUTPUT_AMOUNT':\n case 'PulseXRouter: EXCESSIVE_INPUT_AMOUNT':\n case 'PulseXRouter: INSUFFICIENT_A_AMOUNT':\n case 'PulseXRouter: INSUFFICIENT_B_AMOUNT':\n case 'PulseX: K':\n return formatErrorMessage(\n t(\n 'This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.',\n ),\n )\n case 'TransferHelper: TRANSFER_FROM_FAILED':\n return formatErrorMessage(t('The input token cannot be transferred. There may be an issue with the input token.'))\n case 'Pancake: TRANSFER_FAILED':\n return formatErrorMessage(\n t('The output token cannot be transferred. There may be an issue with the output token.'),\n )\n case 'Too little received':\n case 'Too much requested':\n case 'STF':\n return t(\n 'This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with PulseX.',\n )\n case 'TF':\n return t(\n 'The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with PulseX.',\n )\n default:\n if (reason?.indexOf('undefined is not an object') !== -1) {\n console.error(error, reason)\n return t(\n 'An error occurred when trying to execute this operation. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading.',\n )\n }\n return t('Unknown error%reason%. Try increasing your slippage tolerance.', {\n reason: reason ? `: \"${reason}\"` : '',\n })\n }\n}\n","/* eslint-disable no-param-reassign */\nimport {\n Currency,\n CurrencyAmount,\n isTradeBetter,\n PairV1,\n PairV2,\n Token,\n TradeV1,\n TradeV2,\n TradeType\n} from '@pulsex/sdk'\nimport flatMap from 'lodash/flatMap'\nimport { useMemo } from 'react'\nimport { useUserSingleHopOnly } from 'state/user/hooks'\nimport {\n BASES_TO_CHECK_TRADES_AGAINST,\n CUSTOM_BASES,\n BETTER_TRADE_LESS_HOPS_THRESHOLD,\n ADDITIONAL_BASES,\n} from '../config/constants/exchange'\nimport { PairState, usePairsBothProtocols } from './usePairs'\nimport { wrappedCurrency } from '../utils/wrappedCurrency'\n\nimport { useUnsupportedTokens } from './Tokens'\nimport { useActiveChainId } from './useActiveChainId'\n\nfunction useAllCommonPairs(protocol: string, currencyA?: Currency, currencyB?: Currency): (PairV1 | PairV2)[] {\n const { chainId } = useActiveChainId()\n\n const [tokenA, tokenB] = chainId\n ? [wrappedCurrency(currencyA, chainId), wrappedCurrency(currencyB, chainId)]\n : [undefined, undefined]\n\n const bases: Token[] = useMemo(() => {\n if (!chainId) return []\n\n const common = BASES_TO_CHECK_TRADES_AGAINST[chainId] ?? []\n const additionalA = tokenA ? ADDITIONAL_BASES[chainId]?.[tokenA.address] ?? [] : []\n const additionalB = tokenB ? ADDITIONAL_BASES[chainId]?.[tokenB.address] ?? [] : []\n\n return [...common, ...additionalA, ...additionalB]\n }, [chainId, tokenA, tokenB])\n\n const basePairs: [Token, Token][] = useMemo(\n () => flatMap(bases, (base): [Token, Token][] => bases.map((otherBase) => [base, otherBase])),\n [bases],\n )\n\n const allPairCombinations: [Token, Token][] = useMemo(\n () =>\n tokenA && tokenB\n ? [\n // the direct pair\n [tokenA, tokenB],\n // token A against all bases\n ...bases.map((base): [Token, Token] => [tokenA, base]),\n // token B against all bases\n ...bases.map((base): [Token, Token] => [tokenB, base]),\n // each base against all bases\n ...basePairs,\n ]\n .filter((tokens): tokens is [Token, Token] => Boolean(tokens[0] && tokens[1]))\n .filter(([t0, t1]) => t0.address !== t1.address)\n .filter(([tokenA_, tokenB_]) => {\n if (!chainId) return true\n const customBases = CUSTOM_BASES[chainId]\n\n const customBasesA: Token[] | undefined = customBases?.[tokenA_.address]\n const customBasesB: Token[] | undefined = customBases?.[tokenB_.address]\n\n if (!customBasesA && !customBasesB) return true\n\n if (customBasesA && !customBasesA.find((base) => tokenB_.equals(base))) return false\n if (customBasesB && !customBasesB.find((base) => tokenA_.equals(base))) return false\n\n return true\n })\n : [],\n [tokenA, tokenB, bases, basePairs, chainId],\n )\n\n const allPairs = usePairsBothProtocols(allPairCombinations, protocol)\n\n // only pass along valid pairs, non-duplicated pairs\n return useMemo(\n () =>\n Object.values(\n allPairs\n // filter out invalid pairs\n .filter((result): result is [PairState.EXISTS, PairV1 | PairV2] => Boolean(result[0] === PairState.EXISTS && result[1]))\n // filter out duplicated pairs\n .reduce<{ [pairAddress: string]: PairV1 | PairV2 }>((memo, [, curr]) => {\n memo[curr.liquidityToken.address] = memo[curr.liquidityToken.address] ?? curr\n return memo\n }, {}),\n ),\n [allPairs],\n )\n}\n\nconst MAX_HOPS = 3\n\n/**\n * Returns the best trade for the exact amount of tokens in to the given token out\n */\nexport function useTradeExactIn(\n protocol: string,\n currencyAmountIn?: CurrencyAmount,\n currencyOut?: Currency\n): TradeV1 | TradeV2 | null {\n const [singleHopOnly] = useUserSingleHopOnly()\n\n const allowedPairs = useAllCommonPairs(protocol, currencyAmountIn?.currency, currencyOut)\n const V1Pairs = allowedPairs.map((pair: PairV1 | PairV2) => {return pair instanceof PairV1 && pair})\n const V2Pairs = allowedPairs.map((pair: PairV1 | PairV2) => {return pair instanceof PairV2 && pair})\n\n return useMemo(() => {\n if (protocol === 'V1') {\n if (currencyAmountIn && currencyOut && allowedPairs.length > 0) {\n if (singleHopOnly) {\n return (\n TradeV1.bestTradeExactIn(V1Pairs, currencyAmountIn, currencyOut, { maxHops: 1, maxNumResults: 1 })[0] ??\n null\n )\n }\n // search through trades with varying hops, find best trade out of them\n let bestTradeSoFar: TradeV1 | null = null\n for (let i = 1; i <= MAX_HOPS; i++) {\n const currentTrade: TradeV1 | null =\n TradeV1.bestTradeExactIn(V1Pairs, currencyAmountIn, currencyOut, { maxHops: i, maxNumResults: 1 })[0] ??\n null\n // if current trade is best yet, save it\n if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) {\n bestTradeSoFar = currentTrade\n }\n }\n return bestTradeSoFar\n }\n } else if (protocol === 'V2') {\n if (currencyAmountIn && currencyOut && allowedPairs.length > 0) {\n if (singleHopOnly) {\n return (\n TradeV2.bestTradeExactIn(V2Pairs, currencyAmountIn, currencyOut, { maxHops: 1, maxNumResults: 1 })[0] ??\n null\n )\n }\n // search through trades with varying hops, find best trade out of them\n let bestTradeSoFar: TradeV2 | null = null\n for (let i = 1; i <= MAX_HOPS; i++) {\n const currentTrade: TradeV2 | null =\n TradeV2.bestTradeExactIn(V2Pairs, currencyAmountIn, currencyOut, { maxHops: i, maxNumResults: 1 })[0] ??\n null\n // if current trade is best yet, save it\n if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) {\n bestTradeSoFar = currentTrade\n }\n }\n return bestTradeSoFar\n }\n }\n\n return null\n }, [V1Pairs, V2Pairs, allowedPairs, protocol, currencyAmountIn, currencyOut, singleHopOnly])\n}\n\n/**\n * Returns the best trade for the token in to the exact amount of token out\n */\nexport function useTradeExactOut(\n protocol: string,\n currencyIn?: Currency,\n currencyAmountOut?: CurrencyAmount\n): TradeV1 | TradeV2 | null {\n \n const [singleHopOnly] = useUserSingleHopOnly()\n const allowedPairs = useAllCommonPairs(protocol, currencyIn, currencyAmountOut?.currency)\n const V1Pairs = allowedPairs.map((pair: PairV1 | PairV2) => {return pair instanceof PairV1 && pair})\n const V2Pairs = allowedPairs.map((pair: PairV1 | PairV2) => {return pair instanceof PairV2 && pair})\n\n return useMemo(() => {\n if (protocol === 'V1') {\n if (currencyIn && currencyAmountOut && allowedPairs.length > 0) {\n if (singleHopOnly) {\n return (\n TradeV1.bestTradeExactOut(V1Pairs, currencyIn, currencyAmountOut, { maxHops: 1, maxNumResults: 1 })[0] ??\n null\n )\n }\n // search through trades with varying hops, find best trade out of them\n let bestTradeSoFar: TradeV1 | null = null\n for (let i = 1; i <= MAX_HOPS; i++) {\n const currentTrade =\n TradeV1.bestTradeExactOut(V1Pairs, currencyIn, currencyAmountOut, { maxHops: i, maxNumResults: 1 })[0] ??\n null\n if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) {\n bestTradeSoFar = currentTrade\n }\n }\n return bestTradeSoFar\n }\n } else if (protocol === 'V2') {\n if (currencyIn && currencyAmountOut && allowedPairs.length > 0) {\n if (singleHopOnly) {\n return (\n TradeV2.bestTradeExactOut(V2Pairs, currencyIn, currencyAmountOut, { maxHops: 1, maxNumResults: 1 })[0] ??\n null\n )\n }\n // search through trades with varying hops, find best trade out of them\n let bestTradeSoFar: TradeV2 | null = null\n for (let i = 1; i <= MAX_HOPS; i++) {\n const currentTrade =\n TradeV2.bestTradeExactOut(V2Pairs, currencyIn, currencyAmountOut, { maxHops: i, maxNumResults: 1 })[0] ??\n null\n if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) {\n bestTradeSoFar = currentTrade\n }\n }\n return bestTradeSoFar\n }\n }\n return null\n }, [V1Pairs, V2Pairs, allowedPairs, currencyIn, currencyAmountOut, protocol, singleHopOnly])\n}\n\nexport function useIsTransactionUnsupported(currencyIn?: Currency, currencyOut?: Currency): boolean {\n const unsupportedTokens: { [address: string]: Token } = useUnsupportedTokens()\n const { chainId } = useActiveChainId()\n\n const tokenIn = wrappedCurrency(currencyIn, chainId)\n const tokenOut = wrappedCurrency(currencyOut, chainId)\n\n // if unsupported list loaded & either token on list, mark as unsupported\n if (unsupportedTokens) {\n if (tokenIn && Object.keys(unsupportedTokens).includes(tokenIn.address)) {\n return true\n }\n if (tokenOut && Object.keys(unsupportedTokens).includes(tokenOut.address)) {\n return true\n }\n }\n\n return false\n}\n\n/**\n * Returns the best trade for the exact amount of tokens in to the given token out\n */\nexport function useLimitTradeExactIn(\n protocol: string,\n currencyAmountIn?: CurrencyAmount,\n currencyOut?: Currency,\n): TradeV1 | TradeV2 | null {\n const allowedPairs = useAllCommonPairs(protocol, currencyAmountIn?.currency, currencyOut)\n const V1Pairs = allowedPairs.map((pair: PairV1 | PairV2) => {return pair instanceof PairV1 && pair})\n const V2Pairs = allowedPairs.map((pair: PairV1 | PairV2) => {return pair instanceof PairV2 && pair})\n\n return useMemo(() => {\n if (protocol === 'V1') {\n if (currencyAmountIn && currencyOut && allowedPairs.length > 0) {\n return (\n TradeV1.bestTradeExactIn(V1Pairs, currencyAmountIn, currencyOut, { maxHops: 1, maxNumResults: 1 })[0] ??\n null\n )\n }\n } else if (protocol === 'V2') {\n if (currencyAmountIn && currencyOut && allowedPairs.length > 0) {\n return (\n TradeV2.bestTradeExactIn(V2Pairs, currencyAmountIn, currencyOut, { maxHops: 1, maxNumResults: 1 })[0] ??\n null\n )\n }\n }\n \n return null\n }, [V1Pairs, V2Pairs, allowedPairs, protocol, currencyAmountIn, currencyOut])\n}\n\n/**\n * Returns the best trade for the token in to the exact amount of token out\n */\nexport function useLimitTradeExactOut(\n protocol: string,\n currencyIn?: Currency,\n currencyAmountOut?: CurrencyAmount\n): TradeV1 | TradeV2 | null {\n const allowedPairs = useAllCommonPairs(protocol, currencyIn, currencyAmountOut?.currency)\n const V1Pairs = allowedPairs.map((pair: PairV1 | PairV2) => {return pair instanceof PairV1 && pair})\n const V2Pairs = allowedPairs.map((pair: PairV1 | PairV2) => {return pair instanceof PairV2 && pair})\n\n return useMemo(() => {\n if (protocol === 'V1') {\n if (currencyIn && currencyAmountOut && allowedPairs.length > 0) {\n return (\n TradeV1.bestTradeExactOut(V1Pairs, currencyIn, currencyAmountOut, { maxHops: 1, maxNumResults: 1 })[0] ??\n null\n )\n }\n } else if (protocol === 'V2') {\n if (currencyIn && currencyAmountOut && allowedPairs.length > 0) {\n return (\n TradeV2.bestTradeExactOut(V2Pairs, currencyIn, currencyAmountOut, { maxHops: 1, maxNumResults: 1 })[0] ??\n null\n )\n }\n }\n return null\n }, [V1Pairs, V2Pairs, allowedPairs, currencyIn, currencyAmountOut, protocol])\n}\n","import { styled } from 'styled-components'\nimport { Box } from '@pulsex/uikit'\n\nconst Row = styled(Box)<{\n width?: string\n align?: string\n justify?: string\n padding?: string\n border?: string\n borderRadius?: string\n gap?: string\n}>`\n width: ${({ width }) => width ?? '100%'};\n display: flex;\n padding: 0;\n align-items: ${({ align }) => align ?? 'center'};\n justify-content: ${({ justify }) => justify ?? 'flex-start'};\n padding: ${({ padding }) => padding};\n border: ${({ border }) => border};\n border-radius: ${({ borderRadius }) => borderRadius};\n gap: ${({ gap }) => gap};\n`\n\nexport const RowBetween = styled(Row)`\n justify-content: space-between;\n`\n\nexport const RowFlat = styled.div`\n display: flex;\n align-items: flex-end;\n`\n\nexport const AutoRow = styled(Row)<{ gap?: string; justify?: string }>`\n flex-wrap: wrap;\n margin: ${({ gap }) => gap && `-${gap}`};\n justify-content: ${({ justify }) => justify};\n\n & > * {\n margin: ${({ gap }) => gap} !important;\n }\n`\n\nexport const RowFixed = styled(Row)<{ gap?: string; justify?: string }>`\n width: fit-content;\n margin: ${({ gap }) => gap && `-${gap}`};\n`\n\nexport default Row\n","import { styled } from 'styled-components'\n\nexport const Column = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n`\nexport const ColumnCenter = styled(Column)`\n width: 100%;\n align-items: center;\n`\n\nexport const AutoColumn = styled.div<{\n gap?: 'sm' | 'md' | 'lg' | string\n justify?: 'stretch' | 'center' | 'start' | 'end' | 'flex-start' | 'flex-end' | 'space-between'\n}>`\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ${({ gap }) => (gap === 'sm' && '3px') || (gap === 'md' && '12px') || (gap === 'lg' && '24px') || gap};\n justify-items: ${({ justify }) => justify};\n`\n","const domain = 'https://tokens.app.pulsex.com'\n\nconst getTokenLogoURL = (address: string) => `${domain}/images/tokens/${address}.png`\n\nexport default getTokenLogoURL\n","import { Currency } from '@pulsex/sdk'\nimport { TokenLogo } from '@pulsex/uikit'\nimport { useMemo } from 'react'\nimport { styled } from 'styled-components'\nimport { WrappedTokenInfo } from '@pulsex/token-lists'\nimport { useHttpLocations } from '@pulsex/hooks'\nimport getTokenLogoURL from '../../utils/getTokenLogoURL'\n\nconst domain = 'https://tokens.app.pulsex.com'\n\nconst StyledLogo = styled(TokenLogo)<{ size: string }>`\n width: ${({ size }) => size};\n height: ${({ size }) => size};\n`\n\nconst StyledPulseLogo = styled.img<{ size: string }>`\n width: ${({ size }) => size};\n height: ${({ size }) => size};\n`\n\nexport default function CurrencyLogo({\n currency,\n size = '26px',\n style,\n}: {\n currency?: Currency\n size?: string\n style?: React.CSSProperties\n}) {\n const uriLocations = useHttpLocations(currency instanceof WrappedTokenInfo ? currency.logoURI : undefined)\n\n const srcs: string[] = useMemo(() => {\n if (currency?.isNative) return []\n\n if (currency?.isToken) {\n const tokenLogoURL = getTokenLogoURL(currency.address)\n\n if (currency instanceof WrappedTokenInfo) {\n if (!tokenLogoURL) return [...uriLocations]\n return [...uriLocations, tokenLogoURL]\n }\n if (!tokenLogoURL) return []\n return [tokenLogoURL]\n }\n return []\n }, [currency, uriLocations])\n\n if (currency?.isNative) {\n return (\n \n )\n }\n\n return \n}\n","import { Currency } from '@pulsex/sdk'\nimport { styled } from 'styled-components'\nimport CurrencyLogo from './CurrencyLogo'\n\nconst Wrapper = styled(\"div\").withConfig({\n shouldForwardProp: (props) => ![\"margin\"].includes(props),\n})<{ margin: boolean }>`\n position: relative;\n display: flex;\n flex-direction: row;\n margin-right: ${({ margin }) => margin && '4px'};\n`\nconst HigherLogoWrapper = styled.div`\n z-index: 1;\n`\nconst CoveredLogoWapper = styled.div<{ sizeraw: number }>`\n position: absolute;\n left: ${({ sizeraw }) => `-${ (sizeraw / 2).toString() }px`} !important;\n`\n\ninterface DoubleCurrencyLogoProps {\n margin?: boolean\n size?: number\n currency0?: Currency\n currency1?: Currency\n}\n\nexport default function DoubleCurrencyLogo({\n currency0,\n currency1,\n size = 20,\n margin = false,\n}: DoubleCurrencyLogoProps) {\n return (\n \n {currency0 && (\n \n \n \n )}\n {currency1 && (\n \n \n \n )}\n \n )\n}\n","import { styled } from 'styled-components'\nimport { TokenLogo } from '@pulsex/uikit'\nimport { useHttpLocations } from '@pulsex/hooks'\n\nconst StyledListLogo = styled(TokenLogo)<{ size: string }>`\n width: ${({ size }) => size};\n height: ${({ size }) => size};\n`;\n\nexport default function ListLogo({\n logoURI,\n style,\n size = \"24px\",\n alt,\n}: {\n logoURI: string\n size?: string;\n style?: React.CSSProperties\n alt?: string\n}) {\n const srcs: string[] = useHttpLocations(logoURI)\n\n return \n}\n","import { Currency, Token } from '@pulsex/sdk'\nimport { Button, Text, InjectedModalProps, Link, Modal, useModal } from '@pulsex/uikit'\nimport { styled } from 'styled-components'\nimport { AutoRow } from 'components/Layout/Row'\nimport { AutoColumn } from 'components/Layout/Column'\nimport { CurrencyLogo } from 'components/Logo'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport { getBlockExplorerLink } from 'utils'\nimport { wrappedCurrency } from 'utils/wrappedCurrency'\nimport { useUnsupportedTokens } from '../hooks/Tokens'\n\ninterface Props extends InjectedModalProps {\n currencies: (Currency | undefined)[]\n}\n\nconst DetailsFooter = styled.div`\n padding: 8px 0;\n width: 100%;\n max-width: 400px;\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n color: ${({ theme }) => theme.colors.text};\n background-color: ${({ theme }) => theme.colors.invertedContrast};\n text-align: center;\n`\n\nconst UnsupportedModal: React.FC = ({ currencies, onDismiss }) => {\n const { chainId } = useActiveWeb3React()\n const tokens =\n chainId && currencies\n ? currencies.map((currency) => {\n return wrappedCurrency(currency, chainId)\n })\n : []\n\n const unsupportedTokens: { [address: string]: Token } = useUnsupportedTokens()\n\n return (\n \n \n {tokens.map((token) => {\n return (\n token &&\n unsupportedTokens &&\n Object.keys(unsupportedTokens).includes(token.address) && (\n \n \n \n {token.symbol}\n \n {chainId && (\n \n {token.address}\n \n )}\n \n )\n )\n })}\n \n \n Some assets are not available through this interface because they may not work well with our smart contract\n or we are unable to allow trading for legal reasons.\n \n \n \n \n )\n}\n\nexport default function UnsupportedCurrencyFooter({ currencies }: { currencies: (Currency | undefined)[] }) {\n const [onPresentModal] = useModal()\n\n return (\n \n \n \n )\n}\n","export const pulsexRouter02Abi = [\n {\n \"inputs\": [],\n \"name\": \"WPLS\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenA\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenB\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountADesired\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountBDesired\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountAMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountBMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"addLiquidity\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountA\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountB\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"liquidity\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountTokenDesired\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountTokenMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountETHMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"addLiquidityETH\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountToken\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountETH\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"liquidity\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"factory\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"reserveIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"reserveOut\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getAmountIn\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"reserveIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"reserveOut\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getAmountOut\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"path\",\n \"type\": \"address[]\"\n }\n ],\n \"name\": \"getAmountsIn\",\n \"outputs\": [\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"amounts\",\n \"type\": \"uint256[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"path\",\n \"type\": \"address[]\"\n }\n ],\n \"name\": \"getAmountsOut\",\n \"outputs\": [\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"amounts\",\n \"type\": \"uint256[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountA\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"reserveA\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"reserveB\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"quote\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountB\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenA\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenB\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"liquidity\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountAMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountBMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"removeLiquidity\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountA\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountB\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"liquidity\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountTokenMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountETHMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"removeLiquidityETH\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountToken\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountETH\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"liquidity\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountTokenMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountETHMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"removeLiquidityETHSupportingFeeOnTransferTokens\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountETH\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"liquidity\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountTokenMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountETHMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"approveMax\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"removeLiquidityETHWithPermit\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountToken\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountETH\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"liquidity\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountTokenMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountETHMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"approveMax\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountETH\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenA\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenB\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"liquidity\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountAMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountBMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"approveMax\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"removeLiquidityWithPermit\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountA\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountB\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"path\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"swapETHForExactTokens\",\n \"outputs\": [\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"amounts\",\n \"type\": \"uint256[]\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOutMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"path\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"swapExactETHForTokens\",\n \"outputs\": [\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"amounts\",\n \"type\": \"uint256[]\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOutMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"path\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"swapExactETHForTokensSupportingFeeOnTransferTokens\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOutMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"path\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"swapExactTokensForETH\",\n \"outputs\": [\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"amounts\",\n \"type\": \"uint256[]\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOutMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"path\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"swapExactTokensForETHSupportingFeeOnTransferTokens\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOutMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"path\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"swapExactTokensForTokens\",\n \"outputs\": [\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"amounts\",\n \"type\": \"uint256[]\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOutMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"path\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"swapExactTokensForTokensSupportingFeeOnTransferTokens\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountInMax\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"path\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"swapTokensForExactETH\",\n \"outputs\": [\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"amounts\",\n \"type\": \"uint256[]\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountInMax\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"path\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"swapTokensForExactTokens\",\n \"outputs\": [\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"amounts\",\n \"type\": \"uint256[]\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n] as const\n","import { createAction } from '@reduxjs/toolkit'\nimport { DerivedPairDataNormalized, PairDataNormalized, PairDataTimeWindowEnum } from './types'\n\nexport enum Field {\n INPUT = 'INPUT',\n OUTPUT = 'OUTPUT',\n}\n\nexport const selectCurrency = createAction<{ field: Field; currencyId: string }>('swap/selectCurrency')\nexport const switchCurrencies = createAction('swap/switchCurrencies')\nexport const typeInput = createAction<{ field: Field; typedValue: string }>('swap/typeInput')\nexport const replaceSwapState = createAction<{\n field: Field\n typedValue: string\n inputCurrencyId?: string\n outputCurrencyId?: string\n recipient: string | null\n}>('swap/replaceSwapState')\nexport const setRecipient = createAction<{ recipient: string | null }>('swap/setRecipient')\nexport const updatePairData =\n createAction<{ pairData: PairDataNormalized; pairId: string; timeWindow: PairDataTimeWindowEnum }>(\n 'swap/updatePairData',\n )\nexport const updateDerivedPairData =\n createAction<{ pairData: DerivedPairDataNormalized; pairId: string; timeWindow: PairDataTimeWindowEnum }>(\n 'swap/updateDerivedPairData',\n )\n","import {\n Currency,\n CurrencyAmount,\n Fraction,\n Percent,\n TradeV1,\n TradeV2,\n TradeType,\n Token,\n PairV1,\n PairV2\n} from '@pulsex/sdk'\nimport { Trade } from '@pulsex/smart-order-router/src/routers/sdk'\nimport range from 'lodash/range'\nimport { pulsexRouter02Abi } from 'config/abi/IPulseXRouter02'\nimport {\n ALLOWED_PRICE_IMPACT_HIGH,\n ALLOWED_PRICE_IMPACT_LOW,\n ALLOWED_PRICE_IMPACT_MEDIUM,\n BIPS_BASE,\n BLOCKED_PRICE_IMPACT_NON_EXPERT,\n INPUT_FRACTION_AFTER_FEE,\n ONE_HUNDRED_PERCENT,\n ROUTER_ADDRESS_V1,\n ROUTER_ADDRESS_V2,\n ZERO_PERCENT\n} from 'config/constants/exchange'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport { useContract } from 'hooks/useContract'\nimport { InterfaceTrade } from 'state/autorouter/types'\nimport { Field } from '../state/swap/actions'\n\n// converts a basis points value to a sdk percent\nexport function basisPointsToPercent(num: number): Percent {\n return new Percent(BigInt(num), BIPS_BASE)\n}\n\nexport function calculateSlippageAmount(value: CurrencyAmount, slippage: number): [bigint, bigint] {\n if (slippage < 0 || slippage > 10000) {\n throw Error(`Unexpected slippage value: ${slippage}`)\n }\n return [\n (value.quotient * BigInt(10000 - slippage)) / BIPS_BASE,\n (value.quotient * BigInt(10000 + slippage)) / BIPS_BASE,\n ]\n}\n\n// universal method for getting PulseXRouter across protocols and chains\nexport function useRouterContractBothProtocols(protocol: string) {\n const { chainId } = useActiveChainId()\n return useContract(\n protocol === 'V1' ? ROUTER_ADDRESS_V1[chainId] : ROUTER_ADDRESS_V2[chainId],\n pulsexRouter02Abi,\n )\n}\n\nexport function computeRealizedPriceImpact(trade: Trade): {\n priceImpactWithoutFee: Percent | undefined\n realizedLPFee: CurrencyAmount | undefined | null\n} {\n const realizedLpFeePercent = computeRealizedLPFeePercentv2(trade)\n const lpFeeAmount = trade.inputAmount.multiply(realizedLpFeePercent)\n\n return {\n priceImpactWithoutFee: trade.priceImpact.subtract(realizedLpFeePercent),\n realizedLPFee: lpFeeAmount\n }\n}\n\n// computes realized lp fee as a percent\nfunction computeRealizedLPFeePercentv2(trade: Trade): Percent {\n let percent: Percent\n\n // Since routes are either all v2 or all v3 right now, calculate separately\n if (trade.swaps[0].route.pools instanceof PairV1 || trade.swaps[0].route.pools instanceof PairV2) {\n // for each hop in our trade, take away the x*y=k price impact from 0.3% fees\n // e.g. for 3 tokens/2 hops: 1 - ((1 - .03) * (1-.03))\n percent = ONE_HUNDRED_PERCENT.subtract(\n trade.swaps.reduce(\n (currentFee: Percent): Percent => currentFee.multiply(INPUT_FRACTION_AFTER_FEE),\n ONE_HUNDRED_PERCENT\n )\n )\n } else {\n percent = ZERO_PERCENT\n for (const swap of trade.swaps) {\n const { numerator, denominator } = swap.inputAmount.divide(trade.inputAmount)\n const overallPercent = new Percent(numerator, denominator)\n\n const routeRealizedLPFeePercent = overallPercent.multiply(\n ONE_HUNDRED_PERCENT.subtract(\n swap.route.pools.reduce((currentFee: Percent): Percent => {\n const fee = 2900\n return currentFee.multiply(ONE_HUNDRED_PERCENT.subtract(new Fraction(fee, 1_000_000)))\n }, ONE_HUNDRED_PERCENT)\n )\n )\n\n percent = percent.add(routeRealizedLPFeePercent)\n }\n }\n\n return new Percent(percent.numerator, percent.denominator)\n}\n\n// computes price breakdown for the trade\nexport function computeTradePriceBreakdown(\n trade: TradeV1 | TradeV2 | null,\n): {\n priceImpactWithoutFee: Percent | undefined\n realizedLPFee: CurrencyAmount | undefined | null\n} {\n // for each hop in our trade, take away the x*y=k price impact from 0.3% fees\n // e.g. for 3 tokens/2 hops: 1 - ((1 - .03) * (1-.03))\n const realizedLPFee = !trade\n ? undefined\n : ONE_HUNDRED_PERCENT.subtract(\n // equivalent use to (new Array(trade.route.pairs.length)).fill(null)\n range(trade.route.pairs.length).reduce(\n (currentFee: Fraction): Fraction => currentFee.multiply(INPUT_FRACTION_AFTER_FEE),\n ONE_HUNDRED_PERCENT,\n ),\n )\n\n // remove lp fees from price impact\n const priceImpactWithoutFeeFraction = trade && realizedLPFee ? trade?.priceImpact.subtract(realizedLPFee) : undefined\n\n // the x*y=k impact\n const priceImpactWithoutFeePercent = priceImpactWithoutFeeFraction\n ? new Percent(priceImpactWithoutFeeFraction?.numerator, priceImpactWithoutFeeFraction?.denominator)\n : undefined\n\n // the amount of the input that accrues to LPs\n const realizedLPFeeAmount =\n realizedLPFee &&\n trade &&\n CurrencyAmount.fromRawAmount(\n trade.inputAmount.currency,\n realizedLPFee.multiply(trade.inputAmount.quotient).quotient,\n )\n\n return { priceImpactWithoutFee: priceImpactWithoutFeePercent, realizedLPFee: realizedLPFeeAmount }\n}\n\n// computes the minimum amount out and maximum amount in for a trade given a user specified allowed slippage in bips\n\nexport function computeSmartRouterSlippageAdjustedAmounts(\n trade: InterfaceTrade | undefined,\n allowedSlippage: number,\n): { [field in Field]?: CurrencyAmount } {\n const pct = basisPointsToPercent(allowedSlippage)\n return {\n [Field.INPUT]: trade?.maximumAmountIn(pct),\n [Field.OUTPUT]: trade?.minimumAmountOut(pct),\n }\n}\n\nexport function computeSlippageAdjustedAmounts(\n trade: TradeV1 | TradeV2 | undefined,\n allowedSlippage: number,\n): { [field in Field]?: CurrencyAmount } {\n const pct = basisPointsToPercent(allowedSlippage)\n return {\n [Field.INPUT]: trade?.maximumAmountIn(pct),\n [Field.OUTPUT]: trade?.minimumAmountOut(pct),\n }\n}\n\nexport function warningSeverity(priceImpact: Percent | undefined): 0 | 1 | 2 | 3 | 4 {\n if (!priceImpact?.lessThan(BLOCKED_PRICE_IMPACT_NON_EXPERT)) return 4\n if (!priceImpact?.lessThan(ALLOWED_PRICE_IMPACT_HIGH)) return 3\n if (!priceImpact?.lessThan(ALLOWED_PRICE_IMPACT_MEDIUM)) return 2\n if (!priceImpact?.lessThan(ALLOWED_PRICE_IMPACT_LOW)) return 1\n return 0\n}\n\nexport function formatExecutionPrice(trade?: TradeV1, inverted?: boolean): string {\n if (!trade) {\n return ''\n }\n return inverted\n ? `${trade.executionPrice.invert().toSignificant(6)} ${trade.inputAmount.currency.symbol} / ${trade.outputAmount.currency.symbol\n }`\n : `${trade.executionPrice.toSignificant(6)} ${trade.outputAmount.currency.symbol} / ${trade.inputAmount.currency.symbol\n }`\n}\n\n// computes fee amount from input field\nexport function computeLimitOrderLPFee(\n trade?: TradeV1 | null,\n inputAmount?: CurrencyAmount,\n): CurrencyAmount | undefined | null {\n // for each hop in our trade, take away the x*y=k price impact from 0.29% fees\n // e.g. for 3 tokens/2 hops: 1 - ((1 - .029) * (1-.029))\n const realizedLPFee = !trade\n ? undefined\n : ONE_HUNDRED_PERCENT.subtract(\n trade.route.pairs.reduce(\n (currentFee: Fraction): Fraction => currentFee.multiply(INPUT_FRACTION_AFTER_FEE),\n ONE_HUNDRED_PERCENT,\n ),\n )\n\n // the amount of the input that accrues to LPs\n const realizedLPFeeAmount =\n realizedLPFee &&\n trade &&\n CurrencyAmount.fromRawAmount(inputAmount.currency, realizedLPFee.multiply(inputAmount.quotient).quotient)\n\n return realizedLPFeeAmount\n}\n\n// computes the minimum amount out for a trade given a user specified allowed slippage in bips\nexport function computeOutputSlippageAdjustedAmount(\n trade: TradeV1 | undefined,\n outputAmount: CurrencyAmount,\n rawOutput: string | undefined,\n allowedSlippage: number,\n): CurrencyAmount | CurrencyAmount {\n if (!trade && !rawOutput) return null\n const pct = basisPointsToPercent(allowedSlippage)\n const slippageAdjustedAmountOut = new Fraction(BigInt(1)).add(pct).invert().multiply(rawOutput).quotient\n return CurrencyAmount.fromRawAmount(outputAmount.currency, BigInt(slippageAdjustedAmountOut.toString()))\n}\n","import { createAction } from '@reduxjs/toolkit'\n\nexport enum Field {\n CURRENCY_A = 'CURRENCY_A',\n CURRENCY_B = 'CURRENCY_B',\n}\n\nexport const typeInput = createAction<{ field: Field; typedValue: string; noLiquidity: boolean }>('mint/typeInputMint')\nexport const resetMintState = createAction('mint/resetMintState')\nexport const setProtocol = createAction<{ protocol: string | null }>('mint/setProtocol')\n","import { createContext, useContext } from 'react'\nimport { createReducer } from '@reduxjs/toolkit'\nimport { atomWithReducer } from 'jotai/utils'\nimport { useAtomValue, useSetAtom } from 'jotai'\nimport { Field, resetMintState, typeInput, setProtocol } from './actions'\n\nexport interface MintState {\n readonly independentField: Field\n readonly typedValue: string\n readonly otherTypedValue: string // for the case when there's no liquidity\n readonly protocol: string\n}\n\nconst initialState: MintState = {\n independentField: Field.CURRENCY_A,\n typedValue: '',\n otherTypedValue: '',\n protocol: 'V2'\n}\n\nexport const reducer = createReducer(initialState, (builder) =>\n builder\n .addCase(resetMintState, () => initialState)\n .addCase(typeInput, (state, { payload: { field, typedValue, noLiquidity } }) => {\n if (noLiquidity) {\n // they're typing into the field they've last typed in\n if (field === state.independentField) {\n return {\n ...state,\n independentField: field,\n typedValue,\n }\n }\n // they're typing into a new field, store the other value\n\n return {\n ...state,\n independentField: field,\n typedValue,\n otherTypedValue: state.typedValue,\n }\n }\n return {\n ...state,\n independentField: field,\n typedValue,\n otherTypedValue: '',\n }\n })\n .addCase(setProtocol, (state, { payload: { protocol } }) => {\n state.protocol = protocol\n })\n)\n\nexport const createFormAtom = () => atomWithReducer(initialState, reducer)\n\nconst AddLiquidityAtomContext = createContext({\n formAtom: createFormAtom(),\n})\n\nexport const AddLiquidityAtomProvider = AddLiquidityAtomContext.Provider\n\nexport function useAddLiquidityFormState() {\n const ctx = useContext(AddLiquidityAtomContext)\n return useAtomValue(ctx.formAtom)\n}\n\nexport function useAddLiquidityFormDispatch() {\n const ctx = useContext(AddLiquidityAtomContext)\n return useSetAtom(ctx.formAtom)\n}\n","import { styled } from 'styled-components'\nimport { Box } from '@pulsex/uikit'\n\nconst Card = styled(Box)<{\n width?: string\n padding?: string\n border?: string\n borderRadius?: string\n}>`\n width: ${({ width }) => width ?? '100%'};\n padding: ${({ padding }) => padding ?? '1.25rem'};\n border: ${({ border }) => border};\n border-radius: ${({ borderRadius }) => borderRadius ?? '10px'};\n background-color: ${({ theme }) => theme.colors.background};\n`\nexport default Card\n\nexport const LightCard = styled(Card)`\n border: 1px solid ${({ theme }) => theme.colors.background};\n background-color: ${({ theme }) => theme.colors.backgroundAlt};\n`\n\nexport const LightGreyCard = styled(Card)`\n border: 1px solid ${({ theme }) => theme.colors.cardBorder};\n background-image: ${({ theme }) => theme.colors.gradientInverseBubblegum};\n`\n\nexport const GreyCard = styled(Card)`\n background-color: ${({ theme }) => theme.colors.dropdown};\n`\n","import { Currency, Token } from '@pulsex/sdk'\nimport { ChainId } from '@pulsex/chains'\nimport { Flex, Text } from '@pulsex/uikit'\nimport styled from 'styled-components'\nimport useNativeCurrency from 'hooks/useNativeCurrency'\nimport { SUGGESTED_BASES } from '../../config/constants/exchange'\nimport { CurrencyLogo } from '../Logo'\n\nconst Wrapper = styled(Flex)`\n flex-direction: column;\n border-bottom: 1px solid ${({ theme }) => theme.colors.cardBorder};\n padding-bottom: 10px;\n`\n\nconst BaseWrapper = styled(\"div\").withConfig({\n shouldForwardProp: (props) => ![\"disable\"].includes(props),\n})<{ disable?: boolean }>`\n border: 1px solid ${({ theme, disable }) => (disable ? 'transparent' : theme.colors.dropdown)};\n border-radius: 10px;\n display: flex;\n padding: 3px;\n\n align-items: center;\n &:hover {\n cursor: ${({ disable }) => !disable && 'pointer'};\n background: ${({ theme, disable }) => !disable && theme.colors.dropdown};\n }\n opacity: ${({ disable }) => disable && '0.4'};\n`\n\nexport default function CommonBases({\n chainId,\n onSelect,\n selectedCurrency,\n}: {\n chainId?: ChainId\n selectedCurrency?: Currency | null\n onSelect: (currency: Currency) => void\n}) {\n const native = useNativeCurrency()\n return (\n \n \n {\n if (!selectedCurrency || !selectedCurrency.isNative) {\n onSelect(native)\n }\n }}\n disable={selectedCurrency?.isNative}\n style={{ marginRight: '10px', marginBottom: '10px' }}\n >\n \n PLS\n \n {(chainId ? SUGGESTED_BASES[chainId] : []).map((token: Token) => {\n const selected = selectedCurrency?.equals(token)\n return (\n !selected &&\n onSelect(token)}\n disable={selected}\n key={token.address}\n style={{ marginRight: '10px', marginBottom: '10px' }}\n >\n \n {token.symbol}\n \n )\n })}\n \n \n )\n}\n","import { styled, keyframes } from 'styled-components'\n\nconst rotate = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`\n\nconst StyledSVG = styled.svg<{ size: string; stroke?: string }>`\n animation: 2s ${rotate} linear infinite;\n height: ${({ size }) => size};\n width: ${({ size }) => size};\n path {\n stroke: ${({ stroke, theme }) => stroke ?? theme.colors.primary};\n }\n`\n\n/**\n * Takes in custom size and stroke for circle color, default to primary color as fill,\n * need ...rest for layered styles on top\n */\nexport default function CircleLoader({\n size = '16px',\n stroke,\n ...rest\n}: {\n size?: string\n stroke?: string\n [k: string]: any\n}) {\n return (\n \n \n \n )\n}\n","import { CSSProperties } from 'react'\nimport { Token } from '@pulsex/sdk'\nimport { Button, Text, CheckmarkCircleIcon } from '@pulsex/uikit'\nimport { AutoRow, RowFixed } from 'components/Layout/Row'\nimport { AutoColumn } from 'components/Layout/Column'\nimport CurrencyLogo from 'components/Logo/CurrencyLogo'\nimport { ListLogo } from 'components/Logo'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport { useCombinedInactiveList } from 'state/lists/hooks'\nimport { styled } from 'styled-components'\nimport { useIsUserAddedToken, useIsTokenActive } from 'hooks/Tokens'\nimport { useTranslation } from '@pulsex/localization'\n\nconst TokenSection = styled.div<{ dim?: boolean }>`\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-template-columns: auto minmax(auto, 1fr) auto;\n grid-gap: 16px;\n align-items: center;\n\n opacity: ${({ dim }) => (dim ? '0.4' : '1')};\n`\n\nconst CheckIcon = styled(CheckmarkCircleIcon)`\n height: 16px;\n width: 16px;\n margin-right: 6px;\n stroke: ${({ theme }) => theme.colors.success};\n`\n\nconst NameOverflow = styled.div`\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 140px;\n font-size: 12px;\n`\n\nexport default function ImportRow({\n token,\n style,\n dim,\n showImportView,\n setImportToken,\n}: {\n token: Token\n style?: CSSProperties\n dim?: boolean\n showImportView: () => void\n setImportToken: (token: Token) => void\n}) {\n // globals\n const { chainId } = useActiveWeb3React()\n\n const { t } = useTranslation()\n\n // check if token comes from list\n const inactiveTokenList = useCombinedInactiveList()\n const list = chainId && inactiveTokenList?.[chainId]?.[token.address]?.list\n\n // check if already active on list or local storage tokens\n const isAdded = useIsUserAddedToken(token)\n const isActive = useIsTokenActive(token)\n\n return (\n \n \n \n \n {token.symbol}\n \n {token.name}\n \n \n {list && list.logoURI && (\n \n \n {t('via')} {list.name}\n \n \n \n )}\n \n {!isActive && !isAdded ? (\n {\n if (setImportToken) {\n setImportToken(token)\n }\n showImportView()\n }}\n >\n {t('Import')}\n \n ) : (\n \n \n Active\n \n )}\n \n )\n}\n","import { CSSProperties, MutableRefObject, useCallback, useMemo } from 'react'\nimport { Currency, CurrencyAmount, Token } from '@pulsex/sdk'\nimport { Text, QuestionHelper } from '@pulsex/uikit'\nimport { styled } from 'styled-components'\nimport { FixedSizeList } from 'react-window'\nimport { useTranslation } from '@pulsex/localization'\nimport { useAccount } from 'wagmi'\nimport { wrappedCurrency } from 'utils/wrappedCurrency'\nimport useNativeCurrency from 'hooks/useNativeCurrency'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport { useCombinedActiveList } from 'state/lists/hooks'\nimport { useCurrencyBalance } from 'state/wallet/hooks'\nimport { useIsUserAddedToken } from 'hooks/Tokens'\nimport { isTokenOnList } from 'utils'\nimport { LightGreyCard } from \"../Card\"\nimport { Column } from '../Layout/Column'\nimport { RowFixed, RowBetween } from '../Layout/Row'\nimport { CurrencyLogo } from '../Logo'\nimport CircleLoader from '../Loader/CircleLoader'\nimport ImportRow from './ImportRow'\n\nfunction currencyKey(currency: Currency): string {\n return currency?.isToken ? currency.address : currency?.isNative ? currency.symbol : ''\n}\n\nconst StyledBalanceText = styled(Text)`\n white-space: nowrap;\n overflow: hidden;\n max-width: 5rem;\n text-overflow: ellipsis;\n`\n\nconst FixedContentRow = styled.div`\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-gap: 16px;\n align-items: center;\n`\n\nfunction Balance({ balance }: { balance: CurrencyAmount }) {\n return {balance.toSignificant(4)}\n}\n\nconst MenuItem = styled(RowBetween)<{ disabled: boolean; selected: boolean }>`\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-template-columns: auto minmax(auto, 1fr) minmax(0, 72px);\n grid-gap: 8px;\n cursor: ${({ disabled }) => !disabled && 'pointer'};\n pointer-events: ${({ disabled }) => disabled && 'none'};\n &:hover {\n background: ${({ theme, disabled }) => !disabled && theme.colors.dropdown};\n }\n opacity: ${({ disabled, selected }) => (disabled || selected ? 0.5 : 1)};\n`\n\nfunction CurrencyRow({\n currency,\n onSelect,\n isSelected,\n otherSelected,\n style,\n}: {\n currency: Currency\n onSelect: () => void\n isSelected: boolean\n otherSelected: boolean\n style: CSSProperties\n}) {\n const { address: account } = useAccount()\n const key = currencyKey(currency)\n const selectedTokenList = useCombinedActiveList()\n const isOnSelectedList = isTokenOnList(selectedTokenList, currency)\n const customAdded = useIsUserAddedToken(currency)\n const balance = useCurrencyBalance(account ?? undefined, currency)\n\n // only show add or remove buttons if not on selected list\n return (\n (isSelected ? null : onSelect())}\n disabled={isSelected}\n selected={otherSelected}\n >\n \n \n {currency.symbol}\n \n {!isOnSelectedList && customAdded && 'Added by user •'} {currency.name}\n \n \n \n {balance ? : account ? : null}\n \n \n )\n}\n\nexport default function CurrencyList({\n height,\n currencies,\n inactiveCurrencies,\n selectedCurrency,\n onCurrencySelect,\n otherCurrency,\n fixedListRef,\n showETH,\n showImportView,\n setImportToken,\n breakIndex,\n}: {\n height: number\n currencies: Currency[]\n inactiveCurrencies: Currency[]\n selectedCurrency?: Currency | null\n onCurrencySelect: (currency: Currency) => void\n otherCurrency?: Currency | null\n fixedListRef?: MutableRefObject\n showETH: boolean\n showImportView: () => void\n setImportToken: (token: Token) => void\n breakIndex: number | undefined\n}) {\n const native = useNativeCurrency()\n\n const itemData: (Currency | undefined)[] = useMemo(() => {\n let formatted: (Currency | undefined)[] = showETH ? [native, ...currencies, ...inactiveCurrencies] : [...currencies, ...inactiveCurrencies]\n if (breakIndex !== undefined) {\n formatted = [...formatted.slice(0, breakIndex), undefined, ...formatted.slice(breakIndex, formatted.length)]\n }\n return formatted\n }, [breakIndex, currencies, inactiveCurrencies, showETH, native])\n\n const { chainId } = useActiveChainId()\n\n const { t } = useTranslation()\n\n const Row = useCallback(\n ({ data, index, style }) => {\n const currency: Currency = data[index]\n const isSelected = Boolean(selectedCurrency && currency && selectedCurrency.equals(currency))\n const otherSelected = Boolean(otherCurrency && currency && otherCurrency.equals(currency))\n const handleSelect = () => onCurrencySelect(currency)\n\n const token = wrappedCurrency(currency, chainId)\n\n const showImport = index > currencies.length\n\n if (index === breakIndex || !data) {\n return (\n \n \n \n {t('Expanded results from inactive Token Lists')}\n \n \n \n \n )\n }\n\n if (showImport && token) {\n return (\n \n )\n }\n return (\n \n )\n },\n [\n selectedCurrency,\n otherCurrency,\n chainId,\n currencies.length,\n breakIndex,\n onCurrencySelect,\n t,\n showImportView,\n setImportToken,\n ],\n )\n\n const itemKey = useCallback((index: number, data: any) => currencyKey(data[index]), [])\n\n return (\n \n {Row}\n \n )\n}\n","import { Token, getTokenComparator } from '@pulsex/sdk'\nimport { useMemo } from 'react'\nimport { useAllTokenBalances } from '../../state/wallet/hooks'\n\nfunction useTokenComparator(inverted: boolean): (tokenA: Token, tokenB: Token) => number {\n const balances = useAllTokenBalances()\n const comparator = useMemo(() => getTokenComparator(balances ?? {}), [balances])\n return useMemo(() => {\n if (inverted) {\n return (tokenA: Token, tokenB: Token) => comparator(tokenA, tokenB) * -1\n }\n return comparator\n }, [inverted, comparator])\n}\n\nexport default useTokenComparator\n","let swapSound: HTMLAudioElement\nexport const getSwapSound = () => {\n if (!swapSound) {\n swapSound = new Audio('swap.mp3')\n }\n return swapSound\n}\n","import { KeyboardEvent, RefObject, useCallback, useMemo, useRef, useState, useEffect } from 'react'\nimport { Currency, Token } from '@pulsex/sdk'\nimport { Text, Input, Box, useMatchBreakpoints } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport { FixedSizeList } from 'react-window'\nimport { WrappedTokenInfo, createFilterToken } from '@pulsex/token-lists'\nimport { useDebounce } from '@pulsex/hooks'\nimport { isAddress } from 'viem'\nimport useNativeCurrency from 'hooks/useNativeCurrency'\nimport { useAllLists, useInactiveListUrls } from 'state/lists/hooks'\nimport { useAudioModeManager } from 'state/user/hooks'\nimport { safeGetAddress } from 'utils'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport { useAllTokens, useIsUserAddedToken, useToken } from 'hooks/Tokens'\nimport { AutoColumn, Column } from '../Layout/Column'\nimport Row from '../Layout/Row'\nimport CommonBases from './CommonBases'\nimport CurrencyList from './CurrencyList'\nimport { useSortedTokensByQuery } from './filtering'\nimport useTokenComparator from './sorting'\nimport { getSwapSound } from './swapSound'\n\nimport ImportRow from './ImportRow'\n\ninterface CurrencySearchProps {\n selectedCurrency?: Currency | null\n onCurrencySelect: (currency: Currency) => void\n otherSelectedCurrency?: Currency | null\n showCommonBases?: boolean\n showImportView: () => void\n setImportToken: (token: Token) => void\n height?: number\n tokensToShow?: Token[]\n}\n\nfunction useSearchInactiveTokenLists(search: string | undefined, minResults = 10): WrappedTokenInfo[] {\n const lists = useAllLists()\n const inactiveUrls = useInactiveListUrls()\n const { chainId } = useActiveChainId()\n const activeTokens = useAllTokens()\n return useMemo(() => {\n if (!search || search.trim().length === 0) return []\n const filterToken = createFilterToken(search, (address) => Boolean(isAddress(address)))\n const exactMatches: WrappedTokenInfo[] = []\n const rest: WrappedTokenInfo[] = []\n const addressSet: { [address: string]: true } = {}\n const trimmedSearchQuery = search.toLowerCase().trim()\n for (const url of inactiveUrls) {\n const list = lists[url]?.current\n // eslint-disable-next-line no-continue\n if (!list) continue\n for (const tokenInfo of list.tokens) {\n if (\n tokenInfo.chainId === chainId &&\n !(tokenInfo.address in activeTokens) &&\n !addressSet[tokenInfo.address] &&\n filterToken(tokenInfo)\n ) {\n const wrapped: WrappedTokenInfo = new WrappedTokenInfo({\n ...tokenInfo,\n address: safeGetAddress(tokenInfo.address) || tokenInfo.address,\n })\n addressSet[wrapped.address] = true\n if (\n tokenInfo.name?.toLowerCase() === trimmedSearchQuery ||\n tokenInfo.symbol?.toLowerCase() === trimmedSearchQuery\n ) {\n exactMatches.push(wrapped)\n } else {\n rest.push(wrapped)\n }\n }\n }\n }\n return [...exactMatches, ...rest].slice(0, minResults)\n }, [activeTokens, chainId, inactiveUrls, lists, minResults, search])\n}\n\nfunction CurrencySearch({\n selectedCurrency,\n onCurrencySelect,\n otherSelectedCurrency,\n showCommonBases,\n showImportView,\n setImportToken,\n height,\n tokensToShow,\n}: CurrencySearchProps) {\n const { t } = useTranslation()\n const { chainId } = useActiveChainId()\n\n // refs for fixed size lists\n const fixedList = useRef()\n\n const [searchQuery, setSearchQuery] = useState('')\n const debouncedQuery = useDebounce(searchQuery, 200)\n\n const [invertSearchOrder] = useState(false)\n\n const allTokens = useAllTokens()\n\n // if they input an address, use it\n const searchToken = useToken(debouncedQuery)\n const searchTokenIsAdded = useIsUserAddedToken(searchToken)\n\n const { isMobile } = useMatchBreakpoints()\n const [audioPlay] = useAudioModeManager()\n\n const native = useNativeCurrency()\n\n const showETH: boolean = useMemo(() => {\n if (tokensToShow) return false\n const s = debouncedQuery.toLowerCase().trim()\n return native && native.symbol?.toLowerCase?.()?.indexOf(s) !== -1\n }, [debouncedQuery, native, tokensToShow])\n\n const filteredTokens: Token[] = useMemo(() => {\n const filterToken = createFilterToken(debouncedQuery, (address) => Boolean(isAddress(address)))\n return Object.values(tokensToShow || allTokens).filter(filterToken)\n }, [tokensToShow, allTokens, debouncedQuery])\n\n const filteredQueryTokens = useSortedTokensByQuery(filteredTokens, debouncedQuery)\n\n const tokenComparator = useTokenComparator(invertSearchOrder)\n\n const filteredSortedTokens: Token[] = useMemo(() => {\n return [...filteredQueryTokens].sort(tokenComparator)\n }, [filteredQueryTokens, tokenComparator])\n\n const handleCurrencySelect = useCallback(\n (currency: Currency) => {\n onCurrencySelect(currency)\n if (audioPlay) {\n getSwapSound().play()\n }\n },\n [audioPlay, onCurrencySelect],\n )\n\n // manage focus on modal show\n const inputRef = useRef()\n\n useEffect(() => {\n if (!isMobile) inputRef.current?.focus()\n }, [isMobile])\n\n const handleInput = useCallback((event) => {\n const input = event.target.value\n const checksummedInput = safeGetAddress(input)\n setSearchQuery(checksummedInput || input)\n fixedList.current?.scrollTo(0)\n }, [])\n\n const handleEnter = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n const s = debouncedQuery.toLowerCase().trim()\n if (s === native.symbol.toLowerCase().trim()) {\n handleCurrencySelect(native)\n } else if (filteredSortedTokens.length > 0) {\n if (\n filteredSortedTokens[0].symbol?.toLowerCase() === debouncedQuery.trim().toLowerCase() ||\n filteredSortedTokens.length === 1\n ) {\n handleCurrencySelect(filteredSortedTokens[0])\n }\n }\n }\n },\n [debouncedQuery, filteredSortedTokens, handleCurrencySelect, native],\n )\n\n // if no results on main list, show option to expand into inactive\n const filteredInactiveTokens = useSearchInactiveTokenLists(debouncedQuery)\n\n const hasFilteredInactiveTokens = Boolean(filteredInactiveTokens?.length)\n\n const getCurrencyListRows = useCallback(() => {\n if (searchToken && !searchTokenIsAdded && !hasFilteredInactiveTokens) {\n return (\n \n \n \n )\n }\n\n return Boolean(filteredSortedTokens?.length) || hasFilteredInactiveTokens ? (\n \n \n \n ) : (\n \n \n {t('No results found.')}\n \n \n )\n }, [\n filteredInactiveTokens,\n filteredSortedTokens,\n handleCurrencySelect,\n hasFilteredInactiveTokens,\n otherSelectedCurrency,\n searchToken,\n searchTokenIsAdded,\n selectedCurrency,\n setImportToken,\n showETH,\n showImportView,\n t,\n showCommonBases,\n isMobile,\n height,\n ])\n\n return (\n <>\n \n \n }\n onChange={handleInput}\n onKeyDown={handleEnter}\n />\n \n {showCommonBases && (\n \n )}\n \n {getCurrencyListRows()}\n \n )\n}\n\nexport default CurrencySearch\n","import { useMemo } from 'react'\nimport { Token } from '@pulsex/sdk'\nimport { safeGetAddress } from 'utils'\n\nexport function filterTokens(tokens: Token[], search: string): Token[] {\n if (search.length === 0) return tokens\n\n const searchingAddress = safeGetAddress(search)\n\n if (searchingAddress) {\n return tokens.filter((token) => token.address === searchingAddress)\n }\n\n const lowerSearchParts = search\n .toLowerCase()\n .split(/\\s+/)\n .filter((s) => s.length > 0)\n\n if (lowerSearchParts.length === 0) {\n return tokens\n }\n\n const matchesSearch = (s: string): boolean => {\n const sParts = s\n .toLowerCase()\n .split(/\\s+/)\n .filter((s_) => s_.length > 0)\n\n return lowerSearchParts.every((p) => p.length === 0 || sParts.some((sp) => sp.startsWith(p) || sp.endsWith(p)))\n }\n\n return tokens.filter((token) => {\n const { symbol, name } = token\n return (symbol && matchesSearch(symbol)) || (name && matchesSearch(name))\n })\n}\n\nexport function useSortedTokensByQuery(tokens: Token[] | undefined, searchQuery: string): Token[] {\n return useMemo(() => {\n if (!tokens) {\n return []\n }\n\n const symbolMatch = searchQuery\n .toLowerCase()\n .split(/\\s+/)\n .filter((s) => s.length > 0)\n\n if (symbolMatch.length > 1) {\n return tokens\n }\n\n const exactMatches: Token[] = []\n const symbolSubstrings: Token[] = []\n const rest: Token[] = []\n\n // sort tokens by exact match -> substring on symbol match -> rest\n tokens.forEach((token) => {\n if (token.symbol?.toLowerCase() === symbolMatch[0]) {\n return exactMatches.push(token)\n }\n if (token.symbol?.toLowerCase().startsWith(searchQuery.toLowerCase().trim())) {\n return symbolSubstrings.push(token)\n }\n return rest.push(token)\n })\n\n return [...exactMatches, ...symbolSubstrings, ...rest]\n }, [tokens, searchQuery])\n}\n","import { useState } from 'react'\nimport { Token, Currency } from '@pulsex/sdk'\nimport {\n Button,\n Checkbox,\n ErrorIcon,\n Flex,\n Grid,\n Link,\n Message,\n Tag,\n Text,\n} from '@pulsex/uikit'\nimport { AutoColumn } from 'components/Layout/Column'\nimport { useAddUserToken } from 'state/user/hooks'\nimport { getBlockExplorerLink, getBlockExploreName } from 'utils'\nimport truncateHash from 'utils/truncateHash'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport { useCombinedInactiveList } from 'state/lists/hooks'\nimport { ListLogo } from 'components/Logo'\nimport { useTranslation } from '@pulsex/localization'\n\ninterface ImportProps {\n tokens: Token[]\n handleCurrencySelect?: (currency: Currency) => void\n}\n\nfunction ImportToken({ tokens, handleCurrencySelect }: ImportProps) {\n const { chainId } = useActiveWeb3React()\n\n const { t } = useTranslation()\n\n const [confirmed, setConfirmed] = useState(false)\n\n const addToken = useAddUserToken()\n\n // use for showing import source on inactive tokens\n const inactiveTokenList = useCombinedInactiveList()\n\n return (\n \n \n \n {t(\n 'Anyone can create a PRC20 token on PULSECHAIN with any name, including creating fake versions of existing tokens and tokens that claim to represent projects that do not have a token.',\n )}\n
    \n
    \n {t('If you purchase an arbitrary token, you may be unable to sell it back.')}\n
    \n
    \n\n {tokens.map((token) => {\n const list = chainId && inactiveTokenList?.[chainId]?.[token.address]?.list\n const address = token.address ? `${truncateHash(token.address)}` : null\n return (\n \n {list !== undefined ? (\n }\n >\n {t('via')} {list.name}\n \n ) : (\n }>\n {t('Unknown Source')}\n \n )}\n \n {token.name}\n ({token.symbol})\n \n {chainId && (\n \n {address}\n \n ({t(`View on ${getBlockExploreName(369)}`)})\n \n \n )}\n \n )\n })}\n\n \n setConfirmed(!confirmed)}>\n setConfirmed(!confirmed)}\n />\n \n {t('I understand')}\n \n \n {\n tokens.forEach((token) => addToken(token))\n if (handleCurrencySelect) {\n handleCurrencySelect(tokens[0])\n }\n }}\n className=\".token-dismiss-button\"\n >\n {t('Import')}\n \n \n
    \n )\n}\n\nexport default ImportToken\n","export enum CurrencyModalView {\n search,\n manage,\n importToken,\n importList,\n}\n\nexport default CurrencyModalView\n","import { useTranslation } from '@pulsex/localization'\nimport { TokenList, Version } from '@pulsex/token-lists'\nimport {\n acceptListUpdate,\n disableList,\n enableList,\n removeList,\n useFetchListCallback,\n} from '@pulsex/token-lists/react'\nimport {\n Button,\n CheckmarkIcon,\n CogIcon,\n Input,\n LinkExternal,\n Text,\n Toggle,\n useTooltip,\n} from '@pulsex/uikit'\n\nimport uriToHttp from '@pulsex/utils/uriToHttp'\nimport Card from 'components/Card'\nimport { MULTI_CHAIN_LIST_URLS, UNSUPPORTED_LIST_URLS } from 'config/constants/lists'\nimport { useAtomValue } from 'jotai'\nimport { memo, useCallback, useEffect, useMemo, useState } from 'react'\nimport { useListState } from 'state/lists/lists'\nimport { styled } from 'styled-components'\n\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport { AutoColumn, Column } from '../Layout/Column'\nimport { ListLogo } from '../Logo'\nimport { selectorByUrlsAtom, useActiveListUrls, useAllLists, useIsListActive } from '../../state/lists/hooks'\n\nimport Row, { RowBetween, RowFixed } from '../Layout/Row'\nimport { CurrencyModalView } from './types'\n\nfunction listVersionLabel(version: Version): string {\n return `v${version.major}.${version.minor}.${version.patch}`\n}\n\nconst Wrapper = styled(Column)`\n width: 100%;\n height: 100%;\n`\n\nconst RowWrapper = styled(Row)<{ active: boolean; hasActiveTokens: boolean }>`\n background-color: ${({ active, theme }) => (active ? `${theme.colors.backgroundAlt2}` : 'transparent')};\n border: solid 1px;\n border-color: ${({ active, theme }) => (active ? theme.colors.success : theme.colors.tertiary)};\n transition: 200ms;\n align-items: center;\n padding: 1rem;\n border-radius: 10px;\n opacity: ${({ hasActiveTokens }) => (hasActiveTokens ? 1 : 0.4)};\n`\n\nfunction listUrlRowHTMLId(listUrl: string) {\n return `list-row-${listUrl.replace(/\\./g, '-')}`\n}\n\nconst ListRow = memo(function ListRow({ listUrl }: { listUrl: string }) {\n const { chainId } = useActiveChainId()\n const { t } = useTranslation()\n const isActive = useIsListActive(listUrl)\n\n const listsByUrl = useAtomValue(selectorByUrlsAtom)\n const [, dispatch] = useListState()\n const { current: list, pendingUpdate: pending } = listsByUrl[listUrl]\n\n const activeTokensOnThisChain = useMemo(() => {\n if (!list || !chainId) {\n return 0\n }\n return list.tokens.reduce((acc, cur) => (cur.chainId === chainId ? acc + 1 : acc), 0)\n }, [chainId, list])\n\n const handleAcceptListUpdate = useCallback(() => {\n if (!pending) return\n dispatch(acceptListUpdate(listUrl))\n }, [dispatch, listUrl, pending])\n\n const handleRemoveList = useCallback(() => {\n // eslint-disable-next-line no-alert\n if (window.confirm('Please confirm you would like to remove this list')) {\n dispatch(removeList(listUrl))\n }\n }, [dispatch, listUrl])\n\n const handleEnableList = useCallback(() => {\n dispatch(enableList(listUrl))\n }, [dispatch, listUrl])\n\n const handleDisableList = useCallback(() => {\n dispatch(disableList(listUrl))\n }, [dispatch, listUrl])\n\n const { targetRef, tooltip, tooltipVisible } = useTooltip(\n
    \n {list && listVersionLabel(list.version)}\n \n {t('See')}\n \n \n {pending && (\n \n )}\n
    ,\n { placement: 'right', trigger: 'click', isInPortal: false },\n )\n\n if (!list) return null\n\n return (\n 0}\n key={listUrl}\n id={listUrlRowHTMLId(listUrl)}\n >\n {tooltipVisible && tooltip}\n {list.logoURI ? (\n \n ) : (\n
    \n )}\n \n \n {list.name}\n \n \n \n {list.tokens.length} {t('Tokens')}\n \n \n \n \n \n \n {\n if (isActive) {\n handleDisableList()\n } else {\n handleEnableList()\n }\n }}\n />\n \n )\n})\n\nconst ListContainer = styled.div`\n padding: 1rem 0;\n height: 100%;\n overflow: auto;\n`\n\nfunction ManageLists({\n setModalView,\n setImportList,\n setListUrl,\n}: {\n setModalView: (view: CurrencyModalView) => void\n setImportList: (list: TokenList) => void\n setListUrl: (url: string) => void\n}) {\n const [listUrlInput, setListUrlInput] = useState('')\n\n const { chainId } = useActiveChainId()\n\n const { t } = useTranslation()\n const [, dispatch] = useListState()\n\n const lists = useAllLists()\n\n // sort by active but only if not visible\n const activeListUrls = useActiveListUrls()\n const [activeCopy, setActiveCopy] = useState()\n useEffect(() => {\n if (!activeCopy && activeListUrls) {\n setActiveCopy(activeListUrls)\n }\n }, [activeCopy, activeListUrls])\n\n const handleInput = useCallback((e) => {\n setListUrlInput(e.target.value)\n }, [])\n\n const fetchList = useFetchListCallback(dispatch)\n\n const validUrl: boolean = useMemo(() => {\n return uriToHttp(listUrlInput).length > 0\n }, [listUrlInput])\n\n const sortedLists = useMemo(() => {\n const listUrls = Object.keys(lists)\n return listUrls\n .filter((listUrl) => {\n // only show loaded lists, hide unsupported lists\n const isValid = Boolean(lists[listUrl].current) && !UNSUPPORTED_LIST_URLS.includes(listUrl)\n\n if (isValid) {\n return MULTI_CHAIN_LIST_URLS[chainId]?.includes(listUrl)\n }\n\n return false\n })\n .sort((u1, u2) => {\n const { current: l1 } = lists[u1]\n const { current: l2 } = lists[u2]\n\n // first filter on active lists\n if (activeCopy?.includes(u1) && !activeCopy?.includes(u2)) {\n return -1\n }\n if (!activeCopy?.includes(u1) && activeCopy?.includes(u2)) {\n return 1\n }\n\n if (l1 && l2) {\n const keyword = 'pulsex'\n if (!l1.name.toLowerCase().includes(keyword) && l2.name.toLowerCase().includes(keyword)) {\n return 1\n }\n\n return l1.name.toLowerCase() < l2.name.toLowerCase()\n ? -1\n : l1.name.toLowerCase() === l2.name.toLowerCase()\n ? 0\n : 1\n }\n if (l1) return -1\n if (l2) return 1\n return 0\n })\n }, [lists, chainId, activeCopy])\n\n // temporary fetched list for import flow\n const [tempList, setTempList] = useState()\n const [addError, setAddError] = useState()\n\n useEffect(() => {\n // if valid url, fetch details for card\n if (validUrl) {\n fetchList(listUrlInput, false)\n .then((list) => setTempList(list))\n .catch(() => setAddError('Error importing list'))\n } else {\n setTempList(undefined)\n if (listUrlInput !== '') {\n setAddError('Enter valid list location')\n }\n }\n\n // reset error\n if (listUrlInput === '') {\n setAddError(undefined)\n }\n }, [fetchList, listUrlInput, validUrl])\n\n // check if list is already imported\n const isImported = Object.keys(lists).includes(listUrlInput)\n\n // set list values and have parent modal switch to import list view\n const handleImport = useCallback(() => {\n if (!tempList) return\n setImportList(tempList)\n setModalView(CurrencyModalView.importList)\n setListUrl(listUrlInput)\n }, [listUrlInput, setImportList, setListUrl, setModalView, tempList])\n\n return (\n \n \n \n \n \n {addError ? (\n \n {addError}\n \n ) : null}\n \n {tempList && (\n \n \n \n \n {tempList.logoURI && }\n \n {tempList.name}\n \n {tempList.tokens.length} {t('Tokens')}\n \n \n \n {isImported ? (\n \n \n {t('Loaded')}\n \n ) : (\n \n )}\n \n \n \n )}\n \n \n {sortedLists.map((listUrl) => (\n \n ))}\n \n \n \n )\n}\n\nexport default ManageLists\n","import { useRef, RefObject, useCallback, useState, useMemo } from 'react'\nimport { Token } from '@pulsex/sdk'\nimport { Text, Button, CloseIcon, IconButton, LinkExternal, Input, Link } from '@pulsex/uikit'\nimport styled from 'styled-components'\nimport Row, { RowBetween, RowFixed } from 'components/Layout/Row'\nimport { useToken } from 'hooks/Tokens'\nimport { useRemoveUserAddedToken } from 'state/user/hooks'\nimport useUserAddedTokens from 'state/user/hooks/useUserAddedTokens'\nimport { CurrencyLogo } from 'components/Logo'\nimport { getBlockExplorerLink, safeGetAddress } from 'utils'\nimport { isAddress } from 'viem'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport { useTranslation } from '@pulsex/localization'\nimport { AutoColumn, Column } from '../Layout/Column'\nimport ImportRow from './ImportRow'\nimport { CurrencyModalView } from './types'\n\nconst Wrapper = styled.div`\n width: 100%;\n height: calc(100% - 60px);\n position: relative;\n padding-bottom: 60px;\n`\n\nconst Footer = styled.div`\n position: absolute;\n bottom: 0;\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n`\n\nexport default function ManageTokens({\n setModalView,\n setImportToken,\n}: {\n setModalView: (view: CurrencyModalView) => void\n setImportToken: (token: Token) => void\n}) {\n const { chainId } = useActiveWeb3React()\n\n const { t } = useTranslation()\n\n const [searchQuery, setSearchQuery] = useState('')\n\n // manage focus on modal show\n const inputRef = useRef()\n const handleInput = useCallback((event) => {\n const input = event.target.value\n const checksummedInput = safeGetAddress(input)\n setSearchQuery(checksummedInput || input)\n }, [])\n\n // if they input an address, use it\n const searchToken = useToken(searchQuery)\n\n // all tokens for local list\n const userAddedTokens: Token[] = useUserAddedTokens()\n const removeToken = useRemoveUserAddedToken()\n\n const handleRemoveAll = useCallback(() => {\n if (chainId && userAddedTokens) {\n userAddedTokens.forEach((token) => {\n return removeToken(chainId, token.address)\n })\n }\n }, [removeToken, userAddedTokens, chainId])\n\n const tokenList = useMemo(() => {\n return (\n chainId &&\n userAddedTokens.map((token) => (\n \n \n \n \n {token.symbol}\n \n \n \n removeToken(chainId, token.address)}>\n \n \n \n \n \n ))\n )\n }, [userAddedTokens, chainId, removeToken])\n\n const isAddressValid = searchQuery === '' || isAddress(searchQuery)\n\n return (\n \n \n \n \n }\n onChange={handleInput}\n isWarning={!isAddressValid}\n />\n \n {!isAddressValid && {t('Enter valid token address')}}\n {searchToken && (\n setModalView(CurrencyModalView.importToken)}\n setImportToken={setImportToken}\n style={{ height: 'fit-content' }}\n />\n )}\n \n {tokenList}\n
    \n \n {userAddedTokens?.length} {userAddedTokens.length === 1 ? t('Custom Token') : t('Custom Tokens')}\n \n {userAddedTokens.length > 0 && (\n \n )}\n
    \n
    \n
    \n )\n}\n","import { useState } from 'react'\nimport { Token } from '@pulsex/sdk'\nimport { ButtonMenu, ButtonMenuItem, ModalBody } from '@pulsex/uikit'\nimport { styled } from 'styled-components'\nimport { TokenList } from '@pulsex/token-lists'\nimport { useTranslation } from '@pulsex/localization'\nimport ManageLists from './ManageLists'\nimport ManageTokens from './ManageTokens'\nimport { CurrencyModalView } from './types'\n\nconst StyledButtonMenu = styled(ButtonMenu)`\n width: 100%;\n`\n\nexport default function Manage({\n setModalView,\n setImportList,\n setImportToken,\n setListUrl,\n}: {\n setModalView: (view: CurrencyModalView) => void\n setImportToken: (token: Token) => void\n setImportList: (list: TokenList) => void\n setListUrl: (url: string) => void\n}) {\n const [showLists, setShowLists] = useState(true)\n\n const { t } = useTranslation()\n\n return (\n \n setShowLists((prev) => !prev)}\n scale=\"sm\"\n variant=\"subtle\"\n mb=\"32px\"\n >\n {t('Lists')}\n {t('Tokens')}\n \n {showLists ? (\n \n ) : (\n \n )}\n \n )\n}\n","import { useTranslation } from '@pulsex/localization'\nimport { useTheme } from \"@pulsex/hooks\";\nimport { useState } from 'react'\nimport { styled } from 'styled-components'\nimport { AutoColumn, Button, Checkbox, Flex, Link, Message, Text, RowBetween, RowFixed } from '@pulsex/uikit'\nimport Card from 'components/Card'\nimport { ListLogo } from 'components/Logo'\n\ninterface ImportProps {\n listURL: string;\n listLogoURI: string | undefined;\n listName: string;\n listTokenLength: number;\n onAddList: () => void;\n addError: string | null;\n}\n\nconst Wrapper = styled.div`\n position: relative;\n width: 100%;\n align-items: center;\n`\n\nconst TextDot = styled.div`\n height: 3px;\n width: 3px;\n background-color: ${({ theme }) => theme.colors.text};\n border-radius: 50%;\n`\n\nexport function ImportList({ listURL, listLogoURI, listName, listTokenLength, onAddList, addError }: ImportProps) {\n const { theme } = useTheme()\n\n const { t } = useTranslation()\n\n // user must accept\n const [confirmed, setConfirmed] = useState(false)\n\n return (\n \n \n \n \n \n \n {listLogoURI && }\n \n \n \n {listName}\n \n \n \n {listTokenLength} tokens\n \n \n \n {listURL}\n \n \n \n \n \n\n \n \n \n {t(\"Import at your own risk\")}\n \n \n {t(\n \"By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.\"\n )}\n \n \n {t(\"If you purchase a token from this list, you may not be able to sell it back.\")}\n \n \n setConfirmed(!confirmed)}\n scale=\"sm\"\n />\n \n {t(\"I understand\")}\n \n \n \n \n\n \n {addError ? (\n \n {addError}\n \n ) : null}\n \n \n \n )\n}\n\n","import { useCallback, useState, useRef } from 'react'\nimport { Currency, Token } from '@pulsex/sdk'\nimport {\n ModalContainer,\n ModalHeader,\n ModalTitle,\n ModalBackButton,\n ModalCloseButton,\n ModalBody,\n InjectedModalProps,\n Heading,\n Button,\n useMatchBreakpoints,\n MODAL_SWIPE_TO_CLOSE_VELOCITY,\n} from '@pulsex/uikit'\nimport styled from 'styled-components'\nimport { useListState } from 'state/lists/lists'\nimport { usePreviousValue } from '@pulsex/hooks'\nimport { TokenList } from '@pulsex/token-lists'\nimport { useTranslation } from '@pulsex/localization'\nimport { enableList, removeList, useFetchListCallback } from '@pulsex/token-lists/react'\nimport { useAllLists } from 'state/lists/hooks'\nimport CurrencySearch from './CurrencySearch'\nimport ImportToken from './ImportToken'\nimport Manage from './Manage'\nimport { ImportList } from './ImportList'\nimport { CurrencyModalView } from './types'\n\nconst Footer = styled.div`\n width: 100%;\n background-color: ${({ theme }) => theme.colors.backgroundAlt};\n text-align: center;\n`\n\nconst StyledModalContainer = styled(ModalContainer)`\n width: 100%;\n min-width: 320px;\n max-width: 420px !important;\n min-height: calc(var(--vh, 1vh) * 90);\n ${({ theme }) => theme.mediaQueries.md} {\n min-height: auto;\n }\n`\n\nconst StyledModalBody = styled(ModalBody)`\n padding: 24px;\n overflow-y: auto;\n -ms-overflow-style: none;\n scrollbar-width: none;\n &::-webkit-scrollbar {\n display: none;\n }\n`\n\ninterface CurrencySearchModalProps extends InjectedModalProps {\n selectedCurrency?: Currency | null\n onCurrencySelect: (currency: Currency) => void\n otherSelectedCurrency?: Currency | null\n showCommonBases?: boolean\n}\n\nexport default function CurrencySearchModal({\n onDismiss = () => null,\n onCurrencySelect,\n selectedCurrency,\n otherSelectedCurrency,\n showCommonBases = true,\n}: CurrencySearchModalProps) {\n const [modalView, setModalView] = useState(CurrencyModalView.search)\n\n const handleCurrencySelect = useCallback(\n (currency: Currency) => {\n onDismiss()\n onCurrencySelect(currency)\n },\n [onDismiss, onCurrencySelect],\n )\n\n // for token import view\n const prevView = usePreviousValue(modalView)\n\n // used for import token flow\n const [importToken, setImportToken] = useState()\n\n // used for import list\n const [importList, setImportList] = useState()\n const [listURL, setListUrl] = useState()\n\n const { t } = useTranslation()\n\n const [, dispatch] = useListState()\n const lists = useAllLists()\n const adding = Boolean(lists[listURL]?.loadingRequestId)\n\n const fetchList = useFetchListCallback(dispatch)\n\n const [addError, setAddError] = useState(null)\n\n const handleAddList = useCallback(() => {\n if (adding) return\n setAddError(null)\n fetchList(listURL)\n .then(() => {\n dispatch(enableList(listURL))\n setModalView(CurrencyModalView.manage)\n })\n .catch((error) => {\n setAddError(error.message)\n dispatch(removeList(listURL))\n })\n }, [adding, dispatch, fetchList, listURL])\n\n const config = {\n [CurrencyModalView.search]: { title: t('Select a Token'), onBack: undefined },\n [CurrencyModalView.manage]: { title: t('Manage'), onBack: () => setModalView(CurrencyModalView.search) },\n [CurrencyModalView.importToken]: {\n title: t('Import Tokens'),\n onBack: () =>\n setModalView(prevView && prevView !== CurrencyModalView.importToken ? prevView : CurrencyModalView.search),\n },\n [CurrencyModalView.importList]: { title: t('Import List'), onBack: () => setModalView(CurrencyModalView.search) },\n }\n const { isMobile } = useMatchBreakpoints()\n const wrapperRef = useRef(null)\n\n return (\n {\n if (wrapperRef.current) wrapperRef.current.style.animation = 'none'\n }}\n // @ts-ignore\n onDragEnd={(e, info) => {\n if (info.velocity.y > MODAL_SWIPE_TO_CLOSE_VELOCITY && onDismiss) onDismiss()\n }}\n ref={wrapperRef}\n >\n \n \n {config[modalView].onBack && }\n {config[modalView].title}\n \n \n \n \n {modalView === CurrencyModalView.search ? (\n setModalView(CurrencyModalView.importToken)}\n setImportToken={setImportToken}\n />\n ) : modalView === CurrencyModalView.importToken && importToken ? (\n \n ) : modalView === CurrencyModalView.importList && importList && listURL ? (\n \n ) : modalView === CurrencyModalView.manage ? (\n \n ) : (\n ''\n )}\n {modalView === CurrencyModalView.search && (\n
    \n setModalView(CurrencyModalView.manage)}\n className=\"list-token-manage-button\"\n >\n {t('Manage Tokens')}\n \n
    \n )}\n
    \n \n )\n}\n","import { memo, useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { NumericFormat } from 'react-number-format'\n\nconst StyledInput = styled(NumericFormat)<{ error?: boolean; fontSize?: string; align?: string }>`\n color: ${({ error, theme }) => (error ? theme.colors.failure : theme.colors.text)};\n width: 0;\n position: relative;\n font-weight: 500;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: transparent;\n font-size: 24px;\n text-align: ${({ align }) => align ?? 'left'};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0px;\n -webkit-appearance: textfield;\n\n &::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n\n &[type='number'] {\n -moz-appearance: textfield;\n }\n\n &::-webkit-outer-spin-button,\n ::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n\n &::placeholder {\n color: ${({ theme }) => theme.colors.textSubtle};\n }\n`\n\nexport const Input = memo(function InnerInput({\n value,\n onUserInput,\n placeholder,\n}: {\n value: string | number\n onUserInput: (input: string) => void\n error?: boolean\n fontSize?: string\n align?: 'right' | 'left'\n} & Omit, 'ref' | 'onChange' | 'as'>) {\n\n // Using this state variable to catch global state value updates\n // and forse re-render NumericFormat component\n const [displayValue, setDisplayValue] = useState('')\n\n const handleInput = (val: string) => {\n onUserInput(val)\n }\n\n useEffect(() => {\n setDisplayValue(value.toString())\n }, [value])\n\n return (\n handleInput(event.target.value)}\n />\n )\n})\n\nexport default Input\n","export const BAD_SRCS: { [imageSrc: string]: true } = {}\n","// Set of helper functions to facilitate wallet setup\nimport { Address } from 'wagmi'\nimport { BAD_SRCS } from '../components/Logo/constants'\n\n/**\n * Prompt the user to add a custom token to metamask\n * @param tokenAddress\n * @param tokenSymbol\n * @param tokenDecimals\n * @returns {boolean} true if the token has been added, false otherwise\n */\nexport const registerToken = async (\n tokenAddress: string,\n tokenSymbol: string,\n tokenDecimals: number,\n tokenLogo?: string,\n) => {\n // better leave this undefined for default image instead of broken image url\n const image = tokenLogo ? (BAD_SRCS[tokenLogo] ? undefined : tokenLogo) : undefined\n const tokenAdded = await window.ethereum.request({\n method: 'wallet_watchAsset',\n params: {\n type: 'ERC20',\n options: {\n address: tokenAddress as Address,\n symbol: tokenSymbol,\n decimals: tokenDecimals,\n image,\n },\n },\n })\n\n return tokenAdded\n}\n\nexport const canRegisterToken = () =>\n typeof window !== 'undefined' &&\n // @ts-ignore\n !window?.ethereum?.isSafePal &&\n (window?.ethereum?.isMetaMask ||\n window?.ethereum?.isTrust ||\n window?.ethereum?.isCoinbaseWallet ||\n window?.ethereum?.isTokenPocket)\n","import { useTranslation } from '@pulsex/localization'\nimport {\n Button,\n ButtonProps,\n MetamaskIcon,\n OperaIcon,\n TokenPocketIcon,\n TrustWalletIcon,\n} from '@pulsex/uikit'\nimport { useAccount } from 'wagmi'\nimport { canRegisterToken } from '../../utils/wallet'\nimport { BAD_SRCS } from '../Logo/constants'\n\nexport enum AddToWalletTextOptions {\n NO_TEXT,\n TEXT,\n TEXT_WITH_ASSET,\n}\n\nexport interface AddToWalletButtonProps {\n tokenAddress: string\n tokenSymbol: string\n tokenDecimals: number\n tokenLogo: string\n textOptions?: AddToWalletTextOptions\n marginTextBetweenLogo?: string\n}\n\nconst Icons = {\n // TODO: Brave\n Opera: OperaIcon,\n TokenPocket: TokenPocketIcon,\n 'Trust Wallet': TrustWalletIcon,\n MetaMask: MetamaskIcon,\n}\n\nconst getWalletText = (textOptions: AddToWalletTextOptions, tokenSymbol: string, t: any) => {\n return (\n textOptions !== AddToWalletTextOptions.NO_TEXT &&\n (textOptions === AddToWalletTextOptions.TEXT\n ? t('Add to Wallet')\n : t('Add %asset% to Wallet', { asset: tokenSymbol }))\n )\n}\n\nconst getWalletIcon = (marginTextBetweenLogo: string, name?: string) => {\n const iconProps = {\n width: '16px',\n ...(marginTextBetweenLogo && { ml: marginTextBetweenLogo }),\n }\n if (name && Icons[name]) {\n const Icon = Icons[name]\n return \n }\n if (window?.ethereum?.isTrust) {\n return \n }\n if (window?.ethereum?.isTokenPocket) {\n return \n }\n if (window?.ethereum?.isMetaMask) {\n return \n }\n return \n}\n\nconst AddToWalletButton: React.FC = ({\n tokenAddress,\n tokenSymbol,\n tokenDecimals,\n tokenLogo,\n textOptions = AddToWalletTextOptions.NO_TEXT,\n marginTextBetweenLogo = '0px',\n ...props\n}) => {\n const { t } = useTranslation()\n const { connector, isConnected } = useAccount()\n const isCanRegisterToken = canRegisterToken()\n\n if (connector && connector.name === 'Binance') return null\n if (!(connector && connector.watchAsset && isConnected)) return null\n if (!isCanRegisterToken) return null\n\n return (\n {\n const image = tokenLogo ? (BAD_SRCS[tokenLogo] ? undefined : tokenLogo) : undefined\n connector.watchAsset?.({\n address: tokenAddress,\n symbol: tokenSymbol,\n image,\n // @ts-ignore\n decimals: tokenDecimals,\n })\n }}\n >\n {getWalletText(textOptions, tokenSymbol, t)}\n {getWalletIcon(marginTextBetweenLogo, connector?.name)}\n \n )\n}\n\nexport default AddToWalletButton\n","import BigNumber from 'bignumber.js'\nimport { Currency, PairV1, PairV2 } from '@pulsex/sdk'\nimport {\n Button,\n ChevronDownIcon,\n CopyButton,\n Text,\n useModal,\n Flex,\n Box\n} from '@pulsex/uikit'\nimport { styled } from 'styled-components'\nimport { safeGetAddress } from 'utils'\nimport { useTranslation } from '@pulsex/localization'\nimport { WrappedTokenInfo } from '@pulsex/token-lists'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport useUSDCPrice from 'hooks/useUSDCPrice'\nimport { useCurrencyBalance } from '../../state/wallet/hooks'\nimport CurrencySearchModal from '../SearchModal/CurrencySearchModal'\nimport { CurrencyLogo, DoubleCurrencyLogo } from '../Logo'\nimport NumInput from './NumericalInput'\nimport AddToWalletButton from '../AddToWallet/AddToWalletButton'\n\nconst InputRow = styled.div<{ selected: boolean }>`\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 0.5rem 0.75rem 0.5rem;\n`\nconst CurrencySelectButton = styled(Button).attrs({ variant: 'text', scale: 'sm' })`\n padding: 0 0;\n`\nconst LabelRow = styled.div`\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: space-between;\n color: ${({ theme }) => theme.colors.text};\n font-size: 0.75rem;\n line-height: 1rem;\n padding: 0.75rem 0.5rem 0 0.5rem;\n`\nconst InputPanel = styled.div`\n display: flex;\n flex-flow: column nowrap;\n position: relative;\n border-radius: '10px';\n background-color: ${({ theme }) => theme.colors.backgroundAlt};\n z-index: 1;\n`\nconst Container = styled.div`\n border-radius: 10px;\n background-color: ${({ theme }) => theme.colors.input};\n box-shadow: ${({ theme }) => theme.shadows.inset};\n`\n\ninterface CurrencyInputPanelProps {\n value: string\n onUserInput: (value: string) => void\n onMax?: () => void\n showMaxButton: boolean\n label?: string\n onCurrencySelect: (currency: Currency) => void\n currency?: Currency | null\n disableCurrencySelect?: boolean\n hideBalance?: boolean\n pair?: PairV1 | PairV2 | null\n otherCurrency?: Currency | null\n id: string\n showCommonBases?: boolean\n}\nexport default function CurrencyInputPanel({\n value,\n onUserInput,\n onMax,\n onCurrencySelect,\n currency,\n disableCurrencySelect = false,\n hideBalance = false,\n pair = null, // used for double token logo\n otherCurrency,\n id,\n showCommonBases,\n}: CurrencyInputPanelProps) {\n const { account } = useActiveWeb3React()\n const selectedCurrencyBalance = useCurrencyBalance(account ?? undefined, currency ?? undefined)\n const { t } = useTranslation()\n\n const token = pair ? pair.liquidityToken : currency?.isToken ? currency : null\n const tokenAddress = token ? safeGetAddress(token.address) : null\n\n const price = new BigNumber(useUSDCPrice(currency)?.toFixed(18))\n const inputPrice = price.multipliedBy(value.replace(/,/g, '')).toString()\n\n const [onPresentCurrencyModal] = useModal(\n ,\n )\n return (\n \n \n \n \n \n\n {\n if (!disableCurrencySelect) {\n onPresentCurrencyModal()\n }\n }}\n >\n {pair ? (\n \n ) : currency ? (\n \n ) : null}\n {pair ? (\n \n {pair?.token0.symbol}:{pair?.token1.symbol}\n \n ) : (\n \n {(currency && currency.symbol && currency.symbol.length > 20\n ? `${currency.symbol.slice(0, 4)}...${currency.symbol.slice(\n currency.symbol.length - 5,\n currency.symbol.length,\n )}`\n : currency?.symbol) || t('Select a currency')}\n \n )}\n {!disableCurrencySelect && }\n \n {token && tokenAddress ? (\n \n \n \n \n ) : null}\n \n \n {currency && value ? (\n \n ${Number(inputPrice).toLocaleString('en-US', { maximumFractionDigits: 9 })}\n \n ) : otherCurrency && value ? (\n \n ${Number(inputPrice).toLocaleString('en-US', { maximumFractionDigits: 9 })}\n \n ) : (\n \n )}\n\n \n {account && (\n \n {!hideBalance && !!currency\n ? t('Balance: %balance%', {\n balance: selectedCurrencyBalance\n ? Number(selectedCurrencyBalance.toFixed()).toLocaleString(undefined, {\n maximumFractionDigits: 3,\n })\n : t('Loading'),\n })\n : ' -'}\n \n )}\n \n \n \n \n \n )\n}\n","import { styled } from 'styled-components'\nimport {\n Flex,\n Text,\n ArrowBackIcon,\n QuestionHelper,\n} from '@pulsex/uikit'\nimport { Link } from 'react-router-dom'\n\ninterface Props {\n title: string\n subtitle?: string\n helper?: string\n backTo?: string\n protocolSelector?: JSX.Element\n}\n\nconst AppHeaderContainer = styled(Flex)`\n align-items: center;\n justify-content: space-between;\n padding: 17px 24px 17px 24px;\n width: 100%;\n border-bottom: 1px solid ${({ theme }) => theme.colors.cardBorder};\n`\n\nconst AppHeader: React.FC> = ({\n title,\n helper,\n backTo,\n protocolSelector\n}) => {\n return (\n \n \n \n {backTo && (\n \n \n \n )}\n \n \n {title}\n \n {helper && }\n \n \n {protocolSelector && {protocolSelector}}\n \n \n )\n}\n\nexport default AppHeader\n","import { styled } from 'styled-components'\nimport { Card } from '@pulsex/uikit'\n\nexport const BodyWrapper = styled(Card)`\n border-radius: 10px;\n max-width: 450px;\n width: 100%;\n z-index: 1;\n`\n\n/**\n * The styled container element that wraps the content of most pages and the tabs.\n */\nexport default function AppBody({ children }: { children: React.ReactNode }) {\n return {children}\n}\n","import { useMemo } from 'react'\nimport { Currency, CurrencyAmount, Token } from '@pulsex/sdk'\nimport { useTokenContract } from './useContract'\nimport { useSingleCallResult } from '../state/multicall/hooks'\n\n// returns undefined if input token is undefined, or fails to get token contract,\n// or contract total supply cannot be fetched\nexport function useTotalSupply(token?: Currency): CurrencyAmount | undefined {\n const contract = useTokenContract(token?.isToken ? token.address : undefined)\n\n const totalSupplyStr: string | undefined = useSingleCallResult({\n contract,\n functionName: 'totalSupply',\n })?.result?.toString()\n\n return useMemo(\n () => (token?.isToken && totalSupplyStr ? CurrencyAmount.fromRawAmount(token, totalSupplyStr) : undefined),\n [token, totalSupplyStr],\n )\n}\n\nexport default useTotalSupply\n","import { Currency } from '@pulsex/sdk'\n\nexport function currencyId(currency: Currency): string {\n if (currency?.isNative) return currency.symbol?.toUpperCase()\n if (currency?.isToken) return currency.address\n throw new Error('invalid currency')\n}\n","import { Currency, CurrencyAmount, PairV1, PairV2, Percent, Price, Token } from '@pulsex/sdk'\nimport { BIG_INT_ZERO } from 'config/constants/exchange'\nimport { useCallback, useMemo } from 'react'\nimport { PairState, usePairBothProtocols } from 'hooks/usePairs'\nimport { useTotalSupply } from 'hooks/useTotalSupply'\nimport { useTranslation } from '@pulsex/localization'\nimport tryParseAmount from '@pulsex/utils/tryParseAmount'\nimport { useAddLiquidityFormDispatch, useAddLiquidityFormState } from 'state/mint/reducer'\nimport { useAccount } from 'wagmi'\nimport { useCurrencyBalances } from '../wallet/hooks'\nimport { Field, typeInput, setProtocol } from './actions'\n\nexport function useMintActionHandlers(noLiquidity: boolean | undefined): {\n onFieldAInput: (typedValue: string) => void\n onFieldBInput: (typedValue: string) => void\n onChangeProtocol: (protocol: string | null) => void\n} {\n const dispatch = useAddLiquidityFormDispatch()\n\n const onFieldAInput = useCallback(\n (typedValue: string) => {\n dispatch(typeInput({ field: Field.CURRENCY_A, typedValue, noLiquidity: noLiquidity === true }))\n },\n [dispatch, noLiquidity],\n )\n const onFieldBInput = useCallback(\n (typedValue: string) => {\n dispatch(typeInput({ field: Field.CURRENCY_B, typedValue, noLiquidity: noLiquidity === true }))\n },\n [dispatch, noLiquidity],\n )\n const onChangeProtocol = useCallback(\n (protocol: string | null) => {\n dispatch(setProtocol({ protocol }))\n },\n [dispatch],\n )\n\n return {\n onFieldAInput,\n onFieldBInput,\n onChangeProtocol,\n }\n}\n\nexport function useDerivedMintInfo(\n currencyA: Currency | undefined,\n currencyB: Currency | undefined,\n): {\n dependentField: Field\n currencies: { [field in Field]?: Currency }\n pair?: PairV1 | PairV2 | null\n pairState: PairState\n currencyBalances: { [field in Field]?: CurrencyAmount }\n parsedAmounts: { [field in Field]?: CurrencyAmount }\n price?: Price\n noLiquidity?: boolean\n liquidityMinted?: CurrencyAmount\n poolTokenPercentage?: Percent\n error?: string\n} {\n const { address: account } = useAccount()\n\n const { t } = useTranslation()\n\n const { independentField, typedValue, otherTypedValue, protocol } = useAddLiquidityFormState()\n\n const dependentField = independentField === Field.CURRENCY_A ? Field.CURRENCY_B : Field.CURRENCY_A\n\n // tokens\n const currencies: { [field in Field]?: Currency } = useMemo(\n () => ({\n [Field.CURRENCY_A]: currencyA ?? undefined,\n [Field.CURRENCY_B]: currencyB ?? undefined,\n }),\n [currencyA, currencyB],\n )\n\n // pair\n const [pairState, pair] = usePairBothProtocols(currencies[Field.CURRENCY_A], currencies[Field.CURRENCY_B], protocol)\n\n const totalSupply = useTotalSupply(pair?.liquidityToken)\n\n const noLiquidity: boolean =\n pairState === PairState.NOT_EXISTS ||\n Boolean(totalSupply && totalSupply.quotient === BIG_INT_ZERO) ||\n Boolean(\n pairState === PairState.EXISTS &&\n pair &&\n pair.reserve0.quotient === BIG_INT_ZERO &&\n pair.reserve1.quotient === BIG_INT_ZERO,\n )\n\n // balances\n const balances = useCurrencyBalances(account ?? undefined, [\n currencies[Field.CURRENCY_A],\n currencies[Field.CURRENCY_B],\n ])\n const currencyBalances: { [field in Field]?: CurrencyAmount } = {\n [Field.CURRENCY_A]: balances[0],\n [Field.CURRENCY_B]: balances[1],\n }\n\n // amounts\n const independentAmount: CurrencyAmount | undefined = tryParseAmount(typedValue, currencies[independentField])\n const dependentAmount: CurrencyAmount | undefined = useMemo(() => {\n if (noLiquidity) {\n if (otherTypedValue && currencies[dependentField]) {\n return tryParseAmount(otherTypedValue, currencies[dependentField])\n }\n return undefined\n }\n if (independentAmount) {\n // we wrap the currencies just to get the price in terms of the other token\n const wrappedIndependentAmount = independentAmount?.wrapped\n const [tokenA, tokenB] = [currencyA?.wrapped, currencyB?.wrapped]\n if (tokenA && tokenB && wrappedIndependentAmount && pair) {\n const dependentCurrency = dependentField === Field.CURRENCY_B ? currencyB : currencyA\n const dependentTokenAmount =\n dependentField === Field.CURRENCY_B\n ? pair.priceOf(tokenA).quote(wrappedIndependentAmount)\n : pair.priceOf(tokenB).quote(wrappedIndependentAmount)\n return dependentCurrency?.isNative\n ? CurrencyAmount.fromRawAmount(dependentCurrency, dependentTokenAmount.quotient)\n : dependentTokenAmount\n }\n return undefined\n }\n return undefined\n }, [noLiquidity, otherTypedValue, currencies, dependentField, independentAmount, currencyA, currencyB, pair])\n\n const parsedAmounts: { [field in Field]: CurrencyAmount | undefined } = useMemo(\n () => ({\n [Field.CURRENCY_A]: independentField === Field.CURRENCY_A ? independentAmount : dependentAmount,\n [Field.CURRENCY_B]: independentField === Field.CURRENCY_A ? dependentAmount : independentAmount,\n }),\n [dependentAmount, independentAmount, independentField],\n )\n\n const price = useMemo(() => {\n if (noLiquidity) {\n const { [Field.CURRENCY_A]: currencyAAmount, [Field.CURRENCY_B]: currencyBAmount } = parsedAmounts\n if (currencyAAmount && currencyBAmount) {\n return new Price(\n currencyAAmount.currency,\n currencyBAmount.currency,\n currencyAAmount.quotient,\n currencyBAmount.quotient,\n )\n }\n return undefined\n }\n const wrappedCurrencyA = currencyA?.wrapped\n return pair && wrappedCurrencyA ? pair.priceOf(wrappedCurrencyA) : undefined\n }, [currencyA, noLiquidity, pair, parsedAmounts])\n\n // liquidity minted\n const liquidityMinted = useMemo(() => {\n const { [Field.CURRENCY_A]: currencyAAmount, [Field.CURRENCY_B]: currencyBAmount } = parsedAmounts\n const [tokenAmountA, tokenAmountB] = [currencyAAmount?.wrapped, currencyBAmount?.wrapped]\n if (pair && totalSupply && tokenAmountA && tokenAmountB) {\n try {\n return pair.getLiquidityMinted(totalSupply, tokenAmountA, tokenAmountB)\n } catch (error) {\n console.error(error)\n return undefined\n }\n }\n return undefined\n }, [parsedAmounts, pair, totalSupply])\n\n const poolTokenPercentage = useMemo(() => {\n if (liquidityMinted && totalSupply) {\n return new Percent(liquidityMinted.quotient, totalSupply.add(liquidityMinted).quotient)\n }\n return undefined\n }, [liquidityMinted, totalSupply])\n\n let error: string | undefined\n if (!account) {\n error = t('Connect Wallet')\n }\n\n if (pairState === PairState.INVALID) {\n error = error ?? t('Invalid pair')\n }\n\n if (!parsedAmounts[Field.CURRENCY_A] || !parsedAmounts[Field.CURRENCY_B]) {\n error = error ?? t('Enter an amount')\n }\n\n const { [Field.CURRENCY_A]: currencyAAmount, [Field.CURRENCY_B]: currencyBAmount } = parsedAmounts\n\n if (currencyAAmount && currencyBalances?.[Field.CURRENCY_A]?.lessThan(currencyAAmount)) {\n error = t('Insufficient %symbol% balance', { symbol: currencies[Field.CURRENCY_A]?.symbol })\n }\n\n if (currencyBAmount && currencyBalances?.[Field.CURRENCY_B]?.lessThan(currencyBAmount)) {\n error = t('Insufficient %symbol% balance', { symbol: currencies[Field.CURRENCY_B]?.symbol })\n }\n\n return {\n dependentField,\n currencies,\n pair,\n pairState,\n currencyBalances,\n parsedAmounts,\n price,\n noLiquidity,\n liquidityMinted,\n poolTokenPercentage,\n error,\n }\n}\n","import { useState } from 'react'\nimport { PairV1, PairV2, Percent } from '@pulsex/sdk'\nimport {\n AddIcon,\n Button,\n Card,\n CardBody,\n CardProps,\n ChevronUpIcon,\n ChevronDownIcon,\n Flex,\n Tag,\n Text,\n} from '@pulsex/uikit'\nimport { styled } from 'styled-components'\nimport { useTranslation } from '@pulsex/localization'\nimport { plsTokens } from '@pulsex/tokens'\nimport { Link } from 'react-router-dom'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport { useTotalSupply } from 'hooks/useTotalSupply'\nimport { useTokenBalance } from 'state/wallet/hooks'\nimport { currencyId } from 'utils/currencyId'\nimport { unwrappedToken } from 'utils/wrappedCurrency'\n\nimport { useDerivedMintInfo, useMintActionHandlers } from 'state/mint/hooks'\nimport { LightCard } from '../Card'\nimport { AutoColumn } from '../Layout/Column'\nimport CurrencyLogo from '../Logo/CurrencyLogo'\nimport { DoubleCurrencyLogo } from '../Logo'\nimport { RowBetween, RowFixed } from '../Layout/Row'\nimport { BIG_INT_ZERO } from '../../config/constants/exchange'\nimport Dots from '../Loader/Dots'\n\nconst FixedHeightRow = styled(RowBetween)`\n height: 24px;\n`\n\ninterface PositionCardProps extends CardProps {\n pair: PairV1 | PairV2\n showUnwrapped?: boolean\n}\n\nexport const useTokensDeposited = ({ pair, totalPoolTokens, userPoolBalance }) => {\n const [token0Deposited, token1Deposited] =\n !!pair && !!totalPoolTokens && !!userPoolBalance && totalPoolTokens.quotient >= userPoolBalance.quotient\n ? [\n pair.getLiquidityValue(pair.token0, totalPoolTokens, userPoolBalance, false),\n pair.getLiquidityValue(pair.token1, totalPoolTokens, userPoolBalance, false),\n ]\n : [undefined, undefined]\n\n return [token0Deposited, token1Deposited]\n}\n\nexport function MinimalPositionCard({ pair, showUnwrapped = false }: PositionCardProps) {\n const { account } = useActiveWeb3React()\n\n const { t } = useTranslation()\n\n const currency0 = showUnwrapped ? pair.token0 : unwrappedToken(pair.token0)\n const currency1 = showUnwrapped ? pair.token1 : unwrappedToken(pair.token1)\n const [showMore, setShowMore] = useState(false)\n\n const protocol = pair instanceof PairV1 ? 'V1' : 'V2'\n\n const userPoolBalance = useTokenBalance(account ?? undefined, pair.liquidityToken)\n const totalPoolTokens = useTotalSupply(pair.liquidityToken)\n\n const poolTokenPercentage =\n !!userPoolBalance && !!totalPoolTokens && totalPoolTokens.quotient >= userPoolBalance.quotient\n ? new Percent(userPoolBalance.quotient, totalPoolTokens.quotient)\n : undefined\n\n const [token0Deposited, token1Deposited] =\n !!pair &&\n !!totalPoolTokens &&\n !!userPoolBalance &&\n // this condition is a short-circuit in the case where useTokenBalance updates sooner than useTotalSupply\n totalPoolTokens.quotient >= userPoolBalance.quotient\n ? [\n pair.getLiquidityValue(pair.token0, totalPoolTokens, userPoolBalance, false),\n pair.getLiquidityValue(pair.token1, totalPoolTokens, userPoolBalance, false),\n ]\n : [undefined, undefined]\n\n return (\n <>\n {userPoolBalance && userPoolBalance.quotient > BIG_INT_ZERO ? (\n \n \n \n \n \n \n {t('LP tokens in your wallet')}\n \n \n \n setShowMore(!showMore)}>\n \n \n \n {currency0.symbol}-{currency1.symbol} LP\n \n \n \n {userPoolBalance ? userPoolBalance.toSignificant(8) : '-'}\n \n \n \n \n \n {t('Share of Pool')}:\n \n {poolTokenPercentage ? `${poolTokenPercentage.toFixed(6)}%` : '-'}\n \n \n \n {t('Pooled %asset%', { asset: currency0.symbol })}:\n \n {token0Deposited ? (\n \n {token0Deposited?.toSignificant(8)}\n \n ) : (\n '-'\n )}\n \n \n \n {t('Pooled %asset%', { asset: currency1.symbol })}:\n \n {token1Deposited ? (\n \n {token1Deposited?.toSignificant(8)}\n \n ) : (\n '-'\n )}\n \n \n \n \n \n ) : (\n \n \n \n { protocol === 'V1' ? t(\n \"Adding liquidity helps burn PLSX. 100% of the swap fees go the BuyAndBurn contract which pays a 0.1% bounty for those that run it.\",\n ) : t(\n \"By adding liquidity you'll earn 0.22% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"\n )}\n \n \n )}\n \n )\n}\n\nexport default function FullPositionCard({ pair, ...props }: PositionCardProps) {\n const { account } = useActiveWeb3React()\n\n const { t } = useTranslation()\n\n const currency0 = unwrappedToken(pair.token0)\n const currency1 = unwrappedToken(pair.token1)\n\n const { noLiquidity } = useDerivedMintInfo(pair.token0 ?? undefined, pair.token1 ?? undefined)\n const { onChangeProtocol } = useMintActionHandlers(noLiquidity)\n const protocol = pair instanceof PairV1 ? 'V1' : 'V2'\n\n const [showMore, setShowMore] = useState(false)\n\n const userPoolBalance = useTokenBalance(account ?? undefined, pair.liquidityToken)\n const totalPoolTokens = useTotalSupply(pair.liquidityToken)\n\n const poolTokenPercentage =\n !!userPoolBalance && !!totalPoolTokens && totalPoolTokens.quotient >= userPoolBalance.quotient\n ? new Percent(userPoolBalance.quotient, totalPoolTokens.quotient)\n : undefined\n\n const [token0Deposited, token1Deposited] =\n !!pair &&\n !!totalPoolTokens &&\n !!userPoolBalance &&\n // this condition is a short-circuit in the case where useTokenBalance updates sooner than useTotalSupply\n totalPoolTokens.quotient >= userPoolBalance.quotient\n ? [\n pair.getLiquidityValue(pair.token0, totalPoolTokens, userPoolBalance, false),\n pair.getLiquidityValue(pair.token1, totalPoolTokens, userPoolBalance, false),\n ]\n : [undefined, undefined]\n\n return (\n \n setShowMore(!showMore)} p=\"16px\">\n \n \n \n \n {!currency0 || !currency1 ? {t('Loading')} : `${currency0.symbol}/${currency1.symbol} ${protocol}`}\n \n \n \n {userPoolBalance?.toSignificant(4)}\n \n \n \n {protocol} LP\n {showMore ? : }\n \n \n {showMore && (\n \n \n \n \n \n {t('Pooled %asset%', { asset: currency0.symbol })}:\n \n \n {token0Deposited ? (\n \n {token0Deposited?.toSignificant(6)}\n \n ) : (\n '-'\n )}\n \n\n \n \n \n \n {t('Pooled %asset%', { asset: currency1.symbol })}:\n \n \n {token1Deposited ? (\n \n {token1Deposited?.toSignificant(6)}\n \n ) : (\n '-'\n )}\n \n\n \n {t('Share of Pool')}\n \n {poolTokenPercentage\n ? `${poolTokenPercentage.toFixed(2) === '0.00' ? '<0.01' : poolTokenPercentage.toFixed(2)}%`\n : '-'}\n \n \n\n {userPoolBalance && userPoolBalance.quotient > BIG_INT_ZERO && (\n \n {onChangeProtocol(pair instanceof PairV1 ? 'V1': 'V2')}}\n >\n {t('Remove')}\n \n }\n width=\"100%\"\n onClick={() => {onChangeProtocol(pair instanceof PairV1 ? 'V1': 'V2')}}\n >\n {t('Add liquidity instead')}\n \n \n )}\n \n )}\n \n )\n}\n","import { WalletConfigV2, WalletFilledIcon } from '@pulsex/uikit'\n// import { getTrustWalletProvider } from '@pulsex/wagmi/connectors/trustWallet'\nimport { walletConnectNoQrCodeConnector } from '../utils/wagmi'\n\nconst domain = 'https://tokens.app.pulsex.com'\n\nexport enum ConnectorNames {\n MetaMask = 'metaMask',\n Injected = 'injected',\n WalletConnect = 'walletConnect',\n WalletConnectV1 = 'walletConnectLegacy',\n Ledger = 'ledger',\n TrustWallet = 'trustWallet',\n}\n\nconst createQrCode = (chainId: number, connect) => async () => {\n connect({ connector: walletConnectNoQrCodeConnector, chainId })\n\n const r = await walletConnectNoQrCodeConnector.getProvider()\n return new Promise((resolve) => {\n r.on('display_uri', (uri) => {\n resolve(uri)\n })\n })\n}\n\nconst isMetamaskInstalled = () => {\n if (typeof window === 'undefined') {\n return false\n }\n\n if (window.ethereum?.isMetaMask) {\n return true\n }\n\n if (window.ethereum?.providers?.some((p) => p.isMetaMask)) {\n return true\n }\n\n return false\n}\n\nconst walletsConfig = ({\n chainId,\n connect,\n}: {\n chainId: number\n connect: (connectorID: ConnectorNames) => void\n}): WalletConfigV2[] => {\n const qrCode = createQrCode(chainId, connect)\n return [\n {\n id: 'metamask',\n title: 'Metamask',\n icon: `${domain}/images/metamask.png`,\n get installed() {\n return isMetamaskInstalled()\n // && metaMaskConnector.ready\n },\n connectorId: ConnectorNames.MetaMask,\n deepLink: 'https://metamask.app.link/dapp/pulsex.com/',\n qrCode,\n downloadLink: 'https://metamask.app.link/dapp/pulsex.com/',\n },\n // TODO: enable Trust wallet\n // {\n // id: 'trust',\n // title: 'Trust Wallet',\n // icon: `${domain}/images/trust.png`,\n // connectorId: ConnectorNames.TrustWallet,\n // get installed() {\n // return !!getTrustWalletProvider()\n // },\n // deepLink: 'https://link.trustwallet.com/open_url?coin_id=20000714&url=https://app.pulsex.com/',\n // downloadLink: 'https://chrome.google.com/webstore/detail/trust-wallet/egjidjbpglichdcondbcbdnbeeppgdph',\n // guide: {\n // desktop: 'https://trustwallet.com/browser-extension',\n // mobile: 'https://trustwallet.com/',\n // },\n // qrCode,\n // },\n {\n id: 'walletconnect',\n title: 'WalletConnect',\n icon: `${domain}/images/walletconnect.png`,\n connectorId: ConnectorNames.WalletConnect,\n },\n {\n id: 'opera',\n title: 'Opera Wallet',\n icon: `${domain}/images/opera.png`,\n connectorId: ConnectorNames.Injected,\n get installed() {\n return typeof window !== 'undefined' && Boolean(window.ethereum?.isOpera)\n },\n downloadLink: 'https://www.opera.com/crypto/next',\n },\n {\n id: 'brave',\n title: 'Brave Wallet',\n icon: `${domain}/images/brave.png`,\n connectorId: ConnectorNames.Injected,\n get installed() {\n return typeof window !== 'undefined' && Boolean(window.ethereum?.isBraveWallet)\n },\n downloadLink: 'https://brave.com/wallet/',\n },\n {\n id: 'rabby',\n title: 'Rabby Wallet',\n icon: `${domain}/images/rabby.png`,\n connectorId: ConnectorNames.Injected,\n get installed() {\n return typeof window !== 'undefined' && Boolean(window.ethereum?.isRabby)\n },\n downloadLink: 'https://rabby.io/',\n },\n {\n id: 'ledger',\n title: 'Ledger',\n icon: `${domain}/images/ledger.png`,\n connectorId: ConnectorNames.Ledger,\n },\n ]\n}\n\nexport const createWallets = (chainId: number, connect: any) => {\n const hasInjected = typeof window !== 'undefined' && !window.ethereum\n const config = walletsConfig({ chainId, connect })\n return hasInjected && config.some((c) => c.installed && c.connectorId === ConnectorNames.Injected)\n ? config // add injected icon if none of injected type wallets installed\n : [\n ...config,\n {\n id: 'injected',\n title: 'Injected',\n icon: WalletFilledIcon,\n connectorId: ConnectorNames.Injected,\n installed: typeof window !== 'undefined' && Boolean(window.ethereum),\n },\n ]\n}\n","import { __async } from '../chunk-MYWZT2KK.mjs';\nimport { UserRejectedRequestError, ResourceUnavailableRpcError, getAddress } from 'viem';\nimport { ConnectorNotFoundError } from 'wagmi';\nimport { InjectedConnector } from 'wagmi/connectors/injected';\n\nvar MiniProgramConnector = class extends InjectedConnector {\n constructor({ chains, getWeb3Provider }) {\n const options = {\n name: \"BnInjected\",\n shimDisconnect: false,\n shimChainChangedDisconnect: false\n };\n super({\n chains,\n options\n });\n this.id = \"miniprogram\";\n this.ready = typeof window !== \"undefined\" && !!window.bn;\n this.getWeb3Provider = getWeb3Provider;\n }\n connect() {\n return __async(this, arguments, function* ({ chainId } = {}) {\n try {\n const provider = yield this.getProvider();\n if (!provider)\n throw new ConnectorNotFoundError();\n if (provider.on) {\n provider.on(\"accountsChanged\", this.onAccountsChanged);\n provider.on(\"chainChanged\", this.onChainChanged);\n provider.on(\"disconnect\", this.onDisconnect);\n }\n this.emit(\"message\", { type: \"connecting\" });\n const account = yield this.getAccount();\n let id = yield this.getChainId();\n let unsupported = this.isChainUnsupported(id);\n if (chainId && id !== chainId) {\n const chain = yield this.switchChain(chainId);\n id = chain.id;\n unsupported = this.isChainUnsupported(id);\n }\n return { account, chain: { id, unsupported }, provider };\n } catch (error) {\n if (this.isUserRejectedRequestError(error))\n throw new UserRejectedRequestError(error);\n if (error.code === -32002)\n throw new ResourceUnavailableRpcError(error);\n throw error;\n }\n });\n }\n getAccount() {\n return __async(this, null, function* () {\n const provider = yield this.getProvider();\n if (!provider)\n throw new ConnectorNotFoundError();\n const accounts = yield provider.request({\n method: \"eth_accounts\"\n });\n return getAddress(accounts[0]);\n });\n }\n getChainId() {\n return __async(this, null, function* () {\n return 369;\n });\n }\n getProvider() {\n return __async(this, null, function* () {\n if (typeof window !== \"undefined\") {\n this.provider = this.getWeb3Provider();\n }\n return this.provider;\n });\n }\n};\n\nexport { MiniProgramConnector };\n","import { useTranslation, languageList } from '@pulsex/localization'\nimport { useEffect, useState } from 'react'\n/* eslint-disable no-console */\nconst cbList = {}\nconst onCallbackIdList = {}\n\nexport const listenOnBnMessage = () => {\n if (typeof window !== 'undefined') {\n window.bn.onMessage = ({ data: { id, payload, on } }) => {\n console.log('~ onMessage: ', id, payload)\n let newPayload = payload\n if (typeof payload === 'string') {\n newPayload = JSON.parse(payload)\n console.log('~ onMessage parse payload: ', payload)\n }\n if (on && typeof onCallbackIdList[on] === 'function') {\n onCallbackIdList[on](newPayload)\n } else if (typeof cbList[id] === 'function') {\n cbList[id](newPayload)\n delete cbList[id]\n }\n // control connect / disconnect\n if (id === 'disconnect') {\n window.bn.disconnect?.()\n }\n if (id === 'connect') {\n window.bn.connect?.()\n }\n }\n }\n}\nlet id = 0\nconst prefix = Math.random() * 1000\nconst postMessage = ({ action, payload, cb }: { action: string; payload?: any; cb?: (payload?: any) => void }) => {\n const finalId = `${prefix}-${id}`\n window.bn.miniProgram.postMessage({ action, id: finalId, payload })\n cbList[finalId] = cb\n id++\n return finalId\n}\nfunction getWeb3Provider() {\n return {\n on(event: string, cb: () => void) {\n postMessage({ action: 'on', payload: { event } })\n onCallbackIdList[event] = cb\n },\n request(params) {\n return new Promise((resolve, reject) => {\n postMessage({\n action: 'request',\n payload: params,\n cb: (payload) => {\n if (payload?.error) {\n reject(payload?.message)\n } else {\n resolve(payload)\n }\n },\n })\n })\n },\n removeEventListener(event: string) {\n if (onCallbackIdList[event]) {\n onCallbackIdList[event] = undefined\n }\n },\n }\n}\n\nconst _bridgeUtils = {\n jump(payload) {\n return new Promise((resolve) => {\n postMessage({ action: 'jump', payload, cb: resolve })\n })\n },\n getSystemInfo() {\n return new Promise((resolve) => {\n postMessage({ action: 'getSystemInfo', cb: resolve })\n })\n },\n toExternal(payload) {\n return new Promise((resolve) => {\n postMessage({ action: 'toExternal', payload, cb: resolve })\n })\n },\n}\nexport const bridgeUtils = {\n toWallet(): Promise {\n return new Promise((resolve) => {\n postMessage({ action: 'toWallet', cb: resolve })\n })\n },\n}\n\n// Need to call getSystemInfo only once\nlet globalInfo\nexport const useSystemInfo = () => {\n const [info, setInfo] = useState(globalInfo)\n useEffect(() => {\n if (!globalInfo && typeof __NEZHA_BRIDGE__ !== 'undefined') {\n _bridgeUtils.getSystemInfo().then((value) => {\n globalInfo = value\n setInfo(value)\n })\n }\n }, [])\n return info\n}\n\nconst code2Lang = languageList.reduce((prev, next) => {\n // eslint-disable-next-line no-param-reassign\n prev[next.code.toLowerCase()] = next\n return prev\n}, {})\n\nexport const useInjectI18n = () => {\n const [injected, setInjected] = useState(false)\n const systemInfo = useSystemInfo()\n const { setLanguage } = useTranslation()\n useEffect(() => {\n const main = async () => {\n if (systemInfo) {\n const { language } = systemInfo\n const currLanguage = code2Lang[language.toLowerCase()]\n if (currLanguage) {\n await setLanguage(currLanguage)\n }\n setInjected(true)\n }\n }\n main()\n }, [systemInfo, setLanguage])\n return { injected }\n}\nexport default getWeb3Provider\n","/* eslint-disable no-console */\nimport { useCallback } from 'react'\n\nimport { useToast } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport { MiniProgramConnector } from '@pulsex/wagmi/connectors/miniProgram'\nimport { useConnect } from 'wagmi'\nimport getWeb3Provider from 'utils/mpBridge'\nimport { chains } from '../utils/wagmi'\n\nconst injected = new MiniProgramConnector({ chains, getWeb3Provider })\nexport const getAccount = () => injected.getAccount()\n\nconst useActive = () => {\n const { connectAsync } = useConnect()\n return useCallback(\n () =>\n connectAsync({ connector: injected }).catch((error) => {\n console.log('🚀 ~ file: useEagerConnect.ts ~ line 183 ~ activate ~ error', error)\n // captureException(error)\n }),\n [connectAsync],\n )\n}\nexport const useEagerConnect = () => {\n // noop\n}\n\nexport const useActiveHandle = () => {\n const handleActive = useActive()\n const { toastSuccess } = useToast()\n const { t } = useTranslation()\n\n const main = async () => {\n /**\n * backward\n */\n console.log('~ before getAccount')\n const address = await getAccount()\n console.log('~ after getAccount', address)\n return new Promise((resolve) => {\n handleActive().then(resolve)\n })\n }\n return async (showToast = true) => {\n await main()\n const address = await getAccount()\n if (address && showToast) {\n toastSuccess(t('Success'), 'Wallet connected')\n }\n }\n}\nexport default useEagerConnect\n","import { Trans } from '@pulsex/localization'\n\nexport default Trans\n","import { createElement, Fragment } from 'react'\nimport { ContextData, TranslationKey } from './types'\nimport useTranslation from './useTranslation'\n\nexport interface TransProps extends ContextData {\n children: TranslationKey\n}\n\nexport const Trans = ({ children, ...props }: TransProps) => {\n const { t } = useTranslation()\n if (typeof children !== 'string') {\n throw new Error('children not string in Trans is not supported yet')\n }\n return createElement(Fragment, {}, t(children, props))\n}\n","import { useTranslation } from '@pulsex/localization'\nimport { Button, ButtonProps, WalletModalV2 } from '@pulsex/uikit'\nimport { createWallets } from 'config/wallet'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport useAuth from 'hooks/useAuth'\n// @ts-ignore\n// eslint-disable-next-line import/extensions\nimport { useActiveHandle } from 'hooks/useEagerConnect.bmp.ts'\nimport { useMemo, useState } from 'react'\nimport { useConnect } from 'wagmi'\nimport Trans from './Trans'\n\nconst ConnectWalletButton = ({ children, ...props }: ButtonProps) => {\n const handleActive = useActiveHandle()\n const { login } = useAuth()\n const { t } = useTranslation()\n const { connectAsync } = useConnect()\n const { chainId } = useActiveChainId()\n const [open, setOpen] = useState(false)\n\n const handleClick = () => {\n if (typeof __NEZHA_BRIDGE__ !== 'undefined') {\n handleActive()\n } else {\n setOpen(true)\n }\n }\n\n const wallets = useMemo(() => createWallets(chainId, connectAsync), [chainId, connectAsync])\n\n return (\n <>\n \n setOpen(false)}\n />\n \n )\n}\n\nexport default ConnectWalletButton\n","import { useCallback } from 'react'\nimport { publicClient } from 'utils/wagmi'\nimport {\n Abi,\n Account,\n Address,\n CallParameters,\n Chain,\n GetFunctionArgs,\n InferFunctionName,\n WriteContractParameters,\n} from 'viem'\nimport type { EstimateContractGasParameters } from 'viem'\nimport { useWalletClient } from 'wagmi'\nimport { SendTransactionResult } from 'wagmi/actions'\nimport { calculateGasMargin } from 'utils'\nimport { useActiveChainId } from './useActiveChainId'\n\nexport function useCallWithGasPrice() {\n const { chainId } = useActiveChainId()\n const { data: walletClient } = useWalletClient()\n\n // const callWithGasPrice = useCallback(\n // async <\n // TAbi extends Abi | unknown[],\n // TFunctionName extends string = string,\n // _FunctionName = InferFunctionName,\n // Args = TFunctionName extends string\n // ? GetFunctionArgs['args']\n // : _FunctionName extends string\n // ? GetFunctionArgs['args']\n // : never,\n // >(\n // contract: { abi: TAbi; account: Account; chain: Chain; address: Address },\n // methodName: InferFunctionName,\n // methodArgs?: Args extends never ? undefined : Args,\n // overrides?: Omit,\n // ): Promise => {\n // const res = await walletClient.writeContract({\n // abi: contract.abi,\n // address: contract.address,\n // functionName: methodName,\n // args: methodArgs,\n // account: walletClient.account,\n // gasPrice,\n // ...overrides,\n // } as any) // TODO: fix types\n\n // const hash = res\n\n // return {\n // hash,\n // }\n // },\n // [gasPrice, walletClient],\n // )\n\n const callWithGasPriceWithSimulate = useCallback(\n async <\n TAbi extends Abi | unknown[],\n TFunctionName extends string = string,\n _FunctionName = InferFunctionName,\n Args = TFunctionName extends string\n ? GetFunctionArgs['args']\n : _FunctionName extends string\n ? GetFunctionArgs['args']\n : never,\n >(\n contract: { abi: TAbi; account: Account; chain: Chain; address: Address },\n methodName: InferFunctionName,\n methodArgs?: Args extends never ? undefined : Args,\n overrides?: Omit,\n ): Promise => {\n if (!walletClient) {\n throw new Error('No valid wallet connect')\n }\n const { gas: gas_, ...overrides_ } = overrides || {}\n let gas = gas_\n if (!gas) {\n gas = await publicClient({ chainId }).estimateContractGas({\n abi: contract.abi,\n address: contract.address,\n account: walletClient.account,\n functionName: methodName,\n args: methodArgs,\n value: 0n,\n ...overrides_,\n } as unknown as EstimateContractGasParameters)\n }\n\n // TODO: implement gasPrice calcs\n const res = await walletClient.writeContract({\n abi: contract.abi,\n address: contract.address,\n account: walletClient.account,\n functionName: methodName,\n args: methodArgs,\n // gasPrice,\n gas: calculateGasMargin(gas),\n value: 0n,\n ...overrides_,\n } as unknown as WriteContractParameters)\n\n const hash = res\n\n return {\n hash,\n }\n },\n [chainId, walletClient],\n )\n\n return { callWithGasPrice: callWithGasPriceWithSimulate }\n}\n","import { Token, CurrencyAmount } from '@pulsex/sdk'\nimport { Address, erc20ABI } from 'wagmi'\nimport { useMemo } from 'react'\n\nimport { useQuery } from '@tanstack/react-query'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport { publicClient } from 'utils/wagmi'\nimport { FAST_INTERVAL } from 'config/constants/exchange'\n\nfunction useTokenAllowance(\n token?: Token,\n owner?: string,\n spender?: string,\n): {\n allowance: CurrencyAmount | undefined\n refetch: () => Promise\n} {\n const { chainId } = useActiveChainId()\n\n const inputs = useMemo(() => [owner, spender] as [Address, Address], [owner, spender])\n\n const { data: allowance, refetch } = useQuery({\n queryKey: [chainId, token?.address, owner, spender],\n queryFn: () => {\n if (!token) {\n throw new Error('No token')\n }\n return publicClient({ chainId }).readContract({\n abi: erc20ABI,\n address: token?.address,\n functionName: 'allowance',\n args: inputs,\n })\n },\n refetchInterval: FAST_INTERVAL,\n retry: true,\n refetchOnWindowFocus: false,\n enabled: Boolean(spender && owner && token),\n })\n\n return useMemo(\n () => ({\n allowance:\n token && typeof allowance !== 'undefined'\n ? CurrencyAmount.fromRawAmount(token, allowance.toString())\n : undefined,\n refetch,\n }),\n [token, refetch, allowance],\n )\n}\n\nexport default useTokenAllowance\n","import { MaxUint256 } from '@pulsex/swap-sdk-core'\nimport { useTranslation } from '@pulsex/localization'\nimport { Currency, CurrencyAmount, ERC20Token, TradeV1, TradeV2, TradeType } from '@pulsex/sdk'\nimport { useToast } from '@pulsex/uikit'\nimport { useAccount, Address } from 'wagmi'\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport { isUserRejected } from 'utils/sentry'\nimport { computeSlippageAdjustedAmounts } from 'utils/exchange'\nimport { SendTransactionResult } from 'wagmi/actions'\nimport { useHasPendingApproval, useTransactionAdder } from 'state/transactions/hooks'\nimport { calculateGasMargin } from 'utils'\nimport isUndefinedOrNull from '@pulsex/utils/isUndefinedOrNull'\nimport { Field } from '../state/swap/actions'\nimport { ROUTER_ADDRESS_V1, ROUTER_ADDRESS_V2 } from '../config/constants/exchange'\nimport { useCallWithGasPrice } from './useCallWithGasPrice'\nimport { useTokenContract } from './useContract'\nimport useTokenAllowance from './useTokenAllowance'\n\nexport enum ApprovalState {\n UNKNOWN,\n NOT_APPROVED,\n PENDING,\n APPROVED,\n}\n\n// returns a variable indicating the state of the approval and a function which approves if necessary or early returns\nexport function useApproveCallback(\n amountToApprove?: CurrencyAmount,\n spender?: string,\n options: {\n addToTransaction\n targetAmount?: bigint\n } = {\n addToTransaction: true,\n },\n): {\n approvalState: ApprovalState\n approveCallback: () => Promise\n revokeCallback: () => Promise\n currentAllowance: CurrencyAmount | undefined\n isPendingError: boolean\n} {\n const { addToTransaction = true, targetAmount } = options\n const { address: account } = useAccount()\n const { callWithGasPrice } = useCallWithGasPrice()\n const { t } = useTranslation()\n const { toastError } = useToast()\n const token = amountToApprove?.currency?.isToken ? amountToApprove.currency : undefined\n const { allowance: currentAllowance, refetch } = useTokenAllowance(token, account ?? undefined, spender)\n const pendingApproval = useHasPendingApproval(token?.address, spender)\n const [pending, setPending] = useState(pendingApproval)\n const [isPendingError, setIsPendingError] = useState(false)\n\n useEffect(() => {\n if (pendingApproval) {\n setPending(true)\n } else if (pending) {\n refetch().then(() => {\n setPending(false)\n })\n }\n }, [pendingApproval, pending, refetch])\n\n // check the current approval status\n const approvalState: ApprovalState = useMemo(() => {\n if (!amountToApprove || !spender) return ApprovalState.UNKNOWN\n if (amountToApprove.currency?.isNative) return ApprovalState.APPROVED\n // we might not have enough data to know whether or not we need to approve\n if (!currentAllowance) return ApprovalState.UNKNOWN\n\n // amountToApprove will be defined if currentAllowance is\n return currentAllowance.lessThan(amountToApprove)\n ? pending\n ? ApprovalState.PENDING\n : ApprovalState.NOT_APPROVED\n : ApprovalState.APPROVED\n }, [amountToApprove, currentAllowance, pending, spender])\n\n const tokenContract = useTokenContract(token?.address)\n const addTransaction = useTransactionAdder()\n\n const approve = useCallback(\n async (overrideAmountApprove?: bigint): Promise => {\n if (approvalState !== ApprovalState.NOT_APPROVED && isUndefinedOrNull(overrideAmountApprove)) {\n toastError(t('Error'), t('Approve was called unnecessarily'))\n console.error('approve was called unnecessarily')\n setIsPendingError(true)\n return undefined\n }\n if (!token) {\n // toastError(t('Error'), t('No token'))\n console.error('no token')\n // return undefined\n }\n\n if (!tokenContract) {\n toastError(t('Error'), t('Cannot find contract of the token %tokenAddress%', { tokenAddress: token?.address }))\n console.error('tokenContract is null')\n setIsPendingError(true)\n return undefined\n }\n\n if (!amountToApprove && isUndefinedOrNull(overrideAmountApprove)) {\n toastError(t('Error'), t('Missing amount to approve'))\n console.error('missing amount to approve')\n setIsPendingError(true)\n return undefined\n }\n\n if (!spender) {\n toastError(t('Error'), t('No spender'))\n console.error('no spender')\n setIsPendingError(true)\n return undefined\n }\n\n let useExact = true\n\n const estimatedGas = await tokenContract.estimateGas\n .approve([spender as Address, MaxUint256], {\n account: tokenContract.account,\n })\n .catch(() => {\n // general fallback for tokens who restrict approval amounts\n useExact = true\n return tokenContract.estimateGas\n .approve(\n [spender as Address, overrideAmountApprove ?? amountToApprove?.quotient ?? targetAmount ?? MaxUint256],\n {\n account: tokenContract.account,\n },\n )\n .catch((e) => {\n console.error('estimate gas failure', e)\n toastError(t('Error'), t('Unexpected error. Could not estimate gas for the approve.'))\n setIsPendingError(true)\n return null\n })\n })\n\n if (!estimatedGas) return undefined\n\n return callWithGasPrice(\n tokenContract,\n 'approve' as const,\n [\n spender as Address,\n overrideAmountApprove ?? (useExact ? amountToApprove?.quotient ?? targetAmount ?? MaxUint256 : MaxUint256),\n ],\n {\n gas: calculateGasMargin(estimatedGas),\n },\n )\n .then((response) => {\n if (addToTransaction) {\n addTransaction(response, {\n summary: `Approve ${overrideAmountApprove ?? amountToApprove?.currency?.symbol}`,\n translatableSummary: {\n text: 'Approve %symbol%',\n data: { symbol: overrideAmountApprove?.toString() ?? amountToApprove?.currency?.symbol },\n },\n approval: { tokenAddress: token?.address, spender },\n type: 'approve',\n })\n }\n return response\n })\n .catch((error: any) => {\n console.error('Failed to approve token', error)\n if (!isUserRejected(error)) {\n toastError(t('Error'), error.message)\n }\n throw error\n })\n },\n [\n approvalState,\n token,\n tokenContract,\n amountToApprove,\n spender,\n callWithGasPrice,\n targetAmount,\n toastError,\n t,\n addToTransaction,\n addTransaction,\n ],\n )\n\n const approveCallback = useCallback(() => {\n return approve()\n }, [approve])\n\n const revokeCallback = useCallback(() => {\n return approve(0n)\n }, [approve])\n\n return { approvalState, approveCallback, revokeCallback, currentAllowance, isPendingError }\n}\n\nexport function useApproveCallbackFromAmount({\n token,\n minAmount,\n targetAmount,\n spender,\n addToTransaction,\n}: {\n token?: ERC20Token\n minAmount?: bigint\n targetAmount?: bigint\n spender?: string\n addToTransaction?: boolean\n}) {\n const amountToApprove = useMemo(() => {\n if (!minAmount || !token) return undefined\n return CurrencyAmount.fromRawAmount(token, minAmount)\n }, [minAmount, token])\n\n return useApproveCallback(amountToApprove, spender, {\n addToTransaction,\n targetAmount,\n })\n}\n\n// wraps useApproveCallback in the context of a swap\nexport function useApproveCallbackFromTrade(\n trade?: TradeV1 | TradeV2,\n allowedSlippage = 0\n) {\n const chainId = trade?.inputAmount?.currency.chainId\n const amountToApprove = useMemo(\n () => (trade ? computeSlippageAdjustedAmounts(trade, allowedSlippage)[Field.INPUT] : undefined),\n [trade, allowedSlippage],\n )\n\n return useApproveCallback(\n amountToApprove,\n trade instanceof TradeV1 ? ROUTER_ADDRESS_V1[chainId] : ROUTER_ADDRESS_V2[chainId]\n )\n}\n","import { useMemo } from 'react'\nimport { useSelector } from 'react-redux'\nimport { AppState } from '../state'\nimport useCurrentBlockTimestamp from './useCurrentBlockTimestamp'\n\n// combines the block timestamp with the user setting to give the deadline that should be used for any submitted transaction\nexport default function useTransactionDeadline(): bigint | undefined {\n const ttl = useSelector((state) => state.user.userDeadline)\n const blockTimestamp = useCurrentBlockTimestamp()\n return useMemo(() => {\n if (blockTimestamp && ttl) return blockTimestamp + BigInt(ttl)\n return undefined\n }, [blockTimestamp, ttl])\n}\n","import { useSingleCallResult } from '../state/multicall/hooks'\nimport { useMulticallContract } from './useContract'\n\n// gets the current timestamp from the blockchain\nexport default function useCurrentBlockTimestamp(): bigint | undefined {\n const multicall = useMulticallContract()\n return useSingleCallResult({\n contract: multicall,\n functionName: 'getCurrentBlockTimestamp',\n })?.result\n}\n","import { Currency, CurrencyAmount } from '@pulsex/sdk'\nimport { BIG_INT_ZERO, MIN_PLS } from '../config/constants/exchange'\n\n/**\n * Given some token amount, return the max that can be spent of it\n * @param currencyAmount to return max of\n */\nexport function maxAmountSpend(currencyAmount?: CurrencyAmount): CurrencyAmount | undefined {\n if (!currencyAmount) return undefined\n if (currencyAmount.currency?.isNative) {\n if (currencyAmount.quotient > MIN_PLS) {\n return CurrencyAmount.fromRawAmount(currencyAmount.currency, currencyAmount.quotient - MIN_PLS)\n }\n return CurrencyAmount.fromRawAmount(currencyAmount.currency, BIG_INT_ZERO)\n }\n return currencyAmount\n}\n","import styled from 'styled-components'\nimport { Flex } from '@pulsex/uikit'\n\nconst StyledPage = styled.div<{ $removePadding: boolean; $noMinHeight: boolean }>`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n padding: ${({ $removePadding }) => ($removePadding ? '0' : '16px')};\n padding-bottom: 70px;\n min-height: ${({ $noMinHeight }) => ($noMinHeight ? 'initial' : 'calc(100vh - 119px)')};\n background: ${({ theme }) => theme.colors.gradientBubblegum};\n\n ${({ theme }) => theme.mediaQueries.xs} {\n background-size: auto;\n }\n\n ${({ theme }) => theme.mediaQueries.sm} {\n padding: ${({ $removePadding }) => ($removePadding ? '0' : '24px')};\n padding-bottom: 0;\n }\n\n ${({ theme }) => theme.mediaQueries.lg} {\n padding: ${({ $removePadding }) => ($removePadding ? '0' : '32px')};\n padding-bottom: 0;\n min-height: ${({ $noMinHeight }) => ($noMinHeight ? 'initial' : 'calc(100vh - 119px)')};\n }\n`\n\nconst Page: React.FC<\n React.HTMLAttributes & { \n removePadding?: boolean; \n noMinHeight?: boolean \n }\n> = ({ children, removePadding = false, noMinHeight = false, ...props }) => {\n return (\n <>\n \n {children}\n \n \n \n )\n}\n\nexport default Page\n","import { Currency, Percent, Price } from '@pulsex/sdk'\nimport { Text } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport { AutoColumn } from '../../components/Layout/Column'\nimport { AutoRow } from '../../components/Layout/Row'\nimport { ONE_BIPS } from '../../config/constants/exchange'\nimport { Field } from '../../state/mint/actions'\n\nfunction PoolPriceBar({\n currencies,\n noLiquidity,\n poolTokenPercentage,\n price,\n}: {\n currencies: { [field in Field]?: Currency }\n noLiquidity?: boolean\n poolTokenPercentage?: Percent\n price?: Price\n}) {\n const { t } = useTranslation()\n return (\n \n \n \n {price?.toSignificant(6) ?? '-'}\n \n {t('%assetA% per %assetB%', {\n assetA: currencies[Field.CURRENCY_B]?.symbol ?? '',\n assetB: currencies[Field.CURRENCY_A]?.symbol ?? '',\n })}\n \n \n \n {price?.invert()?.toSignificant(6) ?? '-'}\n \n {t('%assetA% per %assetB%', {\n assetA: currencies[Field.CURRENCY_A]?.symbol ?? '',\n assetB: currencies[Field.CURRENCY_B]?.symbol ?? '',\n })}\n \n \n \n \n {noLiquidity && price\n ? '100'\n : (poolTokenPercentage?.lessThan(ONE_BIPS) ? '<0.01' : poolTokenPercentage?.toFixed(2)) ?? '0'}\n %\n \n \n {t('Share of Pool')}\n \n \n \n \n )\n}\n\nexport default PoolPriceBar\n","import { useCallback } from 'react'\nimport { Currency, Token } from '@pulsex/sdk'\nimport { ChainId } from '@pulsex/chains'\nimport { styled } from 'styled-components'\nimport {\n ArrowUpIcon,\n Box,\n Button,\n ErrorIcon,\n Flex,\n InjectedModalProps,\n Link,\n MetamaskIcon,\n Modal,\n Spinner2,\n Text,\n} from '@pulsex/uikit'\nimport { registerToken } from 'utils/wallet'\nimport { useTranslation } from '@pulsex/localization'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport { wrappedCurrency } from 'utils/wrappedCurrency'\nimport { RowFixed } from '../Layout/Row'\nimport { AutoColumn, ColumnCenter } from '../Layout/Column'\nimport { getBlockExplorerLink, getBlockExploreName } from '../../utils'\n\nconst Wrapper = styled.div`\n max-width: 380px;\n`\nconst Section = styled(AutoColumn)`\n padding: 24px;\n`\n\nconst ConfirmedIcon = styled(ColumnCenter)`\n padding: 24px 0;\n`\n\nfunction ConfirmationPendingContent({ pendingText }: { pendingText: string }) {\n const { t } = useTranslation()\n return (\n \n \n \n \n \n {t('Waiting For Confirmation')}\n \n \n {pendingText}\n \n \n \n {t('Confirm this transaction in your wallet')}\n \n \n \n )\n}\n\nexport function TransactionSubmittedContent({\n onDismiss,\n chainId,\n hash,\n currencyToAdd,\n}: {\n onDismiss: () => void\n hash: string | undefined\n chainId: ChainId\n currencyToAdd?: Currency | undefined\n}) {\n const { t } = useTranslation()\n\n const token: Token | undefined = wrappedCurrency(currencyToAdd, chainId)\n\n return (\n \n
    \n \n \n \n \n {t('Transaction Submitted')}\n {chainId && hash && (\n \n {t(`View on ${getBlockExploreName(chainId)}`)}\n \n )}\n {currencyToAdd && window?.ethereum?.isMetaMask && (\n registerToken(token.address, token.symbol, token.decimals)}\n >\n \n {t('Add %asset% to Metamask', { asset: currencyToAdd.symbol })}\n \n \n \n )}\n \n \n
    \n
    \n )\n}\n\nexport function ConfirmationModalContent({\n bottomContent,\n topContent,\n}: {\n topContent: () => React.ReactNode\n bottomContent: () => React.ReactNode\n}) {\n return (\n \n {topContent()}\n {bottomContent()}\n \n )\n}\n\nexport function TransactionErrorContent({ message, onDismiss }: { message: string; onDismiss: () => void }) {\n const { t } = useTranslation()\n return (\n \n \n \n \n {message}\n \n \n\n \n \n \n \n )\n}\n\ninterface ConfirmationModalProps {\n title: string\n customOnDismiss?: () => void\n hash: string | undefined\n content: () => React.ReactNode\n attemptingTxn: boolean\n pendingText: string\n currencyToAdd?: Currency | undefined\n}\n\nconst TransactionConfirmationModal: React.FC = ({\n title,\n onDismiss,\n customOnDismiss,\n attemptingTxn,\n hash,\n pendingText,\n content,\n currencyToAdd,\n}) => {\n const { chainId } = useActiveWeb3React()\n\n const handleDismiss = useCallback(() => {\n if (customOnDismiss) {\n customOnDismiss()\n }\n onDismiss()\n }, [customOnDismiss, onDismiss])\n\n if (!chainId) return null\n\n return (\n \n {attemptingTxn ? (\n \n ) : hash ? (\n \n ) : (\n content()\n )}\n \n )\n}\n\nexport default TransactionConfirmationModal\n","import { createAction } from '@reduxjs/toolkit'\n\nexport enum Field {\n LIQUIDITY_PERCENT = 'LIQUIDITY_PERCENT',\n LIQUIDITY = 'LIQUIDITY',\n CURRENCY_A = 'CURRENCY_A',\n CURRENCY_B = 'CURRENCY_B',\n}\n\nexport const typeInput = createAction<{ field: Field; typedValue: string }>('burn/typeInputBurn')\n","import { Currency, CurrencyAmount, Fraction, Percent } from '@pulsex/sdk'\nimport { Button, Text } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport { RowBetween, RowFixed } from '../../components/Layout/Row'\nimport { CurrencyLogo } from '../../components/Logo'\nimport { Field } from '../../state/mint/actions'\n\nfunction ConfirmAddModalBottom({\n noLiquidity,\n price,\n currencies,\n parsedAmounts,\n poolTokenPercentage,\n onAdd,\n}: {\n noLiquidity?: boolean\n price?: Fraction\n currencies: { [field in Field]?: Currency }\n parsedAmounts: { [field in Field]?: CurrencyAmount }\n poolTokenPercentage?: Percent\n onAdd: () => void\n}) {\n const { t } = useTranslation()\n return (\n <>\n \n {t('%asset% Deposited', { asset: currencies[Field.CURRENCY_A]?.symbol })}\n \n {parsedAmounts[Field.CURRENCY_A]?.toSignificant(6)}\n \n \n \n \n {t('%asset% Deposited', { asset: currencies[Field.CURRENCY_B]?.symbol })}\n \n {parsedAmounts[Field.CURRENCY_B]?.toSignificant(6)}\n \n \n \n \n {t('Rates')}\n \n {`1 ${currencies[Field.CURRENCY_A]?.symbol} = ${price?.toSignificant(4)} ${\n currencies[Field.CURRENCY_B]?.symbol\n }`}\n \n \n \n \n {`1 ${currencies[Field.CURRENCY_B]?.symbol} = ${price?.invert().toSignificant(4)} ${\n currencies[Field.CURRENCY_A]?.symbol\n }`}\n \n \n \n {t('Share of Pool')}:\n {noLiquidity ? '100' : poolTokenPercentage?.toSignificant(4)}%\n \n \n \n )\n}\n\nexport default ConfirmAddModalBottom\n","import { useCallback } from 'react'\nimport { Currency, CurrencyAmount, Fraction, Percent, Token } from '@pulsex/sdk'\nimport { Flex, InjectedModalProps, Text } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport TransactionConfirmationModal, {\n ConfirmationModalContent,\n TransactionErrorContent,\n} from 'components/TransactionConfirmationModal'\nimport { AutoColumn } from 'components/Layout/Column'\nimport Row from 'components/Layout/Row'\nimport { Field } from 'state/burn/actions'\nimport { DoubleCurrencyLogo } from 'components/Logo'\nimport ConfirmAddModalBottom from '../../AddLiquidity/ConfirmAddModalBottom'\n\ninterface ConfirmAddLiquidityModalProps {\n title: string\n customOnDismiss: () => void\n attemptingTxn: boolean\n hash: string\n pendingText: string\n currencies: { [field in Field]?: Currency }\n noLiquidity: boolean\n allowedSlippage: number\n liquidityErrorMessage: string\n price: Fraction\n parsedAmounts: { [field in Field]?: CurrencyAmount }\n onAdd: () => void\n poolTokenPercentage: Percent\n liquidityMinted: CurrencyAmount\n currencyToAdd: Token\n}\n\nconst ConfirmAddLiquidityModal: React.FC = ({\n title,\n onDismiss,\n customOnDismiss,\n attemptingTxn,\n hash,\n pendingText,\n price,\n currencies,\n noLiquidity,\n allowedSlippage,\n parsedAmounts,\n liquidityErrorMessage,\n onAdd,\n poolTokenPercentage,\n liquidityMinted,\n currencyToAdd,\n}) => {\n const { t } = useTranslation()\n\n const modalHeader = useCallback(() => {\n return noLiquidity ? (\n \n \n {`${currencies[Field.CURRENCY_A]?.symbol}/${currencies[Field.CURRENCY_B]?.symbol}`}\n \n \n \n ) : (\n \n \n \n {liquidityMinted?.toSignificant(6)}\n \n \n \n \n \n {`${currencies[Field.CURRENCY_A]?.symbol}/${currencies[Field.CURRENCY_B]?.symbol} Pool Tokens`}\n \n \n \n {t('Output is estimated. If the price changes by more than %slippage%% your transaction will revert.', {\n slippage: allowedSlippage / 100,\n })}\n \n \n )\n }, [currencies, liquidityMinted, allowedSlippage, noLiquidity, t])\n\n const modalBottom = useCallback(() => {\n return (\n \n )\n }, [currencies, noLiquidity, onAdd, parsedAmounts, poolTokenPercentage, price])\n\n const confirmationContent = useCallback(\n () =>\n liquidityErrorMessage ? (\n \n ) : (\n \n ),\n [onDismiss, modalBottom, modalHeader, liquidityErrorMessage],\n )\n\n return (\n \n )\n}\n\nexport default ConfirmAddLiquidityModal","import { Currency } from '@pulsex/sdk'\nimport useNativeCurrency from 'hooks/useNativeCurrency'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport { useNavigate, useParams } from 'react-router-dom'\nimport { useCallback } from 'react'\nimport { currencyId } from 'utils/currencyId'\nimport { PLSX, STABLE_COIN } from '@pulsex/tokens'\nimport { useAddLiquidityFormState } from '../../state/mint/reducer'\n\nexport const useCurrencySelectRoute = () => {\n const native = useNativeCurrency()\n const navigate = useNavigate()\n const { chainId } = useActiveChainId()\n\n const {\n currencyIdA,\n currencyIdB,\n } = useParams<{ currencyIdA?: string; currencyIdB?: string }>() || {\n currencyIdA: native.symbol,\n currencyIdB: PLSX[chainId]?.address ?? STABLE_COIN[chainId]?.address\n }\n\n // Use protocol of mint state instead of router query \n // as users can toggle using the protcol version button\n const { protocol } = useAddLiquidityFormState()\n\n const handleCurrencyASelect = useCallback(\n (currencyA_: Currency) => {\n const newCurrencyIdA = currencyId(currencyA_)\n if (newCurrencyIdA === currencyIdB) {\n navigate(`/add/${protocol}/${currencyIdB}/${currencyIdA}`)\n // router.replace(`/add/${protocol}/${currencyIdB}/${currencyIdA}`, undefined, { shallow: true })\n } else if (currencyIdB) {\n navigate(`/add/${protocol}/${newCurrencyIdA}/${currencyIdB}`)\n // router.replace(`/add/${protocol}/${newCurrencyIdA}/${currencyIdB}`, undefined, { shallow: true })\n } else {\n navigate(`/add/${protocol}/${newCurrencyIdA}`)\n // router.replace(`/add/${protocol}/${newCurrencyIdA}`, undefined, { shallow: true })\n }\n },\n [currencyIdB, currencyIdA, protocol, navigate],\n )\n const handleCurrencyBSelect = useCallback(\n (currencyB_: Currency) => {\n const newCurrencyIdB = currencyId(currencyB_)\n if (currencyIdA === newCurrencyIdB) {\n if (currencyIdB) {\n navigate(`/add/${protocol}/${currencyIdB}/${newCurrencyIdB}`)\n // router.replace(`/add/${protocol}/${currencyIdB}/${newCurrencyIdB}`, undefined, { shallow: true })\n } else {\n navigate(`/add/${protocol}/${newCurrencyIdB}`)\n // router.replace(`/add/${protocol}/${newCurrencyIdB}`, undefined, { shallow: true })\n }\n } else {\n navigate(`/add/${protocol}/${currencyIdA || native.symbol}/${newCurrencyIdB}`)\n // router.replace(`/add/${protocol}/${currencyIdA || native.symbol}/${newCurrencyIdB}`, undefined, { shallow: true })\n }\n },\n [currencyIdA, currencyIdB, native, protocol, navigate],\n )\n\n return {\n handleCurrencyASelect,\n handleCurrencyBSelect,\n }\n}\n","import { useCallback, useState, useMemo, useEffect, useRef } from 'react'\nimport { CurrencyAmount, Token, WPLS } from '@pulsex/sdk'\nimport { Button, ButtonMenu, ButtonMenuItem, Text, AddIcon, CardBody, Message, useModal } from '@pulsex/uikit'\nimport { PLSX, plsTokens } from '@pulsex/tokens'\nimport { isUserRejected } from 'utils/sentry'\nimport { transactionErrorToUserReadableMessage } from 'utils/transactionErrorToUserReadableMessage'\nimport { useCurrency } from 'hooks/Tokens'\nimport useNativeCurrency from 'hooks/useNativeCurrency'\nimport { useIsTransactionUnsupported } from 'hooks/Trades'\nimport { useTranslation } from '@pulsex/localization'\nimport UnsupportedCurrencyFooter from 'components/UnsupportedCurrencyFooter'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport { useParams } from 'react-router-dom'\nimport { calculateSlippageAmount, useRouterContractBothProtocols } from 'utils/exchange'\nimport { useAddLiquidityFormState } from 'state/mint/reducer'\nimport { Hash } from 'viem'\nimport { LightCard } from '../../components/Card'\nimport { AutoColumn, ColumnCenter } from '../../components/Layout/Column'\nimport CurrencyInputPanel from '../../components/CurrencyInputPanel'\nimport { AppHeader, AppBody } from '../../components/App'\nimport { MinimalPositionCard } from '../../components/PositionCard'\nimport { RowBetween } from '../../components/Layout/Row'\nimport ConnectWalletButton from '../../components/ConnectWalletButton'\n\nimport { ROUTER_ADDRESS_V1, ROUTER_ADDRESS_V2 } from '../../config/constants/exchange'\nimport { PairState } from '../../hooks/usePairs'\nimport { ApprovalState, useApproveCallback } from '../../hooks/useApproveCallback'\nimport useTransactionDeadline from '../../hooks/useTransactionDeadline'\nimport { Field } from '../../state/mint/actions'\nimport { useDerivedMintInfo, useMintActionHandlers } from '../../state/mint/hooks'\n\nimport { useTransactionAdder } from '../../state/transactions/hooks'\nimport { useIsExpertMode, usePairAdder, useUserSlippageTolerance } from '../../state/user/hooks'\nimport { calculateGasMargin } from '../../utils'\nimport { maxAmountSpend } from '../../utils/maxAmountSpend'\nimport Page from '../Page'\nimport Dots from '../../components/Loader/Dots'\nimport PoolPriceBar from './PoolPriceBar'\nimport ConfirmAddLiquidityModal from '../Swap/components/ConfirmAddLiquidityModal'\nimport { useCurrencySelectRoute } from './useCurrencySelectRoute'\n\nexport default function AddLiquidity() {\n const { account, chainId } = useActiveWeb3React()\n const native = useNativeCurrency()\n const {\n initialProtocol = '',\n currencyIdA = native.symbol,\n currencyIdB = PLSX[chainId]?.address ?? plsTokens.dai.address,\n } = useParams<{ initialProtocol?: string; currencyIdA?: string; currencyIdB?: string }>()\n \n const addPair = usePairAdder()\n const { t } = useTranslation()\n\n const currencyA = useCurrency(currencyIdA)\n const currencyB = useCurrency(currencyIdB)\n\n const oneCurrencyIsWPLS = Boolean(\n chainId &&\n ((currencyA && currencyA.equals(WPLS[chainId])) ||\n (currencyB && currencyB.equals(WPLS[chainId]))),\n )\n\n const expertMode = useIsExpertMode()\n\n // mint state\n const { independentField, typedValue, otherTypedValue, protocol } = useAddLiquidityFormState()\n const {\n dependentField,\n currencies,\n pair,\n pairState,\n currencyBalances,\n parsedAmounts,\n price,\n noLiquidity,\n liquidityMinted,\n poolTokenPercentage,\n error,\n } = useDerivedMintInfo(currencyA ?? undefined, currencyB ?? undefined)\n\n const { onFieldAInput, onFieldBInput, onChangeProtocol } = useMintActionHandlers(noLiquidity)\n\n // Allow to set initial protocol version from path\n const prevInitialProtocol = useRef('');\n useEffect(() => {\n if (initialProtocol && prevInitialProtocol.current !== initialProtocol) {\n onChangeProtocol(initialProtocol);\n prevInitialProtocol.current = initialProtocol;\n }\n }, [initialProtocol, onChangeProtocol]);\n\n const isValid = !error\n\n // modal and loading\n const [{ attemptingTxn, liquidityErrorMessage, txHash }, setLiquidityState] = useState<{\n attemptingTxn: boolean\n liquidityErrorMessage: string | undefined\n txHash: string | undefined\n }>({\n attemptingTxn: false,\n liquidityErrorMessage: undefined,\n txHash: undefined,\n })\n\n // txn values\n const deadline = useTransactionDeadline() // custom from users settings\n const [allowedSlippage] = useUserSlippageTolerance() // custom from users\n\n // get formatted amounts\n const formattedAmounts = useMemo(\n () => ({\n [independentField]: typedValue,\n [dependentField]: noLiquidity ? otherTypedValue : parsedAmounts[dependentField]?.toSignificant(6) ?? '',\n }),\n [\n dependentField,\n independentField,\n noLiquidity,\n otherTypedValue,\n parsedAmounts,\n typedValue\n ],\n )\n\n // get the max amounts user can add\n const maxAmounts: { [field in Field]?: CurrencyAmount } = [Field.CURRENCY_A, Field.CURRENCY_B].reduce(\n (accumulator, field) => {\n return {\n ...accumulator,\n [field]: maxAmountSpend(currencyBalances[field]),\n }\n },\n {},\n )\n\n const atMaxAmounts: { [field in Field]?: CurrencyAmount } = [Field.CURRENCY_A, Field.CURRENCY_B].reduce(\n (accumulator, field) => {\n return {\n ...accumulator,\n [field]: maxAmounts[field]?.equalTo(parsedAmounts[field] ?? '0'),\n }\n },\n {},\n )\n\n // check whether the user has approved the router on the tokens\n const routerAddress: string = useMemo(() => {\n return protocol === 'V1' ? ROUTER_ADDRESS_V1[chainId] : ROUTER_ADDRESS_V2[chainId]\n }, [protocol, chainId])\n const {\n approvalState: approvalA, \n approveCallback: approveACallback\n } = useApproveCallback(parsedAmounts[Field.CURRENCY_A], routerAddress)\n const {\n approvalState: approvalB,\n approveCallback: approveBCallback\n } = useApproveCallback(parsedAmounts[Field.CURRENCY_B], routerAddress)\n\n const addTransaction = useTransactionAdder()\n\n const routerContract = useRouterContractBothProtocols(protocol)\n\n async function onAdd() {\n if (!chainId || !account || !routerContract) return\n\n const { [Field.CURRENCY_A]: parsedAmountA, [Field.CURRENCY_B]: parsedAmountB } = parsedAmounts\n if (!parsedAmountA || !parsedAmountB || !currencyA || !currencyB || !deadline) {\n return\n }\n\n const amountsMin = {\n [Field.CURRENCY_A]: calculateSlippageAmount(parsedAmountA, noLiquidity ? 0 : allowedSlippage)[0],\n [Field.CURRENCY_B]: calculateSlippageAmount(parsedAmountB, noLiquidity ? 0 : allowedSlippage)[0],\n }\n\n // eslint-disable-next-line\n let estimate: any\n // eslint-disable-next-line\n let method: any\n // eslint-disable-next-line\n let args: Array\n let value: bigint | null\n if (currencyA?.isNative || currencyB?.isNative) {\n const tokenBIsNative = currencyB?.isNative\n estimate = routerContract.estimateGas.addLiquidityETH\n method = routerContract.write.addLiquidityETH\n args = [\n (tokenBIsNative ? currencyA : currencyB)?.wrapped?.address ?? '', // token\n (tokenBIsNative ? parsedAmountA : parsedAmountB).quotient.toString(), // token desired\n amountsMin[tokenBIsNative ? Field.CURRENCY_A : Field.CURRENCY_B].toString(), // token min\n amountsMin[tokenBIsNative ? Field.CURRENCY_B : Field.CURRENCY_A].toString(), // eth min\n account,\n deadline,\n ]\n value = (tokenBIsNative ? parsedAmountB : parsedAmountA).quotient\n } else {\n estimate = routerContract.estimateGas.addLiquidity\n method = routerContract.write.addLiquidity\n args = [\n currencyA?.wrapped?.address ?? '',\n currencyB?.wrapped?.address ?? '',\n parsedAmountA.quotient.toString(),\n parsedAmountB.quotient.toString(),\n amountsMin[Field.CURRENCY_A].toString(),\n amountsMin[Field.CURRENCY_B].toString(),\n account,\n deadline,\n ]\n value = null\n }\n\n setLiquidityState({ attemptingTxn: true, liquidityErrorMessage: undefined, txHash: undefined })\n await estimate(\n args,\n value\n ? { value, account: routerContract.account, chain: routerContract.chain }\n : { account: routerContract.account, chain: routerContract.chain },\n )\n .then((estimatedGasLimit) =>\n method(args, {\n ...(value ? { value } : {}),\n gasLimit: calculateGasMargin(estimatedGasLimit),\n // TODO: implement gasPrice calcs or oracle\n // gasPrice,\n }).then((response: Hash) => {\n setLiquidityState({ attemptingTxn: false, liquidityErrorMessage: undefined, txHash: response })\n\n const symbolA = currencies[Field.CURRENCY_A]?.symbol\n const amountA = parsedAmounts[Field.CURRENCY_A]?.toSignificant(3)\n const symbolB = currencies[Field.CURRENCY_B]?.symbol\n const amountB = parsedAmounts[Field.CURRENCY_B]?.toSignificant(3)\n addTransaction(\n { hash: response },\n {\n summary: `Add ${amountA} ${symbolA} and ${amountB} ${symbolB}`,\n translatableSummary: {\n text: 'Add %amountA% %symbolA% and %amountB% %symbolB%',\n data: { amountA, symbolA, amountB, symbolB },\n },\n type: 'add-liquidity',\n },\n )\n\n if (pair) {\n addPair(pair)\n }\n }),\n )\n ?.catch((err) => {\n if (err && !isUserRejected(err)) {\n console.error(`Add Liquidity failed`, err, args, value)\n }\n setLiquidityState({\n attemptingTxn: false,\n liquidityErrorMessage:\n err && !isUserRejected(err)\n ? t('Add liquidity failed: %message%', { message: transactionErrorToUserReadableMessage(err, t) })\n : undefined,\n txHash: undefined,\n })\n })\n }\n\n const pendingText = t('Supplying %amountA% %symbolA% and %amountB% %symbolB%', {\n amountA: parsedAmounts[Field.CURRENCY_A]?.toSignificant(6) ?? '',\n symbolA: currencies[Field.CURRENCY_A]?.symbol ?? '',\n amountB: parsedAmounts[Field.CURRENCY_B]?.toSignificant(6) ?? '',\n symbolB: currencies[Field.CURRENCY_B]?.symbol ?? '',\n })\n\n const { handleCurrencyASelect, handleCurrencyBSelect } = useCurrencySelectRoute()\n\n const handleDismissConfirmation = useCallback(() => {\n // if there was a tx hash, we want to clear the input\n if (txHash) {\n onFieldAInput('')\n }\n }, [onFieldAInput, txHash])\n\n const addIsUnsupported = useIsTransactionUnsupported(currencies?.CURRENCY_A, currencies?.CURRENCY_B)\n\n const [onPresentAddLiquidityModal_] = useModal(\n ,\n true,\n true,\n 'addLiquidityModal',\n )\n\n const onPresentAddLiquidityModal = useCallback(() => {\n setLiquidityState({\n attemptingTxn: false,\n liquidityErrorMessage: undefined,\n txHash: undefined,\n })\n onPresentAddLiquidityModal_()\n }, [onPresentAddLiquidityModal_])\n\n const protocolSelector =\n onChangeProtocol(index === 0 ? 'V1' : 'V2')}\n variant=\"subtle\"\n >\n V1\n V2\n \n\n return (\n \n \n \n \n \n {noLiquidity && (\n \n \n
    \n \n {t('You are the first liquidity provider.')}\n \n {t('The ratio of tokens you add will set the price of this pool.')}\n {t('Once you are happy with the rate click supply to review.')}\n
    \n
    \n
    \n )}\n {\n onFieldAInput(maxAmounts[Field.CURRENCY_A]?.toExact() ?? '')\n }}\n onCurrencySelect={handleCurrencyASelect}\n showMaxButton={!atMaxAmounts[Field.CURRENCY_A]}\n currency={currencies[Field.CURRENCY_A]}\n id=\"add-liquidity-input-tokena\"\n showCommonBases\n />\n \n \n \n {\n onFieldBInput(maxAmounts[Field.CURRENCY_B]?.toExact() ?? '')\n }}\n showMaxButton={!atMaxAmounts[Field.CURRENCY_B]}\n currency={currencies[Field.CURRENCY_B]}\n id=\"add-liquidity-input-tokenb\"\n showCommonBases\n />\n {currencies[Field.CURRENCY_A] && currencies[Field.CURRENCY_B] && pairState !== PairState.INVALID && (\n <>\n \n \n \n {noLiquidity ? t('Initial prices and pool share') : t('Prices and pool share')}\n \n {' '}\n \n \n \n \n \n )}\n\n {addIsUnsupported ? (\n \n ) : !account ? (\n \n ) : (\n \n {(approvalA === ApprovalState.NOT_APPROVED ||\n approvalA === ApprovalState.PENDING ||\n approvalB === ApprovalState.NOT_APPROVED ||\n approvalB === ApprovalState.PENDING) &&\n isValid && (\n \n {approvalA !== ApprovalState.APPROVED && (\n \n {approvalA === ApprovalState.PENDING ? (\n {t('Enabling %asset%', { asset: currencies[Field.CURRENCY_A]?.symbol })}\n ) : (\n t('Enable %asset%', { asset: currencies[Field.CURRENCY_A]?.symbol })\n )}\n \n )}\n {approvalB !== ApprovalState.APPROVED && (\n \n {approvalB === ApprovalState.PENDING ? (\n {t('Enabling %asset%', { asset: currencies[Field.CURRENCY_B]?.symbol })}\n ) : (\n t('Enable %asset%', { asset: currencies[Field.CURRENCY_B]?.symbol })\n )}\n \n )}\n \n )}\n {\n if (expertMode) {\n onAdd()\n } else {\n setLiquidityState({\n attemptingTxn: false,\n liquidityErrorMessage: undefined,\n txHash: undefined,\n })\n onPresentAddLiquidityModal()\n }\n }}\n disabled={!isValid || approvalA !== ApprovalState.APPROVED || approvalB !== ApprovalState.APPROVED}\n >\n {error ?? t('Supply')}\n \n \n )}\n
    \n
    \n
    \n {!addIsUnsupported ? (\n pair && !noLiquidity && pairState !== PairState.INVALID ? (\n \n \n \n ) : null\n ) : (\n \n )}\n
    \n )\n}\n","import { Hex, toBytes, toHex } from 'viem'\n\nexport function splitSignature(signature: Hex) {\n const bytes = toBytes(signature)\n if (bytes.length !== 65) {\n throw new Error('Invalid signature length')\n }\n let v = bytes[64]\n if (v < 27) {\n if (v === 0 || v === 1) {\n v += 27\n } else {\n throw new Error('Invalid signature v value')\n }\n }\n return {\n r: toHex(bytes.slice(0, 32)),\n s: toHex(bytes.slice(32, 64)),\n v,\n }\n}\n","import { createReducer } from '@reduxjs/toolkit'\nimport { atomWithReducer } from 'jotai/utils'\nimport { createContext, useContext } from 'react'\nimport { useAtomValue, useSetAtom } from 'jotai'\nimport { Field, typeInput } from './actions'\n\nexport interface BurnState {\n readonly independentField: Field\n readonly typedValue: string\n}\n\nconst initialState: BurnState = {\n independentField: Field.LIQUIDITY_PERCENT,\n typedValue: '0',\n}\n\nconst reducer = createReducer(initialState, (builder) =>\n builder.addCase(typeInput, (state, { payload: { field, typedValue } }) => {\n return {\n ...state,\n independentField: field,\n typedValue,\n }\n }),\n)\n\nexport const createFormAtom = () => atomWithReducer(initialState, reducer)\n\nconst RemoveLiquidityAtomContext = createContext({\n formAtom: createFormAtom(),\n})\n\nexport const RemoveLiquidityAtomProvider = RemoveLiquidityAtomContext.Provider\n\nexport function useRemoveLiquidityFormState() {\n const ctx = useContext(RemoveLiquidityAtomContext)\n return useAtomValue(ctx.formAtom)\n}\n\nexport function useRemoveLiquidityFormDispatch() {\n const ctx = useContext(RemoveLiquidityAtomContext)\n return useSetAtom(ctx.formAtom)\n}\n","import { Currency, CurrencyAmount, PairV1, PairV2, Percent, Token } from '@pulsex/sdk'\nimport { useCallback, useMemo } from 'react'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport { wrappedCurrency } from 'utils/wrappedCurrency'\nimport { usePairBothProtocols } from 'hooks/usePairs'\nimport { useTotalSupply } from 'hooks/useTotalSupply'\n\nimport { useTranslation } from '@pulsex/localization'\nimport tryParseAmount from '@pulsex/utils/tryParseAmount'\nimport { useRemoveLiquidityFormDispatch, useRemoveLiquidityFormState } from 'state/burn/reducer'\nimport { useAddLiquidityFormState } from 'state/mint/reducer'\nimport { useTokenBalances } from '../wallet/hooks'\nimport { Field, typeInput } from './actions'\n\nexport function useDerivedBurnInfo(\n currencyA: Currency | undefined,\n currencyB: Currency | undefined,\n): {\n pair?: PairV1 | PairV2 | null\n parsedAmounts: {\n [Field.LIQUIDITY_PERCENT]: Percent\n [Field.LIQUIDITY]?: CurrencyAmount\n [Field.CURRENCY_A]?: CurrencyAmount\n [Field.CURRENCY_B]?: CurrencyAmount\n }\n error?: string\n} {\n const { account, chainId } = useActiveWeb3React()\n\n const { independentField, typedValue } = useRemoveLiquidityFormState()\n const { protocol } = useAddLiquidityFormState()\n\n const { t } = useTranslation()\n\n // pair + totalsupply\n const [, pair] = usePairBothProtocols(currencyA, currencyB, protocol)\n\n // balances\n const relevantTokenBalances = useTokenBalances(\n account ?? undefined,\n useMemo(() => [pair?.liquidityToken], [pair?.liquidityToken]),\n )\n const userLiquidity: undefined | CurrencyAmount = relevantTokenBalances?.[pair?.liquidityToken?.address ?? '']\n\n const [tokenA, tokenB] = [wrappedCurrency(currencyA, chainId), wrappedCurrency(currencyB, chainId)]\n const tokens = {\n [Field.CURRENCY_A]: tokenA,\n [Field.CURRENCY_B]: tokenB,\n [Field.LIQUIDITY]: pair?.liquidityToken,\n }\n\n // liquidity values\n const totalSupply = useTotalSupply(pair?.liquidityToken)\n const liquidityValueA =\n pair && totalSupply && userLiquidity && tokenA && totalSupply.quotient >= userLiquidity.quotient\n ? CurrencyAmount.fromRawAmount(tokenA, pair.getLiquidityValue(tokenA, totalSupply, userLiquidity, false).quotient)\n : undefined\n\n const liquidityValueB =\n pair && totalSupply && userLiquidity && tokenB && totalSupply.quotient >= userLiquidity.quotient\n ? CurrencyAmount.fromRawAmount(tokenB, pair.getLiquidityValue(tokenB, totalSupply, userLiquidity, false).quotient)\n : undefined\n const liquidityValues: { [Field.CURRENCY_A]?: CurrencyAmount; [Field.CURRENCY_B]?: CurrencyAmount } = {\n [Field.CURRENCY_A]: liquidityValueA,\n [Field.CURRENCY_B]: liquidityValueB,\n }\n\n let percentToRemove: Percent = new Percent('0', '100')\n // user specified a %\n if (independentField === Field.LIQUIDITY_PERCENT) {\n percentToRemove = new Percent(typedValue, '100')\n }\n // user specified a specific amount of liquidity tokens\n else if (independentField === Field.LIQUIDITY) {\n if (pair?.liquidityToken) {\n const independentAmount = tryParseAmount(typedValue, pair.liquidityToken)\n if (independentAmount && userLiquidity && !independentAmount.greaterThan(userLiquidity)) {\n percentToRemove = new Percent(independentAmount.quotient, userLiquidity.quotient)\n }\n }\n }\n // user specified a specific amount of token a or b\n else if (tokens[independentField]) {\n const independentAmount = tryParseAmount(typedValue, tokens[independentField])\n const liquidityValue = liquidityValues[independentField]\n if (independentAmount && liquidityValue && !independentAmount.greaterThan(liquidityValue)) {\n percentToRemove = new Percent(independentAmount.quotient, liquidityValue.quotient)\n }\n }\n\n const parsedAmounts: {\n [Field.LIQUIDITY_PERCENT]: Percent\n [Field.LIQUIDITY]?: CurrencyAmount\n [Field.CURRENCY_A]?: CurrencyAmount\n [Field.CURRENCY_B]?: CurrencyAmount\n } = {\n [Field.LIQUIDITY_PERCENT]: percentToRemove,\n [Field.LIQUIDITY]:\n userLiquidity && percentToRemove && percentToRemove.greaterThan('0')\n ? CurrencyAmount.fromRawAmount(userLiquidity.currency, percentToRemove.multiply(userLiquidity.quotient).quotient)\n : undefined,\n [Field.CURRENCY_A]:\n tokenA && percentToRemove && percentToRemove.greaterThan('0') && liquidityValueA\n ? CurrencyAmount.fromRawAmount(tokenA, percentToRemove.multiply(liquidityValueA.quotient).quotient)\n : undefined,\n [Field.CURRENCY_B]:\n tokenB && percentToRemove && percentToRemove.greaterThan('0') && liquidityValueB\n ? CurrencyAmount.fromRawAmount(tokenB, percentToRemove.multiply(liquidityValueB.quotient).quotient)\n : undefined,\n }\n\n let error: string | undefined\n if (!account) {\n error = t('Connect Wallet')\n }\n\n if (\n !parsedAmounts[Field.LIQUIDITY] ||\n !parsedAmounts[Field.CURRENCY_A] ||\n !parsedAmounts[Field.CURRENCY_B]\n ) {\n error = error ?? t('Enter an amount')\n }\n\n return { pair, parsedAmounts, error }\n}\n\nexport function useBurnActionHandlers(): {\n onUserInput: (field: Field, typedValue: string) => void\n} {\n const dispatch = useRemoveLiquidityFormDispatch()\n\n const onUserInput = useCallback(\n (field: Field, typedValue: string) => {\n dispatch(typeInput({ field, typedValue }))\n },\n [dispatch],\n )\n\n return {\n onUserInput,\n }\n}\n","import { useCallback } from 'react'\nimport { Currency, CurrencyAmount, PairV1, Percent, Token } from '@pulsex/sdk'\nimport { AddIcon, Button, InjectedModalProps, Text } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport TransactionConfirmationModal, {\n ConfirmationModalContent,\n TransactionErrorContent,\n} from 'components/TransactionConfirmationModal'\nimport { AutoColumn } from 'components/Layout/Column'\nimport { RowBetween, RowFixed } from 'components/Layout/Row'\nimport { Field } from 'state/burn/actions'\nimport { CurrencyLogo, DoubleCurrencyLogo } from 'components/Logo'\nimport { ApprovalState } from 'hooks/useApproveCallback'\n\ninterface ConfirmRemoveLiquidityModalProps {\n title: string\n customOnDismiss: () => void\n attemptingTxn: boolean\n pair?: PairV1\n hash: string\n pendingText: string\n parsedAmounts: {\n [Field.LIQUIDITY_PERCENT]: Percent\n [Field.LIQUIDITY]?: CurrencyAmount\n [Field.CURRENCY_A]?: CurrencyAmount\n [Field.CURRENCY_B]?: CurrencyAmount\n }\n allowedSlippage: number\n onRemove: () => void\n liquidityErrorMessage: string\n approval: ApprovalState\n signatureData?: any\n tokenA: Token\n tokenB: Token\n currencyA: Currency | null | undefined\n currencyB: Currency | null | undefined\n}\n\nconst ConfirmRemoveLiquidityModal: React.FC = ({\n title,\n onDismiss,\n customOnDismiss,\n attemptingTxn,\n pair,\n hash,\n approval,\n signatureData,\n pendingText,\n parsedAmounts,\n allowedSlippage,\n onRemove,\n liquidityErrorMessage,\n tokenA,\n tokenB,\n currencyA,\n currencyB,\n}) => {\n const { t } = useTranslation()\n\n const modalHeader = useCallback(() => {\n return (\n \n \n {parsedAmounts[Field.CURRENCY_A]?.toSignificant(6)}\n \n \n \n {currencyA?.symbol}\n \n \n \n \n \n \n \n {parsedAmounts[Field.CURRENCY_B]?.toSignificant(6)}\n \n \n \n {currencyB?.symbol}\n \n \n \n\n \n {t('Output is estimated. If the price changes by more than %slippage%% your transaction will revert.', {\n slippage: allowedSlippage / 100,\n })}\n \n \n )\n }, [allowedSlippage, currencyA, currencyB, parsedAmounts, t])\n\n const modalBottom = useCallback(() => {\n return (\n <>\n \n \n {t('%assetA%/%assetB% Burned', { assetA: currencyA?.symbol ?? '', assetB: currencyB?.symbol ?? '' })}\n \n \n \n {parsedAmounts[Field.LIQUIDITY]?.toSignificant(6)}\n \n \n {pair && (\n <>\n \n {t('Price')}\n \n 1 {currencyA?.symbol} = {tokenA ? pair.priceOf(tokenA).toSignificant(6) : '-'} {currencyB?.symbol}\n \n \n \n
    \n \n 1 {currencyB?.symbol} = {tokenB ? pair.priceOf(tokenB).toSignificant(6) : '-'} {currencyA?.symbol}\n \n \n \n )}\n \n \n )\n }, [currencyA, currencyB, parsedAmounts, approval, onRemove, pair, signatureData, tokenA, tokenB, t])\n\n const confirmationContent = useCallback(\n () =>\n liquidityErrorMessage ? (\n \n ) : (\n \n ),\n [onDismiss, modalBottom, modalHeader, liquidityErrorMessage],\n )\n\n return (\n \n )\n}\n\nexport default ConfirmRemoveLiquidityModal","import { useCallback, useMemo, useState } from 'react'\nimport { styled } from 'styled-components'\nimport { useNavigate, useParams } from 'react-router-dom'\nimport { Currency, Percent, WPLS } from '@pulsex/sdk'\nimport {\n AddIcon,\n ArrowDownIcon,\n Box,\n Button,\n CardBody,\n Flex,\n Link,\n Slider,\n Text, \n useModal,\n useToast\n} from '@pulsex/uikit'\nimport { useSignTypedData } from 'wagmi'\nimport { useTranslation } from '@pulsex/localization'\nimport { useDebouncedChangeHandler } from '@pulsex/hooks'\nimport { calculateSlippageAmount, useRouterContractBothProtocols } from 'utils/exchange'\nimport { splitSignature } from 'utils/splitSignature'\nimport { Address, Hash } from 'viem'\nimport { transactionErrorToUserReadableMessage } from 'utils/transactionErrorToUserReadableMessage'\nimport { useRemoveLiquidityFormState } from 'state/burn/reducer'\nimport { isUserRejected } from 'utils/sentry'\nimport { AutoColumn, ColumnCenter } from 'components/Layout/Column'\nimport CurrencyInputPanel from 'components/CurrencyInputPanel'\nimport { MinimalPositionCard } from 'components/PositionCard'\nimport { AppHeader, AppBody } from 'components/App'\nimport { RowBetween } from 'components/Layout/Row'\nimport ConnectWalletButton from 'components/ConnectWalletButton'\nimport { LightGreyCard } from 'components/Card'\nimport { CurrencyLogo } from 'components/Logo'\nimport { ROUTER_ADDRESS_V1, ROUTER_ADDRESS_V2 } from 'config/constants/exchange'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport { useCurrency } from 'hooks/Tokens'\nimport { usePairContract } from 'hooks/useContract'\nimport useTransactionDeadline from 'hooks/useTransactionDeadline'\nimport { useTransactionAdder } from 'state/transactions/hooks'\nimport { calculateGasMargin } from 'utils'\nimport { currencyId } from 'utils/currencyId'\nimport { wrappedCurrency } from 'utils/wrappedCurrency'\nimport { useApproveCallback, ApprovalState } from 'hooks/useApproveCallback'\nimport Dots from 'components/Loader/Dots'\nimport { useBurnActionHandlers, useDerivedBurnInfo } from 'state/burn/hooks'\nimport { useAddLiquidityFormState } from 'state/mint/reducer'\nimport { Field } from 'state/burn/actions'\nimport { useUserSlippageTolerance } from 'state/user/hooks'\nimport ConfirmLiquidityModal from '../Swap/components/ConfirmRemoveLiquidityModal'\n// import { useGasPrice } from 'state/user/hooks'\n\nconst StyledPage = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n padding: 16px;\n padding-bottom: 65px;\n min-height: calc(100vh - 77px);\n background: ${({ theme }) => theme.colors.gradientBubblegum};\n\n ${({ theme }) => theme.mediaQueries.xs} {\n padding: 24px\n background-size: auto;\n }\n\n ${({ theme }) => theme.mediaQueries.sm} {\n padding: 24px;\n }\n\n ${({ theme }) => theme.mediaQueries.lg} {\n padding: 32px;\n min-height: calc(100vh - 77px);\n }\n`\n\nconst BorderCard = styled.div`\n border: solid 1px ${({ theme }) => theme.colors.cardBorder};\n border-radius: 10px;\n padding: 16px;\n`\n\nexport default function RemoveLiquidity() {\n const navigate = useNavigate()\n const {\n currencyIdA = '',\n currencyIdB = '',\n } = useParams<{ currencyIdA?: string; currencyIdB?: string }>()\n const [currencyA, currencyB] = [useCurrency(currencyIdA) ?? undefined, useCurrency(currencyIdB) ?? undefined]\n const { account, chainId } = useActiveWeb3React()\n const { signTypedDataAsync } = useSignTypedData()\n const { toastError } = useToast()\n const { protocol } = useAddLiquidityFormState()\n const routerContract = useRouterContractBothProtocols(protocol)\n const [tokenA, tokenB] = useMemo(\n () => [wrappedCurrency(currencyA, chainId), wrappedCurrency(currencyB, chainId)],\n [currencyA, currencyB, chainId],\n )\n\n const { t } = useTranslation()\n\n // burn state\n const { independentField, typedValue } = useRemoveLiquidityFormState()\n const { pair, parsedAmounts, error } = useDerivedBurnInfo(currencyA ?? undefined, currencyB ?? undefined)\n const { onUserInput: _onUserInput } = useBurnActionHandlers()\n const isValid = !error\n\n // modal and loading\n const [showDetailed, setShowDetailed] = useState(false)\n const [{ attemptingTxn, liquidityErrorMessage, txHash }, setLiquidityState] = useState<{\n attemptingTxn: boolean\n liquidityErrorMessage: string | undefined\n txHash: string | undefined\n }>({\n attemptingTxn: false,\n liquidityErrorMessage: undefined,\n txHash: undefined,\n })\n\n // txn values\n const deadline = useTransactionDeadline()\n const [allowedSlippage] = useUserSlippageTolerance()\n\n const formattedAmounts = {\n [Field.LIQUIDITY_PERCENT]: parsedAmounts[Field.LIQUIDITY_PERCENT].equalTo('0')\n ? '0'\n : parsedAmounts[Field.LIQUIDITY_PERCENT].lessThan(new Percent('1', '100'))\n ? '<1'\n : parsedAmounts[Field.LIQUIDITY_PERCENT].toFixed(0),\n [Field.LIQUIDITY]:\n independentField === Field.LIQUIDITY ? typedValue : parsedAmounts[Field.LIQUIDITY]?.toSignificant(6) ?? '',\n [Field.CURRENCY_A]:\n independentField === Field.CURRENCY_A ? typedValue : parsedAmounts[Field.CURRENCY_A]?.toSignificant(6) ?? '',\n [Field.CURRENCY_B]:\n independentField === Field.CURRENCY_B ? typedValue : parsedAmounts[Field.CURRENCY_B]?.toSignificant(6) ?? '',\n }\n\n const atMaxAmount = parsedAmounts[Field.LIQUIDITY_PERCENT]?.equalTo(new Percent('1'))\n\n // pair contract\n const pairContractRead = usePairContract(pair?.liquidityToken?.address)\n\n // allowance handling\n const [signatureData, setSignatureData] = useState<{ v: number; r: string; s: string; deadline: number } | null>(null)\n const { approvalState, approveCallback } = useApproveCallback(\n parsedAmounts[Field.LIQUIDITY], \n protocol === 'V1' ? ROUTER_ADDRESS_V1[chainId] : ROUTER_ADDRESS_V2[chainId]\n )\n\n async function onAttemptToApprove() {\n if (!pairContractRead || !pair || !signTypedDataAsync || !deadline) throw new Error('missing dependencies')\n const liquidityAmount = parsedAmounts[Field.LIQUIDITY]\n if (!liquidityAmount) {\n toastError(t('Error'), t('Missing liquidity amount'))\n throw new Error('missing liquidity amount')\n }\n\n // try to gather a signature for permission\n const nonce = await pairContractRead.read.nonces([account])\n\n const EIP712Domain = [\n { name: 'name', type: 'string' },\n { name: 'version', type: 'string' },\n { name: 'chainId', type: 'uint256' },\n { name: 'verifyingContract', type: 'address' },\n ]\n const domain = {\n name: 'PulseX LP',\n version: '1',\n chainId,\n verifyingContract: pair.liquidityToken.address as Address,\n }\n const Permit = [\n { name: 'owner', type: 'address' },\n { name: 'spender', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ]\n const message = {\n owner: account,\n spender: protocol === 'V1' ? ROUTER_ADDRESS_V1[chainId] : ROUTER_ADDRESS_V2[chainId],\n value: liquidityAmount.quotient.toString(),\n nonce,\n deadline: Number(deadline),\n }\n\n signTypedDataAsync({\n // @ts-ignore\n domain,\n primaryType: 'Permit',\n types: {\n EIP712Domain,\n Permit,\n },\n message,\n })\n .then(splitSignature)\n .then((signature) => {\n setSignatureData({\n v: signature.v,\n r: signature.r,\n s: signature.s,\n deadline: Number(deadline),\n })\n })\n .catch((err) => {\n // for all errors other than 4001 (EIP-1193 user rejected request), fall back to manual approve\n if (!isUserRejected(err)) {\n approveCallback()\n }\n })\n }\n\n // wrapped onUserInput to clear signatures\n const onUserInput = useCallback(\n (field: Field, value: string) => {\n setSignatureData(null)\n return _onUserInput(field, value)\n },\n [_onUserInput],\n )\n\n const onLiquidityInput = useCallback((value: string): void => onUserInput(Field.LIQUIDITY, value), [onUserInput])\n const onCurrencyAInput = useCallback((value: string): void => onUserInput(Field.CURRENCY_A, value), [onUserInput])\n const onCurrencyBInput = useCallback((value: string): void => onUserInput(Field.CURRENCY_B, value), [onUserInput])\n\n // tx sending\n const addTransaction = useTransactionAdder()\n async function onRemove() {\n if (!chainId || !account || !deadline || !routerContract) throw new Error('missing dependencies')\n const { [Field.CURRENCY_A]: currencyAmountA, [Field.CURRENCY_B]: currencyAmountB } = parsedAmounts\n if (!currencyAmountA || !currencyAmountB) {\n toastError(t('Error'), t('Missing currency amounts'))\n throw new Error('missing currency amounts')\n }\n\n const amountsMin = {\n [Field.CURRENCY_A]: calculateSlippageAmount(currencyAmountA, allowedSlippage)[0],\n [Field.CURRENCY_B]: calculateSlippageAmount(currencyAmountB, allowedSlippage)[0],\n }\n\n if (!currencyA || !currencyB) {\n toastError(t('Error'), t('Missing tokens'))\n throw new Error('missing tokens')\n }\n const liquidityAmount = parsedAmounts[Field.LIQUIDITY]\n if (!liquidityAmount) {\n toastError(t('Error'), t('Missing liquidity amount'))\n throw new Error('missing liquidity amount')\n }\n\n const currencyBIsETH = currencyB?.isNative\n const oneCurrencyIsETH = currencyA?.isNative || currencyBIsETH\n\n if (!tokenA || !tokenB) {\n toastError(t('Error'), t('Could not wrap'))\n throw new Error('could not wrap')\n }\n\n let methodNames: string[]\n let args\n // we have approval, use normal remove liquidity\n if (approvalState === ApprovalState.APPROVED) {\n // removeLiquidityETH\n if (oneCurrencyIsETH) {\n methodNames = ['removeLiquidityETH', 'removeLiquidityETHSupportingFeeOnTransferTokens']\n args = [\n currencyBIsETH ? tokenA.address : tokenB.address,\n liquidityAmount.quotient.toString(),\n amountsMin[currencyBIsETH ? Field.CURRENCY_A : Field.CURRENCY_B].toString(),\n amountsMin[currencyBIsETH ? Field.CURRENCY_B : Field.CURRENCY_A].toString(),\n account,\n deadline,\n ]\n }\n // removeLiquidity\n else {\n methodNames = ['removeLiquidity']\n args = [\n tokenA.address,\n tokenB.address,\n liquidityAmount.quotient.toString(),\n amountsMin[Field.CURRENCY_A].toString(),\n amountsMin[Field.CURRENCY_B].toString(),\n account,\n deadline,\n ]\n }\n }\n // we have a signature, use permit versions of remove liquidity\n else if (signatureData !== null) {\n // removeLiquidityETHWithPermit\n if (oneCurrencyIsETH) {\n methodNames = ['removeLiquidityETHWithPermit', 'removeLiquidityETHWithPermitSupportingFeeOnTransferTokens']\n args = [\n currencyBIsETH ? tokenA.address : tokenB.address,\n liquidityAmount.quotient.toString(),\n amountsMin[currencyBIsETH ? Field.CURRENCY_A : Field.CURRENCY_B].toString(),\n amountsMin[currencyBIsETH ? Field.CURRENCY_B : Field.CURRENCY_A].toString(),\n account,\n signatureData.deadline,\n false,\n signatureData.v,\n signatureData.r,\n signatureData.s,\n ]\n }\n // removeLiquidityETHWithPermit\n else {\n methodNames = ['removeLiquidityWithPermit']\n args = [\n tokenA.address,\n tokenB.address,\n liquidityAmount.quotient.toString(),\n amountsMin[Field.CURRENCY_A].toString(),\n amountsMin[Field.CURRENCY_B].toString(),\n account,\n signatureData.deadline,\n false,\n signatureData.v,\n signatureData.r,\n signatureData.s,\n ]\n }\n } else {\n toastError(t('Error'), t('Attempting to confirm without approval or a signature'))\n throw new Error('Attempting to confirm without approval or a signature')\n }\n\n let methodSafeGasEstimate: { methodName: string; safeGasEstimate: bigint }\n for (let i = 0; i < methodNames.length; i++) {\n let safeGasEstimate\n try {\n // eslint-disable-next-line no-await-in-loop\n safeGasEstimate = calculateGasMargin(await routerContract.estimateGas[methodNames[i]](args, { account }))\n } catch (e) {\n console.error(`estimateGas failed`, methodNames[i], args, e)\n }\n\n if (typeof safeGasEstimate === 'bigint') {\n methodSafeGasEstimate = { methodName: methodNames[i], safeGasEstimate }\n break\n }\n }\n\n // all estimations failed...\n if (!methodSafeGasEstimate) {\n toastError(t('Error'), t('This transaction would fail'))\n } else {\n const { methodName, safeGasEstimate } = methodSafeGasEstimate\n\n setLiquidityState({ attemptingTxn: true, liquidityErrorMessage: undefined, txHash: undefined })\n await routerContract.write[methodName](args, {\n gasLimit: safeGasEstimate,\n // TODO: implement gasPrice calculation or oracle\n // gasPrice,\n })\n .then((response: Hash) => {\n setLiquidityState({ attemptingTxn: false, liquidityErrorMessage: undefined, txHash: response })\n const amountA = parsedAmounts[Field.CURRENCY_A]?.toSignificant(3)\n const amountB = parsedAmounts[Field.CURRENCY_B]?.toSignificant(3)\n addTransaction(\n { hash: response },\n {\n summary: `Remove ${amountA} ${currencyA?.symbol} and ${amountB} ${currencyB?.symbol}`,\n translatableSummary: {\n text: 'Remove %amountA% %symbolA% and %amountB% %symbolB%',\n data: { amountA, symbolA: currencyA?.symbol, amountB, symbolB: currencyB?.symbol },\n },\n type: 'remove-liquidity',\n },\n )\n })\n .catch((err) => {\n if (err && !isUserRejected(err)) {\n console.error(`Remove Liquidity failed`, err, args)\n }\n setLiquidityState({\n attemptingTxn: false,\n liquidityErrorMessage:\n err && !isUserRejected(err)\n ? t('Remove liquidity failed: %message%', { message: transactionErrorToUserReadableMessage(err, t) })\n : undefined,\n txHash: undefined,\n })\n })\n }\n }\n\n const pendingText = t('Removing %amountA% %symbolA% and %amountB% %symbolB%', {\n amountA: parsedAmounts[Field.CURRENCY_A]?.toSignificant(6) ?? '',\n symbolA: currencyA?.symbol ?? '',\n amountB: parsedAmounts[Field.CURRENCY_B]?.toSignificant(6) ?? '',\n symbolB: currencyB?.symbol ?? '',\n })\n\n const liquidityPercentChangeCallback = useCallback(\n (value: number) => {\n onUserInput(Field.LIQUIDITY_PERCENT, value.toString())\n },\n [onUserInput],\n )\n\n const oneCurrencyIsPLS = currencyA?.isNative || currencyB?.isNative\n const oneCurrencyIsWPLS = Boolean(\n chainId &&\n ((currencyA && currencyA.equals(WPLS[chainId])) ||\n (currencyB && currencyB.equals(WPLS[chainId]))),\n )\n\n const handleSelectCurrencyA = useCallback(\n (currency: Currency) => {\n if (currencyIdB && currencyId(currency) === currencyIdB) {\n navigate(`/remove/${currencyId(currency)}/${currencyIdA}`, { replace: true })\n } else {\n navigate(`/remove/${currencyId(currency)}/${currencyIdB}`, { replace: true })\n }\n },\n [currencyIdA, currencyIdB, navigate],\n )\n const handleSelectCurrencyB = useCallback(\n (currency: Currency) => {\n if (currencyIdA && currencyId(currency) === currencyIdA) {\n navigate(`/remove/${currencyIdB}/${currencyId(currency)}`, { replace: true })\n } else {\n navigate(`/remove/${currencyIdA}/${currencyId(currency)}`, { replace: true })\n }\n },\n [currencyIdA, currencyIdB, navigate],\n )\n\n const handleDismissConfirmation = useCallback(() => {\n setSignatureData(null) // important that we clear signature data to avoid bad sigs\n // if there was a tx hash, we want to clear the input\n if (txHash) {\n onUserInput(Field.LIQUIDITY_PERCENT, '0')\n }\n }, [onUserInput, txHash])\n\n const [innerLiquidityPercentage, setInnerLiquidityPercentage] = useDebouncedChangeHandler(\n Number.parseInt(parsedAmounts[Field.LIQUIDITY_PERCENT].toFixed(0)),\n liquidityPercentChangeCallback,\n )\n\n const [onPresentRemoveLiquidity] = useModal(\n ,\n true,\n true,\n 'removeLiquidityModal',\n )\n\n return (\n \n \n \n\n \n \n \n {t('Amount')}\n \n \n {!showDetailed && (\n \n \n {formattedAmounts[Field.LIQUIDITY_PERCENT]}%\n \n setInnerLiquidityPercentage(Math.ceil(value))}\n mb=\"26px\"\n />\n \n \n \n \n \n \n \n )}\n \n {!showDetailed && (\n <>\n \n \n \n \n \n {t('You will receive')}\n \n \n \n \n \n \n {currencyA?.symbol}\n \n \n {formattedAmounts[Field.CURRENCY_A] || '-'}\n \n \n \n \n \n {currencyB?.symbol}\n \n \n {formattedAmounts[Field.CURRENCY_B] || '-'}\n \n {chainId && (oneCurrencyIsWPLS || oneCurrencyIsPLS) ? (\n \n {oneCurrencyIsPLS ? (\n \n {t('Receive WPLS')}\n \n ) : oneCurrencyIsWPLS ? (\n \n {t('Receive PLS')}\n \n ) : null}\n \n ) : null}\n \n \n \n )}\n\n {showDetailed && (\n \n {\n onUserInput(Field.LIQUIDITY_PERCENT, '100')\n }}\n showMaxButton={!atMaxAmount}\n disableCurrencySelect\n currency={pair?.liquidityToken}\n pair={pair}\n id=\"liquidity-amount\"\n onCurrencySelect={() => null}\n />\n \n \n \n onUserInput(Field.LIQUIDITY_PERCENT, '100')}\n showMaxButton={!atMaxAmount}\n currency={currencyA}\n label={t('Output')}\n onCurrencySelect={handleSelectCurrencyA}\n id=\"remove-liquidity-tokena\"\n />\n \n \n \n onUserInput(Field.LIQUIDITY_PERCENT, '100')}\n showMaxButton={!atMaxAmount}\n currency={currencyB}\n label={t('Output')}\n onCurrencySelect={handleSelectCurrencyB}\n id=\"remove-liquidity-tokenb\"\n />\n \n )}\n {pair && (\n \n \n {t('Prices')}\n \n \n \n \n 1 {currencyA?.symbol} =\n \n \n {tokenA ? pair.priceOf(tokenA).toSignificant(6) : '-'} {currencyB?.symbol}\n \n \n \n \n 1 {currencyB?.symbol} =\n \n \n {tokenB ? pair.priceOf(tokenB).toSignificant(6) : '-'} {currencyA?.symbol}\n \n \n \n \n )}\n \n {!account ? (\n \n ) : (\n \n \n {approvalState === ApprovalState.PENDING ? (\n {t('Enabling')}\n ) : approvalState === ApprovalState.APPROVED || signatureData !== null ? (\n t('Enabled')\n ) : (\n t('Enable')\n )}\n \n {\n setLiquidityState({\n attemptingTxn: false,\n liquidityErrorMessage: undefined,\n txHash: undefined,\n })\n onPresentRemoveLiquidity()\n }}\n width=\"100%\"\n disabled={!isValid || (signatureData === null && approvalState !== ApprovalState.APPROVED)}\n >\n {error || t('Remove')}\n \n \n )}\n \n \n \n\n {pair ? (\n \n \n \n ) : null}\n \n )\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\n\n/**\n * Easy way to debounce the handling of a rapidly changing value, e.g. a changing slider input\n * @param value value that is rapidly changing\n * @param onChange change handler that should receive the debounced updates to the value\n * @param debouncedMs how long we should wait for changes to be applied\n */\nexport default function useDebouncedChangeHandler(\n value: T,\n onChange: (newValue: T) => void,\n debouncedMs = 100,\n): [T, (value: T) => void] {\n const [inner, setInner] = useState(() => value)\n const timer = useRef>()\n\n const onChangeInner = useCallback(\n (newValue: T) => {\n setInner(newValue)\n if (timer.current) {\n clearTimeout(timer.current)\n }\n timer.current = setTimeout(() => {\n onChange(newValue)\n timer.current = undefined\n }, debouncedMs)\n },\n [debouncedMs, onChange],\n )\n\n useEffect(() => {\n if (timer.current) {\n clearTimeout(timer.current)\n timer.current = undefined\n }\n setInner(value)\n }, [value])\n\n return [inner, onChangeInner]\n}\n","import { styled } from 'styled-components'\nimport { Box, Link, Text, useMatchBreakpoints } from '@pulsex/uikit'\nimport packageJson from '../../../../package.json'\n\nconst Wrapper = styled(Box)`\n display: flex;\n flex-direction: column;\n align-items: left;\n`\n\nexport const VersionTag = () => {\n const version = packageJson?.version\n const { isMobile } = useMatchBreakpoints()\n\n return (\n \n \n v{version}\n \n Check for update\n \n \n \n )\n}\n","import { Box, BoxProps } from '@pulsex/uikit'\n\nconst Container: React.FC = ({ children, ...props }) => (\n \n {children}\n \n)\n\nexport default Container\n","import { Box } from '@pulsex/uikit'\nimport { styled } from 'styled-components'\nimport Container from './Container'\n\nconst StyledPage = styled(Box)`\n width: 100%;\n min-height: calc(100vh - 77px);\n background: ${({ theme }) => theme.colors.gradientBubblegum};\n`\nconst StyledContainer = styled(Container)`\n min-height: calc(100vh - 77px);\n padding-top: 16px;\n padding-bottom: 70px;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n padding-top: 24px;\n padding-bottom: 24px;\n }\n\n ${({ theme }) => theme.mediaQueries.lg} {\n padding-top: 32px;\n padding-bottom: 32px;\n }\n`\n\nconst Page: React.FC>> = ({ children, ...props }) => {\n return (\n <>\n \n {children} \n \n \n )\n}\n\nexport default Page\n","import styled from 'styled-components'\nimport { Button, Heading, Text, LogoIcon } from '@pulsex/uikit'\nimport Page from 'components/Layout/Page'\nimport { useTranslation } from '@pulsex/localization'\nimport { Link } from 'react-router-dom'\n\nconst StyledNotFound = styled.div`\n align-items: center;\n display: flex;\n flex-direction: column;\n height: calc(100vh - 64px);\n justify-content: center;\n`\n\nconst NotFound = () => {\n const { t } = useTranslation()\n\n return (\n \n \n \n 404\n {t('Oops, page not found.')}\n \n \n \n \n \n )\n}\n\nexport default NotFound\n","const ARCHIVED_FARMS_START_PID = 1000\nconst ARCHIVED_FARMS_END_PID = 5000\n\nconst isArchivedPid = (pid: number) => pid >= ARCHIVED_FARMS_START_PID && pid <= ARCHIVED_FARMS_END_PID\n\nexport default isArchivedPid\n","export const Latinise = {\n latin_map: {\n τ: 't',\n Τ: 'T',\n },\n}\n\nexport const latinise = (input: string) => {\n return input.replace(/[^A-Za-z0-9[\\] ]/g, (x) => Latinise.latin_map[x] || x)\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { useLocation } from \"react-router\";\nimport { Link } from 'react-router-dom';\nimport { useTranslation } from \"@pulsex/localization\";\nimport { NotificationDot, ButtonMenu, ButtonMenuItem, Flex } from \"@pulsex/uikit\";\n\nconst Wrapper = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n margin-left: 0px;\n }\n`;\n\nexport interface FarmTabButtonsProps {\n hasStakeInFinishedFarms: boolean;\n}\n\nexport const FarmTabButtons: React.FC> = ({ hasStakeInFinishedFarms }) => {\n const { pathname } = useLocation();\n const { t } = useTranslation();\n\n let activeIndex;\n switch (pathname) {\n case \"/farms\":\n activeIndex = 0;\n break;\n case \"/farms/history\":\n activeIndex = 1;\n break;\n case \"/_mp/farms/history\":\n activeIndex = 1;\n break;\n case \"/farms/archived\":\n activeIndex = 2;\n break;\n default:\n activeIndex = 0;\n break;\n }\n\n return (\n \n \n {/* \n {t(\"Filter by\")}\n */}\n \n \n {t(\"Live\")}\n \n \n \n {t(\"Finished\")}\n \n \n \n \n \n );\n};\n","import { styled } from \"styled-components\";\nimport { Flex, CalculateIcon, IconButton } from \"@pulsex/uikit\";\n\nconst ApyLabelContainer = styled(Flex)`\n cursor: pointer;\n &:hover {\n opacity: 0.5;\n }\n`;\n\nexport interface FarmApyButtonProps {\n hideButton?: boolean;\n strikethrough?: boolean;\n variant: \"text\" | \"text-and-button\";\n handleClickButton: (event: React.MouseEvent) => void;\n}\n\nexport const FarmApyButton: React.FC> = ({\n hideButton,\n variant,\n strikethrough,\n handleClickButton,\n children,\n}) => {\n const handleClick = (event: React.MouseEvent) => {\n if (hideButton) return;\n handleClickButton(event);\n };\n\n return (\n \n \n {children}\n {variant === \"text-and-button\" && (\n \n \n \n )}\n \n \n );\n};\n","import { useTranslation } from \"@pulsex/localization\";\nimport {\n Tag,\n TagProps,\n BlockIcon,\n CommunityIcon,\n RefreshIcon,\n TimerIcon,\n VerifiedIcon,\n VoteIcon,\n CheckmarkCircleIcon,\n} from \"@pulsex/uikit\";\n\nconst CoreTag: React.FC> = (props) => {\n const { t } = useTranslation();\n return (\n }\n {...props}\n >\n {t(\"Core\")}\n \n );\n};\n\nconst CommunityTag: React.FC> = (props) => {\n const { t } = useTranslation();\n return (\n }\n {...props}\n >\n {t(\"Community\")}\n \n );\n};\n\nconst DualTag: React.FC> = (props) => {\n const { t } = useTranslation();\n return (\n \n {t(\"Dual\")}\n \n );\n};\n\nconst ManualPoolTag: React.FC> = (props) => {\n const { t } = useTranslation();\n return (\n }\n {...props}\n >\n {t(\"Manual\")}\n \n );\n};\n\nconst VoteNowTag: React.FC> = (props) => {\n const { t } = useTranslation();\n return (\n } {...props}>\n {t(\"Vote Now\")}\n \n );\n};\n\nconst VotedTag: React.FC> = (props) => {\n const { t } = useTranslation();\n return (\n }\n {...props}\n >\n {t(\"Voted\")}\n \n );\n};\n\nconst SoonTag: React.FC> = (props) => {\n const { t } = useTranslation();\n return (\n } {...props}>\n {t(\"Soon\")}\n \n );\n};\n\nconst ClosedTag: React.FC> = (props) => {\n const { t } = useTranslation();\n return (\n } {...props}>\n {t(\"Closed\")}\n \n );\n};\n\nconst ProtocolTag: React.FC> = ({ protocol, ...props }) => {\n return (\n \n {protocol}\n \n );\n};\n\nconst Tags = {\n CoreTag,\n DualTag,\n ManualPoolTag,\n VoteNowTag,\n SoonTag,\n ClosedTag,\n CommunityTag,\n VotedTag,\n ProtocolTag,\n};\n\nexport default Tags;\n","import { useTranslation } from \"@pulsex/localization\";\nimport { styled } from \"styled-components\";\nimport {\n Flex,\n LinkExternal,\n Skeleton,\n Text,\n} from \"@pulsex/uikit\";\n\nexport interface ExpandableSectionProps {\n scanAddressLink?: string;\n infoAddress?: string;\n removed?: boolean;\n totalValueFormatted?: string;\n lpLabel: string;\n addLiquidityUrl: string;\n isCommunity?: boolean;\n auctionHostingEndDate?: string;\n alignLinksToRight?: boolean;\n}\n\nconst Wrapper = styled.div`\n margin-top: 24px;\n`;\n\nconst StyledLinkExternal = styled(LinkExternal)`\n font-weight: 400;\n`;\n\nexport const DetailsSection: React.FC> = ({\n scanAddressLink,\n infoAddress,\n removed,\n totalValueFormatted,\n lpLabel,\n addLiquidityUrl,\n isCommunity,\n auctionHostingEndDate,\n alignLinksToRight = true,\n}) => {\n const {\n t,\n currentLanguage: { locale },\n } = useTranslation();\n\n return (\n \n {isCommunity && auctionHostingEndDate && (\n \n {t(\"Auction Hosting Ends\")}:\n \n {new Date(auctionHostingEndDate).toLocaleString(locale, {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n })}\n \n \n )}\n \n {t(\"Total Liquidity\")}:\n {totalValueFormatted ? {totalValueFormatted} : }\n \n {!removed && (\n \n {t(\"Get %symbol%\", { symbol: lpLabel })}\n \n )}\n {infoAddress && (\n \n {t(\"See Pair Info\")}\n \n )}\n {scanAddressLink && (\n \n {t('View Contract')}\n \n )}\n \n );\n};\n","import { DetailsSection } from \"./DetailsSection\";\n\nconst FarmCard = {\n DetailsSection,\n};\n\nexport default FarmCard;\n","import { BigNumber } from \"bignumber.js\";\nimport { useMemo } from \"react\";\nimport { formatLpBalance, getBalanceNumber } from \"@pulsex/utils/formatBalance\";\nimport { Flex, Balance, Heading, RefreshIcon } from \"@pulsex/uikit\";\n\nexport interface StakedLPProps {\n stakedBalance: BigNumber;\n tokenSymbol: string;\n quoteTokenSymbol: string;\n lpTotalSupply: BigNumber;\n lpTokenPrice: BigNumber;\n tokenAmountTotal: BigNumber;\n quoteTokenAmountTotal: BigNumber;\n pendingFarmLength?: number;\n decimals: number;\n onClickLoadingIcon?: () => void;\n}\n\nconst StakedLP: React.FunctionComponent> = ({\n stakedBalance,\n quoteTokenSymbol,\n tokenSymbol,\n lpTotalSupply,\n lpTokenPrice,\n tokenAmountTotal,\n quoteTokenAmountTotal,\n pendingFarmLength = 0,\n decimals,\n onClickLoadingIcon,\n}) => {\n const displayBalance = useMemo(() => {\n return formatLpBalance(stakedBalance, decimals);\n }, [stakedBalance, decimals]);\n\n return (\n \n \n {displayBalance}\n {pendingFarmLength > 0 && }\n \n {stakedBalance.gt(0) && lpTokenPrice?.gt(0) && (\n <>\n \n \n \n \n \n \n )}\n \n );\n};\n\nexport default StakedLP;\n","import BigNumber from \"bignumber.js\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { styled } from \"styled-components\";\nimport _toNumber from \"lodash/toNumber\";\nimport { useTranslation } from \"@pulsex/localization\";\nimport { getFullDisplayBalance, formatNumber, getDecimalAmount } from \"@pulsex/utils/formatBalance\";\nimport { getInterestBreakdown } from \"@pulsex/utils/compoundApyHelpers\";\nimport { BIG_ZERO } from \"@pulsex/utils/bigNumber\";\nimport {\n Modal,\n ModalV2,\n ModalBody,\n ModalActions,\n ModalInput,\n Flex,\n Text,\n Button,\n IconButton,\n LinkExternal,\n Skeleton,\n AutoRenewIcon,\n CalculateIcon,\n RoiCalculatorModal,\n} from \"@pulsex/uikit\";\nimport { trimTrailZero } from \"@pulsex/utils/trimTrailZero\";\n\nconst AnnualRoiContainer = styled(Flex)`\n cursor: pointer;\n`;\n\nconst AnnualRoiDisplay = styled(Text)`\n width: 72px;\n max-width: 72px;\n overflow: hidden;\n text-align: right;\n text-overflow: ellipsis;\n`;\n\nexport interface DepositModalProps {\n account: string;\n pid: number;\n max: BigNumber;\n stakedBalance: BigNumber;\n multiplier?: string;\n lpPrice?: BigNumber;\n lpLabel?: string;\n tokenName?: string;\n apr?: number;\n displayApr?: string;\n addLiquidityUrl?: string;\n incPrice?: BigNumber;\n lpTotalSupply: BigNumber;\n decimals: number;\n allowance?: BigNumber;\n enablePendingTx?: boolean;\n onDismiss?: () => void;\n onConfirm: (amount: string) => void;\n handleApprove?: () => void;\n}\n\nconst DepositModal: React.FC> = ({\n account,\n max,\n stakedBalance,\n tokenName = \"\",\n multiplier,\n displayApr,\n lpPrice = BIG_ZERO,\n lpLabel = \"\",\n apr = 0,\n addLiquidityUrl = \"\",\n incPrice = BIG_ZERO,\n decimals,\n allowance,\n enablePendingTx,\n onConfirm,\n onDismiss,\n handleApprove,\n}) => {\n const [val, setVal] = useState(\"\");\n const [valUSDPrice, setValUSDPrice] = useState(BIG_ZERO);\n const [pendingTx, setPendingTx] = useState(false);\n const [showRoiCalculator, setShowRoiCalculator] = useState(false);\n const { t } = useTranslation();\n const fullBalance = useMemo(() => {\n return getFullDisplayBalance(max, decimals);\n }, [max, decimals]);\n\n const needEnable = useMemo(() => {\n if (allowance) {\n const amount = getDecimalAmount(new BigNumber(val), decimals);\n return amount.gt(allowance);\n }\n return false;\n }, [allowance, decimals, val]);\n\n const lpTokensToStake = new BigNumber(val);\n const fullBalanceNumber = useMemo(() => new BigNumber(fullBalance), [fullBalance]);\n\n const usdToStake = lpTokensToStake.times(lpPrice);\n\n const interestBreakdown = getInterestBreakdown({\n principalInUSD: !lpTokensToStake.isNaN() ? usdToStake.toNumber() : 0,\n apr,\n earningTokenPrice: incPrice.toNumber(),\n });\n\n const annualRoi = incPrice.times(interestBreakdown[3]);\n const annualRoiAsNumber = annualRoi.toNumber();\n const formattedAnnualRoi = formatNumber(annualRoiAsNumber, annualRoi.gt(10000) ? 0 : 2, annualRoi.gt(10000) ? 0 : 2);\n\n const handleChange = useCallback(\n (e: React.FormEvent) => {\n if (e.currentTarget.validity.valid) {\n const inputVal = e.currentTarget.value.replace(/,/g, \".\");\n setVal(inputVal);\n\n const USDPrice = inputVal === \"\" ? BIG_ZERO : new BigNumber(inputVal).times(lpPrice);\n setValUSDPrice(USDPrice);\n }\n },\n [setVal, setValUSDPrice, lpPrice]\n );\n\n const handleSelectMax = useCallback(() => {\n setVal(fullBalance);\n\n const USDPrice = new BigNumber(fullBalance).times(lpPrice);\n setValUSDPrice(USDPrice);\n }, [fullBalance, setVal, setValUSDPrice, lpPrice]);\n\n const handlePercentInput = useCallback(\n (percent: number) => {\n const totalAmount = fullBalanceNumber.dividedBy(100).multipliedBy(percent);\n const amount = trimTrailZero(totalAmount.toNumber().toFixed(decimals));\n setVal(amount as string);\n\n const USDPrice = totalAmount.times(lpPrice);\n setValUSDPrice(USDPrice);\n },\n [fullBalanceNumber, decimals, lpPrice]\n );\n\n if (showRoiCalculator) {\n return (\n \n setShowRoiCalculator(false)}\n />\n \n );\n }\n\n return (\n \n \n \n \n \n {t(\"Annual ROI at current rates\")}:\n \n {Number.isFinite(annualRoiAsNumber) ? (\n {\n setShowRoiCalculator(true);\n }}\n >\n ${formattedAnnualRoi}\n \n \n \n \n ) : (\n \n )}\n \n \n \n {needEnable ? (\n : null}\n onClick={handleApprove}\n >\n {t(\"Enable\")}\n \n ) : pendingTx ? (\n \n ) : (\n {\n setPendingTx(true);\n await onConfirm(val);\n onDismiss?.();\n setPendingTx(false);\n }}\n >\n {t(\"Confirm\")}\n \n )}\n \n \n {t(\"Get %symbol%\", { symbol: tokenName })}\n \n \n \n );\n};\n\nexport default DepositModal;\n","import BigNumber from \"bignumber.js\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { useTranslation } from \"@pulsex/localization\";\nimport { getFullDisplayBalance } from \"@pulsex/utils/formatBalance\";\nimport { trimTrailZero } from \"@pulsex/utils/trimTrailZero\";\nimport { BIG_ZERO } from \"@pulsex/utils/bigNumber\";\nimport {\n Button,\n AutoRenewIcon,\n Modal,\n ModalBody,\n ModalActions,\n ModalInput,\n} from \"@pulsex/uikit\";\n\nexport interface WithdrawModalProps {\n max: BigNumber;\n lpPrice?: BigNumber;\n onConfirm: (amount: string) => void;\n onDismiss?: () => void;\n tokenName?: string;\n decimals: number;\n}\n\nconst WithdrawModal: React.FC> = ({\n onConfirm,\n onDismiss,\n max,\n lpPrice = BIG_ZERO,\n tokenName = \"\",\n decimals,\n}) => {\n const [val, setVal] = useState(\"\");\n const [valUSDPrice, setValUSDPrice] = useState(BIG_ZERO);\n const [pendingTx, setPendingTx] = useState(false);\n const { t } = useTranslation();\n const fullBalance = useMemo(() => {\n return getFullDisplayBalance(max, decimals);\n }, [max, decimals]);\n\n const valNumber = new BigNumber(val);\n const fullBalanceNumber = useMemo(() => new BigNumber(fullBalance), [fullBalance]);\n\n const handleChange = useCallback(\n (e: React.FormEvent) => {\n if (e.currentTarget.validity.valid) {\n const inputVal = e.currentTarget.value.replace(/,/g, \".\");\n setVal(inputVal);\n\n const USDPrice = inputVal === \"\" ? BIG_ZERO : new BigNumber(inputVal).times(lpPrice);\n setValUSDPrice(USDPrice);\n }\n },\n [setVal, setValUSDPrice, lpPrice]\n );\n\n const handleSelectMax = useCallback(() => {\n setVal(fullBalance);\n\n const USDPrice = new BigNumber(fullBalance).times(lpPrice);\n setValUSDPrice(USDPrice);\n }, [fullBalance, setVal, setValUSDPrice, lpPrice]);\n\n const handlePercentInput = useCallback(\n (percent: number) => {\n const totalAmount = fullBalanceNumber.dividedBy(100).multipliedBy(percent);\n const amount = trimTrailZero(totalAmount.toNumber().toFixed(decimals));\n setVal(amount as string);\n\n const USDPrice = totalAmount.times(lpPrice);\n setValUSDPrice(USDPrice);\n },\n [fullBalanceNumber, decimals, lpPrice]\n );\n\n return (\n \n \n \n \n \n {pendingTx ? (\n \n ) : (\n {\n setPendingTx(true);\n await onConfirm(val);\n onDismiss?.();\n setPendingTx(false);\n }}\n >\n {t(\"Confirm\")}\n \n )}\n \n \n \n );\n};\n\nexport default WithdrawModal;\n","import { styled } from \"styled-components\";\n\nconst Label = styled.div`\n font-size: 12px;\n color: ${({ theme }) => theme.colors.textSubtle};\n text-align: left;\n`;\n\nconst ContentContainer = styled.div`\n min-height: 24px;\n display: flex;\n align-items: center;\n`;\n\nexport interface CellLayoutProps {\n label?: string;\n}\n\nconst CellLayout: React.FC> = ({ label = \"\", children }) => {\n return (\n
    \n {label && }\n {children}\n
    \n );\n};\n\nexport default CellLayout;\n","import { styled } from \"styled-components\";\n\nexport const Amount = styled.span<{ amount: number }>`\n color: ${({ amount, theme }) => (amount ? theme.colors.text : theme.colors.textDisabled)};\n display: flex;\n align-items: center;\n`;\n","import { Skeleton } from \"@pulsex/uikit\";\nimport { FarmTableEarnedProps } from \"../../types\";\nimport { Amount } from \"../styles\";\n\nexport interface EarnedPropsWithLoading extends FarmTableEarnedProps {\n userDataReady: boolean;\n}\n\nconst Earned: React.FunctionComponent> = ({\n earnings,\n userDataReady,\n}) => {\n const amount = earnings > 0 ? earnings : 0;\n\n if (userDataReady) {\n return {amount?.toLocaleString(\"en-US\", { maximumFractionDigits: 4 })};\n }\n return (\n \n \n \n );\n};\n\nexport default Earned;\n","import { styled } from \"styled-components\";\nimport { useTranslation } from \"@pulsex/localization\";\nimport { ChevronDownIcon, useMatchBreakpoints } from \"@pulsex/uikit\";\n\nexport interface DetailsProps {\n actionPanelToggled: boolean;\n}\n\nconst Container = styled.div`\n display: flex;\n width: 100%;\n justify-content: flex-end;\n padding-right: 8px;\n color: ${({ theme }) => theme.colors.primary};\n\n ${({ theme }) => theme.mediaQueries.sm} {\n padding-right: 0px;\n }\n`;\n\nconst ArrowIcon = styled(ChevronDownIcon)<{ $toggled?: boolean }>`\n transform: ${({ $toggled }) => ($toggled ? \"rotate(180deg)\" : \"rotate(0)\")};\n height: 20px;\n`;\n\nconst Details: React.FC> = ({ actionPanelToggled }) => {\n const { t } = useTranslation();\n const { isDesktop } = useMatchBreakpoints();\n\n return (\n \n {!isDesktop && t(\"Details\")}\n \n \n );\n};\n\nexport default Details;\n","import { styled } from \"styled-components\";\nimport { useTranslation } from \"@pulsex/localization\";\nimport { Skeleton, Text } from \"@pulsex/uikit\";\nimport { FarmTableLiquidityProps } from \"../../types\";\n\nconst LiquidityWrapper = styled.div`\n min-width: 110px;\n font-weight: 600;\n text-align: right;\n margin-right: 14px;\n\n ${({ theme }) => theme.mediaQueries.lg} {\n text-align: left;\n margin-right: 0;\n }\n`;\n\nconst Container = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst Liquidity: React.FunctionComponent> = ({ liquidity }) => {\n const displayLiquidity =\n liquidity && liquidity.gt(0) ? (\n `$${Number(liquidity).toLocaleString(undefined, { maximumFractionDigits: 0 })}`\n ) : (\n \n );\n const { t } = useTranslation();\n\n return (\n \n \n {displayLiquidity}\n \n \n );\n};\n\nexport default Liquidity;\n","import { useTranslation } from \"@pulsex/localization\";\nimport { styled } from \"styled-components\";\nimport { HelpIcon, Skeleton, Text, useTooltip } from \"@pulsex/uikit\";\nimport { FarmTableMultiplierProps } from \"../../types\";\n\nconst ReferenceElement = styled.div`\n display: inline-block;\n`;\n\nconst MultiplierWrapper = styled.div`\n color: ${({ theme }) => theme.colors.text};\n width: 36px;\n text-align: right;\n margin-right: 14px;\n\n ${({ theme }) => theme.mediaQueries.lg} {\n text-align: left;\n margin-right: 0;\n }\n`;\n\nconst Container = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst Multiplier: React.FunctionComponent> = ({\n multiplier,\n}) => {\n const displayMultiplier = multiplier ? multiplier.toLowerCase() : ;\n const { t } = useTranslation();\n const tooltipContent = (\n <>\n \n {t(\n \"The Multiplier represents the proportion of INC rewards each farm receives, as a proportion of the INC produced each second.\"\n )}\n \n \n {\" \"}\n {t(\"For example, if a 1x farm received 1 INC per second, a 40x farm would receive 40 INC per second.\")}\n \n {t(\"This amount is already included in all APR calculations for the farm.\")}\n \n );\n const { targetRef, tooltip, tooltipVisible } = useTooltip(tooltipContent, {\n placement: \"top-end\",\n tooltipOffset: [20, 10],\n });\n\n return (\n \n {displayMultiplier}\n \n \n \n {tooltipVisible && tooltip}\n \n );\n};\n\nexport default Multiplier;\n","import { styled } from \"styled-components\";\nimport { useTranslation } from \"@pulsex/localization\";\nimport { getBalanceNumber } from \"@pulsex/utils/formatBalance\";\nimport { Flex, Text } from \"@pulsex/uikit\";\nimport { FarmTableFarmTokenInfoProps } from \"../../types\";\n\nconst Container = styled.div`\n padding-left: 16px;\n display: flex;\n align-items: center;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n padding-left: 32px;\n }\n`;\n\nconst TokenWrapper = styled.div`\n padding-right: 8px;\n width: 40px;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n width: 40px;\n }\n`;\n\nconst Farm: React.FunctionComponent> = ({\n label,\n isReady,\n stakedBalance,\n children,\n}) => {\n const { t } = useTranslation();\n const rawStakedBalance = stakedBalance ? getBalanceNumber(stakedBalance) : 0;\n\n const handleRenderFarming = (): JSX.Element => {\n if (rawStakedBalance) {\n return (\n \n {t(\"Farming\")}\n \n );\n }\n return <>;\n };\n\n // if (!isReady) {\n // return (\n // \n // \n //
    \n // \n // \n //
    \n //
    \n // );\n // }\n\n const pairContainer = (\n \n {children}\n
    \n {handleRenderFarming()}\n {label}\n
    \n
    \n );\n\n return {pairContainer};\n};\n\nexport default Farm;\n","import { styled } from \"styled-components\";\n\nexport const ActionContainer = styled.div`\n padding: 16px;\n border: 2px solid ${({ theme }) => theme.colors.input};\n border-radius: 16px;\n flex-grow: 1;\n flex-basis: 0;\n margin-bottom: 16px;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n margin-left: 12px;\n margin-right: 12px;\n margin-bottom: 12px;\n /* max-height: 130px; */\n }\n\n ${({ theme }) => theme.mediaQueries.xl} {\n margin-right: 0;\n margin-bottom: 0;\n /* max-height: 130px; */\n }\n`;\n\nexport const ActionTitles = styled.div`\n display: flex;\n margin-bottom: 8px;\n`;\n\nexport const ActionContent = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n`;\n\nexport const IconButtonWrapper = styled.div`\n display: flex;\n`;\n\nexport const StyledActionContainer = styled(ActionContainer)`\n &:nth-child(3) {\n flex-basis: 100%;\n }\n min-height: 124.5px;\n ${({ theme }) => theme.mediaQueries.sm} {\n &:nth-child(3) {\n margin-top: 16px;\n }\n }\n`;\n","import { useTranslation } from \"@pulsex/localization\";\nimport BigNumber from \"bignumber.js\";\nimport { Button, Heading, Text, Balance } from \"@pulsex/uikit\";\nimport { ActionContainer, ActionContent, ActionTitles } from \"./styles\";\n\nexport interface HarvestActionProps {\n earnings: BigNumber;\n earningsUsd: number;\n displayBalance: string | JSX.Element;\n pendingTx: boolean;\n userDataReady: boolean;\n handleHarvest: () => void;\n}\n\nconst HarvestAction: React.FunctionComponent> = ({\n earnings,\n earningsUsd,\n displayBalance,\n pendingTx,\n userDataReady,\n handleHarvest,\n}) => {\n const { t } = useTranslation();\n\n return (\n \n \n \n INC\n \n \n {t(\"Earned\")}\n \n \n \n
    \n {displayBalance}\n {earningsUsd > 0 && (\n \n )}\n
    \n \n
    \n
    \n );\n};\n\nexport default HarvestAction;\n","import CellLayout from \"./CellLayout\";\nimport Earned from \"./Earned\";\nimport Details from \"./Details\";\nimport Liquidity from \"./Liquidity\";\nimport Multiplier from \"./Multiplier\";\nimport FarmTokenInfo from \"./FarmTokenInfo\";\nimport FarmTableHarvestAction from \"./Actions/HarvestAction\";\nimport AccountNotConnect from \"./Actions/AccountNotConnect\";\nimport StakeComponent from \"./Actions/StakeComponent\";\nimport StakeActionDataNotReady from \"./Actions/StakeActionDataNotReady\";\nimport EnableStakeAction from \"./Actions/EnableStakeAction\";\nimport StakedActionComponent from \"./Actions/StakedActionComponent\";\n\nconst FarmTable = {\n CellLayout,\n Earned,\n Details,\n Liquidity,\n Multiplier,\n FarmTokenInfo,\n FarmTableHarvestAction,\n AccountNotConnect,\n StakeComponent,\n StakeActionDataNotReady,\n EnableStakeAction,\n StakedActionComponent,\n};\n\nexport default FarmTable;\n","import { useTranslation } from \"@pulsex/localization\";\nimport { Text } from \"@pulsex/uikit\";\nimport { ActionContent, ActionTitles, StyledActionContainer } from \"./styles\";\n\nconst AccountNotConnect = ({ children }: { children: React.ReactNode }) => {\n const { t } = useTranslation();\n\n return (\n \n \n \n {t(\"Start Farming\")}\n \n \n {children}\n \n );\n};\n\nexport default AccountNotConnect;\n","import { useTranslation } from \"@pulsex/localization\";\nimport { StyledActionContainer, ActionContent, ActionTitles } from \"./styles\";\nimport { Text, Button } from \"@pulsex/uikit\";\n\nexport interface StakeComponentProps {\n lpSymbol: string;\n isStakeReady: boolean;\n onPresentDeposit: () => void;\n}\n\nconst StakeComponent: React.FunctionComponent> = ({\n lpSymbol,\n isStakeReady,\n onPresentDeposit,\n}) => {\n const { t } = useTranslation();\n\n return (\n \n \n \n {t(\"Stake\")}\n \n \n {lpSymbol}\n \n \n \n \n \n \n );\n};\n\nexport default StakeComponent;\n","import { useTranslation } from \"@pulsex/localization\";\nimport { Text, Skeleton } from \"@pulsex/uikit\";\nimport { StyledActionContainer, ActionContent, ActionTitles } from \"./styles\";\n\nconst StakeActionDataNotReady = () => {\n const { t } = useTranslation();\n return (\n \n \n \n {t(\"Start Farming\")}\n \n \n \n \n \n \n );\n};\n\nexport default StakeActionDataNotReady;\n","import { useTranslation } from \"@pulsex/localization\";\nimport { Text, Button } from \"@pulsex/uikit\";\nimport { StyledActionContainer, ActionContent, ActionTitles } from \"./styles\";\n\nexport interface EnableStakeActionProps {\n pendingTx: boolean;\n handleApprove: () => void;\n}\n\nconst EnableStakeAction: React.FunctionComponent> = ({\n pendingTx,\n handleApprove,\n}) => {\n const { t } = useTranslation();\n\n return (\n \n \n \n {t(\"Enable Farm\")}\n \n \n \n \n \n \n );\n};\n\nexport default EnableStakeAction;\n","import { ReactNode } from \"react\";\nimport { useTranslation } from \"@pulsex/localization\";\nimport { Text, IconButton, MinusIcon, AddIcon } from \"@pulsex/uikit\";\nimport { StyledActionContainer, ActionContent, ActionTitles, IconButtonWrapper } from \"./styles\";\n\nexport interface StakedActionComponentProps {\n lpSymbol: string;\n children?: ReactNode;\n disabledMinusButton?: boolean;\n disabledPlusButton?: boolean;\n onPresentWithdraw: () => void;\n onPresentDeposit: () => void;\n}\n\nconst StakedActionComponent: React.FunctionComponent> = ({\n lpSymbol,\n children,\n disabledMinusButton,\n disabledPlusButton,\n onPresentWithdraw,\n onPresentDeposit,\n}) => {\n const { t } = useTranslation();\n\n return (\n \n \n \n {lpSymbol}\n \n \n {t(\"Staked\")}\n \n \n \n {children}\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default StakedActionComponent;\n","import { ReactNode } from \"react\";\nimport BigNumber from \"bignumber.js\";\nimport { Token } from \"@pulsex/sdk\";\n\nexport interface FarmTableEarnedProps {\n earnings: number;\n pid: number;\n}\n\nexport interface FarmTableLiquidityProps {\n liquidity: BigNumber;\n}\n\nexport interface FarmTableMultiplierProps {\n multiplier: string;\n rewardCakePerSecond?: boolean;\n}\n\nexport interface FarmTableFarmTokenInfoProps {\n label: string;\n pid: number;\n token: Token;\n quoteToken: Token;\n isReady: boolean;\n isStable?: boolean;\n isBoosted?: boolean;\n stakedBalance?: BigNumber;\n children?: ReactNode;\n}\n\nexport type ColumnsDefTypes = {\n id: number;\n label: string;\n name: string;\n sortable: boolean;\n};\n\nexport const MobileColumnSchema: ColumnsDefTypes[] = [\n {\n id: 1,\n name: \"farm\",\n sortable: true,\n label: \"\",\n },\n {\n id: 2,\n name: \"earned\",\n sortable: true,\n label: \"Earned\",\n },\n {\n id: 3,\n name: \"apr\",\n sortable: true,\n label: \"APR\",\n },\n {\n id: 6,\n name: \"details\",\n sortable: true,\n label: \"\",\n },\n];\n\nexport const DesktopColumnSchema: ColumnsDefTypes[] = [\n {\n id: 1,\n name: \"farm\",\n sortable: true,\n label: \"\",\n },\n {\n id: 8,\n name: \"protocol\",\n sortable: false,\n label: \"\",\n },\n {\n id: 4,\n name: \"apr\",\n sortable: true,\n label: \"APR\",\n },\n {\n id: 5,\n name: \"liquidity\",\n sortable: true,\n label: \"Liquidity\",\n },\n {\n id: 3,\n name: \"earned\",\n sortable: true,\n label: \"Earned\",\n },\n // {\n // id: 2,\n // name: \"type\",\n // sortable: false,\n // label: \"\",\n // },\n // {\n // id: 6,\n // name: \"multiplier\",\n // sortable: true,\n // label: \"Multiplier\",\n // },\n {\n id: 7,\n name: \"details\",\n sortable: true,\n label: \"\",\n },\n];\n","import BigNumber from \"bignumber.js\";\n\nexport const FARMS_SMALL_AMOUNT_THRESHOLD = new BigNumber(0.00001);\n","import _get from 'lodash/get'\n\nconst Latinise = {\n latin_map: {\n τ: 't',\n Τ: 'T',\n },\n}\n\nconst latinise = (input: string) => {\n return input.replace(/[^A-Za-z0-9[\\] ]/g, (x: string) => _get(Latinise, `latin_map.${x}`) || x)\n}\n\nexport default latinise\n","import { MouseEvent } from 'react'\nimport BigNumber from 'bignumber.js'\nimport { useModal, RoiCalculatorModal } from '@pulsex/uikit'\nimport { FarmWidget } from '@pulsex/widgets-internal'\nimport { useTranslation } from '@pulsex/localization'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport { useFarmUser } from 'state/farms/hooks'\n\nexport interface ApyButtonProps {\n variant: 'text' | 'text-and-button'\n pid: number\n lpSymbol: string\n lpTokenPrice: BigNumber\n lpLabel?: string\n multiplier: string\n incPrice?: BigNumber\n apr?: number\n displayApr?: string\n lpRewardsApr?: number\n addLiquidityUrl?: string\n hideButton?: boolean\n}\n\nconst ApyButton: React.FC> = ({\n variant,\n pid,\n lpLabel,\n lpTokenPrice,\n lpSymbol,\n incPrice,\n apr,\n multiplier,\n displayApr,\n addLiquidityUrl,\n hideButton\n}) => {\n const { t } = useTranslation()\n const { account } = useActiveWeb3React()\n const { tokenBalance, stakedBalance } = useFarmUser(pid)\n\n const userBalanceInFarm = stakedBalance.plus(tokenBalance).gt(0)\n ? stakedBalance.plus(tokenBalance) : new BigNumber(0)\n\n const [onPresentApyModal] = useModal(\n ,\n false,\n true,\n `FarmModal${pid}`,\n )\n\n const handleClickButton = (event: MouseEvent): void => {\n event.stopPropagation()\n onPresentApyModal()\n }\n\n return (\n \n <>{displayApr}%\n \n )\n}\n\nexport default ApyButton\n","// Constructing the two forward-slash-separated parts of the 'Add Liquidity' URL\n// Each part of the url represents a different side of the LP pair.\nimport { plsTokens } from '@pulsex/tokens'\n\nconst getLiquidityUrlPathParts = ({\n protocol,\n quoteTokenAddress,\n tokenAddress,\n}: {\n protocol: string\n quoteTokenAddress: string\n tokenAddress: string\n}): string => {\n const wplsAddress = plsTokens.wpls.address\n const firstPart = !quoteTokenAddress || quoteTokenAddress === wplsAddress ? 'PLS' : quoteTokenAddress\n const secondPart = !tokenAddress || tokenAddress === wplsAddress ? 'PLS' : tokenAddress\n return `${protocol}/${firstPart}/${secondPart}`\n}\n\nexport default getLiquidityUrlPathParts\n","import { styled } from 'styled-components'\nimport ApyButton from 'pages/Farms/components/FarmCard/ApyButton'\nimport BigNumber from 'bignumber.js'\nimport getLiquidityUrlPathParts from 'utils/getLiquidityUrlPathParts'\nimport { Skeleton } from '@pulsex/uikit'\n\nexport interface AprProps {\n value: string\n multiplier: string\n pid: number\n lpLabel: string\n lpSymbol: string\n lpRewardsApr: number\n lpTokenPrice: BigNumber\n tokenAddress?: string\n quoteTokenAddress?: string\n incPrice: BigNumber\n originalValue: number\n hideButton?: boolean\n protocol: string\n}\n\nconst Container = styled.div`\n display: flex;\n align-items: center;\n padding-right: 15px;\n color: ${({ theme }) => theme.colors.text};\n\n button {\n width: 20px;\n height: 20px;\n\n svg {\n path {\n fill: ${({ theme }) => theme.colors.textSubtle};\n }\n }\n }\n`\n\nconst AprWrapper = styled.div`\n min-width: 60px;\n text-align: left;\n`\n\nconst Apr: React.FC = ({\n value,\n pid,\n lpLabel,\n lpSymbol,\n lpRewardsApr,\n lpTokenPrice,\n multiplier,\n tokenAddress,\n quoteTokenAddress,\n incPrice,\n originalValue,\n protocol,\n hideButton = false,\n}) => {\n const liquidityUrlPathParts = getLiquidityUrlPathParts({\n protocol,\n quoteTokenAddress, \n tokenAddress \n })\n const addLiquidityUrl = `/add/${liquidityUrlPathParts}`\n\n return originalValue !== 0 ? (\n \n {originalValue ? (\n \n ) : (\n \n \n \n )}\n \n ) : (\n \n {originalValue}%\n \n )\n}\n\nexport default Apr\n","import {\n TokenPairImage as UIKitTokenPairImage,\n TokenPairImageProps as UIKitTokenPairImageProps,\n TokenImage as UIKitTokenImage,\n ImageProps,\n} from '@pulsex/uikit'\nimport { plsTokens } from '@pulsex/tokens'\nimport { Token } from '@pulsex/sdk'\n\nconst domain = 'https://tokens.app.pulsex.com'\n\ninterface TokenPairImageProps extends Omit {\n primaryToken: Token\n secondaryToken: Token\n}\n\nconst getImageUrlFromToken = (token: Token) => {\n const address = token.symbol.toLowerCase() === 'pls' ? plsTokens.wpls.address : token.address\n return `${domain}/images/tokens/${address}.png`\n}\n\nexport const TokenPairImage: React.FC = ({ primaryToken, secondaryToken, ...props }) => {\n return (\n \n )\n}\n\ninterface TokenImageProps extends ImageProps {\n token: Token\n}\n\nexport const TokenImage: React.FC = ({ token, ...props }) => {\n return \n}\n","import { useFarmUser } from 'state/farms/hooks'\nimport { FarmWidget } from '@pulsex/widgets-internal'\nimport { TokenPairImage } from 'components/TokenImage'\n\nconst { FarmTokenInfo } = FarmWidget.FarmTable\n\n// export interface FarmProps {\n// label: string\n// pid: number\n// token: Token\n// quoteToken: Token\n// }\n\n// const Container = styled.div`\n// padding-left: 16px;\n// display: flex;\n// align-items: center;\n\n// ${({ theme }) => theme.mediaQueries.sm} {\n// padding-left: 32px;\n// }\n// `\n\n// const TokenWrapper = styled.div`\n// padding-right: 8px;\n// width: 40px;\n\n// ${({ theme }) => theme.mediaQueries.sm} {\n// width: 40px;\n// }\n// `\n\nconst Farm: React.FunctionComponent> = ({\n token,\n quoteToken,\n label,\n pid,\n isReady,\n}) => {\n const { stakedBalance } = useFarmUser(pid)\n\n return (\n \n \n \n )\n}\n\nexport default Farm\n","import { ChainId, CHAINS } from '@pulsex/chains'\nimport { TransactionReceipt, createPublicClient, http, PublicClient } from 'viem'\nimport { useCallback } from 'react'\nimport { WaitForTransactionArgs, waitForTransaction } from 'wagmi/actions'\nimport { useActiveChainId } from './useActiveChainId'\n\nconst viemClientsPublicNodes = CHAINS.reduce((prev, cur) => {\n return {\n ...prev,\n [cur.id]: createPublicClient({\n chain: cur,\n transport: http(cur.rpcUrls.public.http[0], {\n timeout: 15_000,\n }),\n batch: {\n multicall: {\n batchSize: 1024 * 200,\n wait: 16,\n },\n },\n pollingInterval: 6_000,\n }),\n }\n}, {} as Record)\n\nexport function usePublicNodeWaitForTransaction() {\n const { chainId } = useActiveChainId()\n\n const waitForTransaction_ = useCallback(\n async (opts: WaitForTransactionArgs): Promise => {\n // our custom node might be late to sync up\n if (viemClientsPublicNodes[chainId]) {\n return viemClientsPublicNodes[chainId].waitForTransactionReceipt(opts)\n }\n return waitForTransaction({ ...opts, chainId })\n },\n [chainId],\n )\n\n return {\n waitForTransaction: waitForTransaction_,\n }\n}\n","import { useTranslation } from '@pulsex/localization'\nimport { useToast } from '@pulsex/uikit'\nimport { ToastDescriptionWithTx } from 'components/Toast'\nimport { useCallback, useState } from 'react'\nimport { WaitForTransactionResult, SendTransactionResult } from 'wagmi/actions'\nimport { isUserRejected } from 'utils/sentry'\nimport { BaseError, Hash, UnknownRpcError } from 'viem'\nimport { usePublicNodeWaitForTransaction } from './usePublicNodeWaitForTransaction'\n\nexport type CatchTxErrorReturn = {\n fetchWithCatchTxError: (fn: () => Promise) => Promise\n fetchTxResponse: (fn: () => Promise) => Promise\n loading: boolean\n txResponseLoading: boolean\n}\n\n/// only show corrected parsed viem error\nexport function parseError(err: TError): BaseError | null {\n if (err instanceof BaseError) {\n return err\n }\n if (typeof err === 'string') {\n return new UnknownRpcError(new Error(err))\n }\n if (err instanceof Error) {\n return new UnknownRpcError(err)\n }\n return null\n}\n\nexport default function useCatchTxError(): CatchTxErrorReturn {\n const { t } = useTranslation()\n const { toastError, toastSuccess } = useToast()\n const [loading, setLoading] = useState(false)\n const { waitForTransaction } = usePublicNodeWaitForTransaction()\n const [txResponseLoading, setTxResponseLoading] = useState(false)\n\n const handleNormalError = useCallback(\n (error) => {\n const err = parseError(error)\n if (err) {\n toastError(\n t('Error'),\n t('Transaction failed with error: %reason%', {\n reason: error.message,\n }),\n )\n } else {\n toastError(t('Error'), t('Please try again. Confirm the transaction and make sure you are paying enough gas!'))\n }\n },\n [t, toastError],\n )\n\n const handleTxError = useCallback(\n (error, hash) => {\n const err = parseError(error)\n toastError(\n t('Failed'),\n \n {err\n ? t('Transaction failed with error: %reason%', {\n reason: err.message,\n })\n : t('Transaction failed. For detailed error message:')}\n ,\n )\n },\n [t, toastError],\n )\n\n const fetchWithCatchTxError = useCallback(\n async (callTx: () => Promise): Promise => {\n let tx: SendTransactionResult | Hash = null\n\n try {\n setLoading(true)\n\n /**\n * https://github.com/vercel/swr/pull/1450\n *\n * wait for useSWRMutation finished, so we could apply SWR in case manually trigger tx call\n */\n tx = await callTx()\n\n const hash = typeof tx === 'string' ? tx : tx.hash\n\n toastSuccess(`${t('Transaction Submitted')}!`, )\n\n const receipt = await waitForTransaction({\n hash,\n })\n return receipt\n } catch (error: any) {\n if (!isUserRejected(error)) {\n if (!tx) {\n handleNormalError(error)\n } else {\n handleTxError(error, typeof tx === 'string' ? tx : tx.hash)\n }\n }\n } finally {\n setLoading(false)\n }\n\n return null\n },\n [toastSuccess, t, waitForTransaction, handleNormalError, handleTxError],\n )\n\n const fetchTxResponse = useCallback(\n async (callTx: () => Promise): Promise => {\n let tx: SendTransactionResult | Hash = null\n\n try {\n setTxResponseLoading(true)\n\n /**\n * https://github.com/vercel/swr/pull/1450\n *\n * wait for useSWRMutation finished, so we could apply SWR in case manually trigger tx call\n */\n tx = await callTx()\n\n const hash = typeof tx === 'string' ? tx : tx.hash\n\n toastSuccess(`${t('Transaction Submitted')}!`, )\n\n return { hash }\n } catch (error: any) {\n if (!isUserRejected(error)) {\n if (!tx) {\n handleNormalError(error)\n } else {\n handleTxError(error, typeof tx === 'string' ? tx : tx.hash)\n }\n }\n } finally {\n setTxResponseLoading(false)\n }\n\n return null\n },\n [toastSuccess, t, handleNormalError, handleTxError],\n )\n\n return {\n fetchWithCatchTxError,\n fetchTxResponse,\n loading,\n txResponseLoading,\n }\n}\n","import { useCallback } from 'react'\nimport { MaxUint256 } from '@pulsex/swap-sdk-core'\nimport { getMasterChefAddress } from 'utils/addressHelpers'\nimport { useCallWithGasPrice } from 'hooks/useCallWithGasPrice'\nimport { useERC20 } from 'hooks/useContract'\n\nconst useApproveFarm = (lpContract: ReturnType, chainId: number) => {\n const contractAddress = getMasterChefAddress(chainId)\n\n const { callWithGasPrice } = useCallWithGasPrice()\n const handleApprove = useCallback(async () => {\n return callWithGasPrice(lpContract, 'approve', [contractAddress, MaxUint256])\n }, [lpContract, contractAddress, callWithGasPrice])\n\n return { onApprove: handleApprove }\n}\n\nexport default useApproveFarm\n","import { useCallback } from 'react'\nimport { stakeFarm } from 'utils/calls'\nimport { useMasterchef } from 'hooks/useContract'\n\nconst useStakeFarms = (pid: number) => {\n const masterChefContract = useMasterchef()\n\n const handleStake = useCallback(\n async (amount: string) => {\n return stakeFarm(masterChefContract, pid, amount)\n },\n [masterChefContract, pid],\n )\n\n return { onStake: handleStake }\n}\n\nexport default useStakeFarms\n","import BigNumber from 'bignumber.js'\nimport { DEFAULT_GAS_LIMIT, DEFAULT_TOKEN_DECIMAL } from 'config'\nimport { getMasterChefContract } from 'utils/contractHelpers'\n\ntype MasterChefContract = ReturnType\n\n// TODO: implement gasPrice calcs\nexport const stakeFarm = async (\n masterChefContract: MasterChefContract,\n pid: number,\n amount: string, \n gasLimit?: bigint,\n // gasPrice: bigint,\n) => {\n const value = new BigNumber(amount).times(DEFAULT_TOKEN_DECIMAL).toString()\n return masterChefContract.write.deposit([BigInt(pid), BigInt(value)], {\n gas: gasLimit || DEFAULT_GAS_LIMIT,\n // gasPrice,\n account: masterChefContract.account,\n chain: masterChefContract.chain,\n })\n}\n\nexport const unstakeFarm = async (\n masterChefContract: MasterChefContract, \n pid: number, \n amount: string, \n gasLimit?: bigint,\n // gasPrice: bigint, \n) => {\n const value = new BigNumber(amount).times(DEFAULT_TOKEN_DECIMAL).toString()\n return masterChefContract.write.withdraw([BigInt(pid), BigInt(value)], {\n gas: gasLimit || DEFAULT_GAS_LIMIT,\n // gasPrice,\n account: masterChefContract.account,\n chain: masterChefContract.chain,\n })\n}\n\nexport const harvestFarm = async (\n masterChefContract: MasterChefContract, \n pid: number, \n gasLimit?: bigint,\n // gasPrice?: bigint,\n) => {\n return masterChefContract.write.deposit([BigInt(pid), 0n], {\n gas: gasLimit || DEFAULT_GAS_LIMIT,\n // gasPrice,\n account: masterChefContract.account,\n chain: masterChefContract.chain,\n })\n}\n","import { useCallback } from 'react'\nimport { unstakeFarm } from 'utils/calls'\nimport { useMasterchef } from 'hooks/useContract'\n\nconst useUnstakeFarms = (pid: number) => {\n const masterChefContract = useMasterchef()\n\n const handleUnstake = useCallback(\n async (amount: string) => {\n return unstakeFarm(masterChefContract, pid, amount)\n },\n [masterChefContract, pid],\n )\n\n return { onUnstake: handleUnstake }\n}\n\nexport default useUnstakeFarms\n","import { useModal, useToast } from '@pulsex/uikit'\nimport { FarmWidget } from '@pulsex/widgets-internal'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport ConnectWalletButton from 'components/ConnectWalletButton'\nimport { ToastDescriptionWithTx } from 'components/Toast'\nimport { useTranslation } from '@pulsex/localization'\nimport { useERC20 } from 'hooks/useContract'\nimport useCatchTxError from 'hooks/useCatchTxError'\nimport { useCallback } from 'react'\nimport { useAppDispatch } from 'state'\nimport { fetchFarmUserDataAsync } from 'state/farms'\nimport { useLpTokenPrice, usePriceINCUsdc } from 'state/farms/hooks'\nimport getLiquidityUrlPathParts from 'utils/getLiquidityUrlPathParts'\nimport { WNATIVE, NATIVE } from '@pulsex/sdk'\nimport { useAccount } from 'wagmi'\nimport { FarmWithStakedValue } from '@pulsex/farms'\nimport { BIG_ZERO } from '@pulsex/utils/bigNumber'\nimport { SendTransactionResult } from 'wagmi/actions'\nimport useApproveFarm from '../../../hooks/useApproveFarm'\nimport useStakeFarms from '../../../hooks/useStakeFarms'\nimport useUnstakeFarms from '../../../hooks/useUnstakeFarms'\n\ninterface StackedActionProps extends FarmWithStakedValue {\n userDataReady: boolean\n lpLabel?: string\n displayApr?: string\n onStake?: (value: string) => Promise\n onUnstake?: (value: string) => Promise\n onDone?: () => void\n onApprove?: () => Promise\n isApproved?: boolean\n}\n\nexport function useStakedActions(lpContract, pid) {\n const { account, chainId } = useActiveWeb3React()\n const { onStake } = useStakeFarms(pid)\n const { onUnstake } = useUnstakeFarms(pid)\n const dispatch = useAppDispatch()\n\n const { onApprove } = useApproveFarm(lpContract, chainId)\n\n const onDone = useCallback(\n () => dispatch(fetchFarmUserDataAsync({ account, pids: [pid], chainId })),\n [account, chainId, pid, dispatch],\n )\n\n return {\n onStake,\n onUnstake,\n onApprove,\n onDone,\n }\n}\n\nexport const StakedContainer = ({ children, ...props }) => {\n const { address: account } = useAccount()\n\n const { lpAddress } = props\n const lpContract = useERC20(lpAddress)\n const { onStake, onUnstake, onApprove, onDone } = useStakedActions(lpContract, props.pid)\n\n const { allowance } = props.userData || {}\n\n const isApproved = account && allowance && allowance.isGreaterThan(0)\n\n return children({\n ...props,\n onStake,\n onDone,\n onUnstake,\n onApprove,\n isApproved,\n })\n}\n\nconst Staked: React.FC> = ({\n pid,\n apr,\n multiplier,\n lpSymbol,\n lpLabel,\n lpTokenPrice,\n quoteToken,\n token,\n userDataReady,\n displayApr,\n lpTotalSupply,\n tokenAmountTotal,\n quoteTokenAmountTotal,\n userData,\n onDone,\n onStake,\n onUnstake,\n onApprove,\n isApproved,\n protocol\n}) => {\n const { t } = useTranslation()\n const { toastSuccess } = useToast()\n const { fetchWithCatchTxError, loading: pendingTx } = useCatchTxError()\n const { account, chainId } = useActiveWeb3React()\n const { tokenBalance, stakedBalance, allowance } = userData || {}\n const lpPrice = useLpTokenPrice(lpSymbol)\n const incPrice = usePriceINCUsdc()\n\n const liquidityUrlPathParts = getLiquidityUrlPathParts({\n protocol,\n quoteTokenAddress: quoteToken.address,\n tokenAddress: token.address,\n })\n const addLiquidityUrl = `/add/${liquidityUrlPathParts}`\n\n const handleStake = async (amount: string) => {\n const receipt = await fetchWithCatchTxError(() => onStake(amount))\n if (receipt?.status) {\n toastSuccess(\n `${t('Staked')}!`,\n \n {t('Your funds have been staked in the farm')}\n ,\n )\n onDone()\n }\n }\n\n const handleUnstake = async (amount: string) => {\n const receipt = await fetchWithCatchTxError(() => onUnstake(amount))\n if (receipt?.status) {\n toastSuccess(\n `${t('Unstaked')}!`,\n \n {t('Your earnings have also been harvested to your wallet')}\n ,\n )\n onDone()\n }\n }\n\n const handleApprove = useCallback(async () => {\n const receipt = await fetchWithCatchTxError(() => onApprove())\n if (receipt?.status) {\n toastSuccess(t('Contract Enabled'), )\n onDone()\n }\n }, [onApprove, t, toastSuccess, fetchWithCatchTxError, onDone])\n\n const [onPresentDeposit] = useModal(\n ,\n true,\n true,\n `farm-deposit-modal-${pid}`,\n )\n const [onPresentWithdraw] = useModal(\n ,\n )\n\n if (!account) {\n return (\n \n \n \n )\n }\n\n if (!isApproved && stakedBalance.eq(0)) {\n return \n }\n\n if (!userDataReady) {\n return \n }\n\n if (stakedBalance.gt(0)) {\n return (\n \n \n \n )\n }\n\n return (\n \n )\n}\n\nexport default Staked\n","import { useCallback } from 'react'\nimport { harvestFarm } from 'utils/calls'\nimport { useMasterchef } from 'hooks/useContract'\n\nconst useHarvestFarm = (farmPid: number) => {\n const masterChefContract = useMasterchef()\n\n const handleHarvest = useCallback(async () => {\n return harvestFarm(masterChefContract, farmPid)\n }, [farmPid, masterChefContract])\n\n return { onReward: handleHarvest }\n}\n\nexport default useHarvestFarm\n","import { useTranslation } from '@pulsex/localization'\nimport { Skeleton, useToast } from '@pulsex/uikit'\nimport { FarmWidget } from '@pulsex/widgets-internal'\nimport BigNumber from 'bignumber.js'\nimport { ToastDescriptionWithTx } from 'components/Toast'\nimport useCatchTxError from 'hooks/useCatchTxError'\nimport { useAppDispatch } from 'state'\nimport { fetchFarmUserDataAsync } from 'state/farms'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport { useCallback } from 'react'\nimport useUSDCPrice from 'hooks/useUSDCPrice'\nimport { BIG_ZERO } from '@pulsex/utils/bigNumber'\nimport { SendTransactionResult } from 'wagmi/actions'\nimport { getBalanceAmount } from '@pulsex/utils/formatBalance'\nimport { FarmWithStakedValue } from '@pulsex/farms'\nimport { INC } from '@pulsex/tokens'\nimport useHarvestFarm from '../../../hooks/useHarvestFarm'\n\nconst { FarmTableHarvestAction } = FarmWidget.FarmTable\n\ninterface HarvestActionProps extends FarmWithStakedValue {\n userDataReady: boolean\n onReward?: () => Promise\n onDone?: () => void\n}\n\nexport const HarvestActionContainer = ({ children, ...props }) => {\n const { onReward } = useHarvestFarm(props.pid)\n const { account, chainId } = useActiveWeb3React()\n const dispatch = useAppDispatch()\n\n const onDone = useCallback(\n () => dispatch(fetchFarmUserDataAsync({ account, pids: [props.pid], chainId })),\n [account, chainId, dispatch, props.pid],\n )\n\n return children({ ...props, onDone, onReward })\n}\n\nconst HarvestAction: React.FunctionComponent = ({ \n userData, \n userDataReady,\n onReward,\n onDone,\n}) => {\n const { chainId } = useActiveWeb3React()\n const { t } = useTranslation()\n const { toastSuccess } = useToast()\n const { fetchWithCatchTxError, loading: pendingTx } = useCatchTxError()\n const earningsBigNumber = new BigNumber(userData.earnings)\n const incPrice = new BigNumber(useUSDCPrice(INC[chainId])?.toFixed())\n let earnings = BIG_ZERO\n let earningsUsd = 0\n let displayBalance = userDataReady ? earnings.toLocaleString() : \n\n // If user didn't connect wallet default balance will be 0\n if (!earningsBigNumber.isZero()) {\n earnings = getBalanceAmount(earningsBigNumber)\n earningsUsd = earnings.multipliedBy(incPrice).toNumber()\n displayBalance = earnings.toFixed(3, BigNumber.ROUND_DOWN)\n }\n\n const handleHarvest = async () => {\n const receipt = await fetchWithCatchTxError(() => {\n return onReward()\n })\n if (receipt?.status) {\n toastSuccess(\n `${t('Harvested')}!`,\n \n {t('Your %symbol% earnings have been sent to your wallet!', { symbol: 'INC' })}\n ,\n )\n onDone?.()\n }\n }\n\n return (\n \n // \n // \n // \n // INC\n // \n // \n // {t('Earned')}\n // \n // \n // \n //
    \n // {displayBalance}\n // {earningsBusd > 0 && (\n // \n // )}\n //
    \n // {\n // const receipt = await fetchWithCatchTxError(() => {\n // return onReward()\n // })\n // if (receipt?.status) {\n // toastSuccess(\n // `${t('Harvested')}!`,\n // \n // {t('Your %symbol% earnings have been sent to your wallet!', { symbol: 'INC' })}\n // ,\n // )\n // dispatch(fetchFarmUserDataAsync({ account, pids: [pid] }))\n // }\n // }}\n // ml=\"4px\"\n // >\n // {pendingTx ? t('Harvesting') : t('Harvest')}\n // \n //
    \n //
    \n )\n}\n\nexport default HarvestAction\n","import { styled, keyframes, css } from 'styled-components'\nimport { useTranslation } from '@pulsex/localization'\nimport { LinkExternal, Text } from '@pulsex/uikit'\nimport { FarmWidget } from '@pulsex/widgets-internal'\nimport { FarmWithStakedValue } from '@pulsex/farms'\nimport getLiquidityUrlPathParts from 'utils/getLiquidityUrlPathParts'\nimport { getBlockExplorerLink } from 'utils'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport StakedAction, { StakedContainer } from './StakedAction'\nimport HarvestAction, { HarvestActionContainer } from './HarvestAction'\nimport Apr, { AprProps } from '../Apr'\n\nconst { Liquidity } = FarmWidget.FarmTable\nconst { ProtocolTag } = FarmWidget.Tags\n\nexport interface ActionPanelProps {\n apr: AprProps\n // multiplier: FarmTableMultiplierProps\n liquidity: FarmWidget.FarmTableLiquidityProps\n details: FarmWithStakedValue\n userDataReady: boolean\n expanded: boolean\n protocol: string\n}\n\nconst expandAnimation = keyframes`\n from {\n max-height: 0px;\n }\n to {\n max-height: 500px;\n }\n`\n\nconst collapseAnimation = keyframes`\n from {\n max-height: 500px;\n }\n to {\n max-height: 0px;\n }\n`\n\nconst Container = styled(\"div\").withConfig({\n shouldForwardProp: (props) => ![\"expanded\"].includes(props),\n})<{ expanded }>`\n animation: ${({ expanded }) =>\n expanded\n ? css`\n ${expandAnimation} 300ms linear forwards\n `\n : css`\n ${collapseAnimation} 300ms linear forwards\n `};\n overflow: hidden;\n background-image: ${({ theme }) => theme.colors.gradientInverseBubblegum};\n display: flex;\n width: 100%;\n flex-direction: column-reverse;\n padding: 24px;\n\n ${({ theme }) => theme.mediaQueries.lg} {\n flex-direction: row;\n align-items: center;\n padding: 16px 32px;\n }\n`\n\nconst StyledLinkExternal = styled(LinkExternal)`\n font-weight: 400;\n`\n\nconst StakeContainer = styled.div`\n color: ${({ theme }) => theme.colors.text};\n align-items: center;\n display: flex;\n justify-content: space-between;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n justify-content: flex-start;\n }\n`\n\nconst ActionContainer = styled.div`\n display: flex;\n flex-direction: column;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n flex-direction: row;\n align-items: center;\n flex-grow: 1;\n flex-basis: 0;\n }\n`\n\nconst InfoContainer = styled.div`\n min-width: 200px;\n`\n\nconst ValueContainer = styled.div`\n display: block;\n\n ${({ theme }) => theme.mediaQueries.lg} {\n display: none;\n }\n`\n\nconst ValueWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin: 4px 0px;\n`\n\nconst ActionPanel: React.FC> = ({\n details,\n apr,\n // multiplier,\n liquidity,\n userDataReady,\n expanded,\n protocol\n}) => {\n const farm = details\n\n const { t } = useTranslation()\n const { chainId } = useActiveChainId()\n const isActive = farm.multiplier !== '0X'\n const { quoteToken, token } = farm\n const lpLabel = farm.lpSymbol && farm.lpSymbol.toUpperCase().replace('PulseX', '')\n const liquidityUrlPathParts = getLiquidityUrlPathParts({\n protocol,\n quoteTokenAddress: quoteToken.address,\n tokenAddress: token.address,\n })\n const { lpAddress } = farm\n const blockExplorerLink = getBlockExplorerLink(lpAddress, 'address', chainId)\n const info = protocol === 'V1' ? `/info/pool/${lpAddress}` : `/info/v2/pool/${lpAddress}`\n\n return (\n \n \n {isActive && (\n \n \n {t('Get %symbol%', { symbol: lpLabel })}\n \n \n )}\n {t('View Contract')}\n {t('See Pair Info')}\n \n \n \n {t('Tags')}\n \n \n \n {t('APR')}\n \n \n \n {t('Liquidity')}\n \n \n \n \n \n {(props) => }\n \n \n {(props) => }\n \n \n \n )\n}\n\nexport default ActionPanel\n","import { createElement, useEffect, useRef, useState } from 'react'\nimport { styled } from 'styled-components'\nimport { FarmWithStakedValue } from '@pulsex/farms'\nimport { useTranslation } from '@pulsex/localization'\nimport { Flex, Skeleton, useMatchBreakpoints } from '@pulsex/uikit'\nimport { FarmWidget } from '@pulsex/widgets-internal'\nimport { useDelayedUnmount } from '@pulsex/hooks'\nimport { useFarmUser } from 'state/farms/hooks'\n\nimport Apr, { AprProps } from './Apr'\nimport Farm from './Farm'\nimport ActionPanel from './Actions/ActionPanel'\n\nconst { ProtocolTag, CoreTag } = FarmWidget.Tags\nconst { CellLayout, Details, Multiplier, Liquidity, Earned } = FarmWidget.FarmTable\nconst { DesktopColumnSchema, MobileColumnSchema } = FarmWidget\n\nexport interface RowProps {\n apr: AprProps\n farm: FarmWidget.FarmTableFarmTokenInfoProps\n earned: FarmWidget.FarmTableEarnedProps\n multiplier: FarmWidget.FarmTableMultiplierProps\n liquidity: FarmWidget.FarmTableLiquidityProps\n details: FarmWithStakedValue\n type: 'core' | 'community'\n protocol: 'V1' | 'V2'\n initialActivity?: boolean\n}\n\ninterface RowPropsWithLoading extends RowProps {\n userDataReady: boolean\n}\n\nconst cells = {\n apr: Apr,\n farm: Farm,\n earned: Earned,\n details: Details,\n multiplier: Multiplier,\n liquidity: Liquidity,\n}\n\nconst CellInner = styled.div`\n padding: 24px 0px;\n display: flex;\n width: 100%;\n align-items: center;\n padding-right: 8px;\n\n ${({ theme }) => theme.mediaQueries.xl} {\n padding-right: 32px;\n }\n`\n\nconst StyledTr = styled.tr`\n cursor: pointer;\n border-bottom: 2px solid ${({ theme }) => theme.colors.cardBorder};\n`\n\nconst Row: React.FunctionComponent = (props) => {\n const { details, initialActivity, userDataReady } = props\n const hasSetInitialValue = useRef(false)\n const hasStakedAmount = !!useFarmUser(details.pid).stakedBalance.toNumber()\n const [actionPanelExpanded, setActionPanelExpanded] = useState(hasStakedAmount)\n const shouldRenderChild = useDelayedUnmount(actionPanelExpanded, 300)\n const { t } = useTranslation()\n\n const toggleActionPanel = () => {\n setActionPanelExpanded(!actionPanelExpanded)\n }\n\n useEffect(() => {\n setActionPanelExpanded(hasStakedAmount)\n }, [hasStakedAmount])\n useEffect(() => {\n if (initialActivity && hasSetInitialValue.current === false) {\n setActionPanelExpanded(initialActivity)\n hasSetInitialValue.current = true\n }\n }, [initialActivity])\n\n const { isDesktop, isMobile } = useMatchBreakpoints()\n\n const isSmallerScreen = !isDesktop\n const tableSchema = isSmallerScreen ? MobileColumnSchema : DesktopColumnSchema\n const columnNames = tableSchema.map((column) => column.name)\n\n const handleRenderRow = () => {\n if (!isMobile) {\n return (\n \n {Object.keys(props).map((key) => {\n const columnIndex = columnNames.indexOf(key)\n if (columnIndex === -1) {\n return null\n }\n\n switch (key) {\n case 'type':\n return (\n \n {userDataReady ? (\n \n \n \n ) : (\n \n )}\n \n )\n case 'protocol':\n return (\n \n {userDataReady ? (\n \n \n \n ) : (\n \n )}\n \n )\n case 'details':\n return (\n \n \n \n
    \n \n \n \n )\n case 'apr':\n return (\n \n \n \n \n \n \n \n )\n default:\n return (\n \n \n \n {createElement(cells[key], { ...props[key], userDataReady })}\n \n \n \n )\n }\n })}\n \n )\n }\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n }\n\n return (\n <>\n {handleRenderRow()}\n {shouldRenderChild && (\n \n \n \n \n \n )}\n \n )\n}\n\nexport default Row\n","import { useRef, useMemo } from 'react'\nimport styled from 'styled-components'\nimport { Button, ChevronUpIcon, RowType } from '@pulsex/uikit'\nimport { FarmWidget } from '@pulsex/widgets-internal'\nimport { useTranslation } from '@pulsex/localization'\nimport BigNumber from 'bignumber.js'\nimport { getBalanceNumber } from '@pulsex/utils/formatBalance'\nimport latinise from '@pulsex/utils/latinise'\nimport { BIG_ZERO } from '@pulsex/utils/bigNumber'\nimport { FarmWithStakedValue } from '@pulsex/farms'\nimport { useSearchParams } from 'react-router-dom'\nimport { getDisplayApr } from '../getDisplayApr'\n\nimport Row, { RowProps } from './Row'\n\nexport interface ITableProps {\n farms: FarmWithStakedValue[]\n userDataReady: boolean\n incPrice: BigNumber\n sortColumn?: string\n}\n\nconst Container = styled.div`\n border-radius: ${({ theme }) => theme.radii.card};\n background-color: ${({ theme }) => theme.card.background};\n`\n\nconst StyledTableBorder = styled.div`\n border-radius: ${({ theme }) => theme.radii.card};\n background-color: ${({ theme }) => theme.colors.cardBorder};\n padding: 1px 1px 1px 1px;\n background-size: 400% 400%;\n`\n\nconst TableWrapper = styled.div`\n overflow: visible;\n scroll-margin-top: 64px;\n\n &::-webkit-scrollbar {\n display: none;\n }\n`\n\nconst StyledTable = styled.table`\n border-collapse: collapse;\n font-size: 14px;\n border-radius: 4px;\n margin-left: auto;\n margin-right: auto;\n width: 100%;\n`\n\nconst TableBody = styled.tbody`\n & tr {\n td {\n font-size: 16px;\n vertical-align: middle;\n }\n }\n`\n\nconst TableContainer = styled.div`\n position: relative;\n`\n\nconst ScrollButtonContainer = styled.div`\n display: flex;\n justify-content: center;\n padding-top: 5px;\n padding-bottom: 5px;\n`\n\nconst FarmTable: React.FC> = ({ farms, incPrice, userDataReady }) => {\n const tableWrapperEl = useRef(null)\n const { t } = useTranslation()\n const [searchParams] = useSearchParams()\n const searchQuery = searchParams.get('search')\n\n const columns = useMemo(\n () =>\n FarmWidget.DesktopColumnSchema.map((column) => ({\n id: column.id,\n name: column.name,\n label: column.label,\n sort: (a: RowType, b: RowType) => {\n switch (column.name) {\n case 'farm':\n return b.id - a.id\n case 'apr':\n if (a.original.apr.value && b.original.apr.value) {\n return Number(a.original.apr.value) - Number(b.original.apr.value)\n }\n\n return 0\n case 'earned':\n return a.original.earned.earnings - b.original.earned.earnings\n default:\n return 1\n }\n },\n sortable: column.sortable,\n })),\n [],\n )\n\n const getFarmEarnings = (farm) => {\n let earnings = BIG_ZERO\n const existingEarnings = new BigNumber(farm.userData.earnings)\n\n if (farm.boosted) {\n const proxyEarnings = new BigNumber(farm.userData?.proxy?.earnings)\n\n earnings = proxyEarnings.gt(0) ? proxyEarnings : existingEarnings\n } else {\n earnings = existingEarnings\n }\n\n return getBalanceNumber(earnings)\n }\n\n const generateRow = (farm) => {\n const { token, quoteToken } = farm\n const tokenAddress = token.address\n const quoteTokenAddress = quoteToken.address\n const lpLabel = farm.lpSymbol && farm.lpSymbol.replace('PulseX', '')\n const lowercaseQuery = latinise(typeof searchQuery === 'string' ? searchQuery.toLowerCase() : '')\n const initialActivity = latinise(lpLabel?.toLowerCase()) === lowercaseQuery\n const row: RowProps = {\n apr: {\n value: getDisplayApr(farm.apr, farm.lpRewardsApr),\n pid: farm.pid,\n multiplier: farm.multiplier,\n lpLabel,\n lpSymbol: farm.lpSymbol,\n lpTokenPrice: farm.lpTokenPrice,\n tokenAddress,\n quoteTokenAddress,\n incPrice,\n lpRewardsApr: farm.lpRewardsApr,\n originalValue: farm.apr,\n protocol: farm.protocol,\n },\n farm: {\n label: lpLabel,\n pid: farm.pid,\n token: farm.token,\n quoteToken: farm.quoteToken,\n isReady: farm.multiplier !== undefined,\n },\n earned: {\n earnings: getFarmEarnings(farm),\n pid: farm.pid,\n },\n liquidity: {\n liquidity: farm?.liquidity,\n },\n multiplier: {\n multiplier: farm.multiplier,\n },\n type: farm.isCommunity ? 'community' : 'core',\n details: farm,\n initialActivity,\n protocol: farm.protocol,\n }\n\n return row\n }\n\n const rowData = farms.map((farm) => generateRow(farm))\n\n const generateSortedRow = (row) => {\n // @ts-ignore\n const newRow: RowProps = {}\n columns.forEach((column) => {\n if (!(column.name in row)) {\n throw new Error(`Invalid row data, ${column.name} not found`)\n }\n newRow[column.name] = row[column.name]\n })\n newRow.initialActivity = row.initialActivity\n return newRow\n }\n\n const sortedRows = rowData.map(generateSortedRow)\n\n const scrollToTop = (): void => {\n tableWrapperEl.current.scrollIntoView({\n behavior: 'smooth',\n })\n }\n\n return (\n \n \n \n \n \n \n {sortedRows.map((row) => {\n return \n })}\n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default FarmTable\n","export const getDisplayApr = (incRewardsApr?: number, lpRewardsApr?: number) => {\n if (incRewardsApr && lpRewardsApr) {\n return (incRewardsApr + lpRewardsApr).toLocaleString('en-US', { maximumFractionDigits: 2 })\n }\n if (incRewardsApr) {\n return incRewardsApr.toLocaleString('en-US', { maximumFractionDigits: 2 })\n }\n return null\n}\n","import { useEffect, useState, useRef } from 'react'\nimport {\n Box,\n Button,\n Flex,\n Text,\n InlineMenu,\n Toggle,\n TradeIcon,\n} from '@pulsex/uikit'\nimport { styled } from 'styled-components'\nimport { useTranslation } from '@pulsex/localization'\n\ninterface FarmTypesFilterProps {\n v1FarmOnly?: boolean\n handleSetV1FarmOnly?: (value: boolean) => void\n v2FarmOnly?: boolean\n handleSetV2FarmOnly?: (value: boolean) => void\n farmTypesEnableCount: number\n handleSetFarmTypesEnableCount: (value: number) => void\n}\n\nexport const FarmTypesWrapper = styled(Flex)`\n background: ${({ theme }) => theme.colors.dropdown};\n border-radius: 24px 24px 0 0;\n`\n\nexport const StyledItemRow = styled(Flex)`\n cursor: pointer;\n user-select: none;\n`\n\nconst ToggleWrapper = styled.div`\n display: flex;\n align-items: center;\n margin-left: 10px;\n\n ${Text} {\n margin-left: 8px;\n }\n`\n\nexport const FarmTypesFilter: React.FC = ({\n v1FarmOnly,\n handleSetV1FarmOnly,\n v2FarmOnly,\n handleSetV2FarmOnly,\n farmTypesEnableCount,\n handleSetFarmTypesEnableCount,\n}) => {\n const { t } = useTranslation()\n\n const [isOpen, setIsOpen] = useState(false)\n const wrapperRef = useRef(null)\n const menuRef = useRef(null)\n const handleMenuClick = () => setIsOpen(!isOpen)\n\n useEffect(() => {\n const handleClickOutside = ({ target }: Event) => {\n if (\n wrapperRef.current &&\n menuRef.current &&\n !menuRef.current.contains(target) &&\n !wrapperRef.current.contains(target)\n ) {\n setIsOpen(false)\n }\n }\n\n document.addEventListener('click', handleClickOutside)\n\n return () => {\n document.removeEventListener('click', handleClickOutside)\n }\n }, [setIsOpen, wrapperRef, menuRef])\n\n return (\n <>\n \n \n \n {t('Farm Types')}\n {farmTypesEnableCount > 0 && `(${farmTypesEnableCount})`}\n \n }\n isOpen={isOpen}\n options={{ placement: 'top' }}\n >\n \n \n \n {t('Farm Types')}\n \n \n \n \n \n \n {t('V1 Farms')}\n \n \n {\n const totalFarmsEnableCount = farmTypesEnableCount + (!v1FarmOnly ? 1 : -1)\n handleSetFarmTypesEnableCount(totalFarmsEnableCount)\n\n handleSetV1FarmOnly(!v1FarmOnly)\n }}\n scale=\"sm\"\n />\n \n \n \n \n \n {t('V2 Farms')}\n \n \n {\n const totalFarmsEnableCount = farmTypesEnableCount + (!v2FarmOnly ? 1 : -1)\n handleSetFarmTypesEnableCount(totalFarmsEnableCount)\n\n handleSetV2FarmOnly(!v2FarmOnly)\n }}\n scale=\"sm\"\n />\n \n \n \n \n \n \n \n \n )\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { useLocation } from \"react-router\";\nimport { Link } from 'react-router-dom';\nimport { useTranslation } from \"@pulsex/localization\";\nimport { NotificationDot, ButtonMenu, ButtonMenuItem, Flex } from \"@pulsex/uikit\";\n\nconst Wrapper = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n margin-left: 0px;\n }\n`;\n\nexport interface FarmTabButtonsProps {\n hasStakeInFinishedFarms: boolean;\n}\n\nexport const FarmTabButtons: React.FC> = ({ hasStakeInFinishedFarms }) => {\n const { pathname } = useLocation();\n const { t } = useTranslation();\n\n let activeIndex;\n switch (pathname) {\n case \"/farms\":\n activeIndex = 0;\n break;\n case \"/farms/history\":\n activeIndex = 1;\n break;\n case \"/_mp/farms/history\":\n activeIndex = 1;\n break;\n case \"/farms/archived\":\n activeIndex = 2;\n break;\n default:\n activeIndex = 0;\n break;\n }\n\n return (\n \n \n {/* \n {t(\"Filter by\")}\n */}\n \n \n {t(\"Live\")}\n \n \n \n {t(\"Finished\")}\n \n \n \n \n \n );\n};\n","import { styled } from 'styled-components'\nimport { ChevronDownIcon, ChevronUpIcon, Text } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\n\nexport interface ExpandableSectionButtonProps {\n onClick?: () => void\n expanded?: boolean\n}\n\nconst Wrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n\n svg {\n fill: ${({ theme }) => theme.colors.primary};\n }\n`\n\nconst ExpandableSectionButton: React.FC = ({ onClick, expanded = false }) => {\n const { t } = useTranslation()\n\n return (\n onClick()}>\n \n {expanded ? t('Hide') : t('Details')}\n \n {expanded ? : }\n \n )\n}\n\nexport default ExpandableSectionButton\n","import styled from 'styled-components'\nimport { Flex, Heading } from '@pulsex/uikit'\nimport { FarmWidget } from '@pulsex/widgets-internal'\nimport { Token } from '@pulsex/sdk'\nimport { TokenPairImage } from 'components/TokenImage'\n\nconst { ProtocolTag } = FarmWidget.Tags\nexport interface ExpandableSectionProps {\n lpLabel?: string\n multiplier?: string\n isCommunityFarm?: boolean\n token: Token\n quoteToken: Token\n pid?: number\n protocol: string\n}\n\nconst Wrapper = styled(Flex)`\n svg {\n margin-right: 4px;\n }\n`\n\nconst CardHeading: React.FC> = ({\n lpLabel,\n token,\n quoteToken,\n protocol\n}) => {\n return (\n \n \n \n {lpLabel.split(' ')[0]}\n \n \n \n )\n}\n\nexport default CardHeading\n","import { useEffect, useRef } from 'react'\nimport CountUp from 'react-countup'\nimport { Text, TextProps } from '@pulsex/uikit'\n\ninterface BalanceProps extends TextProps {\n value: number\n decimals?: number\n unit?: string\n isDisabled?: boolean\n prefix?: string\n onClick?: (event: React.MouseEvent) => void\n}\n\nconst Balance: React.FC = ({\n value,\n color = 'text',\n decimals = 3,\n isDisabled = false,\n unit,\n prefix,\n onClick,\n ...props\n}) => {\n const previousValue = useRef(0)\n\n useEffect(() => {\n previousValue.current = value\n }, [value])\n\n return (\n \n \n \n )\n}\n\nexport default Balance\n","import { Button, Flex, Heading, useToast } from '@pulsex/uikit'\nimport { useAccount } from 'wagmi'\nimport { SendTransactionResult } from 'wagmi/actions'\nimport BigNumber from 'bignumber.js'\nimport Balance from 'components/Balance'\nimport { useTranslation } from '@pulsex/localization'\nimport { ToastDescriptionWithTx } from 'components/Toast'\nimport useCatchTxError from 'hooks/useCatchTxError'\nimport { usePriceINCUsdc } from 'state/farms/hooks'\nimport { BIG_ZERO } from '@pulsex/utils/bigNumber'\nimport { getBalanceAmount } from '@pulsex/utils/formatBalance'\n\ninterface FarmCardActionsProps {\n earnings?: BigNumber\n onReward?: () => Promise\n onDone?: () => void\n}\n\nconst HarvestAction: React.FC> = ({\n earnings,\n onReward,\n onDone,\n}) => {\n const { address: account } = useAccount()\n const { toastSuccess } = useToast()\n const { fetchWithCatchTxError, loading: pendingTx } = useCatchTxError()\n const { t } = useTranslation()\n const incPrice = usePriceINCUsdc()\n const rawEarningsBalance = account ? getBalanceAmount(earnings) : BIG_ZERO\n const displayBalance = rawEarningsBalance.toFixed(3, BigNumber.ROUND_DOWN)\n const earningsUSDC = rawEarningsBalance ? rawEarningsBalance.multipliedBy(incPrice).toNumber() : 0\n\n const handleHarvest = async () => {\n const receipt = await fetchWithCatchTxError(() => {\n return onReward()\n })\n if (receipt?.status) {\n toastSuccess(\n `${t('Harvested')}!`,\n \n {t('Your %symbol% earnings have been sent to your wallet!', { symbol: 'INC' })}\n ,\n )\n onDone?.()\n }\n }\n\n return (\n \n \n {displayBalance}\n {earningsUSDC > 0 && (\n \n )}\n \n \n {pendingTx ? t('Harvesting') : t('Harvest')}\n \n \n )\n}\n\nexport default HarvestAction\n","import { useTranslation } from '@pulsex/localization'\nimport {\n Button,\n Flex,\n IconButton,\n AddIcon,\n MinusIcon,\n useModal,\n useToast\n} from '@pulsex/uikit'\nimport { FarmWidget } from '@pulsex/widgets-internal'\nimport { ToastDescriptionWithTx } from 'components/Toast'\nimport { SendTransactionResult } from 'wagmi/actions'\nimport useCatchTxError from 'hooks/useCatchTxError'\nimport { useCallback } from 'react'\nimport { styled } from 'styled-components'\nimport { useLocation } from 'react-router'\nimport { usePriceINCUsdc } from 'state/farms/hooks'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport { WNATIVE, NATIVE } from '@pulsex/sdk'\nimport { FarmWithStakedValue } from '@pulsex/farms'\n\ninterface FarmCardActionsProps extends FarmWithStakedValue {\n lpLabel?: string\n addLiquidityUrl?: string\n displayApr?: string\n onStake?: (value: string) => Promise\n onUnstake?: (value: string) => Promise\n onDone?: () => void\n onApprove?: () => Promise\n isApproved?: boolean\n}\n\nconst IconButtonWrapper = styled.div`\n display: flex;\n svg {\n width: 20px;\n }\n`\n\nconst StakeAction: React.FC> = ({\n pid,\n quoteToken,\n token,\n lpSymbol,\n lpTokenPrice,\n multiplier,\n apr,\n displayApr,\n addLiquidityUrl,\n lpLabel,\n lpTotalSupply,\n tokenAmountTotal,\n quoteTokenAmountTotal,\n userData,\n onStake,\n onUnstake,\n onDone,\n onApprove,\n isApproved,\n}) => {\n const { t } = useTranslation()\n const { pathname } = useLocation()\n const { account, chainId } = useActiveWeb3React()\n const { tokenBalance, stakedBalance, allowance } = userData\n const incPrice = usePriceINCUsdc()\n const { toastSuccess } = useToast()\n const { fetchWithCatchTxError, loading: pendingTx } = useCatchTxError()\n\n const handleStake = async (amount: string) => {\n const receipt = await fetchWithCatchTxError(() => onStake(amount))\n if (receipt?.status) {\n toastSuccess(\n `${t('Staked')}!`,\n \n {t('Your funds have been staked in the farm')}\n ,\n )\n onDone()\n }\n }\n\n const handleUnstake = async (amount: string) => {\n const receipt = await fetchWithCatchTxError(() => onUnstake(amount))\n if (receipt?.status) {\n toastSuccess(\n `${t('Unstaked')}!`,\n \n {t('Your earnings have also been harvested to your wallet')}\n ,\n )\n onDone()\n }\n }\n\n const handleApprove = useCallback(async () => {\n const receipt = await fetchWithCatchTxError(() => {\n return onApprove()\n })\n if (receipt?.status) {\n toastSuccess(t('Contract Enabled'), )\n onDone()\n }\n }, [onApprove, t, toastSuccess, fetchWithCatchTxError, onDone])\n\n const [onPresentDeposit] = useModal(\n ,\n true,\n true,\n `farm-deposit-modal-${pid}`,\n )\n const [onPresentWithdraw] = useModal(\n ,\n )\n\n const renderStakingButtons = () => {\n return stakedBalance.eq(0) ? (\n pathname.includes(item))}\n >\n {t('Stake LP')}\n \n ) : (\n \n \n \n \n pathname.includes(item))}\n >\n \n \n \n )\n }\n\n // TODO: Move this out to prevent unnecessary re-rendered\n if (!isApproved && stakedBalance.eq(0)) {\n return (\n \n )\n }\n\n return (\n \n \n {renderStakingButtons()}\n \n )\n}\n\nexport default StakeAction\n","import { useTranslation } from '@pulsex/localization'\nimport { Flex, Text } from '@pulsex/uikit'\nimport ConnectWalletButton from 'components/ConnectWalletButton'\nimport { styled } from 'styled-components'\nimport { FarmWithStakedValue } from '@pulsex/farms'\nimport { HarvestActionContainer } from '../FarmTable/Actions/HarvestAction'\nimport { StakedContainer } from '../FarmTable/Actions/StakedAction'\nimport HarvestAction from './HarvestAction'\nimport StakeAction from './StakeAction'\n\nconst Action = styled.div`\n padding-top: 16px;\n`\n\ninterface FarmCardActionsProps {\n farm: FarmWithStakedValue\n account?: string\n addLiquidityUrl?: string\n lpLabel?: string\n displayApr?: string\n}\n\nconst CardActions: React.FC> = ({\n farm,\n account,\n addLiquidityUrl,\n lpLabel,\n displayApr\n}) => {\n const { t } = useTranslation()\n const { pid, token, quoteToken, lpSymbol } = farm\n const { earnings } = farm.userData || {}\n\n return (\n \n \n \n INC\n \n \n {t('Earned')}\n \n \n \n {(props) => }\n \n \n \n {farm.lpSymbol}\n \n \n {t('Staked')}\n \n \n {!account ? (\n \n ) : (\n \n {(props) => }\n \n )}\n \n )\n}\n\nexport default CardActions\n","import { FarmWithStakedValue } from '@pulsex/farms'\nimport { useState } from 'react'\nimport BigNumber from 'bignumber.js'\nimport styled from 'styled-components'\nimport { Card, Flex, Text, Skeleton } from '@pulsex/uikit'\nimport { FarmWidget } from '@pulsex/widgets-internal'\nimport { getBlockExplorerLink } from 'utils'\nimport { useTranslation } from '@pulsex/localization'\nimport ExpandableSectionButton from 'components/ExpandableSectionButton'\nimport getLiquidityUrlPathParts from 'utils/getLiquidityUrlPathParts'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport CardHeading from './CardHeading'\nimport CardActionsContainer from './CardActionsContainer'\nimport ApyButton from './ApyButton'\n\nconst { DetailsSection } = FarmWidget.FarmCard\n\nconst StyledCard = styled(Card)`\n align-self: baseline;\n`\n\nconst FarmCardInnerContainer = styled(Flex)`\n flex-direction: column;\n justify-content: space-around;\n padding: 24px;\n`\n\nconst ExpandingWrapper = styled.div`\n padding: 24px;\n border-top: 2px solid ${({ theme }) => theme.colors.cardBorder};\n overflow: hidden;\n`\n\ninterface FarmCardProps {\n farm: FarmWithStakedValue\n displayApr: string\n removed: boolean\n incPrice?: BigNumber\n account?: string\n originalLiquidity?: BigNumber\n}\n\nconst FarmCard: React.FC> = ({\n farm,\n displayApr,\n removed,\n incPrice,\n account,\n}) => {\n const { t } = useTranslation()\n const { chainId } = useActiveChainId()\n\n const [showExpandableSection, setShowExpandableSection] = useState(false)\n\n const totalValueFormatted =\n farm.liquidity && farm.liquidity.gt(0)\n ? `$${farm.liquidity.toNumber().toLocaleString(undefined, { maximumFractionDigits: 0 })}`\n : ''\n\n const lpLabel = farm.lpSymbol && farm.lpSymbol.toUpperCase().replace('Incentive', '')\n const earnLabel = t('INC')\n\n const liquidityUrlPathParts = getLiquidityUrlPathParts({\n protocol: farm.protocol,\n quoteTokenAddress: farm.quoteToken.address,\n tokenAddress: farm.token.address,\n })\n const addLiquidityUrl = `/add/${liquidityUrlPathParts}`\n const { lpAddress } = farm\n const isPromotedFarm = farm.token.symbol === 'PLSX'\n\n return (\n \n \n \n {!removed && (\n \n {t('APR')}:\n \n {farm.apr ? (\n \n ) : (\n \n )}\n \n \n )}\n \n {t('Earn')}:\n {earnLabel}\n \n \n \n\n \n setShowExpandableSection(!showExpandableSection)}\n expanded={showExpandableSection}\n />\n {showExpandableSection && (\n \n )}\n \n \n )\n}\n\nexport default FarmCard\n","import { useEffect, useCallback, useMemo, useRef, useState } from 'react'\nimport BigNumber from 'bignumber.js'\nimport { useAccount } from 'wagmi'\nimport {\n Heading,\n Text,\n Flex,\n Loading,\n SearchInput,\n FlexLayout,\n PageHeader,\n Toggle,\n ToggleView,\n} from '@pulsex/uikit'\nimport { styled } from 'styled-components'\nimport { useFarms, usePollFarmsWithUserData, usePriceINCUsdc } from 'state/farms/hooks'\nimport { useIntersectionObserver } from '@pulsex/hooks'\nimport { DeserializedFarm, FarmWithStakedValue } from '@pulsex/farms'\nimport { useTranslation } from '@pulsex/localization'\nimport { getFarmApr } from 'utils/apr'\nimport orderBy from 'lodash/orderBy'\nimport isArchivedPid from 'utils/farmHelpers'\nimport { latinise } from 'utils/latinise'\nimport { useUserFarmStakedOnly, useUserFarmsViewMode } from 'state/user/hooks'\nimport { ViewMode } from 'state/user/actions'\nimport { useLocation } from 'react-router'\nimport { useSearchParams } from 'react-router-dom'\nimport Table from './components/FarmTable/FarmTable'\nimport { FarmTypesFilter } from './components/FarmTypesFilter'\nimport { FarmTabButtons } from './components/FarmTabButtons'\nimport FarmCard from './components/FarmCard/FarmCard'\n\nconst ControlContainer = styled.div`\n display: flex;\n width: 100%;\n align-items: center;\n position: relative;\n justify-content: space-between;\n padding: 16px 0px;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n flex-direction: row;\n flex-wrap: wrap;\n padding: 16px 0px;\n }\n`\n\nconst LabelWrapper = styled.div`\n > ${Text} {\n font-size: 12px;\n }\n`\n\nconst FilterContainer = styled.div`\n display: flex;\n align-items: center;\n width: 100%;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n width: auto;\n }\n`\n\nconst ViewControls = styled.div`\n flex-wrap: wrap;\n justify-content: space-between;\n display: flex;\n align-items: center;\n width: 100%;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n justify-content: flex-start;\n width: auto;\n }\n`\n\nconst ToggleWrapper = styled.div`\n display: flex;\n align-items: center;\n margin-left: 10px;\n\n ${Text} {\n margin-left: 8px;\n }\n`\n\nconst NUMBER_OF_FARMS_VISIBLE = 12\n\nexport const getDisplayApr = (incentiveRewardsApr?: number, lpRewardsApr?: number) => {\n if (incentiveRewardsApr && lpRewardsApr) {\n return (incentiveRewardsApr + lpRewardsApr).toLocaleString('en-US', { maximumFractionDigits: 2 })\n }\n if (incentiveRewardsApr) {\n return incentiveRewardsApr.toLocaleString('en-US', { maximumFractionDigits: 2 })\n }\n return null\n}\n\nconst Farms: React.FC = () => {\n const { pathname } = useLocation()\n const [searchParams] = useSearchParams()\n const { t } = useTranslation()\n const { data: farmsLP, userDataLoaded } = useFarms()\n const incPrice = usePriceINCUsdc()\n const searchQuery = searchParams.get('search')\n\n const [_query, setQuery] = useState('')\n const normalizedUrlSearch = useMemo(() => (typeof searchQuery === 'string' ? searchQuery : ''), [searchQuery])\n const query = normalizedUrlSearch && !_query ? normalizedUrlSearch : _query\n \n const [viewMode, setViewMode] = useUserFarmsViewMode()\n const { address: account } = useAccount()\n const [sortOption] = useState('hot')\n const { observerRef, isIntersecting } = useIntersectionObserver()\n const chosenFarmsLength = useRef(0)\n\n const isArchived = pathname.includes('archived')\n const isInactive = pathname.includes('history')\n const isActive = !isInactive && !isArchived\n\n usePollFarmsWithUserData()\n\n // Users with no wallet connected should see 0 as Earned amount\n // Connected users should see loading indicator until first userData has loaded\n const userDataReady = !account || (!!account && userDataLoaded)\n\n const [stakedOnly, setStakedOnly] = useUserFarmStakedOnly(isActive)\n const [v1FarmOnly, setV1FarmOnly] = useState(false)\n const [v2FarmOnly, setV2FarmOnly] = useState(false)\n const [farmTypesEnableCount, setFarmTypesEnableCount] = useState(0)\n\n\n const activeFarms = farmsLP.filter((farm) => farm.multiplier !== '0X' && !isArchivedPid(farm.pid))\n const inactiveFarms = farmsLP.filter((farm) => farm.multiplier === '0X' && !isArchivedPid(farm.pid))\n const archivedFarms = farmsLP.filter((farm) => isArchivedPid(farm.pid))\n\n const stakedOnlyFarms = activeFarms.filter(\n (farm) => farm.userData && new BigNumber(farm.userData.stakedBalance).isGreaterThan(0),\n )\n\n const stakedInactiveFarms = inactiveFarms.filter(\n (farm) => farm.userData && new BigNumber(farm.userData.stakedBalance).isGreaterThan(0),\n )\n\n const stakedArchivedFarms = archivedFarms.filter(\n (farm) => farm.userData && new BigNumber(farm.userData.stakedBalance).isGreaterThan(0),\n )\n\n const farmsList = useCallback(\n (farmsToDisplay: DeserializedFarm[]): FarmWithStakedValue[] => {\n let farmsToDisplayWithAPR: FarmWithStakedValue[] = farmsToDisplay.map((farm) => {\n if (!farm.lpTotalInQuoteToken || !farm.quoteTokenPriceUsd) {\n return farm\n }\n const totalLiquidity = new BigNumber(farm.lpTotalInQuoteToken).times(farm.quoteTokenPriceUsd)\n const { incentiveRewardsApr, lpRewardsApr } = isActive\n ? getFarmApr(new BigNumber(farm.poolWeight), incPrice, totalLiquidity, farm.lpAddress)\n : { incentiveRewardsApr: 0, lpRewardsApr: 0 }\n\n return { ...farm, apr: incentiveRewardsApr, lpRewardsApr, liquidity: totalLiquidity }\n })\n\n if (query) {\n const lowercaseQuery = latinise(query.toLowerCase())\n farmsToDisplayWithAPR = farmsToDisplayWithAPR.filter((farm: FarmWithStakedValue) => {\n return latinise(farm.lpSymbol.toLowerCase()).includes(lowercaseQuery)\n })\n }\n return farmsToDisplayWithAPR\n },\n [incPrice, query, isActive],\n )\n\n const handleChangeQuery = (event: React.ChangeEvent) => {\n setQuery(event.target.value)\n }\n\n const [numberOfFarmsVisible, setNumberOfFarmsVisible] = useState(NUMBER_OF_FARMS_VISIBLE)\n\n const chosenFarms = useMemo(() => {\n let chosenFs = []\n if (isActive) {\n chosenFs = stakedOnly ? farmsList(stakedOnlyFarms) : farmsList(activeFarms)\n }\n if (isInactive) {\n chosenFs = stakedOnly ? farmsList(stakedInactiveFarms) : farmsList(inactiveFarms)\n }\n if (isArchived) {\n chosenFs = stakedOnly ? farmsList(stakedArchivedFarms) : farmsList(archivedFarms)\n }\n\n if (v1FarmOnly || v2FarmOnly) {\n chosenFs = chosenFs.filter(\n (farm) =>\n (v1FarmOnly && farm.protocol === 'V1') ||\n (v2FarmOnly && farm.protocol === 'V2')\n )\n }\n return chosenFs\n }, [\n activeFarms,\n farmsList,\n inactiveFarms,\n archivedFarms,\n isActive,\n isInactive,\n isArchived,\n stakedArchivedFarms,\n stakedInactiveFarms,\n stakedOnly,\n stakedOnlyFarms,\n v1FarmOnly,\n v2FarmOnly\n ])\n\n const chosenFarmsMemoized = useMemo(() => {\n const sortFarms = (farms: FarmWithStakedValue[]): FarmWithStakedValue[] => {\n switch (sortOption) {\n case 'apr':\n return orderBy(farms, (farm: FarmWithStakedValue) => farm.apr + farm.lpRewardsApr, 'desc')\n case 'multiplier':\n return orderBy(\n farms,\n (farm: FarmWithStakedValue) => (farm.multiplier ? Number(farm.multiplier.slice(0, -1)) : 0),\n 'desc',\n )\n case 'earned':\n return orderBy(\n farms,\n (farm: FarmWithStakedValue) => (farm.userData ? Number(farm.userData.earnings) : 0),\n 'desc',\n )\n case 'liquidity':\n return orderBy(farms, (farm: FarmWithStakedValue) => Number(farm.liquidity), 'desc')\n case 'latest':\n return orderBy(farms, (farm: FarmWithStakedValue) => Number(farm.pid), 'desc')\n default:\n return farms\n }\n }\n\n return sortFarms(chosenFarms).slice(0, numberOfFarmsVisible)\n }, [chosenFarms, sortOption, numberOfFarmsVisible])\n\n chosenFarmsLength.current = chosenFarmsMemoized.length\n\n useEffect(() => {\n if (isIntersecting) {\n setNumberOfFarmsVisible((farmsCurrentlyVisible) => {\n if (farmsCurrentlyVisible <= chosenFarmsLength.current) {\n return farmsCurrentlyVisible + NUMBER_OF_FARMS_VISIBLE\n }\n return farmsCurrentlyVisible\n })\n }\n }, [isIntersecting])\n\n const cardLayout = (\n <>\n {chosenFarmsMemoized.map((farm) => (\n \n ))}\n \n )\n\n return (\n \n \n \n \n {t('Farms')}\n \n \n {t('Stake LP tokens and earn Incentive token')}\n \n \n \n \n \n setViewMode(mode)} />\n 0} />\n \n \n setStakedOnly(!stakedOnly)}\n scale=\"sm\"\n />\n {t('Staked only')}\n \n \n \n \n \n \n \n \n {viewMode === ViewMode.TABLE ? (\n \n ) : (\n {cardLayout}\n )}\n {account && !userDataLoaded && stakedOnly && (\n \n \n \n )}\n
    \n \n )\n}\n\nexport default Farms\n","import { batch, useSelector } from 'react-redux'\nimport { useAppDispatch } from 'state'\nimport { useRefreshEffect } from 'hooks/useRefreshEffect'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport { Token } from '@pulsex/sdk'\nimport { DeserializedPool } from '@pulsex/pools'\nimport { FAST_INTERVAL, SLOW_INTERVAL } from 'config/constants/exchange'\nimport { fetchPoolsPublicDataAsync, fetchPoolsUserDataAsync, fetchPoolsStakingLimitsAsync } from '.'\nimport { State } from '../types'\nimport { transformPool } from './helpers'\nimport { fetchFarmsPublicDataAsync } from '../farms'\n\nexport const useFetchPublicPoolsData = () => {\n const dispatch = useAppDispatch()\n const { chainId } = useActiveChainId()\n\n useRefreshEffect(SLOW_INTERVAL, () => {\n const fetchPoolsDataWithFarms = async () => {\n const activeFarms = []\n dispatch(fetchFarmsPublicDataAsync({ pids: activeFarms, chainId }))\n batch(() => {\n dispatch(fetchPoolsPublicDataAsync(chainId))\n dispatch(fetchPoolsStakingLimitsAsync(chainId))\n })\n }\n\n fetchPoolsDataWithFarms()\n }, [dispatch, chainId])\n}\n\nexport const useFetchUserPools = (account) => {\n const dispatch = useAppDispatch()\n const { chainId } = useActiveChainId()\n\n useRefreshEffect(FAST_INTERVAL, () => {\n if (account) {\n dispatch(fetchPoolsUserDataAsync(account, chainId))\n }\n }, [account, chainId, dispatch])\n}\n\nexport const usePools = (): { pools: DeserializedPool[]; userDataLoaded: boolean } => {\n const { pools, userDataLoaded } = useSelector((state: State) => ({\n pools: state.pools.data,\n userDataLoaded: state.pools.userDataLoaded,\n }))\n return { pools: pools.map(transformPool), userDataLoaded }\n}\n\nexport const usePool = (poolId: number): { pool: DeserializedPool; userDataLoaded: boolean } => {\n const { pool, userDataLoaded } = useSelector((state: State) => ({\n pool: state.pools.data.find((p) => p.poolId === poolId),\n userDataLoaded: state.pools.userDataLoaded,\n }))\n return { pool: transformPool(pool), userDataLoaded }\n}\n","import { Flex } from '@pulsex/uikit'\nimport { styled } from 'styled-components'\n\nconst FlexLayout = styled.div`\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n & > * {\n min-width: 280px;\n max-width: 31.5%;\n width: 100%;\n margin: 0 8px;\n margin-bottom: 32px;\n }\n`\n\nexport const FlexGap = styled(Flex)<{ gap?: string }>`\n gap: ${({ gap }) => gap};\n`\n\nexport default FlexLayout\n","import { styled } from 'styled-components'\nimport { Box } from '@pulsex/uikit'\nimport Container from '../Layout/Container'\nimport { PageHeaderProps } from './types'\n\nconst Outer = styled(Box)<{ background?: string }>`\n min-height: calc(100vh - 119px);\n background: ${({ theme, background }) => background || theme.colors.gradientBubblegum};\n\n ${({ theme }) => theme.mediaQueries.lg} {\n min-height: calc(100vh - 119px);\n }\n`\n\nconst Inner = styled(Container)`\n padding-top: 32px;\n padding-bottom: 70px;\n`\n\nconst PageHeader: React.FC = ({ background, children, ...props }) => (\n \n {children}\n \n)\n\nexport default PageHeader\n","import { useState, useMemo } from 'react'\nimport { Input } from '@pulsex/uikit'\nimport { styled } from 'styled-components'\nimport debounce from 'lodash/debounce'\nimport { useTranslation } from '@pulsex/localization'\n\nconst StyledInput = styled(Input)`\n border-radius: 10px;\n margin-left: auto;\n`\n\nconst InputWrapper = styled.div`\n position: relative;\n ${({ theme }) => theme.mediaQueries.sm} {\n display: block;\n }\n`\n\ninterface Props {\n onChange: (e: React.ChangeEvent) => void\n placeholder?: string\n}\n\nconst SearchInput: React.FC = ({ onChange: onChangeCallback, placeholder = 'Search' }) => {\n const [searchText, setSearchText] = useState('')\n\n const { t } = useTranslation()\n\n const debouncedOnChange = useMemo(\n () => debounce((e: React.ChangeEvent) => onChangeCallback(e), 500),\n [onChangeCallback],\n )\n\n const onChange = (e: React.ChangeEvent) => {\n setSearchText(e.target.value)\n debouncedOnChange(e)\n }\n\n return (\n \n \n \n )\n}\n\nexport default SearchInput\n","import { useState, useEffect, useMemo } from 'react'\nimport { usePlsxUsdPrice } from 'hooks/useUSDCPrice'\nimport { useAppDispatch } from 'state'\nimport orderBy from 'lodash/orderBy'\nimport { Token } from '@pulsex/sdk'\nimport { DeserializedPool } from '@pulsex/pools'\nimport { fetchPoolsPublicDataAsync, setInitialPoolConfig } from 'state/pools'\nimport { usePools } from 'state/pools/hooks'\nimport { useAddLiquidityFormState } from 'state/mint/reducer'\nimport { FetchStatus } from 'config/constants/types'\nimport useSWR from 'swr'\n\nexport function usePoolsWithVault() {\n const { pools: poolsWithoutAutoVault } = usePools()\n const pools = useMemo(() => {\n return [...poolsWithoutAutoVault]\n }, [poolsWithoutAutoVault])\n\n return pools\n}\n\nconst useGetTopPoolsByApr = (isIntersecting: boolean, chainId: number) => {\n const dispatch = useAppDispatch()\n\n const [topPools, setTopPools] = useState[]>([null, null, null, null, null])\n\n const pools = usePoolsWithVault()\n\n const { protocol } = useAddLiquidityFormState()\n const cakePriceBusd = usePlsxUsdPrice(protocol)\n\n const { status: fetchStatus, isValidating } = useSWR(\n isIntersecting && chainId && [chainId, 'fetchTopPoolsByApr'],\n async () => {\n await dispatch(setInitialPoolConfig({ chainId }))\n return Promise.all([\n dispatch(fetchPoolsPublicDataAsync(chainId)),\n ])\n },\n { revalidateOnFocus: false, revalidateOnReconnect: false },\n )\n\n useEffect(() => {\n const getTopPoolsByApr = (activePools: DeserializedPool[]) => {\n const sortedByApr = orderBy(activePools, (pool: DeserializedPool) => pool.apr || 0, 'desc')\n setTopPools(sortedByApr.slice(0, 5))\n }\n if (fetchStatus === FetchStatus.Fetched && !isValidating) {\n getTopPoolsByApr(pools)\n }\n }, [setTopPools, pools, isValidating, fetchStatus, cakePriceBusd, topPools])\n\n return { topPools }\n}\n\nexport default useGetTopPoolsByApr\n","import { styled } from 'styled-components'\n\nconst Loading = styled.div`\n border: 8px solid #f3f3f3;\n border-radius: 50%;\n border-top: 8px solid #ddd;\n border-bottom: 8px solid #ddd;\n width: 20px;\n height: 20px;\n -webkit-animation: spin 2s linear infinite;\n animation: spin 2s linear infinite;\n @-webkit-keyframes spin {\n 0% {\n -webkit-transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n }\n }\n\n @keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n`\n\nexport default Loading\n","import styled from 'styled-components'\nimport { Token } from '@pulsex/sdk'\nimport { Flex, IconButton, useModal, CalculateIcon, RoiCalculatorModal, Skeleton, Text } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport Balance from 'components/Balance'\nimport { DeserializedPool } from '@pulsex/pools'\nimport BigNumber from 'bignumber.js'\nimport { BIG_ZERO } from '@pulsex/utils/bigNumber'\n\nconst ApyLabelContainer = styled(Flex)`\n cursor: pointer;\n\n &:hover {\n opacity: 0.5;\n }\n`\n\ninterface AprRowProps {\n pool: DeserializedPool\n stakedBalance: BigNumber\n performanceFee?: number\n}\n\nconst AprRow: React.FC = ({ pool, stakedBalance, performanceFee = 0 }) => {\n const { t } = useTranslation()\n const {\n stakingToken,\n earningToken,\n isFinished,\n apr,\n earningTokenPrice,\n stakingTokenPrice,\n userData,\n } = pool\n\n const stakingTokenBalance = userData?.stakingTokenBalance ? new BigNumber(userData.stakingTokenBalance) : BIG_ZERO\n\n const apyModalLink = stakingToken.address ? `/swap?outputCurrency=${stakingToken.address}` : '/swap'\n\n const [onPresentApyModal] = useModal(\n ,\n )\n\n return (\n \n APR:\n {apr || isFinished ? (\n \n \n {!isFinished && (\n \n \n \n )}\n \n ) : (\n \n )}\n \n )\n}\n\nexport default AprRow\n","import styled from 'styled-components'\nimport { Card } from '@pulsex/uikit'\n\nexport const StyledCard = styled(Card)<{ isFinished?: boolean }>`\n max-width: 352px;\n margin: 0 8px 24px;\n width: 100%;\n min-width: 300px;\n display: flex;\n flex-direction: column;\n align-self: baseline;\n position: relative;\n color: ${({ isFinished, theme }) => theme.colors[isFinished ? 'textDisabled' : 'secondary']};\n\n ${({ theme }) => theme.mediaQueries.sm} {\n margin: 0 12px 46px;\n }\n`\n\nexport default StyledCard\n","import BigNumber from 'bignumber.js'\nimport { Token } from '@pulsex/sdk'\nimport { DeserializedPool } from '@pulsex/pools'\nimport { getBalanceNumber, getFullDisplayBalance, getDecimalAmount } from '@pulsex/utils/formatBalance'\n\nexport const convertSharesToPlsx = (\n shares: BigNumber,\n plsxPerFullShare: BigNumber,\n decimals = 18,\n decimalsToRound = 3,\n) => {\n const sharePriceNumber = getBalanceNumber(plsxPerFullShare, decimals)\n const amountInPlsx = new BigNumber(shares.multipliedBy(sharePriceNumber))\n const plsxAsNumberBalance = getBalanceNumber(amountInPlsx, decimals)\n const plsxAsBigNumber = getDecimalAmount(new BigNumber(plsxAsNumberBalance), decimals)\n const plsxAsDisplayBalance = getFullDisplayBalance(amountInPlsx, decimals, decimalsToRound)\n return { plsxAsNumberBalance, plsxAsBigNumber, plsxAsDisplayBalance }\n}\n\nexport const convertPlsxToShares = (\n plsx: BigNumber,\n plsxPerFullShare: BigNumber,\n decimals = 18,\n decimalsToRound = 3,\n) => {\n const sharePriceNumber = getBalanceNumber(plsxPerFullShare, decimals)\n const amountInShares = new BigNumber(plsx.dividedBy(sharePriceNumber))\n const sharesAsNumberBalance = getBalanceNumber(amountInShares, decimals)\n const sharesAsBigNumber = getDecimalAmount(new BigNumber(sharesAsNumberBalance), decimals)\n const sharesAsDisplayBalance = getFullDisplayBalance(amountInShares, decimals, decimalsToRound)\n return { sharesAsNumberBalance, sharesAsBigNumber, sharesAsDisplayBalance }\n}\n\nexport const getPlsxVaultEarnings = (\n account: string,\n plsxAtLastUserAction: BigNumber,\n userShares: BigNumber,\n pricePerFullShare: BigNumber,\n earningTokenPrice: number,\n) => {\n const hasAutoEarnings =\n account && plsxAtLastUserAction && plsxAtLastUserAction.gt(0) && userShares && userShares.gt(0)\n const { plsxAsBigNumber } = convertSharesToPlsx(userShares, pricePerFullShare)\n const autoPlsxProfit = plsxAsBigNumber.minus(plsxAtLastUserAction)\n const autoPlsxToDisplay = autoPlsxProfit.gte(0) ? getBalanceNumber(autoPlsxProfit, 18) : 0\n\n const autoUsdProfit = autoPlsxProfit.times(earningTokenPrice)\n const autoUsdToDisplay = autoUsdProfit.gte(0) ? getBalanceNumber(autoUsdProfit, 18) : 0\n return { hasAutoEarnings, autoPlsxToDisplay, autoUsdToDisplay }\n}\n\nexport const getPoolTimeInfo = (pool: DeserializedPool, currentTime: number) => {\n const { startTimestamp, endTimestamp, isFinished } = pool\n const shouldShowSecondCountdown = Boolean(!isFinished && startTimestamp && endTimestamp)\n const secondsUntilStart = Math.max(startTimestamp - currentTime, 0)\n const secondsRemaining = Math.max(endTimestamp - currentTime, 0)\n const hasPoolStarted = secondsUntilStart === 0 && secondsRemaining > 0\n const secondsToDisplay = hasPoolStarted ? secondsRemaining : secondsUntilStart\n return { shouldShowSecondCountdown, secondsUntilStart, secondsRemaining, hasPoolStarted, secondsToDisplay }\n}\n","import { memo } from 'react'\nimport styled from 'styled-components'\nimport { Token } from '@pulsex/sdk'\nimport { getBalanceNumber, getFullDisplayBalance } from '@pulsex/utils/formatBalance'\nimport { useTranslation } from '@pulsex/localization'\nimport {\n Flex,\n MetamaskIcon,\n Text,\n LinkExternal,\n TimerIcon,\n Skeleton,\n useTooltip,\n Button,\n HelpIcon,\n} from '@pulsex/uikit'\nimport { BASE_PULSECHAIN_SCAN_URL } from 'config'\nimport { DeserializedPool } from '@pulsex/pools'\nimport { getAddress } from 'viem'\nimport { registerToken } from 'utils/wallet'\nimport Balance from 'components/Balance'\nimport { getPoolTimeInfo } from 'pages/Pools/helpers'\n\ninterface ExpandedFooterProps {\n pool: DeserializedPool\n account: string\n}\n\nconst ExpandedWrapper = styled(Flex)`\n svg {\n height: 14px;\n width: 14px;\n }\n`\n\nconst ExpandedFooter: React.FC = ({ pool, account }) => {\n const { t } = useTranslation()\n\n const { stakingToken, earningToken, totalStaked, stakingLimit, contractAddress, timeStamp } = pool\n\n const tokenAddress = earningToken.address || ''\n const poolContractAddress = getAddress(contractAddress)\n const isMetaMaskInScope = !!window.ethereum?.isMetaMask\n\n const { shouldShowSecondCountdown, secondsUntilStart, secondsRemaining, hasPoolStarted } = getPoolTimeInfo(\n pool,\n timeStamp,\n )\n\n const daysout = Math.floor(secondsRemaining / 86400)\n const hoursout = Math.floor((secondsRemaining - daysout * 86400) / 3600)\n const minutesout = Math.floor((secondsRemaining - daysout * 86400 - hoursout * 3600) / 60)\n\n const getTotalStakedBalance = () => {\n return getBalanceNumber(totalStaked, stakingToken.decimals)\n }\n\n const {\n targetRef: totalStakedTargetRef,\n tooltip: totalStakedTooltip,\n tooltipVisible: totalStakedTooltipVisible,\n } = useTooltip(t('Total amount of %symbol% staked in this pool', { symbol: stakingToken.symbol }), {\n placement: 'bottom',\n })\n\n return (\n \n \n {t('Total staked')}:\n \n {totalStaked && totalStaked.gte(0) ? (\n <>\n \n \n \n \n \n ) : (\n \n )}\n {totalStakedTooltipVisible && totalStakedTooltip}\n \n \n {stakingLimit && stakingLimit.gt(0) && (\n \n {t('Max. stake per user')}:\n {`${getFullDisplayBalance(stakingLimit, stakingToken.decimals, 0)} ${stakingToken.symbol}`}\n \n )}\n {shouldShowSecondCountdown && (\n \n {hasPoolStarted ? t('Ends in') : t('Starts in')}:\n {secondsRemaining || secondsUntilStart ? (\n \n \n {`${daysout}d ${hoursout}h ${minutesout}m`}\n \n \n {t('Blocks')}\n \n \n \n ) : (\n \n )}\n \n )}\n \n \n {t('See Token Info')}\n \n \n \n {poolContractAddress && (\n \n \n {t('View Contract')}\n \n \n )}\n {account && isMetaMaskInScope && tokenAddress && (\n \n registerToken(tokenAddress, earningToken.symbol, earningToken.decimals)}\n >\n \n {t('Add to Metamask')}\n \n \n \n \n )}\n \n )\n}\n\nexport default memo(ExpandedFooter)\n","import { useState } from 'react'\nimport BigNumber from 'bignumber.js'\nimport styled from 'styled-components'\nimport { Token } from '@pulsex/sdk'\nimport { useTranslation } from '@pulsex/localization'\nimport { Flex, CardFooter, ExpandableLabel } from '@pulsex/uikit'\nimport { DeserializedPool } from '@pulsex/pools'\nimport ExpandedFooter from './ExpandedFooter'\n\ninterface FooterProps {\n pool: DeserializedPool\n account: string\n totalPlsxInVault?: BigNumber\n defaultExpanded?: boolean\n}\n\nconst ExpandableButtonWrapper = styled(Flex)`\n align-items: center;\n justify-content: center;\n button {\n padding: 0;\n }\n`\n\nconst Footer: React.FC = ({ pool, account, defaultExpanded }) => {\n const { t } = useTranslation()\n const [isExpanded, setIsExpanded] = useState(defaultExpanded || false)\n\n return (\n \n \n setIsExpanded(!isExpanded)}>\n {isExpanded ? t('Hide') : t('Details')}\n \n \n {isExpanded && }\n \n )\n}\n\nexport default Footer\n","import { CardHeader, Flex, Heading, Text } from '@pulsex/uikit'\nimport styled from 'styled-components'\n\nconst Wrapper = styled(CardHeader)<{ isFinished?: boolean; background?: string }>`\n background: ${({ isFinished, theme }) =>\n isFinished ? theme.colors.backgroundDisabled : theme.colors.gradientBubblegum};\n border-radius: ${({ theme }) => `${theme.radii.card} ${theme.radii.card} 0 0`};\n`\n\nconst PoolCardHeader: React.FC> = ({ isFinished = false, children }) => {\n\n return (\n \n \n {children}\n \n \n )\n}\n\nexport const PoolCardHeaderTitle: React.FC<{ isFinished?: boolean; title: string; subTitle: string }> = ({\n isFinished,\n title,\n subTitle,\n}) => {\n return (\n \n \n {title}\n \n \n {subTitle}\n \n \n )\n}\n\nexport default PoolCardHeader\n","import { useCallback } from 'react'\nimport { useAccount } from 'wagmi'\nimport { MaxUint256 } from '@pulsex/swap-sdk-core'\nimport { useAppDispatch } from 'state'\nimport { updateUserAllowance } from 'state/actions'\nimport { useTranslation } from '@pulsex/localization'\nimport { useERC20, usePlsxLab } from 'hooks/useContract'\nimport { useToast } from '@pulsex/uikit'\nimport { useCallWithGasPrice } from 'hooks/useCallWithGasPrice'\nimport useCatchTxError from 'hooks/useCatchTxError'\nimport { ToastDescriptionWithTx } from 'components/Toast'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\n\nexport const useApprovePool = (lpContract: ReturnType, sousId, earningTokenSymbol) => {\n const { toastSuccess } = useToast()\n const { chainId } = useActiveChainId()\n const { fetchWithCatchTxError, loading: pendingTx } = useCatchTxError()\n const { callWithGasPrice } = useCallWithGasPrice()\n const { t } = useTranslation()\n const dispatch = useAppDispatch()\n const { address: account } = useAccount()\n const plsxLabContract = usePlsxLab()\n\n const handleApprove = useCallback(async () => {\n const receipt = await fetchWithCatchTxError(() => {\n return callWithGasPrice(lpContract, 'approve', [plsxLabContract.address, MaxUint256])\n })\n if (receipt?.status) {\n toastSuccess(\n t('Contract Enabled'),\n \n {t('You can now stake in the %symbol% pool!', { symbol: earningTokenSymbol })}\n ,\n )\n\n dispatch(updateUserAllowance(sousId, account, chainId))\n }\n }, [\n account,\n chainId,\n dispatch,\n lpContract,\n plsxLabContract,\n sousId,\n earningTokenSymbol,\n t,\n toastSuccess,\n callWithGasPrice,\n fetchWithCatchTxError,\n ])\n\n return { handleApprove, pendingTx }\n}\n","import { Token } from '@pulsex/sdk'\nimport { Button, AutoRenewIcon, Skeleton } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport { useERC20 } from 'hooks/useContract'\nimport { DeserializedPool } from '@pulsex/pools'\nimport { useApprovePool } from '../../../hooks/useApprove'\n\ninterface ApprovalActionProps {\n pool: DeserializedPool\n isLoading?: boolean\n}\n\nconst ApprovalAction: React.FC = ({ pool, isLoading = false }) => {\n const { poolId, stakingToken, earningToken } = pool\n const { t } = useTranslation()\n const stakingTokenContract = useERC20(stakingToken.address)\n const { handleApprove, pendingTx } = useApprovePool(stakingTokenContract, poolId, earningToken.symbol)\n\n return (\n <>\n {isLoading ? (\n \n ) : (\n : null}\n disabled={pendingTx}\n onClick={handleApprove}\n width=\"100%\"\n >\n {t('Enable')}\n \n )}\n \n )\n}\n\nexport default ApprovalAction\n","import { useTheme, THEME_DOMAIN, COOKIE_THEME_KEY } from '@pulsex/hooks'\n\nexport { THEME_DOMAIN, COOKIE_THEME_KEY }\n\nexport default useTheme\n","// 1 day, 7 days, 30 days, 1 year, 5 years\nconst DAYS_TO_CALCULATE_AGAINST = [1, 7, 30, 365, 1825]\n\n/**\n *\n * @param principalInUSD - amount user wants to invest in USD\n * @param apr - farm or pool apr as percentage. If its farm APR its only INC rewards APR without LP rewards APR\n * @param earningTokenPrice - price of reward token\n * @param compoundFrequency - how many compounds per 1 day, e.g. 1 = one per day, 0.142857142 - once per week\n * @param performanceFee - performance fee as percentage\n * @returns an array of token values earned as interest, with each element representing interest earned over a different period of time (DAYS_TO_CALCULATE_AGAINST)\n */\nexport const getInterestBreakdown = ({\n principalInUSD,\n apr,\n earningTokenPrice,\n compoundFrequency = 1,\n performanceFee = 0,\n}: {\n principalInUSD: number\n apr: number\n earningTokenPrice: number\n compoundFrequency?: number\n performanceFee?: number\n}) => {\n // Everything here is worked out relative to a year, with the asset compounding at the compoundFrequency rate. 1 = once per day\n const timesCompounded = 365 * compoundFrequency\n // We use decimal values rather than % in the math for both APY and the number of days being calculates as a proportion of the year\n const aprAsDecimal = apr / 100\n\n // special handling for tokens like tBTC or BIFI where the daily token rewards for $1000 dollars will be less than 0.001 of that token\n // and also cause rounding errors\n const isHighValueToken = Math.round(earningTokenPrice / 1000) > 0\n const roundingDecimalsNew = isHighValueToken ? 5 : 3\n\n return DAYS_TO_CALCULATE_AGAINST.map((days) => {\n const daysAsDecimalOfYear = days / 365\n // Calculate the starting TOKEN balance with a dollar balance of principalInUSD.\n const principal = principalInUSD / earningTokenPrice\n let interestEarned = principal * aprAsDecimal * (days / 365)\n if (timesCompounded !== 0) {\n // This is a translation of the typical mathematical compounding APY formula. Details here: https://www.calculatorsoup.com/calculators/financial/compound-interest-calculator.php\n const accruedAmount = principal * (1 + aprAsDecimal / timesCompounded) ** (timesCompounded * daysAsDecimalOfYear)\n // To get the TOKEN amount earned, deduct the amount after compounding (accruedAmount) from the starting TOKEN balance (principal)\n interestEarned = accruedAmount - principal\n if (performanceFee) {\n const performanceFeeAsDecimal = performanceFee / 100\n const performanceFeeAsAmount = interestEarned * performanceFeeAsDecimal\n interestEarned -= performanceFeeAsAmount\n }\n }\n return parseFloat(interestEarned.toFixed(roundingDecimalsNew))\n })\n}\n\n/**\n * @param interest how much USD amount you aim to make\n * @param apr APR of farm/pool\n * @param compoundingFrequency how many compounds per 1 day, e.g. 1 = one per day, 0.142857142 - once per week\n * @returns an array of principal values needed to reach target interest, with each element representing principal needed for a different period of time (DAYS_TO_CALCULATE_AGAINST)\n */\nexport const getPrincipalForInterest = (\n interest: number,\n apr: number,\n compoundingFrequency: number,\n performanceFee = 0,\n) => {\n return DAYS_TO_CALCULATE_AGAINST.map((days) => {\n const apyAsDecimal = getApy(apr, compoundingFrequency, days, performanceFee)\n // console.log('inside', interest, apyAsDecimal)\n // const apyAsBN = new BigNumber(apyAsDecimal).decimalPlaces(6, BigNumber.ROUND_DOWN).toNumber()\n return parseFloat((interest / apyAsDecimal).toFixed(2))\n })\n}\n\n/**\n * Given APR returns APY\n * @param apr APR as percentage\n * @param compoundFrequency how many compounds per day\n * @param days if other than 365 adjusts (A)PY for period less than a year\n * @param performanceFee performance fee as percentage\n * @returns APY as decimal\n */\nexport const getApy = (apr: number, compoundFrequency = 1, days = 365, performanceFee = 0) => {\n const daysAsDecimalOfYear = days / 365\n const aprAsDecimal = apr / 100\n const timesCompounded = 365 * compoundFrequency\n let apyAsDecimal = (apr / 100) * daysAsDecimalOfYear\n if (timesCompounded > 0) {\n apyAsDecimal = (1 + aprAsDecimal / timesCompounded) ** (timesCompounded * daysAsDecimalOfYear) - 1\n }\n if (performanceFee) {\n const performanceFeeAsDecimal = performanceFee / 100\n const takenAsPerformanceFee = apyAsDecimal * performanceFeeAsDecimal\n apyAsDecimal -= takenAsPerformanceFee\n }\n return apyAsDecimal\n}\n\nexport const getRoi = ({ amountEarned, amountInvested }: { amountEarned: number; amountInvested: number }) => {\n if (amountInvested === 0) {\n return 0\n }\n const percentage = (amountEarned / amountInvested) * 100\n return percentage\n}\n","import styled from 'styled-components'\nimport { Button } from '@pulsex/uikit'\n\ninterface PercentageButtonProps {\n onClick: () => void\n}\n\nconst StyledButton = styled(Button)`\n flex-grow: 1;\n`\n\nconst PercentageButton: React.FC> = ({ children, onClick }) => {\n return (\n \n {children}\n \n )\n}\n\nexport default PercentageButton\n","import { useCallback } from 'react'\nimport BigNumber from 'bignumber.js'\nimport { DEFAULT_TOKEN_DECIMAL } from 'config'\nimport { usePlsxLab } from 'hooks/useContract'\n\nconst options = {}\n\nconst poolStake = async (plsxLabContract, sousId, amount) => {\n return plsxLabContract.write.deposit([sousId, new BigNumber(amount).times(DEFAULT_TOKEN_DECIMAL).toString()], {\n ...options,\n })\n}\n\nconst poolStakePls = async (plsxLabContract, sousId, amount) => {\n return plsxLabContract.write.deposit([sousId, new BigNumber(amount).times(DEFAULT_TOKEN_DECIMAL).toString()], {\n ...options,\n })\n}\n\nconst useStakePool = (sousId: number, isUsingPls = false) => {\n const plsxLabContract = usePlsxLab()\n\n const handleStake = useCallback(\n async (amount: string) => {\n if (isUsingPls) {\n return poolStakePls(plsxLabContract, sousId, amount)\n }\n return poolStake(plsxLabContract, sousId, amount)\n },\n [isUsingPls, plsxLabContract, sousId],\n )\n\n return { onStake: handleStake }\n}\n\nexport default useStakePool\n","import { useCallback } from 'react'\nimport { parseUnits } from 'viem'\nimport { usePlsxLab } from 'hooks/useContract'\n\nconst poolUnstake = (plsxLabContract: any, sousId: number, amount: string, decimals: number) => {\n const units = parseUnits(amount, decimals)\n\n return plsxLabContract.write.withdraw([sousId, units.toString()])\n}\n\nconst poolEmergencyUnstake = (plsxLabContract: any) => {\n return plsxLabContract.emergencyWithdraw()\n}\n\nconst useUnstakePool = (sousId: number, enableEmergencyWithdraw = false) => {\n const plsxLabContract = usePlsxLab()\n\n const handleUnstake = useCallback(\n async (amount: string, decimals: number) => {\n if (enableEmergencyWithdraw) {\n return poolEmergencyUnstake(plsxLabContract)\n }\n return poolUnstake(plsxLabContract, sousId, amount, decimals)\n },\n [enableEmergencyWithdraw, plsxLabContract, sousId],\n )\n\n return { onUnstake: handleUnstake }\n}\n\nexport default useUnstakePool\n","import { useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport {\n AutoRenewIcon,\n BalanceInput,\n Button,\n CalculateIcon,\n Flex,\n IconButton,\n Image,\n Link,\n Modal,\n RoiCalculatorModal,\n Skeleton,\n Slider,\n Text,\n useToast,\n} from '@pulsex/uikit'\nimport { Token } from '@pulsex/sdk'\nimport { useTranslation } from '@pulsex/localization'\nimport { useAccount } from 'wagmi'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport useTheme from 'hooks/useTheme'\nimport useCatchTxError from 'hooks/useCatchTxError'\nimport BigNumber from 'bignumber.js'\nimport { ToastDescriptionWithTx } from 'components/Toast'\nimport { getFullDisplayBalance, formatNumber, getDecimalAmount } from '@pulsex/utils/formatBalance'\nimport { DeserializedPool } from '@pulsex/pools'\nimport { updateUserBalance, updateUserPendingReward, updateUserStakedBalance } from 'state/pools'\nimport { useAppDispatch } from 'state'\nimport { getInterestBreakdown } from 'utils/compoundApyHelpers'\nimport PercentageButton from './PercentageButton'\nimport useStakePool from '../../../hooks/useStakePool'\nimport useUnstakePool from '../../../hooks/useUnstakePool'\n\nconst domain = 'https://tokens.app.pulsex.com'\n\ninterface StakeModalProps {\n isPlsPool: boolean\n pool: DeserializedPool\n stakingTokenBalance: BigNumber\n stakingTokenPrice: number\n isRemovingStake?: boolean\n onDismiss?: () => void\n}\n\nconst StyledLink = styled(Link)`\n width: 100%;\n`\n\nconst AnnualRoiContainer = styled(Flex)`\n cursor: pointer;\n`\n\nconst AnnualRoiDisplay = styled(Text)`\n width: 72px;\n max-width: 72px;\n overflow: hidden;\n text-align: right;\n text-overflow: ellipsis;\n`\n\nconst StakeModal: React.FC = ({\n isPlsPool,\n pool,\n stakingTokenBalance,\n stakingTokenPrice,\n isRemovingStake = false,\n onDismiss,\n}) => {\n const { poolId, stakingToken, earningTokenPrice, apr, userData, stakingLimit, earningToken } = pool\n const dispatch = useAppDispatch()\n const { t } = useTranslation()\n const { chainId } = useActiveChainId()\n const { address: account } = useAccount()\n const { theme } = useTheme()\n const { onStake } = useStakePool(poolId, isPlsPool)\n const { onUnstake } = useUnstakePool(poolId, pool.enableEmergencyWithdraw)\n const { toastSuccess } = useToast()\n const { fetchWithCatchTxError, loading: pendingTx } = useCatchTxError()\n const [stakeAmount, setStakeAmount] = useState('')\n const [hasReachedStakeLimit, setHasReachedStakedLimit] = useState(false)\n const [percent, setPercent] = useState(0)\n const [showRoiCalculator, setShowRoiCalculator] = useState(false)\n const getCalculatedStakingLimit = () => {\n if (isRemovingStake) {\n return userData.stakedBalance\n }\n return stakingLimit.gt(0) && stakingTokenBalance.gt(stakingLimit) ? stakingLimit : stakingTokenBalance\n }\n const fullDecimalStakeAmount = getDecimalAmount(new BigNumber(stakeAmount), stakingToken.decimals)\n const userNotEnoughToken = isRemovingStake\n ? userData.stakedBalance.lt(fullDecimalStakeAmount)\n : userData.stakingTokenBalance.lt(fullDecimalStakeAmount)\n\n const usdValueStaked = new BigNumber(stakeAmount).times(stakingTokenPrice)\n const formattedUsdValueStaked = !usdValueStaked.isNaN() && formatNumber(usdValueStaked.toNumber())\n\n const interestBreakdown = getInterestBreakdown({\n principalInUSD: !usdValueStaked.isNaN() ? usdValueStaked.toNumber() : 0,\n apr,\n earningTokenPrice,\n })\n const annualRoi = interestBreakdown[3] * pool.earningTokenPrice\n const formattedAnnualRoi = formatNumber(annualRoi, annualRoi > 10000 ? 0 : 2, annualRoi > 10000 ? 0 : 2)\n\n const getTokenLink = stakingToken.address ? `/?outputCurrency=${stakingToken.address}` : '/'\n\n useEffect(() => {\n if (stakingLimit.gt(0) && !isRemovingStake) {\n setHasReachedStakedLimit(fullDecimalStakeAmount.plus(userData.stakedBalance).gt(stakingLimit))\n }\n }, [\n stakeAmount,\n stakingLimit,\n userData,\n stakingToken,\n isRemovingStake,\n setHasReachedStakedLimit,\n fullDecimalStakeAmount,\n ])\n\n const handleStakeInputChange = (input: string) => {\n if (input) {\n const convertedInput = getDecimalAmount(new BigNumber(input), stakingToken.decimals)\n const percentage = Math.floor(convertedInput.dividedBy(getCalculatedStakingLimit()).multipliedBy(100).toNumber())\n setPercent(Math.min(percentage, 100))\n } else {\n setPercent(0)\n }\n setStakeAmount(input)\n }\n\n const handleChangePercent = (sliderPercent: number) => {\n if (sliderPercent > 0) {\n const percentageOfStakingMax = getCalculatedStakingLimit().dividedBy(100).multipliedBy(sliderPercent)\n const amountToStake = getFullDisplayBalance(percentageOfStakingMax, stakingToken.decimals, stakingToken.decimals)\n setStakeAmount(amountToStake)\n } else {\n setStakeAmount('')\n }\n setPercent(sliderPercent)\n }\n\n const handleConfirmClick = async () => {\n const receipt = await fetchWithCatchTxError(() => {\n if (isRemovingStake) {\n return onUnstake(stakeAmount, stakingToken.decimals)\n }\n return onStake(stakeAmount)\n })\n if (receipt?.status) {\n if (isRemovingStake) {\n toastSuccess(\n `${t('Unstaked')}!`,\n \n {t('Your %symbol% earnings have also been harvested to your wallet!', {\n symbol: earningToken.symbol,\n })}\n ,\n )\n } else {\n toastSuccess(\n `${t('Staked')}!`,\n \n {t('Your %symbol% funds have been staked in the pool!', {\n symbol: stakingToken.symbol,\n })}\n ,\n )\n }\n dispatch(updateUserStakedBalance(poolId, account, chainId))\n dispatch(updateUserPendingReward(poolId, account, chainId))\n dispatch(updateUserBalance(poolId, account, chainId))\n onDismiss()\n }\n }\n\n if (showRoiCalculator) {\n return (\n setShowRoiCalculator(false)}\n initialValue={stakeAmount}\n />\n )\n }\n\n return (\n \n {stakingLimit.gt(0) && !isRemovingStake && (\n \n {t('Max stake for this pool: %amount% %token%', {\n amount: getFullDisplayBalance(stakingLimit, stakingToken.decimals, 0),\n token: stakingToken.symbol,\n })}\n \n )}\n \n {isRemovingStake ? t('Unstake') : t('Stake')}:\n \n \n \n {stakingToken.symbol}\n \n \n \n \n {hasReachedStakeLimit && (\n \n {t('Maximum total stake: %amount% %token%', {\n amount: getFullDisplayBalance(new BigNumber(stakingLimit), stakingToken.decimals, 0),\n token: stakingToken.symbol,\n })}\n \n )}\n {userNotEnoughToken && (\n \n {t('Insufficient %symbol% balance', {\n symbol: stakingToken.symbol,\n })}\n \n )}\n \n {t('Balance: %balance%', {\n balance: getFullDisplayBalance(getCalculatedStakingLimit(), stakingToken.decimals),\n })}\n \n \n \n handleChangePercent(25)}>25%\n handleChangePercent(50)}>50%\n handleChangePercent(75)}>75%\n handleChangePercent(100)}>{t('Max')}\n \n {!isRemovingStake && (\n \n \n {t('Annual ROI at current rates')}:\n \n {Number.isFinite(annualRoi) ? (\n {\n setShowRoiCalculator(true)\n }}\n >\n ${formattedAnnualRoi}\n \n \n \n \n ) : (\n \n )}\n \n )}\n : null}\n onClick={handleConfirmClick}\n disabled={!stakeAmount || parseFloat(stakeAmount) === 0 || hasReachedStakeLimit || userNotEnoughToken}\n mt=\"24px\"\n >\n {pendingTx ? t('Confirming') : t('Confirm')}\n \n {!isRemovingStake && (\n \n \n \n )}\n \n )\n}\n\nexport default StakeModal\n","import { Token } from '@pulsex/sdk'\nimport {\n Flex,\n Text,\n Button,\n IconButton,\n AddIcon,\n MinusIcon,\n NotEnoughTokensModal,\n useModal,\n Skeleton,\n useTooltip\n} from '@pulsex/uikit'\nimport BigNumber from 'bignumber.js'\nimport { useTranslation } from '@pulsex/localization'\nimport { getBalanceNumber } from '@pulsex/utils/formatBalance'\nimport { DeserializedPool } from '@pulsex/pools'\nimport Balance from 'components/Balance'\nimport StakeModal from '../Modals/StakeModal'\n\ninterface StakeActionsProps {\n pool: DeserializedPool\n stakingTokenBalance: BigNumber\n stakedBalance: BigNumber\n isPlsPool: boolean\n isStaked: ConstrainBoolean\n isLoading?: boolean\n}\n\nconst StakeAction: React.FC = ({\n pool,\n stakingTokenBalance,\n stakedBalance,\n isPlsPool,\n isStaked,\n isLoading = false,\n}) => {\n const { stakingToken, stakingTokenPrice, stakingLimit, isFinished, userData } = pool\n const { t } = useTranslation()\n const stakedTokenBalance = getBalanceNumber(stakedBalance, stakingToken.decimals)\n const stakedTokenDollarBalance = getBalanceNumber(\n stakedBalance.multipliedBy(stakingTokenPrice),\n stakingToken.decimals,\n )\n\n const [onPresentTokenRequired] = useModal()\n\n const [onPresentStake] = useModal(\n ,\n )\n\n const [onPresentUnstake] = useModal(\n ,\n )\n\n const { targetRef, tooltip, tooltipVisible } = useTooltip(\n t('You’ve already staked the maximum amount you can stake in this pool!'),\n { placement: 'bottom' },\n )\n\n const reachStakingLimit = stakingLimit.gt(0) && userData.stakedBalance.gte(stakingLimit)\n\n const renderStakeAction = () => {\n return isStaked ? (\n \n \n <>\n \n {stakingTokenPrice !== 0 && (\n \n \n \n )}\n \n \n \n \n \n \n {reachStakingLimit ? (\n \n \n \n \n \n ) : (\n \n \n \n )}\n \n {tooltipVisible && tooltip}\n \n ) : (\n \n )\n }\n\n return {isLoading ? : renderStakeAction()}\n}\n\nexport default StakeAction\n","import { useCallback } from 'react'\nimport { BIG_ZERO } from '@pulsex/utils/bigNumber'\nimport { usePlsxLab } from 'hooks/useContract'\n\nconst options = {}\n\nconst harvestPool = async (sousChefContract, sousId) => {\n return sousChefContract.write.deposit(sousId, '0', { ...options })\n}\n\nconst harvestPoolPls = async (sousChefContract) => {\n return sousChefContract.deposit({ ...options, value: BIG_ZERO })\n}\n\nconst useHarvestPool = (sousId, isUsingPls = false) => {\n const plsxLabContract = usePlsxLab()\n\n const handleHarvest = useCallback(async () => {\n\n if (isUsingPls) {\n return harvestPoolPls(plsxLabContract)\n }\n\n return harvestPool(plsxLabContract, sousId)\n }, [isUsingPls, plsxLabContract, sousId])\n\n return { onReward: handleHarvest }\n}\n\nexport default useHarvestPool\n","import { useState } from 'react'\nimport {\n Modal,\n Text,\n Button,\n Heading,\n Flex,\n AutoRenewIcon,\n ButtonMenu,\n ButtonMenuItem,\n HelpIcon,\n useTooltip,\n useToast\n} from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport { useAccount } from 'wagmi'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport useTheme from 'hooks/useTheme'\nimport { ToastDescriptionWithTx } from 'components/Toast'\nimport { Token } from '@pulsex/sdk'\nimport { formatNumber } from '@pulsex/utils/formatBalance'\nimport useCatchTxError from 'hooks/useCatchTxError'\nimport { updateUserBalance, updateUserPendingReward, updateUserStakedBalance } from 'state/pools'\nimport { useAppDispatch } from 'state'\nimport useHarvestPool from '../../../hooks/useHarvestPool'\nimport useStakePool from '../../../hooks/useStakePool'\n\ninterface CollectModalProps {\n formattedBalance: string\n fullBalance: string\n earningToken: Token\n earningsDollarValue: number\n poolId: number\n isPlsPool: boolean\n isCompoundPool?: boolean\n onDismiss?: () => void\n}\n\nconst CollectModal: React.FC = ({\n formattedBalance,\n fullBalance,\n earningToken,\n earningsDollarValue,\n poolId,\n isPlsPool,\n isCompoundPool = false,\n onDismiss,\n}) => {\n const { t } = useTranslation()\n const { chainId } = useActiveChainId()\n const { address: account } = useAccount()\n const { theme } = useTheme()\n const { toastSuccess } = useToast()\n const dispatch = useAppDispatch()\n const { fetchWithCatchTxError, loading: pendingTx } = useCatchTxError()\n const { onReward } = useHarvestPool(poolId, isPlsPool)\n const { onStake } = useStakePool(poolId, isPlsPool)\n const [shouldCompound, setShouldCompound] = useState(isCompoundPool)\n const { targetRef, tooltip, tooltipVisible } = useTooltip(\n <>\n {t('Compound: collect and restake PLSX into pool.')}\n {t('Harvest: collect PLSX and send to wallet')}\n ,\n { placement: 'bottom-end', tooltipOffset: [20, 10] },\n )\n\n const handleHarvestConfirm = async () => {\n const receipt = await fetchWithCatchTxError(() => {\n if (shouldCompound) {\n return onStake(fullBalance)\n }\n return onReward()\n })\n if (receipt?.status) {\n if (shouldCompound) {\n toastSuccess(\n `${t('Compounded')}!`,\n \n {t('Your %symbol% earnings have been re-invested into the pool!', { symbol: earningToken.symbol })}\n ,\n )\n } else {\n toastSuccess(\n `${t('Harvested')}!`,\n \n {t('Your %symbol% earnings have been sent to your wallet!', { symbol: earningToken.symbol })}\n ,\n )\n }\n dispatch(updateUserStakedBalance(poolId, account, chainId ))\n dispatch(updateUserPendingReward(poolId, account, chainId))\n dispatch(updateUserBalance(poolId, account, chainId))\n onDismiss()\n }\n }\n\n return (\n \n {isCompoundPool && (\n \n setShouldCompound(!index)}\n >\n {t('Compound')}\n {t('Harvest')}\n \n \n \n \n {tooltipVisible && tooltip}\n \n )}\n\n \n {shouldCompound ? t('Compounding') : t('Harvesting')}:\n \n \n {formattedBalance} {earningToken.symbol}\n \n {earningsDollarValue > 0 && (\n {`~${formatNumber(earningsDollarValue)} USD`}\n )}\n \n \n\n : null}\n >\n {pendingTx ? t('Confirming') : t('Confirm')}\n \n \n \n )\n}\n\nexport default CollectModal\n","import { Flex, Text, Button, Heading, useModal, Skeleton } from '@pulsex/uikit'\nimport BigNumber from 'bignumber.js'\nimport { Token } from '@pulsex/sdk'\nimport { useTranslation } from '@pulsex/localization'\nimport { getFullDisplayBalance, getBalanceNumber, formatNumber } from '@pulsex/utils/formatBalance'\nimport Balance from 'components/Balance'\nimport CollectModal from '../Modals/CollectModal'\n\ninterface HarvestActionsProps {\n earnings: BigNumber\n earningToken: Token\n poolId: number\n earningTokenPrice: number\n isPlsPool: boolean\n isLoading?: boolean\n}\n\nconst HarvestActions: React.FC = ({\n earnings,\n earningToken,\n poolId,\n isPlsPool,\n earningTokenPrice,\n isLoading = false,\n}) => {\n const { t } = useTranslation()\n const earningTokenBalance = getBalanceNumber(earnings, earningToken.decimals)\n const formattedBalance = formatNumber(earningTokenBalance, 3, 3)\n\n const earningTokenDollarBalance = getBalanceNumber(earnings.multipliedBy(earningTokenPrice), earningToken.decimals)\n\n const fullBalance = getFullDisplayBalance(earnings, earningToken.decimals)\n const hasEarnings = earnings.toNumber() > 0\n\n const [onPresentCollect] = useModal(\n ,\n )\n\n return (\n \n \n {isLoading ? (\n \n ) : (\n <>\n {hasEarnings ? (\n <>\n \n {earningTokenPrice > 0 && (\n \n )}\n \n ) : (\n <>\n 0\n \n 0 USD\n \n \n )}\n \n )}\n \n \n \n )\n}\n\nexport default HarvestActions\n","import BigNumber from 'bignumber.js'\nimport styled from 'styled-components'\nimport { Token } from '@pulsex/sdk'\nimport { BIG_ZERO } from '@pulsex/utils/bigNumber'\nimport { Flex, Text, Box } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport { PoolCategory } from 'config/constants/types'\nimport { DeserializedPool } from '@pulsex/pools'\nimport ApprovalAction from './ApprovalAction'\nimport StakeActions from './StakeActions'\nimport HarvestActions from './HarvestActions'\n\nconst InlineText = styled(Text)`\n display: inline;\n`\n\ninterface CardActionsProps {\n pool: DeserializedPool\n stakedBalance: BigNumber\n}\n\nconst CardActions: React.FC = ({ pool, stakedBalance }) => {\n const { poolId, stakingToken, earningToken, harvest, poolCategory, userData, earningTokenPrice } = pool\n // Pools using native PLS behave differently than pools using a token\n const isPlsPool = poolCategory === PoolCategory.PULSE\n const { t } = useTranslation()\n const allowance = userData?.allowance ? new BigNumber(userData.allowance) : BIG_ZERO\n const stakingTokenBalance = userData?.stakingTokenBalance ? new BigNumber(userData.stakingTokenBalance) : BIG_ZERO\n const earnings = userData?.pendingReward ? new BigNumber(userData.pendingReward) : BIG_ZERO\n const needsApproval = !allowance.gt(0) && !isPlsPool\n const isStaked = stakedBalance.gt(0)\n const isLoading = !userData\n\n return (\n \n \n {harvest && (\n <>\n \n \n {`${earningToken.symbol} `}\n \n \n {t('Earned')}\n \n \n \n \n )}\n \n \n {isStaked ? stakingToken.symbol : t('Stake')}{' '}\n \n \n {isStaked ? t('Staked') : `${stakingToken.symbol}`}\n \n \n {needsApproval ? (\n \n ) : (\n \n )}\n \n \n )\n}\n\nexport default CardActions\n","import BigNumber from 'bignumber.js'\nimport { Token } from '@pulsex/sdk'\nimport { CardBody, Flex, Text, CardRibbon } from '@pulsex/uikit'\nimport ConnectWalletButton from 'components/ConnectWalletButton'\nimport { useTranslation } from '@pulsex/localization'\nimport { BIG_ZERO } from '@pulsex/utils/bigNumber'\nimport { DeserializedPool } from '@pulsex/pools'\nimport { TokenPairImage } from 'components/TokenImage'\nimport AprRow from './AprRow'\nimport { StyledCard } from './StyledCard'\nimport CardFooter from './CardFooter'\nimport PoolCardHeader, { PoolCardHeaderTitle } from './PoolCardHeader'\nimport CardActions from './CardActions'\n\nconst PoolCard: React.FC<{ pool: DeserializedPool; account: string }> = ({ pool, account }) => {\n const { stakingToken, earningToken, isFinished, userData } = pool\n const { t } = useTranslation()\n const stakedBalance = userData?.stakedBalance ? new BigNumber(userData.stakedBalance) : BIG_ZERO\n const accountHasStakedBalance = stakedBalance.gt(0)\n\n const isPLSXPool = earningToken.symbol === 'PLSX' && stakingToken.symbol === 'PLSX'\n\n return (\n }\n >\n \n \n \n \n \n \n \n {account ? (\n \n ) : (\n <>\n \n {t('Start earning')}\n \n \n \n )}\n \n \n \n \n )\n}\n\nexport default PoolCard\n","import styled from 'styled-components'\nimport { ListViewIcon, CardViewIcon, IconButton } from '@pulsex/uikit'\nimport { ViewMode } from 'state/user/actions'\n\ninterface ToggleViewProps {\n viewMode: ViewMode\n onToggle: (mode: ViewMode) => void\n}\n\nconst Container = styled.div`\n margin-left: 5px;\n margin-right: 5px;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n margin-left: 5px;\n margin-right: 5px;\n }\n`\n\nconst ToggleView: React.FunctionComponent = ({ viewMode, onToggle }) => {\n const handleToggle = (mode: ViewMode) => {\n if (viewMode !== mode) {\n onToggle(mode)\n }\n }\n\n return (\n \n handleToggle(ViewMode.CARD)}>\n \n \n handleToggle(ViewMode.TABLE)}>\n \n \n \n )\n}\n\nexport default ToggleView\n","import { ViewMode } from 'state/user/actions'\nimport { useLocation } from 'react-router'\nimport styled from 'styled-components'\nimport { ButtonMenu, ButtonMenuItem, NotificationDot } from '@pulsex/uikit'\nimport { Link } from 'react-router-dom'\nimport { useTranslation } from '@pulsex/localization'\nimport ToggleView from './ToggleView/ToggleView'\n\nconst ViewControls = styled.div`\n flex-wrap: wrap;\n justify-content: space-between;\n display: flex;\n align-items: center;\n width: 100%;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n justify-content: flex-start;\n width: auto;\n }\n`\n\nconst Wrapper = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n\n a {\n padding-left: 12px;\n padding-right: 12px;\n }\n\n ${({ theme }) => theme.mediaQueries.sm} {\n margin-left: 0px;\n }\n`\n\nconst PoolTabButtons = ({ hasStakeInFinishedPools, viewMode, setViewMode }) => {\n const { pathname } = useLocation()\n\n const { t } = useTranslation()\n\n const isExact = pathname === '/pools'\n\n const viewModeToggle = setViewMode(mode)} />\n\n const liveOrFinishedSwitch = (\n \n \n \n {t('Live')}\n \n \n \n {t('Finished')}\n \n \n \n \n )\n\n // const stakedOnlySwitch = (\n // \n // setStakedOnly(!stakedOnly)} scale=\"sm\" />\n // {t('Staked only')}\n // \n // )\n\n return (\n \n {/* {stakedOnlySwitch} */}\n {liveOrFinishedSwitch}\n {viewModeToggle}\n \n )\n}\n\nexport default PoolTabButtons\n","import { Flex, Text } from '@pulsex/uikit'\nimport styled from 'styled-components'\n\nconst BaseCell = styled(Flex)`\n color: black;\n\n padding: 24px 8px;\n\n flex-direction: column;\n justify-content: flex-start;\n`\n\nexport const CellContent = styled(Flex)`\n flex-direction: column;\n justify-content: center;\n max-height: 40px;\n ${Text} {\n line-height: 1;\n }\n`\n\nexport default BaseCell\n","import styled from 'styled-components'\nimport BigNumber from 'bignumber.js'\nimport { Token } from '@pulsex/sdk'\nimport { Text, useMatchBreakpoints } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport { DeserializedPool } from '@pulsex/pools'\nimport { BIG_ZERO } from '@pulsex/utils/bigNumber'\nimport { TokenPairImage } from 'components/TokenImage'\nimport BaseCell, { CellContent } from './BaseCell'\n\ninterface NameCellProps {\n pool: DeserializedPool\n}\n\nconst StyledCell = styled(BaseCell)`\n flex: 5;\n flex-direction: row;\n padding-left: 12px;\n ${({ theme }) => theme.mediaQueries.sm} {\n flex: 1 0 150px;\n padding-left: 32px;\n }\n`\n\nconst NameCell: React.FC = ({ pool }) => {\n const { t } = useTranslation()\n const { isMobile } = useMatchBreakpoints()\n const { stakingToken, earningToken, userData, isFinished } = pool\n\n const stakingTokenSymbol = stakingToken.symbol\n const earningTokenSymbol = earningToken.symbol\n\n const stakedBalance = userData?.stakedBalance ? new BigNumber(userData.stakedBalance) : BIG_ZERO\n const showStakedTag = stakedBalance.gt(0)\n\n const title = `${t('Earn')} ${earningTokenSymbol}`\n const subtitle = `${t('Stake')} ${stakingTokenSymbol}`\n const showSubtitle = !isMobile\n\n return (\n \n \n \n {showStakedTag && (\n \n {t('Staked')}\n \n )}\n \n {title}\n \n {showSubtitle && (\n \n {subtitle}\n \n )}\n \n \n )\n}\n\nexport default NameCell\n","import styled from 'styled-components'\nimport { Token } from '@pulsex/sdk'\nimport { Flex, useModal, CalculateIcon, Skeleton, FlexProps, Button, RoiCalculatorModal } from '@pulsex/uikit'\nimport Balance from 'components/Balance'\nimport { DeserializedPool } from '@pulsex/pools'\nimport { useTranslation } from '@pulsex/localization'\nimport BigNumber from 'bignumber.js'\nimport { BIG_ZERO } from '@pulsex/utils/bigNumber'\n\nconst AprLabelContainer = styled(Flex)`\n &:hover {\n opacity: 0.5;\n }\n`\n\ninterface AprProps extends FlexProps {\n pool: DeserializedPool\n stakedBalance: BigNumber\n showIcon: boolean\n performanceFee?: number\n}\n\nconst Apr: React.FC = ({ pool, showIcon, stakedBalance, performanceFee = 0, ...props }) => {\n const {\n stakingToken,\n earningToken,\n isFinished,\n earningTokenPrice,\n stakingTokenPrice,\n userData,\n apr,\n } = pool\n const { t } = useTranslation()\n\n const stakingTokenBalance = userData?.stakingTokenBalance ? new BigNumber(userData.stakingTokenBalance) : BIG_ZERO\n\n const apyModalLink = stakingToken.address ? `/swap?outputCurrency=${stakingToken.address}` : '/swap'\n\n const [onPresentApyModal] = useModal(\n ,\n )\n\n const openRoiModal = (event: React.MouseEvent) => {\n event.stopPropagation()\n onPresentApyModal()\n }\n\n return (\n \n {apr || isFinished ? (\n <>\n \n {!isFinished && showIcon && (\n \n )}\n \n ) : (\n \n )}\n \n )\n}\n\nexport default Apr\n","import { Token } from '@pulsex/sdk'\nimport { BIG_ZERO } from '@pulsex/utils/bigNumber'\nimport { Text, useMatchBreakpoints } from '@pulsex/uikit'\nimport BigNumber from 'bignumber.js'\nimport { DeserializedPool } from '@pulsex/pools'\nimport { useTranslation } from '@pulsex/localization'\nimport BaseCell, { CellContent } from './BaseCell'\nimport Apr from '../Apr'\n\ninterface AprCellProps {\n pool: DeserializedPool\n}\n\nconst AprCell: React.FC = ({ pool }) => {\n const { t } = useTranslation()\n const { isMobile } = useMatchBreakpoints()\n const { userData } = pool\n const stakedBalance = userData?.stakedBalance ? new BigNumber(userData.stakedBalance) : BIG_ZERO\n\n return (\n \n \n \n {t('APR')}\n \n \n \n \n )\n}\n\nexport default AprCell\n","import styled from 'styled-components'\nimport { Token } from '@pulsex/sdk'\nimport { Skeleton, Text, Flex, Box, useModal, useMatchBreakpoints } from '@pulsex/uikit'\nimport { DeserializedPool } from '@pulsex/pools'\nimport BigNumber from 'bignumber.js'\nimport { PoolCategory } from 'config/constants/types'\nimport { BIG_ZERO } from '@pulsex/utils/bigNumber'\nimport { formatNumber, getBalanceNumber, getFullDisplayBalance } from '@pulsex/utils/formatBalance'\nimport Balance from 'components/Balance'\nimport { useTranslation } from '@pulsex/localization'\nimport BaseCell, { CellContent } from './BaseCell'\nimport CollectModal from '../../PoolCard/Modals/CollectModal'\n\ninterface EarningsCellProps {\n pool: DeserializedPool\n account: string\n userDataLoaded: boolean\n}\n\nconst StyledCell = styled(BaseCell)`\n flex: 4.5;\n ${({ theme }) => theme.mediaQueries.sm} {\n flex: 1 0 120px;\n }\n`\n\nconst EarningsCell: React.FC = ({ pool, account, userDataLoaded }) => {\n const { t } = useTranslation()\n const { isMobile } = useMatchBreakpoints()\n const { poolId, earningToken, poolCategory, userData, earningTokenPrice } = pool\n\n const earnings = userData?.pendingReward ? new BigNumber(userData.pendingReward) : BIG_ZERO\n const earningTokenBalance = getBalanceNumber(earnings, earningToken.decimals)\n const earningTokenDollarBalance = getBalanceNumber(earnings.multipliedBy(earningTokenPrice), earningToken.decimals)\n const hasEarnings = account && earnings.gt(0)\n const fullBalance = getFullDisplayBalance(earnings, earningToken.decimals)\n const formattedBalance = formatNumber(earningTokenBalance, 3, 3)\n const isPlsPool = poolCategory === PoolCategory.PULSE\n\n const labelText = t('%asset% Earned', { asset: earningToken.symbol })\n\n const [onPresentCollect] = useModal(\n ,\n )\n\n const handleEarningsClick = (event: React.MouseEvent) => {\n event.stopPropagation()\n onPresentCollect()\n }\n\n return (\n \n \n \n {labelText}\n \n {!userDataLoaded && account ? (\n \n ) : (\n <>\n \n \n \n {hasEarnings ? (\n <>\n {earningTokenPrice > 0 && (\n \n )}\n \n ) : (\n \n 0 USD\n \n )}\n \n \n \n )}\n \n \n )\n}\n\nexport default EarningsCell\n","import styled from 'styled-components'\nimport { Text, ChevronDownIcon } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport BaseCell from './BaseCell'\n\ninterface ExpandActionCellProps {\n expanded: boolean\n isFullLayout: boolean\n}\n\nconst StyledCell = styled(BaseCell)`\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n flex: 1;\n padding-right: 12px;\n padding-left: 0px;\n ${({ theme }) => theme.mediaQueries.md} {\n flex: 0 0 120px;\n padding-right: 32px;\n padding-left: 8px;\n }\n`\n\nconst ArrowIcon = styled(ChevronDownIcon)<{ toggled: boolean }>`\n transform: ${({ toggled }) => (toggled ? 'rotate(180deg)' : 'rotate(0)')};\n height: 24px;\n`\n\nconst TotalStakedCell: React.FC = ({ expanded, isFullLayout }) => {\n const { t } = useTranslation()\n return (\n \n {isFullLayout && (\n \n {expanded ? t('Hide') : t('Details')}\n \n )}\n \n \n )\n}\n\nexport default TotalStakedCell\n","import { useMemo } from 'react'\nimport { Token } from '@pulsex/sdk'\nimport { Flex, Skeleton, Text } from '@pulsex/uikit'\nimport styled from 'styled-components'\nimport { useTranslation } from '@pulsex/localization'\nimport Balance from 'components/Balance'\nimport { DeserializedPool } from '@pulsex/pools'\nimport { getBalanceNumber } from '@pulsex/utils/formatBalance'\nimport BaseCell, { CellContent } from './BaseCell'\n\ninterface TotalStakedCellProps {\n pool: DeserializedPool\n}\n\nconst StyledCell = styled(BaseCell)`\n flex: 2 0 100px;\n`\n\nconst TotalStakedCell: React.FC = ({ pool }) => {\n const { t } = useTranslation()\n const { stakingToken, totalStaked } = pool\n\n const totalStakedBalance = useMemo(() => {\n return getBalanceNumber(totalStaked, stakingToken.decimals)\n }, [totalStaked, stakingToken.decimals])\n\n return (\n \n \n \n {t('Total staked')}\n \n {totalStaked && totalStaked.gte(0) ? (\n \n \n \n ) : (\n \n )}\n \n \n )\n}\n\nexport default TotalStakedCell\n","import styled from 'styled-components'\nimport { Token } from '@pulsex/sdk'\nimport { Flex, Skeleton, Text, TimerIcon } from '@pulsex/uikit'\nimport { DeserializedPool } from '@pulsex/pools'\nimport { useCurrentBlock } from 'state/block/hooks'\nimport { useTranslation } from '@pulsex/localization'\nimport { getPoolTimeInfo } from 'pages/Pools/helpers'\nimport BaseCell, { CellContent } from './BaseCell'\n\ninterface FinishCellProps {\n pool: DeserializedPool\n}\n\nconst StyledCell = styled(BaseCell)`\n flex: 2 0 100px;\n`\n\nconst EndsInCell: React.FC = ({ pool }) => {\n const { totalStaked, isFinished, timeStamp } = pool\n const currentBlock = useCurrentBlock()\n const { t } = useTranslation()\n\n const { shouldShowSecondCountdown, secondsUntilStart, secondsRemaining, hasPoolStarted } = getPoolTimeInfo(\n pool,\n timeStamp,\n )\n\n const daysout = Math.floor(secondsRemaining / 86400)\n const hoursout = Math.floor((secondsRemaining - daysout * 86400) / 3600)\n const minutesout = Math.floor((secondsRemaining - daysout * 86400 - hoursout * 3600) / 60)\n\n const renderBlocks = shouldShowSecondCountdown ? (\n \n \n {`${daysout}d ${hoursout}h ${minutesout}m`}\n \n \n \n \n \n ) : (\n -\n )\n\n // A bit hacky way to determine if public data is loading relying on totalStaked\n // Opted to go for this since we don't really need a separate publicDataLoaded flag\n // anywhere else\n const isLoadingBlockData = !currentBlock || (!secondsRemaining && !secondsUntilStart)\n const isLoadingPublicData = hasPoolStarted ? !totalStaked.gt(0) || isLoadingBlockData : isLoadingBlockData\n const showLoading = isLoadingPublicData && !isFinished\n return (\n \n \n \n {hasPoolStarted || !shouldShowSecondCountdown ? t('Ends in') : t('Starts in')}\n \n {showLoading ? : renderBlocks}\n \n \n )\n}\n\nexport default EndsInCell\n","import styled from 'styled-components'\n\nexport const ActionContainer = styled.div<{ isAutoVault?: boolean }>`\n padding: 16px;\n border: 2px solid ${({ theme }) => theme.colors.cardBorder};\n border-radius: 10px;\n flex-grow: 1;\n flex-basis: 0;\n margin-bottom: 16px;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n margin-left: 12px;\n margin-right: 12px;\n margin-bottom: 0;\n height: ${({ isAutoVault }) => (isAutoVault ? '130px' : 'auto')};\n }\n}\n\n ${({ theme }) => theme.mediaQueries.xl} {\n margin-left: 32px;\n margin-right: 0;\n }\n`\n\nexport const ActionTitles = styled.div`\n font-weight: 600;\n font-size: 12px;\n`\n\nexport const ActionContent = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n`\n","import { Token } from '@pulsex/sdk'\nimport { Button, Text, useModal, Flex, Skeleton, Heading } from '@pulsex/uikit'\nimport BigNumber from 'bignumber.js'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport { PoolCategory } from 'config/constants/types'\nimport { formatNumber, getBalanceNumber, getFullDisplayBalance } from '@pulsex/utils/formatBalance'\nimport { useTranslation } from '@pulsex/localization'\nimport Balance from 'components/Balance'\nimport { BIG_ZERO } from '@pulsex/utils/bigNumber'\nimport { DeserializedPool } from '@pulsex/pools'\n\nimport { ActionContainer, ActionTitles, ActionContent } from './styles'\nimport CollectModal from '../../PoolCard/Modals/CollectModal'\n\ninterface HarvestActionProps extends DeserializedPool {\n userDataLoaded: boolean\n}\n\nconst HarvestAction: React.FunctionComponent = ({\n poolId,\n poolCategory,\n earningToken,\n userData,\n userDataLoaded,\n earningTokenPrice,\n}) => {\n const { t } = useTranslation()\n const { account } = useActiveWeb3React()\n\n const earnings = userData?.pendingReward ? new BigNumber(userData.pendingReward) : BIG_ZERO\n const earningTokenBalance = getBalanceNumber(earnings, earningToken.decimals)\n const earningTokenDollarBalance = getBalanceNumber(earnings.multipliedBy(earningTokenPrice), earningToken.decimals)\n const hasEarnings = earnings.gt(0)\n const fullBalance = getFullDisplayBalance(earnings, earningToken.decimals)\n const formattedBalance = formatNumber(earningTokenBalance, 3, 3)\n const isCompoundPool = false\n const isPlsPool = poolCategory === PoolCategory.PULSE\n\n const [onPresentCollect] = useModal(\n ,\n )\n\n const actionTitle = (\n <>\n \n {earningToken.symbol}{' '}\n \n \n {t('Earned')}\n \n \n )\n\n if (!account) {\n return (\n \n {actionTitle}\n \n 0\n \n \n \n )\n }\n\n if (!userDataLoaded) {\n return (\n \n {actionTitle}\n \n \n \n \n )\n }\n\n return (\n \n {actionTitle}\n \n \n <>\n {hasEarnings ? (\n <>\n \n {earningTokenPrice > 0 && (\n \n )}\n \n ) : (\n <>\n 0\n \n 0 USD\n \n \n )}\n \n \n \n \n \n )\n}\n\nexport default HarvestAction\n","import styled from 'styled-components'\nimport BigNumber from 'bignumber.js'\nimport { Token } from '@pulsex/sdk'\nimport {\n Button,\n useModal,\n IconButton,\n AddIcon,\n MinusIcon,\n NotEnoughTokensModal,\n Skeleton,\n useTooltip,\n Flex,\n Text\n} from '@pulsex/uikit'\nimport ConnectWalletButton from 'components/ConnectWalletButton'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport { DeserializedPool } from '@pulsex/pools'\nimport Balance from 'components/Balance'\nimport { useTranslation } from '@pulsex/localization'\nimport { getBalanceNumber } from '@pulsex/utils/formatBalance'\nimport { PoolCategory } from 'config/constants/types'\nimport { BIG_ZERO } from '@pulsex/utils/bigNumber'\nimport { useERC20 } from 'hooks/useContract'\nimport { ActionContainer, ActionTitles, ActionContent } from './styles'\nimport StakeModal from '../../PoolCard/Modals/StakeModal'\nimport { useApprovePool } from '../../../hooks/useApprove'\n\nconst IconButtonWrapper = styled.div`\n display: flex;\n`\n\ninterface StackedActionProps {\n pool: DeserializedPool\n userDataLoaded: boolean\n}\n\nconst Staked: React.FunctionComponent = ({ pool, userDataLoaded }) => {\n const {\n poolId,\n stakingToken,\n earningToken,\n stakingLimit,\n isFinished,\n poolCategory,\n userData,\n stakingTokenPrice,\n } = pool\n const { t } = useTranslation()\n const { account } = useActiveWeb3React()\n\n const stakingTokenContract = useERC20(stakingToken.address)\n const { handleApprove: handlePoolApprove, pendingTx: pendingPoolTx } = useApprovePool(\n stakingTokenContract,\n poolId,\n earningToken.symbol,\n )\n\n const isPlsPool = poolCategory === PoolCategory.PULSE\n const allowance = userData?.allowance ? new BigNumber(userData.allowance) : BIG_ZERO\n const stakedBalance = userData?.stakedBalance ? new BigNumber(userData.stakedBalance) : BIG_ZERO\n const isNotVaultAndHasStake = stakedBalance.gt(0)\n\n const stakingTokenBalance = userData?.stakingTokenBalance ? new BigNumber(userData.stakingTokenBalance) : BIG_ZERO\n\n const stakedTokenBalance = getBalanceNumber(stakedBalance, stakingToken.decimals)\n const stakedTokenDollarBalance = getBalanceNumber(\n stakedBalance.multipliedBy(stakingTokenPrice),\n stakingToken.decimals,\n )\n\n const needsApproval = !allowance.gt(0) && !isPlsPool\n\n const [onPresentTokenRequired] = useModal()\n\n const [onPresentStake] = useModal(\n ,\n )\n\n const [onPresentUnstake] = useModal(\n ,\n )\n\n const onStake = () => {\n onPresentStake()\n }\n\n const onUnstake = () => {\n onPresentUnstake()\n }\n\n const { targetRef, tooltip, tooltipVisible } = useTooltip(\n t(\"You've already staked the maximum amount you can stake in this pool!\"),\n { placement: 'bottom' },\n )\n\n const reachStakingLimit = stakingLimit.gt(0) && userData.stakedBalance.gte(stakingLimit)\n\n if (!account) {\n return (\n \n \n \n {t('Start staking')}\n \n \n \n \n \n \n )\n }\n\n if (!userDataLoaded) {\n return (\n \n \n \n {t('Start staking')}\n \n \n \n \n \n \n )\n }\n\n if (needsApproval) {\n return (\n \n \n \n {t('Enable pool')}\n \n \n \n \n \n \n )\n }\n\n // Wallet connected, user data loaded and approved\n if (isNotVaultAndHasStake) {\n return (\n \n \n \n {stakingToken.symbol}{' '}\n \n \n {t('Staked')}\n \n \n \n \n \n \n \n \n \n \n \n {reachStakingLimit ? (\n \n \n \n \n \n ) : (\n \n \n \n )}\n \n {tooltipVisible && tooltip}\n \n \n )\n }\n\n return (\n \n \n \n {t('Stake')}{' '}\n \n \n {stakingToken.symbol}\n \n \n \n \n {t('Stake')}\n \n \n \n )\n}\n\nexport default Staked\n","import { Flex, Text, TimerIcon } from '@pulsex/uikit'\nimport BigNumber from 'bignumber.js'\nimport { useTranslation } from '@pulsex/localization'\nimport Balance from 'components/Balance'\nimport { getFullDisplayBalance } from '@pulsex/utils/formatBalance'\nimport { Token } from '@pulsex/sdk'\n\ninterface MaxStakeRowProps {\n small?: boolean\n stakingLimit: BigNumber\n timeStamp: number\n stakingLimitEnd: number\n stakingToken: Token\n hasPoolStarted: boolean\n}\n\nconst MaxStakeRow: React.FC = ({\n small = false,\n stakingLimit,\n timeStamp,\n stakingLimitEnd,\n stakingToken,\n hasPoolStarted,\n}) => {\n const { t } = useTranslation()\n\n return (\n \n \n {t('MAX stake per user:')}\n {`${getFullDisplayBalance(stakingLimit, stakingToken.decimals, 0)} ${\n stakingToken.symbol\n }`}\n \n {hasPoolStarted && (\n \n {t('Max. stake limit ends in')}:\n \n \n {t('seconds')}\n \n \n \n )}\n \n )\n}\n\nexport default MaxStakeRow\n","import styled, { keyframes, css } from 'styled-components'\nimport {\n Box,\n Button,\n Flex,\n HelpIcon,\n LinkExternal,\n MetamaskIcon,\n Skeleton,\n Text,\n TimerIcon,\n useTooltip,\n} from '@pulsex/uikit'\nimport { BASE_PULSECHAIN_SCAN_URL } from 'config'\nimport BigNumber from 'bignumber.js'\nimport { Token } from '@pulsex/sdk'\nimport { DeserializedPool } from '@pulsex/pools'\nimport { useTranslation } from '@pulsex/localization'\nimport Balance from 'components/Balance'\nimport { getAddress } from 'viem'\nimport { BIG_ZERO } from '@pulsex/utils/bigNumber'\nimport { registerToken } from 'utils/wallet'\nimport { getBalanceNumber } from '@pulsex/utils/formatBalance'\nimport { getPoolTimeInfo } from 'pages/Pools/helpers'\nimport Harvest from './Harvest'\nimport Stake from './Stake'\nimport Apr from '../Apr'\nimport MaxStakeRow from '../../MaxStakeRow'\n\nconst expandAnimation = keyframes`\n from {\n max-height: 0px;\n }\n to {\n max-height: 700px;\n }\n`\n\nconst collapseAnimation = keyframes`\n from {\n max-height: 700px;\n }\n to {\n max-height: 0px;\n }\n`\n\nconst StyledActionPanel = styled.div<{ expanded: boolean }>`\n animation: ${({ expanded }) =>\n expanded\n ? css`\n ${expandAnimation} 300ms linear forwards\n `\n : css`\n ${collapseAnimation} 300ms linear forwards\n `};\n overflow: hidden;\n background-image: ${({ theme }) => theme.colors.gradientInverseBubblegum};\n display: flex;\n flex-direction: column-reverse;\n justify-content: center;\n padding: 12px;\n\n ${({ theme }) => theme.mediaQueries.lg} {\n flex-direction: row;\n padding: 16px 32px;\n }\n`\n\nconst ActionContainer = styled.div`\n display: flex;\n flex-direction: column;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n flex-direction: row;\n align-items: center;\n flex-grow: 1;\n flex-basis: 0;\n }\n`\n\ntype MediaBreakpoints = {\n isXs: boolean\n isSm: boolean\n isMd: boolean\n isLg: boolean\n isXl: boolean\n isXxl: boolean\n}\n\ninterface ActionPanelProps {\n account: string\n pool: DeserializedPool\n userDataLoaded: boolean\n expanded: boolean\n breakpoints: MediaBreakpoints\n}\n\nconst InfoSection = styled(Box)`\n flex-grow: 0;\n flex-shrink: 0;\n flex-basis: auto;\n padding: 8px 8px;\n ${({ theme }) => theme.mediaQueries.lg} {\n padding: 0;\n flex-basis: 230px;\n }\n`\n\nconst ActionPanel: React.FC = ({ account, pool, userDataLoaded, expanded, breakpoints }) => {\n const {\n stakingToken,\n earningToken,\n totalStaked,\n stakingLimit,\n contractAddress,\n userData,\n timeStamp,\n stakingLimitEndTimestamp\n } = pool\n const { t } = useTranslation()\n const poolContractAddress = getAddress(contractAddress)\n const { isXs, isSm, isMd } = breakpoints\n const { shouldShowSecondCountdown, secondsUntilStart, secondsRemaining, hasPoolStarted } = getPoolTimeInfo(\n pool,\n timeStamp,\n )\n const isMetaMaskInScope = !!window.ethereum?.isMetaMask\n const tokenAddress = earningToken.address || ''\n\n const stakingTokenBalance = userData?.stakingTokenBalance ? new BigNumber(userData.stakingTokenBalance) : BIG_ZERO\n const stakedBalance = userData?.stakedBalance ? new BigNumber(userData.stakedBalance) : BIG_ZERO\n const poolStakingTokenBalance = stakedBalance.plus(stakingTokenBalance)\n const daysout = Math.floor(secondsRemaining / 86400)\n const hoursout = Math.floor((secondsRemaining - daysout * 86400) / 3600)\n const minutesout = Math.floor((secondsRemaining - daysout * 86400 - hoursout * 3600) / 60)\n\n const getTotalStakedBalance = () => {\n return getBalanceNumber(totalStaked, stakingToken.decimals)\n }\n\n const {\n targetRef: totalStakedTargetRef,\n tooltip: totalStakedTooltip,\n tooltipVisible: totalStakedTooltipVisible,\n } = useTooltip(t('Total amount of %symbol% staked in this pool', { symbol: stakingToken.symbol }), {\n placement: 'bottom',\n })\n\n const maxStakeRow = stakingLimit.gt(0) ? (\n \n ) : null\n\n const secondsRow =\n secondsRemaining || secondsUntilStart ? (\n \n {hasPoolStarted ? t('Ends in') : t('Starts in')}:\n \n \n {`${daysout}d ${hoursout}h ${minutesout}m`}\n \n \n \n \n ) : (\n \n )\n\n const aprRow = (\n \n {t('APR')}:\n \n \n )\n\n const totalStakedRow = (\n \n {t('Total staked')}:\n \n {totalStaked && totalStaked.gte(0) ? (\n <>\n \n \n \n \n \n ) : (\n \n )}\n {totalStakedTooltipVisible && totalStakedTooltip}\n \n \n )\n\n return (\n \n \n {maxStakeRow}\n {(isXs || isSm) && aprRow}\n {(isXs || isSm || isMd) && totalStakedRow}\n {shouldShowSecondCountdown && secondsRow}\n \n \n {t('See Token Info')}\n \n \n \n {poolContractAddress && (\n \n \n {t('View Contract')}\n \n \n )}\n {account && isMetaMaskInScope && tokenAddress && (\n \n registerToken(tokenAddress, earningToken.symbol, earningToken.decimals)}\n >\n {t('Add to Metamask')}\n \n \n \n )}\n \n \n \n \n \n \n )\n}\n\nexport default ActionPanel\n","import { useState } from 'react'\nimport styled from 'styled-components'\nimport { Token } from '@pulsex/sdk'\nimport { useMatchBreakpoints } from '@pulsex/uikit'\nimport { DeserializedPool } from '@pulsex/pools'\nimport { useDelayedUnmount } from '@pulsex/hooks'\nimport NameCell from './Cells/NameCell'\nimport AprCell from './Cells/AprCell'\nimport EarningsCell from './Cells/EarningsCell'\nimport ExpandActionCell from './Cells/ExpandActionCell'\nimport TotalStakedCell from './Cells/TotalStakedCell'\nimport EndsInCell from './Cells/EndsInCell'\nimport ActionPanel from './ActionPanel/ActionPanel'\n\ninterface PoolRowProps {\n pool: DeserializedPool\n account: string\n userDataLoaded: boolean\n}\n\nconst StyledRow = styled.div`\n background-color: transparent;\n display: flex;\n cursor: pointer;\n`\n\nconst PoolRow: React.FC = ({ pool, account, userDataLoaded }) => {\n const { isXs, isSm, isMd, isLg, isXl, isXxl, isTablet, isDesktop } = useMatchBreakpoints()\n const isLargerScreen = isLg || isXl || isXxl\n const [expanded, setExpanded] = useState(false)\n const shouldRenderActionPanel = useDelayedUnmount(expanded, 300)\n\n const toggleExpanded = () => {\n setExpanded((prev) => !prev)\n }\n\n return (\n <>\n \n \n \n \n {isLargerScreen && }\n {isDesktop && }\n \n \n {shouldRenderActionPanel && (\n \n )}\n \n )\n}\n\nexport default PoolRow\n","import { useRef } from 'react'\nimport styled from 'styled-components'\nimport { Token } from '@pulsex/sdk'\nimport { Button, ChevronUpIcon } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport { DeserializedPool } from '@pulsex/pools'\nimport PoolRow from './PoolRow'\n\ninterface PoolsTableProps {\n pools: DeserializedPool[]\n userDataLoaded: boolean\n account: string\n}\n\nconst StyledTable = styled.div`\n border-radius: ${({ theme }) => theme.radii.card};\n scroll-margin-top: 64px;\n\n background-color: ${({ theme }) => theme.card.background};\n > div:not(:last-child) {\n border-bottom: 2px solid ${({ theme }) => theme.colors.cardBorder};\n }\n`\n\nconst StyledTableBorder = styled.div`\n border-radius: ${({ theme }) => theme.radii.card};\n background-color: ${({ theme }) => theme.colors.cardBorder};\n padding: 1px 1px 1px 1px;\n background-size: 400% 400%;\n`\n\nconst ScrollButtonContainer = styled.div`\n display: flex;\n justify-content: center;\n padding-top: 5px;\n padding-bottom: 5px;\n`\n\nconst PoolsTable: React.FC = ({ pools, userDataLoaded, account }) => {\n const { t } = useTranslation()\n const tableWrapperEl = useRef(null)\n const scrollToTop = (): void => {\n tableWrapperEl.current.scrollIntoView({\n behavior: 'smooth',\n })\n }\n return (\n \n \n {pools.map((pool) => (\n \n ))}\n \n \n \n \n \n )\n}\n\nexport default PoolsTable\n","import { useEffect, useMemo, useRef, useState } from 'react'\nimport styled from 'styled-components'\nimport { formatUnits } from 'viem'\nimport BigNumber from 'bignumber.js'\nimport { useAccount } from 'wagmi'\nimport { Token } from '@pulsex/sdk'\nimport { Heading, Flex, Text } from '@pulsex/uikit'\nimport orderBy from 'lodash/orderBy'\nimport partition from 'lodash/partition'\nimport { useTranslation } from '@pulsex/localization'\nimport { useIntersectionObserver } from '@pulsex/hooks'\nimport { useFetchPublicPoolsData, usePools, useFetchUserPools } from 'state/pools/hooks'\nimport { latinise } from 'utils/latinise'\nimport FlexLayout from 'components/Layout/Flex'\nimport PageHeader from 'components/PageHeader'\nimport SearchInput from 'components/SearchInput'\nimport { DeserializedPool } from '@pulsex/pools'\nimport { useUserPoolStakedOnly, useUserPoolsViewMode } from 'state/user/hooks'\nimport { usePoolsWithVault } from 'pages/Swap/hooks/useGetTopPoolsByApr'\nimport { ViewMode } from 'state/user/actions'\nimport { useLocation } from 'react-router'\nimport Loading from 'components/Loading'\nimport PoolCard from './components/PoolCard'\nimport PoolTabButtons from './components/PoolTabButtons'\nimport PoolsTable from './components/PoolsTable/PoolsTable'\n\nconst CardLayout = styled(FlexLayout)`\n justify-content: center;\n`\n\nconst PoolControls = styled.div`\n display: flex;\n width: 100%;\n align-items: center;\n position: relative;\n justify-content: space-between;\n padding: 16px 0px;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n flex-direction: row;\n flex-wrap: wrap;\n padding: 16px 0px;\n }\n`\n\nconst FilterContainer = styled.div`\n display: flex;\n align-items: center;\n width: 100%;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n width: auto;\n }\n`\n\nconst LabelWrapper = styled.div`\n > ${Text} {\n font-size: 12px;\n }\n`\n\n// const ControlStretch = styled(Flex)`\n// > div {\n// flex: 1;\n// }\n// `\n\nconst NUMBER_OF_POOLS_VISIBLE = 12\n\nconst Pools: React.FC = () => {\n const { pathname } = useLocation()\n const { t } = useTranslation()\n const { address: account } = useAccount()\n const { userDataLoaded } = usePools()\n const [stakedOnly] = useUserPoolStakedOnly()\n const [viewMode, setViewMode] = useUserPoolsViewMode()\n const [numberOfPoolsVisible, setNumberOfPoolsVisible] = useState(NUMBER_OF_POOLS_VISIBLE)\n const { observerRef, isIntersecting } = useIntersectionObserver()\n const [searchQuery, setSearchQuery] = useState('')\n const [sortOption] = useState('hot')\n const chosenPoolsLength = useRef(0)\n\n const pools = usePoolsWithVault()\n\n // TODO aren't arrays in dep array checked just by reference, i.e. it will rerender every time reference changes?\n const [finishedPools, openPools] = useMemo(() => partition(pools, (pool) => pool.isFinished), [pools])\n const stakedOnlyFinishedPools = useMemo(\n () =>\n finishedPools.filter((pool) => {\n return pool.userData && new BigNumber(pool.userData.stakedBalance).isGreaterThan(0)\n }),\n [finishedPools],\n )\n const stakedOnlyOpenPools = useMemo(\n () =>\n openPools.filter((pool) => {\n return pool.userData && new BigNumber(pool.userData.stakedBalance).isGreaterThan(0)\n }),\n [openPools],\n )\n\n useFetchPublicPoolsData()\n useFetchUserPools(account)\n\n useEffect(() => {\n if (isIntersecting) {\n setNumberOfPoolsVisible((poolsCurrentlyVisible) => {\n if (poolsCurrentlyVisible <= chosenPoolsLength.current) {\n return poolsCurrentlyVisible + NUMBER_OF_POOLS_VISIBLE\n }\n return poolsCurrentlyVisible\n })\n }\n }, [isIntersecting])\n\n const showFinishedPools = pathname.includes('history')\n\n const handleChangeSearchQuery = (event: React.ChangeEvent) => {\n setSearchQuery(event.target.value)\n }\n\n // const handleSortOptionChange = (option: OptionProps): void => {\n // setSortOption(option.value)\n // }\n\n const sortPools = (poolsToSort: DeserializedPool[]) => {\n switch (sortOption) {\n case 'apr':\n // Ternary is needed to prevent pools without APR (like MIX) getting top spot\n return orderBy(poolsToSort, (pool: DeserializedPool) => (pool.apr ? pool.apr : 0), 'desc')\n case 'earned':\n return orderBy(\n poolsToSort,\n (pool: DeserializedPool) => {\n if (!pool.userData || !pool.earningTokenPrice) {\n return 0\n }\n return pool.userData.pendingReward.times(pool.earningTokenPrice).toNumber()\n },\n 'desc',\n )\n case 'totalStaked':\n return orderBy(\n poolsToSort,\n (pool: DeserializedPool) => {\n let totalStaked = Number.NaN\n if (pool.totalStaked?.isFinite() && pool.stakingTokenPrice) {\n totalStaked =\n +formatUnits(BigInt(pool.totalStaked.toString()), pool.stakingToken.decimals) *\n pool.stakingTokenPrice\n }\n return Number.isFinite(totalStaked) ? totalStaked : 0\n },\n 'desc',\n )\n default:\n return poolsToSort\n }\n }\n\n let chosenPools\n if (showFinishedPools) {\n chosenPools = stakedOnly ? stakedOnlyFinishedPools : finishedPools\n } else {\n chosenPools = stakedOnly ? stakedOnlyOpenPools : openPools\n }\n\n if (searchQuery) {\n const lowercaseQuery = latinise(searchQuery.toLowerCase())\n chosenPools = chosenPools.filter((pool) =>\n latinise(pool.earningToken.symbol.toLowerCase()).includes(lowercaseQuery),\n )\n }\n\n chosenPools = sortPools(chosenPools).slice(0, numberOfPoolsVisible)\n chosenPoolsLength.current = chosenPools.length\n\n const cardLayout = (\n \n {chosenPools.map((pool) => (\n \n ))}\n \n )\n\n const tableLayout = \n\n return (\n <>\n \n \n \n \n {t('PLSX Pools')}\n \n \n {t('Stake PLSX and earn other tokens')}\n \n \n \n \n \n \n {/* \n \n {t('Sort by')}\n \n \n \n \n */}\n \n \n \n \n \n {showFinishedPools && (\n \n {t('These pools are no longer distributing rewards. Please unstake your tokens.')}\n \n )}\n {account && !userDataLoaded && stakedOnly && (\n \n \n \n )}\n {viewMode === ViewMode.CARD ? cardLayout : tableLayout}\n
    \n \n \n )\n}\n\nexport default Pools\n","import { useCallback, useEffect, useState } from 'react'\nimport { Currency } from '@pulsex/sdk'\nimport {\n AddIcon,\n Button,\n ButtonMenu,\n ButtonMenuItem,\n ChevronDownIcon,\n Link,\n Text,\n useModal\n} from '@pulsex/uikit'\nimport styled from 'styled-components'\nimport { useTranslation } from '@pulsex/localization'\nimport { BIG_INT_ZERO } from 'config/constants/exchange'\nimport useNativeCurrency from 'hooks/useNativeCurrency'\nimport { useAddLiquidityFormState } from 'state/mint/reducer'\nimport { LightCard } from 'components/Card'\nimport { AutoColumn, ColumnCenter } from 'components/Layout/Column'\nimport { CurrencyLogo } from 'components/Logo'\nimport { MinimalPositionCard } from 'components/PositionCard'\nimport Row from 'components/Layout/Row'\nimport CurrencySearchModal from 'components/SearchModal/CurrencySearchModal'\nimport { useDerivedMintInfo, useMintActionHandlers } from 'state/mint/hooks'\nimport { PairState, usePairBothProtocols } from 'hooks/usePairs'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport { usePairAdder } from 'state/user/hooks'\nimport { useTokenBalance } from 'state/wallet/hooks'\nimport { currencyId } from 'utils/currencyId'\nimport Dots from 'components/Loader/Dots'\nimport { AppHeader, AppBody } from 'components/App'\nimport Page from '../Page'\n\nenum Fields {\n TOKEN0 = 0,\n TOKEN1 = 1,\n}\n\nconst StyledButton = styled(Button)`\n background-color: ${({ theme }) => theme.colors.input};\n color: ${({ theme }) => theme.colors.text};\n box-shadow: none;\n border-radius: 10px;\n`\n\nexport default function PoolFinder() {\n const { account } = useActiveWeb3React()\n const native = useNativeCurrency()\n const { t } = useTranslation()\n\n const [activeField, setActiveField] = useState(Fields.TOKEN1)\n const [currency0, setCurrency0] = useState(native)\n const [currency1, setCurrency1] = useState(null)\n\n const { protocol } = useAddLiquidityFormState()\n const { noLiquidity } = useDerivedMintInfo(currency0 ?? undefined, currency1 ?? undefined)\n const { onChangeProtocol } = useMintActionHandlers(noLiquidity)\n\n const [pairState, pair] = usePairBothProtocols(currency0 ?? undefined, currency1 ?? undefined, protocol)\n const addPair = usePairAdder()\n useEffect(() => {\n if (pair) {\n addPair(pair)\n }\n }, [pair, addPair])\n\n const validPairNoLiquidity: boolean =\n pairState === PairState.NOT_EXISTS ||\n Boolean(\n pairState === PairState.EXISTS &&\n pair &&\n pair.reserve0.quotient === BIG_INT_ZERO &&\n pair.reserve1.quotient === BIG_INT_ZERO,\n )\n\n const position = useTokenBalance(account ?? undefined, pair?.liquidityToken)\n const hasPosition = Boolean(position && position.quotient > BIG_INT_ZERO)\n\n const handleCurrencySelect = useCallback(\n (currency: Currency) => {\n if (activeField === Fields.TOKEN0) {\n setCurrency0(currency)\n } else {\n setCurrency1(currency)\n }\n },\n [activeField],\n )\n\n const prerequisiteMessage = (\n \n \n {!account ? t('Connect to a wallet to find pools') : t('Select a token to find your liquidity.')}\n \n \n )\n\n const [onPresentCurrencyModal] = useModal(\n ,\n true,\n true,\n 'selectCurrencyModal',\n )\n\n const protocolSelector =\n onChangeProtocol(index === 0 ? 'V1' : 'V2')}\n variant=\"subtle\"\n >\n V1\n V2\n \n\n return (\n \n \n \n \n }\n onClick={() => {\n onPresentCurrencyModal()\n setActiveField(Fields.TOKEN0)\n }}\n >\n {currency0 ? (\n \n \n {currency0.symbol}\n \n ) : (\n {t('Select a Token')}\n )}\n \n\n \n \n \n\n }\n onClick={() => {\n onPresentCurrencyModal()\n setActiveField(Fields.TOKEN1)\n }}\n >\n {currency1 ? (\n \n \n {currency1.symbol}\n \n ) : (\n {t('Select a Token')}\n )}\n \n\n {hasPosition && (\n \n {t('Pool Found!')}\n \n {t('Manage this pool.')}\n \n \n )}\n\n {currency0 && currency1 ? (\n pairState === PairState.EXISTS ? (\n hasPosition && pair ? (\n \n ) : (\n \n \n {t('You don’t have liquidity in this pool yet.')}\n \n {t('Add Liquidity')}\n \n \n \n )\n ) : validPairNoLiquidity ? (\n \n \n {t('No pool found.')}\n \n {t('Create pool.')}\n \n \n \n ) : pairState === PairState.INVALID ? (\n \n \n \n {t('Invalid pair.')}\n \n \n \n ) : pairState === PairState.LOADING ? (\n \n \n \n {t('Loading')}\n \n \n \n \n ) : null\n ) : (\n prerequisiteMessage\n )}\n \n \n \n )\n}\n","import { useState } from 'react'\nimport { HelpIcon } from '@pulsex/uikit'\n\nconst BAD_SRCS: string[] = []\n\nexport interface LogoLoaderProps {\n alt: string\n size: string\n src: string\n}\n\n/**\n * Renders an image by sequentially trying a list of URIs, and then eventually a fallback to HelpIcon\n */\nconst LogoLoader: React.FC = ({ src, alt, size, ...rest }) => {\n const [, refresh] = useState(0)\n\n const srcFailedLoading = BAD_SRCS.includes(src)\n\n if (src && !srcFailedLoading) {\n return (\n {\n if (src) BAD_SRCS.push(src)\n refresh((i) => i + 1)\n }}\n />\n )\n }\n\n return \n}\n\nexport default LogoLoader\n","import { useMemo } from 'react'\nimport styled from 'styled-components'\nimport { safeGetAddress } from 'utils'\nimport LogoLoader from './LogoLoader'\n\nconst domain = 'https://tokens.app.pulsex.com'\n\nconst StyledLogo = styled(LogoLoader)<{ size: string }>`\n width: ${({ size }) => size};\n height: ${({ size }) => size};\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075);\n color: ${({ theme }) => theme.colors.text};\n`\n\nexport const CurrencyLogo: React.FC<\n React.PropsWithChildren<{\n address?: string\n size?: string\n }>\n> = ({ address, size = '24px', ...rest }) => {\n const src = useMemo(() => {\n const checksummedAddress = safeGetAddress(address)\n if (checksummedAddress) {\n return `${domain}/images/tokens/${checksummedAddress}.png`\n }\n return null\n }, [address])\n\n return \n}\n\nconst DoubleCurrencyWrapper = styled.div`\n position: relative;\n display: flex;\n flex-direction: row;\n align-items: center;\n width: 32px;\n`\n\ninterface DoubleCurrencyLogoProps {\n address0?: string\n address1?: string\n size?: number\n}\n\nexport const DoubleCurrencyLogo: React.FC = ({ address0, address1, size = 16 }) => {\n return (\n \n {address0 && }\n {address1 && }\n \n )\n}\n","// Returns first 2 digits after first non-zero decimal\n// i.e. 0.001286 -> 0.0012, 0.9845 -> 0.98, 0.0102 -> 0.010, etc\n// Intended to be used for tokens whose value is less than $1\n// https://stackoverflow.com/a/23887837\nexport const getFirstThreeNonZeroDecimals = (value: number) => {\n return value.toFixed(9).match(/^-?\\d*\\.?0*\\d{0,2}/)?.[0]\n}\n\nexport type formatAmountNotation = 'compact' | 'standard'\n\nexport type tokenPrecisionStyle = 'normal' | 'enhanced'\n\nconst GROUPING_FALSE_LARGER_THAN_THIS = 1_000_000_000_000_000_000\n\n/**\n * This function is used to format token prices, liquidity, amount of tokens in TX, and in general any numbers on info section\n * @param amount - amount to be formatted\n * @param notation - whether to show 1M or 1,000,000\n * @param displayThreshold - threshold below which it will return simply returns <0.001 for 0.0005\n * @param tokenPrecision - set to 'normal' when you want precision to be 3 decimals for values < 1 and 2 decimals for values > 1, 'enhanced' option always use 3 decimals\n * @param isInteger - if true the values will contain decimal part only if the amount is > 1000\n * @returns formatted string ready to be displayed\n */\nexport const formatAmount = (\n amount: number | undefined,\n options?: {\n notation?: formatAmountNotation\n displayThreshold?: number\n tokenPrecision?: tokenPrecisionStyle\n isInteger?: boolean\n },\n) => {\n const {\n notation = amount && amount >= 10000 ? 'compact' : 'standard',\n displayThreshold,\n tokenPrecision,\n isInteger,\n } = options || { notation: amount && amount >= 10000 ? 'compact' : 'standard' }\n if (amount === 0) {\n if (isInteger) {\n return '0'\n }\n return '0.00'\n }\n if (!amount) return '-'\n if (!Number.isFinite(amount)) return '∞'\n if (displayThreshold && amount < displayThreshold) {\n return `<${displayThreshold}`\n }\n if (amount < 1 && !tokenPrecision) {\n return getFirstThreeNonZeroDecimals(amount)\n }\n\n let precision = 2\n if (tokenPrecision) {\n precision = amount < 1 || tokenPrecision === 'enhanced' ? 3 : 2\n }\n\n const amountWithPrecision = parseFloat(amount?.toFixed(precision))\n\n return Intl.NumberFormat('en-US', {\n notation,\n minimumFractionDigits: isInteger && amount < 1000 ? 0 : precision,\n maximumFractionDigits: isInteger && amount < 1000 ? 0 : precision,\n useGrouping: amountWithPrecision < GROUPING_FALSE_LARGER_THAN_THIS,\n }).format(amountWithPrecision)\n}\n","import { Text, TextProps } from '@pulsex/uikit'\n\nexport interface PercentProps extends TextProps {\n value: number | undefined\n}\n\nconst Percent: React.FC = ({ value, ...rest }) => {\n if (!value || Number.isNaN(value)) {\n return -\n }\n\n const isNegative = value < 0\n\n return (\n \n {isNegative ? '↓' : '↑'}\n {Math.abs(value).toFixed(2)}%\n \n )\n}\n\nexport default Percent\n","import { HTMLAttributes } from 'react'\nimport styled from 'styled-components'\nimport { StarFillIcon, StarLineIcon } from '@pulsex/uikit'\nimport useTheme from 'hooks/useTheme'\n\nconst HoverIcon = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n :hover {\n cursor: pointer;\n opacity: 0.6;\n }\n`\n\nconst SaveIcon: React.FC<{ fill: boolean } & HTMLAttributes> = ({ fill = false, ...rest }) => {\n const { theme } = useTheme()\n return (\n \n {fill ? (\n \n ) : (\n \n )}\n \n )\n}\n\nexport default SaveIcon\n","import { INFO_BY_CHAIN } from '@pulsex/chains'\nimport { GraphQLClient } from 'graphql-request'\n\nexport const infoClientWithChain = (chainId: number, protocol: string) => {\n if (INFO_BY_CHAIN[chainId][protocol]) {\n return new GraphQLClient(INFO_BY_CHAIN[chainId][protocol].url)\n }\n return undefined\n}\n","export const MINIMUM_SEARCH_CHARACTERS = 2\n\nexport const WEEKS_IN_YEAR = 52.1429\n\nexport const TOTAL_FEE = 0.0029\nexport const LP_HOLDERS_FEE = 0.0022\nexport const TREASURY_FEE = 0.0\nexport const BUYBACK_FEE = 0.0007\n\nexport const PCS_V2_START = 1619136000 // April 23, 2021, 12:00:00 AM\nexport const ONE_DAY_UNIX = 86400 // 24h * 60m * 60s\nexport const ONE_HOUR_SECONDS = 3600\n\nexport const ITEMS_PER_INFO_TABLE_PAGE = 10\n\n// These tokens are either incorrectly priced or have some other issues that spoil the query data\n// None of them present any interest as they have almost 0 daily trade volume\nexport const TOKEN_BLACKLIST = [\"\"]\n","export interface Block {\n number: number\n timestamp: string\n}\n\nexport interface ChartEntry {\n date: number\n volumeUSD: number\n liquidityUSD: number\n}\n\n/**\n * Formatted type for Candlestick charts\n */\nexport interface PriceChartEntry {\n time: number\n open: number\n close: number\n high: number\n low: number\n}\n\nexport enum TransactionType {\n SWAP,\n MINT,\n FEETOMINT,\n BURN,\n}\n\nexport type Transaction = {\n type: TransactionType\n hash: string\n timestamp: string\n sender: string\n token0Symbol: string\n token1Symbol: string\n token0Address: string\n token1Address: string\n amountUSD: number\n amountToken0: number\n amountToken1: number\n}\n\nexport type FeeToMintTransaction = {\n type: TransactionType\n hash: string\n timestamp: string\n liquidity: string\n sender: string\n token0Symbol: string\n token1Symbol: string\n token0Address: string\n token1Address: string\n amountUSD: number\n amountToken0: number\n amountToken1: number\n}\n\nexport interface ProtocolData {\n volumeUSD: number\n volumeUSDChange: number // in 24h, as percentage\n\n liquidityUSD: number\n liquidityUSDChange: number // in 24h, as percentage\n\n txCount: number\n txCountChange: number\n}\n\nexport interface ProtocolState {\n readonly overview?: ProtocolData\n\n readonly chartData?: ChartEntry[]\n\n readonly transactions?: Transaction[]\n\n readonly feeToMints?: FeeToMintTransaction[]\n}\n\n// POOLS\n\nexport interface PoolData {\n address: string\n timestamp: number\n\n token0: {\n name: string\n symbol: string\n address: string\n }\n\n token1: {\n name: string\n symbol: string\n address: string\n }\n\n volumeUSD: number\n volumeOutUSD?: number\n volumeUSDChange: number\n volumeUSDWeek: number\n volumeOutUSDWeek?: number\n volumeUSDChangeWeek: number\n\n totalFees24h: number\n totalFees7d: number\n lpFees24h: number\n lpFees7d: number\n lpApr7d: number\n\n liquidityUSD: number\n liquidityUSDChange: number\n\n token0Price: number\n token1Price: number\n\n liquidityToken0: number\n liquidityToken1: number\n}\n\nexport interface PoolsState {\n byAddress: {\n [address: string]: {\n data?: PoolData\n chartData?: ChartEntry[]\n transactions?: Transaction[]\n }\n }\n}\n\n// TOKENS\n\nexport type TokenData = {\n exists: boolean\n\n name: string\n symbol: string\n address: string\n\n volumeUSD: number\n volumeUSDChange: number\n volumeUSDWeek: number\n txCount: number\n\n liquidityToken: number\n liquidityUSD: number\n liquidityUSDChange: number\n\n priceUSD: number\n priceUSDChange: number\n priceUSDChangeWeek: number\n}\n\nexport interface TokensState {\n byAddress: {\n [address: string]: {\n data?: TokenData\n poolAddresses?: string[]\n chartData?: ChartEntry[]\n priceData: {\n oldestFetchedTimestamp?: number\n [secondsInterval: number]: PriceChartEntry[] | undefined\n }\n transactions?: Transaction[]\n }\n }\n}\n\n// Info redux state\nexport interface InfoState {\n protocol: ProtocolState\n pools: PoolsState\n tokens: TokensState\n}\n","import { ONE_DAY_UNIX, PCS_V2_START } from 'config/constants/info'\nimport dayjs from 'dayjs'\nimport { TransactionType } from 'state/info/types'\nimport { ChartEntry } from '../types'\nimport {\n MintResponse,\n SwapResponse,\n BurnResponse,\n TokenDayData,\n PairDayData,\n PulsexDayData,\n FeeToMintResponse,\n} from './types'\n\nexport const mapMints = (mint: MintResponse) => {\n return {\n type: TransactionType.MINT,\n hash: mint.id.split('-')[0],\n timestamp: mint.timestamp,\n sender: mint.sender,\n token0Symbol: mint.pair.token0.symbol,\n token1Symbol: mint.pair.token1.symbol,\n token0Address: mint.pair.token0.id,\n token1Address: mint.pair.token1.id,\n amountUSD: parseFloat(mint.amountUSD),\n amountToken0: parseFloat(mint.amount0),\n amountToken1: parseFloat(mint.amount1),\n }\n}\n\nexport const mapFeeToMints = (mint: FeeToMintResponse) => {\n return {\n type: TransactionType.FEETOMINT,\n hash: mint.id.split('-')[0],\n timestamp: mint.timestamp,\n liquidity: mint.liquidity,\n sender: mint.sender,\n token0Symbol: mint.pair.token0.symbol,\n token1Symbol: mint.pair.token1.symbol,\n token0Address: mint.pair.token0.id,\n token1Address: mint.pair.token1.id,\n amountUSD: parseFloat(mint.amountUSD),\n amountToken0: parseFloat(mint.amount0),\n amountToken1: parseFloat(mint.amount1),\n }\n}\n\nexport const mapBurns = (burn: BurnResponse) => {\n return {\n type: TransactionType.BURN,\n hash: burn.id.split('-')[0],\n timestamp: burn.timestamp,\n sender: burn.sender,\n token0Symbol: burn.pair.token0.symbol,\n token1Symbol: burn.pair.token1.symbol,\n token0Address: burn.pair.token0.id,\n token1Address: burn.pair.token1.id,\n amountUSD: parseFloat(burn.amountUSD),\n amountToken0: parseFloat(burn.amount0),\n amountToken1: parseFloat(burn.amount1),\n }\n}\n\nexport const mapSwaps = (swap: SwapResponse) => {\n return {\n type: TransactionType.SWAP,\n hash: swap.id.split('-')[0],\n timestamp: swap.timestamp,\n sender: swap.from,\n token0Symbol: swap.pair.token0.symbol,\n token1Symbol: swap.pair.token1.symbol,\n token0Address: swap.pair.token0.id,\n token1Address: swap.pair.token1.id,\n amountUSD: parseFloat(swap.amountUSD),\n amountToken0: parseFloat(swap.amount0In) - parseFloat(swap.amount0Out),\n amountToken1: parseFloat(swap.amount1In) - parseFloat(swap.amount1Out),\n }\n}\n\nexport const mapDayData = (tokenDayData: TokenDayData | PulsexDayData): ChartEntry => ({\n date: tokenDayData.date,\n volumeUSD: parseFloat(tokenDayData.dailyVolumeUSD),\n liquidityUSD: parseFloat(tokenDayData.totalLiquidityUSD),\n})\n\nexport const mapPairDayData = (pairDayData: PairDayData): ChartEntry => ({\n date: pairDayData.date,\n volumeUSD: parseFloat(pairDayData.dailyVolumeUSD),\n liquidityUSD: parseFloat(pairDayData.reserveUSD),\n})\n\ntype PoolOrTokenFetchFn = (chainId: number, protocol: string, skip: number, address: string) => Promise<{ data?: ChartEntry[]; error: boolean }>\ntype OverviewFetchFn = (chainId: number, protocol: string, skip: number) => Promise<{ data?: ChartEntry[]; error: boolean }>\n\n// Common helper function to retrieve chart data\n// Used for both Pool and Token charts\nexport const fetchChartData = async (\n chainId: number,\n protocol: string,\n getEntityDayDatas: PoolOrTokenFetchFn | OverviewFetchFn,\n address?: string,\n): Promise<{ data?: ChartEntry[]; error: boolean }> => {\n let chartEntries: ChartEntry[] = []\n let error = false\n let skip = 0\n let allFound = false\n\n while (!allFound) {\n // eslint-disable-next-line no-await-in-loop\n const { data, error: fetchError } = await getEntityDayDatas(chainId, protocol, skip, address)\n skip += 1000\n allFound = data?.length < 1000\n error = fetchError\n if (data) {\n chartEntries = chartEntries.concat(data)\n }\n }\n\n if (error || chartEntries.length === 0) {\n return {\n error: true,\n }\n }\n\n const formattedDayDatas = chartEntries.reduce((accum: { [date: number]: ChartEntry }, dayData) => {\n // At this stage we track unix day ordinal for each data point to check for empty days later\n const dayOrdinal = parseInt((dayData.date / ONE_DAY_UNIX).toFixed(0))\n return {\n [dayOrdinal]: dayData,\n ...accum,\n }\n }, {})\n\n const availableDays = Object.keys(formattedDayDatas).map((dayOrdinal) => parseInt(dayOrdinal, 10))\n\n const firstAvailableDayData = formattedDayDatas[availableDays[0]]\n // fill in empty days ( there will be no day datas if no trades made that day )\n let timestamp = firstAvailableDayData?.date ?? PCS_V2_START\n let latestLiquidityUSD = firstAvailableDayData?.liquidityUSD ?? 0\n const endTimestamp = dayjs().unix()\n while (timestamp < endTimestamp - ONE_DAY_UNIX) {\n timestamp += ONE_DAY_UNIX\n const dayOrdinal = parseInt((timestamp / ONE_DAY_UNIX).toFixed(0), 10)\n if (!Object.keys(formattedDayDatas).includes(dayOrdinal.toString())) {\n formattedDayDatas[dayOrdinal] = {\n date: timestamp,\n volumeUSD: 0,\n liquidityUSD: latestLiquidityUSD,\n }\n } else {\n latestLiquidityUSD = formattedDayDatas[dayOrdinal].liquidityUSD\n }\n }\n\n return {\n data: Object.values(formattedDayDatas),\n error: false,\n }\n}\n","import { gql } from 'graphql-request'\nimport { infoClientWithChain } from 'utils/graphql'\nimport { ChartEntry } from 'state/info/types'\nimport { PCS_V2_START } from 'config/constants/info'\nimport { PairDayDatasResponse } from '../types'\nimport { mapPairDayData, fetchChartData } from '../helpers'\n\nconst getPoolChartData = async (chainId: number, protocol: string, skip: number, address: string): Promise<{ data?: ChartEntry[]; error: boolean }> => {\n try {\n const query = gql`\n query pairDayDatas($startTime: Int!, $skip: Int!, $address: Bytes!) {\n pairDayDatas(\n first: 1000\n skip: $skip\n where: { pairAddress: $address, date_gt: $startTime }\n orderBy: date\n orderDirection: asc\n ) {\n date\n dailyVolumeUSD\n reserveUSD\n }\n }\n `\n const { pairDayDatas } = await infoClientWithChain(chainId, protocol).request(\n query, \n {\n startTime: PCS_V2_START,\n skip,\n address,\n },\n )\n const data = pairDayDatas.map(mapPairDayData)\n return { data, error: false }\n } catch (error) {\n console.error('Failed to fetch pool chart data', error)\n return { error: true }\n }\n}\n\nconst fetchPoolChartData = async (\n chainId: number,\n protocol: string,\n address: string\n): Promise<{ data?: ChartEntry[]; error: boolean }> => {\n return fetchChartData(chainId, protocol, getPoolChartData, address)\n}\n\nexport default fetchPoolChartData\n","/**\n * Get increase/decrease of value compared to the previous value (e.g. 24h volume compared to 24h volume the day before )\n * @param valueNow - more recent value\n * @param valueBefore - value to compare with\n */\nexport const getAmountChange = (valueNow?: number, valueBefore?: number) => {\n if (valueNow && valueBefore) {\n return valueNow - valueBefore\n }\n if (valueNow) {\n return valueNow\n }\n return 0\n}\n\n/**\n * Get increase/decrease of value compared to the previous value as a percentage\n * @param valueNow - more recent value\n * @param valueBefore - value to compare with\n */\nexport const getPercentChange = (valueNow?: number, valueBefore?: number): number => {\n if (valueNow && valueBefore) {\n return ((valueNow - valueBefore) / valueBefore) * 100\n }\n return 0\n}\n","import { getAmountChange, getPercentChange } from '../pages/Info/utils/infoDataHelpers'\n\n/**\n * Given current value and value 1 and 2 periods (e.g. 1day + 2days, 1week - 2weeks) returns the amount change for latest period\n * and percentage change compared to the previous period.\n * @param valueNow - current value\n * @param valueOnePeriodAgo - value 1 period ago (e.g. 1 day or 1 week ago), period unit must be same as valueTwoPeriodsAgo\n * @param valueTwoPeriodsAgo - value 2 periods ago (e.g. 2 days or 2 weeks ago), period unit must be same as valueOnePeriodAgo\n * @returns amount change for the latest period and percentage change compared to previous period\n */\nexport const getChangeForPeriod = (\n valueNow?: number,\n valueOnePeriodAgo?: number,\n valueTwoPeriodsAgo?: number,\n): [number, number] => {\n const currentPeriodAmount = getAmountChange(valueNow, valueOnePeriodAgo)\n const previousPeriodAmount = getAmountChange(valueOnePeriodAgo, valueTwoPeriodsAgo)\n const percentageChange = getPercentChange(currentPeriodAmount, previousPeriodAmount)\n return [currentPeriodAmount, percentageChange]\n}\n","import dayjs from 'dayjs'\n\n/**\n * Returns UTC timestamps for 24h ago, 48h ago, 7d ago and 14d ago relative to current date and time\n */\nexport const getDeltaTimestamps = (): [number, number, number, number] => {\n const currentTime = dayjs()\n const t24h = currentTime.subtract(1, 'days').startOf('minutes').unix()\n const t48h = currentTime.subtract(2, 'days').startOf('minutes').unix()\n const t7d = currentTime.subtract(1, 'weeks').startOf('minutes').unix()\n const t14d = currentTime.subtract(2, 'weeks').startOf('minutes').unix()\n return [t24h, t48h, t7d, t14d]\n}\n","import { TOKEN_BLACKLIST } from 'config/constants/info'\nimport { gql } from 'graphql-request'\nimport { useEffect, useState } from 'react'\nimport { infoClientWithChain } from 'utils/graphql'\nimport { getDeltaTimestamps } from 'utils/getDeltaTimestamps'\n\ninterface TopPoolsResponse {\n pairDayDatas: {\n id: string\n }[]\n}\n\n/**\n * Initial pools to display on the home page\n */\nconst fetchTopPools = async (chainId: number, protocol: string, timestamp24hAgo: number): Promise => {\n try {\n const query = gql`\n query topPools($blacklist: [String!], $timestamp24hAgo: Int) {\n pairDayDatas(\n first: 30\n where: { dailyTxns_gt: 300, token0_not_in: $blacklist, token1_not_in: $blacklist, date_gt: $timestamp24hAgo }\n orderBy: dailyVolumeUSD\n orderDirection: desc\n ) {\n id\n }\n }\n `\n const data = await infoClientWithChain(chainId, protocol).request(query, { blacklist: TOKEN_BLACKLIST, timestamp24hAgo })\n // pairDayDatas id has compound id \"0xPOOLADDRESS-NUMBERS\", extracting pool address with .split('-')\n return data.pairDayDatas.map((p) => p.id.split('-')[0])\n } catch (error) {\n console.error('Failed to fetch top pools', error)\n return []\n }\n}\n\n/**\n * Fetch top addresses by volume\n */\nconst useTopPoolAddresses = (chainId: number, protocol: string): string[] => {\n const [topPoolAddresses, setTopPoolAddresses] = useState([])\n const [timestamp24hAgo] = getDeltaTimestamps()\n\n useEffect(() => {\n const fetch = async () => {\n const addresses = await fetchTopPools(chainId, protocol, timestamp24hAgo)\n if (addresses && addresses.length > 0) {\n setTopPoolAddresses(addresses)\n }\n }\n if (topPoolAddresses.length === 0) {\n fetch()\n }\n }, [chainId, topPoolAddresses, timestamp24hAgo, protocol])\n\n return topPoolAddresses\n}\n\nexport const fetchTopPoolAddresses = async (chainId: number, protocol: string) => {\n const [timestamp24hAgo] = getDeltaTimestamps()\n\n const addresses = await fetchTopPools(chainId, protocol, timestamp24hAgo)\n return addresses\n}\n\nexport default useTopPoolAddresses\n","/* eslint-disable no-param-reassign */\nimport { gql } from 'graphql-request'\nimport { infoClientWithChain } from 'utils/graphql'\nimport { Block, PoolData } from 'state/info/types'\nimport { getChangeForPeriod } from 'utils/getChangeForPeriod'\nimport { getLpFeesAndApr } from 'utils/getLpFeesAndApr'\nimport { getPercentChange } from 'pages/Info/utils/infoDataHelpers'\n\nimport { fetchTopPoolAddresses } from './topPools'\n\ninterface PoolFields {\n id: string\n reserve0: string\n reserve1: string\n reserveUSD: string\n volumeUSD: string\n token0Price: string\n token1Price: string\n timestamp: number\n token0?: {\n id: string\n symbol: string\n name: string\n }\n token1?: {\n id: string\n symbol: string\n name: string\n }\n}\n\ninterface FormattedPoolFields\n extends Omit<\n PoolFields,\n 'volumeUSD' | 'reserveUSD' | 'reserve0' | 'reserve1' | 'token0Price' | 'token1Price'\n > {\n volumeUSD: number\n reserveUSD: number\n reserve0: number\n reserve1: number\n token0Price: number\n token1Price: number\n}\n\ninterface PoolQueryResponse {\n data: PoolFields[]\n}\n\n/**\n * Data for displaying pool tables (on multiple pages, used throughout the site)\n * Note: Don't try to refactor it to use variables, server throws error if blocks passed as undefined variable\n * only works if its hard-coded into query string\n */\nconst POOL_AT_BLOCK = (block: number | null, pools: string[]) => {\n const blockString = block ? `block: {number: ${block}}` : ``\n const addressesString = `[\"${pools.join('\",\"')}\"]`\n return `pairs(\n where: { id_in: ${addressesString} }\n ${blockString}\n orderBy: trackedReservePLS\n orderDirection: desc\n ) {\n id\n reserve0\n reserve1\n reserveUSD\n volumeUSD\n token0Price\n token1Price\n timestamp\n token0 {\n id\n symbol\n name\n }\n token1 {\n id\n symbol\n name\n }\n }`\n}\n\nconst fetchPoolData = async (\n chainId: number,\n protocol: string,\n block24h: number,\n block48h: number,\n block7d: number,\n block14d: number,\n poolAddresses: string[],\n) => {\n try {\n const queries = [\n POOL_AT_BLOCK(null, poolAddresses),\n POOL_AT_BLOCK(block24h, poolAddresses),\n POOL_AT_BLOCK(block48h, poolAddresses),\n POOL_AT_BLOCK(block7d, poolAddresses),\n POOL_AT_BLOCK(block14d, poolAddresses),\n ];\n\n const promises = queries.map((query) => {\n const gqlQuery = gql`\n query pools {\n data: ${query}\n }\n `\n return infoClientWithChain(chainId, protocol).request(gqlQuery)\n })\n\n const results = await Promise.all(promises)\n\n return { data: results.map(result => result.data), error: false }\n } catch (error) {\n console.error('Failed to fetch pool data', error)\n return { error: true }\n }\n}\n\n// Transforms pools into \"0xADDRESS: { ...PoolFields }\" format and cast strings to numbers\nexport const parsePoolData = (pairs?: PoolFields[]) => {\n if (!pairs) {\n return {}\n }\n return pairs.reduce((accum: { [address: string]: FormattedPoolFields }, poolData) => {\n const { volumeUSD, reserveUSD, reserve0, reserve1, token0Price, token1Price } = poolData\n accum[poolData.id] = {\n ...poolData,\n volumeUSD: parseFloat(volumeUSD),\n reserveUSD: parseFloat(reserveUSD),\n reserve0: parseFloat(reserve0),\n reserve1: parseFloat(reserve1),\n token0Price: parseFloat(token0Price),\n token1Price: parseFloat(token1Price),\n }\n return accum\n }, {})\n}\n\nexport const fetchAllPoolDataWithAddress = async (\n chainId: number,\n protocol: string,\n blocks: Block[],\n poolAddresses: string[],\n) => {\n const [block24h, block48h, block7d, block14d] = blocks ?? []\n\n const fetchDataPromises = [\n fetchPoolData(chainId, protocol, block24h?.number, block48h?.number, block7d?.number, block14d?.number, poolAddresses),\n ];\n\n const [data] = await Promise.all(fetchDataPromises);\n\n const formattedPoolData = parsePoolData(data?.data[0])\n const formattedPoolData24h = parsePoolData(data?.data[1])\n const formattedPoolData48h = parsePoolData(data?.data[2])\n const formattedPoolData7d = parsePoolData(data?.data[3])\n const formattedPoolData14d = parsePoolData(data?.data[4])\n\n // Calculate data and format\n const formatted = poolAddresses.reduce((accum: { [address: string]: { data: PoolData } }, address) => {\n // Undefined data is possible if pool is brand new and didn't exist one day ago or week ago.\n const current: FormattedPoolFields | undefined = formattedPoolData[address]\n const oneDay: FormattedPoolFields | undefined = formattedPoolData24h[address]\n const twoDays: FormattedPoolFields | undefined = formattedPoolData48h[address]\n const week: FormattedPoolFields | undefined = formattedPoolData7d[address]\n const twoWeeks: FormattedPoolFields | undefined = formattedPoolData14d[address]\n\n const [volumeUSD, volumeUSDChange] = getChangeForPeriod(current?.volumeUSD, oneDay?.volumeUSD, twoDays?.volumeUSD)\n const [volumeUSDWeek, volumeUSDChangeWeek] = getChangeForPeriod(\n current?.volumeUSD,\n week?.volumeUSD,\n twoWeeks?.volumeUSD,\n )\n\n const liquidityUSD = current ? current.reserveUSD : 0\n\n const liquidityUSDChange = getPercentChange(current?.reserveUSD, oneDay?.reserveUSD)\n\n const liquidityToken0 = current ? current.reserve0 : 0\n const liquidityToken1 = current ? current.reserve1 : 0\n const timestamp = current.timestamp ?? 0\n\n const { totalFees24h, totalFees7d, lpFees24h, lpFees7d, lpApr7d } = getLpFeesAndApr(\n volumeUSD,\n volumeUSDWeek,\n liquidityUSD,\n )\n\n if (current) {\n accum[address] = {\n data: {\n address,\n token0: {\n address: current.token0.id,\n name: current.token0.name,\n symbol: current.token0.symbol,\n },\n token1: {\n address: current.token1.id,\n name: current.token1.name,\n symbol: current.token1.symbol,\n },\n timestamp,\n token0Price: current.token0Price,\n token1Price: current.token1Price,\n volumeUSD,\n volumeUSDChange,\n volumeUSDWeek,\n volumeUSDChangeWeek,\n totalFees24h,\n totalFees7d,\n lpFees24h,\n lpFees7d,\n lpApr7d,\n liquidityUSD,\n liquidityUSDChange,\n liquidityToken0,\n liquidityToken1,\n },\n }\n }\n\n return accum\n }, {})\n return formatted\n}\n\nexport const fetchAllPoolData = async (chainId: number, protocol: string, blocks: Block[]) => {\n const poolAddresses = await fetchTopPoolAddresses(chainId, protocol)\n return fetchAllPoolDataWithAddress(chainId, protocol, blocks, poolAddresses)\n}\n","import { TOTAL_FEE, LP_HOLDERS_FEE, WEEKS_IN_YEAR } from '../config/constants/info'\n\nexport const getLpFeesAndApr = (volumeUSD: number, volumeUSDWeek: number, liquidityUSD: number) => {\n const totalFees24h = volumeUSD * TOTAL_FEE\n const totalFees7d = volumeUSDWeek * TOTAL_FEE\n const lpFees24h = volumeUSD * LP_HOLDERS_FEE\n const lpFees7d = volumeUSDWeek * LP_HOLDERS_FEE\n\n const lpApr7d = liquidityUSD > 0 ? (volumeUSDWeek * LP_HOLDERS_FEE * WEEKS_IN_YEAR * 100) / liquidityUSD : 0\n return {\n totalFees24h,\n totalFees7d,\n lpFees24h,\n lpFees7d,\n lpApr7d: lpApr7d !== Infinity ? lpApr7d : 0,\n }\n}\n","import { gql } from 'graphql-request'\nimport { mapBurns, mapMints, mapSwaps } from 'state/info/queries/helpers'\nimport { BurnResponse, MintResponse, SwapResponse } from 'state/info/queries/types'\nimport { Transaction } from 'state/info/types'\nimport { infoClientWithChain } from 'utils/graphql'\n/**\n * Transactions of the given pool, used on Pool page\n */\nconst POOL_TRANSACTIONS = gql`\n query poolTransactions($address: Bytes!) {\n mints(first: 35, orderBy: timestamp, orderDirection: desc, where: { pair: $address }) {\n id\n timestamp\n pair {\n token0 {\n id\n symbol\n }\n token1 {\n id\n symbol\n }\n }\n to\n sender\n amount0\n amount1\n amountUSD\n }\n swaps(first: 35, orderBy: timestamp, orderDirection: desc, where: { pair: $address }) {\n id\n timestamp\n pair {\n token0 {\n id\n symbol\n }\n token1 {\n id\n symbol\n }\n }\n from\n amount0In\n amount1In\n amount0Out\n amount1Out\n amountUSD\n }\n burns(first: 35, orderBy: timestamp, orderDirection: desc, where: { pair: $address }) {\n id\n timestamp\n pair {\n token0 {\n id\n symbol\n }\n token1 {\n id\n symbol\n }\n }\n sender\n amount0\n amount1\n amountUSD\n }\n }\n`\n\ninterface TransactionResults {\n mints: MintResponse[]\n swaps: SwapResponse[]\n burns: BurnResponse[]\n}\n\nconst fetchPoolTransactions = async (chainId: number, protocol: string, address: string): Promise<{ data?: Transaction[]; error: boolean }> => {\n try {\n const data = await infoClientWithChain(chainId, protocol).request(POOL_TRANSACTIONS, {\n address,\n })\n const mints = data.mints.map(mapMints)\n const burns = data.burns.map(mapBurns)\n const swaps = data.swaps.map(mapSwaps)\n return { data: [...mints, ...burns, ...swaps], error: false }\n } catch (error) {\n console.error(`Failed to fetch transactions for pool ${address}`, error)\n return {\n error: true,\n }\n }\n}\n\nexport default fetchPoolTransactions\n","/* eslint-disable no-await-in-loop */\nimport { PCS_V2_START } from 'config/constants/info'\nimport { gql } from 'graphql-request'\nimport { useEffect, useState } from 'react'\nimport { ChartEntry } from 'state/info/types'\nimport { infoClientWithChain } from 'utils/graphql'\nimport { fetchChartData, mapDayData } from '../helpers'\nimport { PulsexDayDatasResponse } from '../types'\n\n/**\n * Data for displaying Liquidity and Volume charts on Overview page\n */\nconst PULSEX_DAY_DATAS = gql`\n query overviewCharts($startTime: Int!, $skip: Int!) {\n pulsexDayDatas(first: 1000, skip: $skip, where: { date_gt: $startTime }, orderBy: date, orderDirection: asc) {\n date\n dailyVolumeUSD\n totalLiquidityUSD\n }\n }\n`\n\nconst getOverviewChartData = async (\n chainId: number,\n protocol: string,\n skip: number\n): Promise<{ data?: ChartEntry[]; error: boolean }> => {\n try {\n const { pulsexDayDatas } = await infoClientWithChain(chainId, protocol).request(PULSEX_DAY_DATAS, {\n startTime: PCS_V2_START,\n skip,\n })\n const data = pulsexDayDatas.map(mapDayData)\n return { data, error: false }\n } catch (error) {\n console.error('Failed to fetch overview chart data', error)\n return { error: true }\n }\n}\n\n/**\n * Fetch historic chart data\n */\nconst useFetchGlobalChartData = (chainId: number, protocol: string): {\n error: boolean\n data: ChartEntry[] | undefined\n} => {\n const [overviewChartData, setOverviewChartData] = useState()\n const [error, setError] = useState(false)\n\n useEffect(() => {\n const fetch = async () => {\n const { data } = await fetchChartData(chainId, protocol, getOverviewChartData)\n if (data) {\n setOverviewChartData(data)\n } else {\n setError(true)\n }\n }\n if (!overviewChartData && !error) {\n fetch()\n }\n }, [chainId, overviewChartData, protocol, error])\n\n return {\n error,\n data: overviewChartData,\n }\n}\n\nexport const fetchGlobalChartData = async (chainId: number, protocol: string) => {\n const { data } = await fetchChartData(chainId, protocol, getOverviewChartData)\n return data\n}\n\nexport default useFetchGlobalChartData\n","import { ChainId } from '@pulsex/chains'\n\nexport const SNAPSHOT_BASE_URL = process.env.NEXT_PUBLIC_SNAPSHOT_BASE_URL\nexport const SNAPSHOT_API = `${SNAPSHOT_BASE_URL}/graphql`\nexport const SNAPSHOT_HUB_API = `${SNAPSHOT_BASE_URL}/api/message`\nexport const BLOCKS_CLIENT = 'https://graph.pulsechain.com/subgraphs/name/pulsechain/blocks'\nexport const BLOCKS_CLIENT_TESTNET = 'https://graph.v4.testnet.pulsechain.com/subgraphs/name/pulsechain/blocks'\nexport const GRAPH_HEALTH = 'https://health.graph.pulsechain.com'\nexport const QUOTING_API = 'https://routing-v2.apis.pulsex.com/quote'\nexport const POOLS_API = 'https://routing-v2.apis.pulsex.com/pools'\nexport const PULSECHAIN_BRIDGE_URL = 'https://bridge.pulsechain.com'\n\nexport const BLOCKS_CLIENT_WITH_CHAIN = {\n [ChainId.PULSECHAIN]: BLOCKS_CLIENT,\n [ChainId.PULSECHAIN_TESTNET]: BLOCKS_CLIENT_TESTNET,\n}\n","import { GraphQLClient } from 'graphql-request'\n\nconst requestWithTimeout = (\n graphQLClient: GraphQLClient,\n request: string,\n variables?: any,\n timeout = 30000,\n): Promise => {\n return Promise.race([\n variables ? graphQLClient.request(request, variables) : graphQLClient.request(request),\n new Promise((_, reject) => {\n setTimeout(() => {\n reject(new Error(`Request timed out after ${timeout} milliseconds`))\n }, timeout)\n }),\n ]) as Promise\n}\n\nexport default requestWithTimeout\n","import { GraphQLClient } from 'graphql-request'\nimport requestWithTimeout from 'utils/requestWithTimeout'\n\n/**\n * Helper function to get large amount GraphQL subqueries\n * @param queryConstructor constructor function that combines subqueries\n * @param subqueries individual queries\n * @param endpoint GraphQL endpoint\n * @param skipCount how many subqueries to fire at a time\n * @returns\n */\nexport const multiQuery = async (\n queryConstructor: (subqueries: string[]) => string,\n subqueries: string[],\n endpoint: string,\n skipCount = 1000,\n) => {\n let fetchedData = {}\n let allFound = false\n let skip = 0\n const client = new GraphQLClient(endpoint)\n try {\n while (!allFound) {\n let end = subqueries.length\n if (skip + skipCount < subqueries.length) {\n end = skip + skipCount\n }\n const subqueriesSlice = subqueries.slice(skip, end)\n // eslint-disable-next-line no-await-in-loop\n const result: any = await requestWithTimeout(client, queryConstructor(subqueriesSlice))\n fetchedData = {\n ...fetchedData,\n ...result,\n }\n allFound = Object.keys(result).length < skipCount || skip + skipCount > subqueries.length\n skip += skipCount\n }\n return fetchedData\n } catch (error) {\n console.error('Failed to fetch info data', error)\n return null\n }\n}\n","import { gql } from 'graphql-request'\nimport orderBy from 'lodash/orderBy'\nimport { BLOCKS_CLIENT_WITH_CHAIN } from 'config/constants/endpoints'\nimport { Block } from '../state/info/types'\nimport { multiQuery } from '../pages/Info/utils/infoQueryHelpers'\n\nconst getBlockSubqueries = (timestamps: number[]) =>\n timestamps.map((timestamp) => {\n return `t${timestamp}:blocks(first: 1, orderBy: timestamp, orderDirection: desc, where: { timestamp_gt: ${timestamp}, timestamp_lt: ${\n timestamp + 600\n } }) {\n number\n }`\n })\n\nconst blocksQueryConstructor = (subqueries: string[]) => {\n return gql`query blocks {\n ${subqueries}\n }`\n}\n\n/**\n * @notice Fetches block objects for an array of timestamps.\n * @param {Array} timestamps\n */\nexport const getBlocksFromTimestamps = async (\n timestamps: number[],\n sortDirection: 'asc' | 'desc' | undefined = 'desc',\n skipCount: number | undefined = 500,\n chainId: number | undefined = 369,\n): Promise => {\n if (timestamps?.length === 0) {\n return []\n }\n\n const fetchedData: any = await multiQuery(\n blocksQueryConstructor,\n getBlockSubqueries(timestamps),\n BLOCKS_CLIENT_WITH_CHAIN[chainId],\n skipCount,\n )\n\n const blocks: Block[] = []\n if (fetchedData) {\n // eslint-disable-next-line no-restricted-syntax\n for (const key of Object.keys(fetchedData)) {\n if (fetchedData[key].length > 0) {\n blocks.push({\n timestamp: key.split('t')[1],\n number: parseInt(fetchedData[key][0].number, 10),\n })\n }\n }\n // graphql-request does not guarantee same ordering of batched requests subqueries, hence manual sorting\n return orderBy(blocks, (block) => block.number, sortDirection)\n }\n return blocks\n}\n","import { useActiveChainId } from 'hooks/useActiveChainId'\nimport { useEffect, useState } from 'react'\nimport { Block } from 'state/info/types'\nimport { useQuery } from '@tanstack/react-query'\nimport { getBlocksFromTimestamps } from 'utils/getBlocksFromTimestamps'\n\n/**\n * for a given array of timestamps, returns block entities\n * @param timestamps\n * @param sortDirection\n * @param skipCount\n */\nexport const useBlocksFromTimestamps = (\n timestamps: number[],\n sortDirection: 'asc' | 'desc' = 'desc',\n skipCount = 1000,\n): {\n blocks?: Block[]\n error: boolean\n} => {\n const { chainId } = useActiveChainId()\n const [blocks, setBlocks] = useState()\n const [error, setError] = useState(false)\n\n const timestampsString = JSON.stringify(timestamps)\n const blocksString = blocks ? JSON.stringify(blocks) : undefined\n\n useEffect(() => {\n const fetchData = async () => {\n const timestampsArray = JSON.parse(timestampsString)\n const result = await getBlocksFromTimestamps(timestampsArray, sortDirection, skipCount, chainId)\n if (result.length === 0) {\n setError(true)\n } else {\n setBlocks(result)\n }\n }\n const blocksArray = blocksString ? JSON.parse(blocksString) : undefined\n if (!blocksArray && !error) {\n fetchData()\n }\n }, [chainId, blocksString, error, skipCount, sortDirection, timestampsString])\n\n return {\n blocks,\n error,\n }\n}\n\nexport const useBlockFromTimeStampQuery = (\n timestamps: number[],\n sortDirection: 'asc' | 'desc' | undefined = 'desc',\n skipCount: number | undefined = 1000,\n) => {\n const { chainId } = useActiveChainId()\n const timestampsString = JSON.stringify(timestamps)\n const timestampsArray = JSON.parse(timestampsString)\n const { data } = useQuery({\n queryKey: [`info/blocks/${timestampsString}`, chainId],\n queryFn: () => getBlocksFromTimestamps(timestampsArray, sortDirection, skipCount, chainId),\n refetchOnReconnect: false,\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n })\n return { blocks: data }\n}\n","import { gql } from 'graphql-request'\nimport { useEffect, useState } from 'react'\nimport { Block, ProtocolData } from 'state/info/types'\nimport { getChangeForPeriod } from 'utils/getChangeForPeriod'\nimport { getDeltaTimestamps } from 'utils/getDeltaTimestamps'\nimport { infoClientWithChain } from 'utils/graphql'\nimport { useBlocksFromTimestamps } from 'pages/Info/hooks/useBlocksFromTimestamps'\nimport { getPercentChange } from 'pages/Info/utils/infoDataHelpers'\n\ninterface PulseXFactory {\n totalTransactions: string\n totalVolumeUSD: string\n totalLiquidityUSD: string\n}\n\ninterface OverviewResponse {\n pulseXFactories: PulseXFactory[]\n}\n\n/**\n * Latest Liquidity, Volume and Transaction count\n */\nconst getOverviewData = async (\n chainId: number,\n protocol: string,\n block?: number\n): Promise<{ data?: OverviewResponse; error: boolean }> => {\n try {\n const query = gql`query overview {\n pulseXFactories(\n ${block ? `block: { number: ${block}}` : ``}\n first: 1) {\n totalTransactions\n totalVolumeUSD\n totalLiquidityUSD\n }\n }`\n const data = await infoClientWithChain(chainId, protocol).request(query)\n return { data, error: false }\n } catch (error) {\n console.error('Failed to fetch info overview', error)\n return { data: null, error: true }\n }\n}\n\nconst formatPulseXFactoryResponse = (rawPulseXFactory?: PulseXFactory) => {\n if (rawPulseXFactory) {\n return {\n totalTransactions: parseFloat(rawPulseXFactory.totalTransactions),\n totalVolumeUSD: parseFloat(rawPulseXFactory.totalVolumeUSD),\n totalLiquidityUSD: parseFloat(rawPulseXFactory.totalLiquidityUSD),\n }\n }\n return null\n}\n\ninterface ProtocolFetchState {\n error: boolean\n data?: ProtocolData\n}\n\nconst useFetchProtocolData = (chainId: number, protocol: string): ProtocolFetchState => {\n const [fetchState, setFetchState] = useState({\n error: false,\n })\n const [t24, t48] = getDeltaTimestamps()\n const { blocks, error: blockError } = useBlocksFromTimestamps([t24, t48])\n const [block24, block48] = blocks ?? []\n\n useEffect(() => {\n const fetchData = async () => {\n const [{ error, data }, { error: error24, data: data24 }, { error: error48, data: data48 }] = await Promise.all([\n getOverviewData(chainId, protocol),\n getOverviewData(chainId, protocol, block24?.number ?? undefined),\n getOverviewData(chainId, protocol, block48?.number ?? undefined),\n ])\n const anyError = error || error24 || error48\n const overviewData = formatPulseXFactoryResponse(data?.pulseXFactories?.[0])\n const overviewData24 = formatPulseXFactoryResponse(data24?.pulseXFactories?.[0]) || overviewData\n const overviewData48 = formatPulseXFactoryResponse(data48?.pulseXFactories?.[0]) || overviewData24\n const allDataAvailable = overviewData && overviewData24 && overviewData48\n if (anyError || !allDataAvailable) {\n setFetchState({\n error: true,\n })\n } else {\n const [volumeUSD, volumeUSDChange] = getChangeForPeriod(\n overviewData.totalVolumeUSD,\n overviewData24.totalVolumeUSD,\n overviewData48.totalVolumeUSD,\n )\n const liquidityUSDChange = getPercentChange(overviewData.totalLiquidityUSD, overviewData24.totalLiquidityUSD)\n // 24H transactions\n const [txCount, txCountChange] = getChangeForPeriod(\n overviewData.totalTransactions,\n overviewData24.totalTransactions,\n overviewData48.totalTransactions,\n )\n const protocolData: ProtocolData = {\n volumeUSD,\n volumeUSDChange: typeof volumeUSDChange === 'number' ? volumeUSDChange : 0,\n liquidityUSD: overviewData.totalLiquidityUSD,\n liquidityUSDChange,\n txCount,\n txCountChange,\n }\n setFetchState({\n error: false,\n data: protocolData,\n })\n }\n }\n\n const allBlocksAvailable = block24?.number && block48?.number\n if (allBlocksAvailable && !blockError && !fetchState.data) {\n fetchData()\n }\n }, [chainId, block24, block48, blockError, fetchState, protocol])\n\n return fetchState\n}\n\nexport const fetchProtocolData = async (chainId: number, protocol: string, block24: Block, block48: Block) => {\n const [{ data }, { data: data24 }, { data: data48 }] = await Promise.all([\n getOverviewData(chainId, protocol),\n getOverviewData(chainId, protocol, block24?.number ?? undefined),\n getOverviewData(chainId, protocol, block48?.number ?? undefined),\n ])\n\n // const anyError = error || error24 || error48\n const overviewData = formatPulseXFactoryResponse(data?.pulseXFactories?.[0])\n const overviewData24 = formatPulseXFactoryResponse(data24?.pulseXFactories?.[0]) || overviewData\n const overviewData48 = formatPulseXFactoryResponse(data48?.pulseXFactories?.[0]) || overviewData24\n // const allDataAvailable = overviewData && overviewData24 && overviewData48\n\n const [volumeUSD, volumeUSDChange] = getChangeForPeriod(\n overviewData.totalVolumeUSD,\n overviewData24.totalVolumeUSD,\n overviewData48.totalVolumeUSD,\n )\n const liquidityUSDChange = getPercentChange(overviewData.totalLiquidityUSD, overviewData24.totalLiquidityUSD)\n // 24H transactions\n const [txCount, txCountChange] = getChangeForPeriod(\n overviewData.totalTransactions,\n overviewData24.totalTransactions,\n overviewData48.totalTransactions,\n )\n const protocolData: ProtocolData = {\n volumeUSD,\n volumeUSDChange: typeof volumeUSDChange === 'number' ? volumeUSDChange : 0,\n liquidityUSD: overviewData.totalLiquidityUSD,\n liquidityUSDChange,\n txCount,\n txCountChange,\n }\n return protocolData\n}\n\nexport default useFetchProtocolData\n","import { gql } from 'graphql-request'\nimport { mapBurns, mapMints, mapSwaps } from 'state/info/queries/helpers'\nimport { BurnResponse, MintResponse, SwapResponse } from 'state/info/queries/types'\nimport { Transaction } from 'state/info/types'\nimport { infoClientWithChain } from 'utils/graphql'\n\n/**\n * Transactions for Transaction table on the Home page\n */\nconst GLOBAL_TRANSACTIONS = gql`\n query overviewTransactions {\n mints: mints(first: 33, orderBy: timestamp, orderDirection: desc) {\n id\n timestamp\n pair {\n token0 {\n id\n symbol\n }\n token1 {\n id\n symbol\n }\n }\n to\n sender\n amount0\n amount1\n amountUSD\n }\n swaps: swaps(first: 33, orderBy: timestamp, orderDirection: desc) {\n id\n timestamp\n pair {\n token0 {\n id\n symbol\n }\n token1 {\n id\n symbol\n }\n }\n from\n amount0In\n amount1In\n amount0Out\n amount1Out\n amountUSD\n }\n burns: burns(first: 33, orderBy: timestamp, orderDirection: desc) {\n id\n timestamp\n pair {\n token0 {\n id\n symbol\n }\n token1 {\n id\n symbol\n }\n }\n sender\n amount0\n amount1\n amountUSD\n }\n }\n`\ninterface TransactionResults {\n mints: MintResponse[]\n swaps: SwapResponse[]\n burns: BurnResponse[]\n}\n\nconst fetchTopTransactions = async (chainId: number, protocol: string): Promise => {\n try {\n const data = await infoClientWithChain(chainId, protocol).request(GLOBAL_TRANSACTIONS)\n\n if (!data) {\n return undefined\n }\n\n const mints = data.mints.map(mapMints)\n const burns = data.burns.map(mapBurns)\n const swaps = data.swaps.map(mapSwaps)\n\n return [...mints, ...burns, ...swaps].sort((a, b) => {\n return parseInt(b.timestamp, 10) - parseInt(a.timestamp, 10)\n })\n } catch {\n return undefined\n }\n}\n\nexport default fetchTopTransactions\n","import { PCS_V2_START } from 'config/constants/info'\nimport { gql } from 'graphql-request'\nimport { ChartEntry } from 'state/info/types'\nimport { infoClientWithChain } from 'utils/graphql'\nimport { fetchChartData, mapDayData } from '../helpers'\nimport { TokenDayDatasResponse } from '../types'\n\nconst getTokenChartData = async (chainId: number, protocol: string, skip: number, address: string): Promise<{ data?: ChartEntry[]; error: boolean }> => {\n try {\n const query = gql`\n query tokenDayDatas($startTime: Int!, $skip: Int!, $address: Bytes!) {\n tokenDayDatas(\n first: 1000\n skip: $skip\n where: { token: $address, date_gt: $startTime }\n orderBy: date\n orderDirection: asc\n ) {\n date\n dailyVolumeUSD\n totalLiquidityUSD\n }\n }\n `\n const { tokenDayDatas } = await infoClientWithChain(chainId, protocol).request(query, {\n startTime: PCS_V2_START,\n skip,\n address,\n })\n const data = tokenDayDatas.map(mapDayData)\n return { data, error: false }\n } catch (error) {\n console.error('Failed to fetch token chart data', error)\n return { error: true }\n }\n}\n\nconst fetchTokenChartData = async (chainId: number, protocol: string, address: string): Promise<{ data?: ChartEntry[]; error: boolean }> => {\n return fetchChartData(chainId, protocol, getTokenChartData, address)\n}\n\nexport default fetchTokenChartData\n","import { TOKEN_BLACKLIST } from 'config/constants/info'\nimport { gql } from 'graphql-request'\nimport { infoClientWithChain } from 'utils/graphql'\n\n/**\n * Data for showing Pools table on the Token page\n */\nconst POOLS_FOR_TOKEN = gql`\n query poolsForToken($address: Bytes!, $blacklist: [String!]) {\n asToken0: pairs(\n first: 15\n orderBy: trackedReservePLS\n orderDirection: desc\n where: { totalTransactions_gt: 1, token0: $address, token1_not_in: $blacklist }\n ) {\n id\n }\n asToken1: pairs(\n first: 15\n orderBy: trackedReservePLS\n orderDirection: desc\n where: { totalTransactions_gt: 1, token1: $address, token0_not_in: $blacklist }\n ) {\n id\n }\n }\n`\n\ninterface PoolsForTokenResponse {\n asToken0: {\n id: string\n }[]\n asToken1: {\n id: string\n }[]\n}\n\nconst fetchPoolsForToken = async (\n chainId: number,\n protocol: string,\n address: string,\n): Promise<{\n error: boolean\n addresses?: string[]\n}> => {\n try {\n const data = await infoClientWithChain(chainId, protocol).request(POOLS_FOR_TOKEN, {\n address,\n blacklist: TOKEN_BLACKLIST,\n })\n return {\n error: false,\n addresses: data.asToken0.concat(data.asToken1).map((p) => p.id),\n }\n } catch (error) {\n console.error(`Failed to fetch pools for token ${address}`, error)\n return {\n error: true,\n }\n }\n}\n\nexport default fetchPoolsForToken\n","import dayjs from 'dayjs'\nimport { gql } from 'graphql-request'\nimport { INFO_BY_CHAIN } from '@pulsex/chains'\nimport { getBlocksFromTimestamps } from 'utils/getBlocksFromTimestamps'\nimport { multiQuery } from 'pages/Info/utils/infoQueryHelpers'\nimport { PriceChartEntry } from 'state/info/types'\nimport orderBy from 'lodash/orderBy'\n\nconst getPriceSubqueries = (tokenAddress: string, blocks: any) =>\n blocks.map(\n (block: any) => `\n t${block.timestamp}:token(id:\"${tokenAddress}\", block: { number: ${block.number} }) { \n derivedPLS\n }\n b${block.timestamp}: bundle(id:\"1\", block: { number: ${block.number} }) { \n plsPrice\n }\n `,\n )\n\n/**\n * Price data for token and pls based on block number\n */\nconst priceQueryConstructor = (subqueries: string[]) => {\n return gql`\n query tokenPriceData {\n ${subqueries}\n }\n `\n}\n\nconst fetchTokenPriceData = async (\n chainId: number,\n protocol: string,\n address: string,\n interval: number,\n startTimestamp: number,\n): Promise<{\n data?: PriceChartEntry[]\n error: boolean\n}> => {\n // Construct timestamps to query against\n const endTimestamp = dayjs().unix()\n const timestamps = []\n let time = startTimestamp\n while (time <= endTimestamp) {\n timestamps.push(time)\n time += interval\n }\n try {\n const blocks = await getBlocksFromTimestamps(timestamps, 'asc', 500, chainId)\n if (!blocks || blocks.length === 0) {\n console.error('Error fetching blocks for timestamps', timestamps)\n return {\n error: false,\n }\n }\n\n const prices: any | undefined = await multiQuery(\n priceQueryConstructor,\n getPriceSubqueries(address, blocks),\n INFO_BY_CHAIN[chainId][protocol].url,\n 200,\n )\n\n if (!prices) {\n console.error('Price data failed to load')\n return {\n error: false,\n }\n }\n\n // format token PLS price results\n const tokenPrices: {\n timestamp: string\n derivedPLS: number\n priceUSD: number\n }[] = []\n\n // Get Token prices in PLS\n Object.keys(prices).forEach((priceKey) => {\n const timestamp = priceKey.split('t')[1]\n // if its PLS price e.g. `b123` split('t')[1] will be undefined and skip PLS price entry\n if (timestamp) {\n tokenPrices.push({\n timestamp,\n derivedPLS: prices[priceKey]?.derivedPLS ? parseFloat(prices[priceKey].derivedPLS) : 0,\n priceUSD: 0,\n })\n }\n })\n\n // Go through PLS USD prices and calculate Token price based on it\n Object.keys(prices).forEach((priceKey) => {\n const timestamp = priceKey.split('b')[1]\n // if its Token price e.g. `t123` split('b')[1] will be undefined and skip Token price entry\n if (timestamp) {\n const tokenPriceIndex = tokenPrices.findIndex((tokenPrice) => tokenPrice.timestamp === timestamp)\n if (tokenPriceIndex >= 0) {\n const { derivedPLS } = tokenPrices[tokenPriceIndex]\n tokenPrices[tokenPriceIndex].priceUSD = parseFloat(prices[priceKey]?.plsPrice ?? 0) * derivedPLS\n }\n }\n })\n\n // graphql-request does not guarantee same ordering of batched requests subqueries, hence sorting by timestamp from oldest to newest\n const sortedTokenPrices = orderBy(tokenPrices, (tokenPrice) => parseInt(tokenPrice.timestamp, 10))\n\n const formattedHistory = []\n\n // for each timestamp, construct the open and close price\n for (let i = 0; i < sortedTokenPrices.length - 1; i++) {\n formattedHistory.push({\n time: parseFloat(sortedTokenPrices[i].timestamp),\n open: sortedTokenPrices[i].priceUSD,\n close: sortedTokenPrices[i + 1].priceUSD,\n high: sortedTokenPrices[i + 1].priceUSD,\n low: sortedTokenPrices[i].priceUSD,\n })\n }\n\n return { data: formattedHistory, error: false }\n } catch (error) {\n console.error(`Failed to fetch price data for token ${address}`, error)\n return {\n error: true,\n }\n }\n}\n\nexport default fetchTokenPriceData\n","import { TOKEN_BLACKLIST } from 'config/constants/info'\nimport { gql } from 'graphql-request'\nimport { useEffect, useState } from 'react'\nimport { infoClientWithChain } from 'utils/graphql'\nimport { getDeltaTimestamps } from 'utils/getDeltaTimestamps'\n\ninterface TopTokensResponse {\n tokenDayDatas: {\n id: string\n }[]\n}\n\n/**\n * Tokens to display on Home page\n * The actual data is later requested in tokenData.ts\n * Note: dailyTxns_gt: 300 is there to prevent fetching incorrectly priced tokens with high dailyVolumeUSD\n */\nconst fetchTopTokens = async (chainId: number, protocol: string, timestamp24hAgo: number): Promise => {\n try {\n const query = gql`\n query topTokens($blacklist: [String!], $timestamp24hAgo: Int) {\n tokenDayDatas(\n first: 30\n where: { dailyTxns_gt: 300, id_not_in: $blacklist, date_gt: $timestamp24hAgo }\n orderBy: dailyVolumeUSD\n orderDirection: desc\n ) {\n id\n }\n }\n `\n const data = await infoClientWithChain(chainId, protocol).request(query, { blacklist: TOKEN_BLACKLIST, timestamp24hAgo })\n // tokenDayDatas id has compound id \"0xTOKENADDRESS-NUMBERS\", extracting token address with .split('-')\n return data.tokenDayDatas.map((t) => t.id.split('-')[0])\n } catch (error) {\n console.error('Failed to fetch top tokens', error)\n return []\n }\n}\n\n/**\n * Fetch top addresses by volume\n */\nconst useTopTokenAddresses = (chainId: number, protocol: string): string[] => {\n const [topTokenAddresses, setTopTokenAddresses] = useState([])\n const [timestamp24hAgo] = getDeltaTimestamps()\n\n useEffect(() => {\n const fetch = async () => {\n const addresses = await fetchTopTokens(chainId, protocol, timestamp24hAgo)\n if (addresses && addresses.length > 0) {\n setTopTokenAddresses(addresses)\n }\n }\n if (topTokenAddresses.length === 0) {\n fetch()\n }\n }, [chainId, topTokenAddresses, timestamp24hAgo, protocol])\n\n return topTokenAddresses\n}\n\nexport const fetchTokenAddresses = async (chainId: number, protocol: string) => {\n const [timestamp24hAgo] = getDeltaTimestamps()\n\n const addresses = await fetchTopTokens(chainId, protocol, timestamp24hAgo)\n\n return addresses\n}\n\nexport default useTopTokenAddresses\n","/* eslint-disable no-param-reassign */\nimport { gql } from 'graphql-request'\nimport { TokenData, Block } from 'state/info/types'\nimport { getChangeForPeriod } from 'utils/getChangeForPeriod'\nimport { getAmountChange, getPercentChange } from 'pages/Info/utils/infoDataHelpers'\nimport { infoClientWithChain } from 'utils/graphql'\nimport { fetchTokenAddresses } from './topTokens'\n\ninterface TokenFields {\n id: string\n symbol: string\n name: string\n derivedPLS: string // Price in PLS per token\n derivedUSD: string // Price in USD per token\n tradeVolumeUSD: string\n totalTransactions: string\n totalLiquidity: string\n}\n\ninterface FormattedTokenFields\n extends Omit {\n derivedPLS: number\n derivedUSD: number\n tradeVolumeUSD: number\n totalTransactions: number\n totalLiquidity: number\n}\n\ninterface TokenQueryResponse {\n data: TokenFields[]\n}\n\n/**\n * Main token data to display on Token page\n */\nconst TOKEN_AT_BLOCK = (block: number | undefined, tokens: string[]) => {\n const addressesString = `[\"${tokens.join('\",\"')}\"]`\n const blockString = block ? `block: {number: ${block}}` : ``\n return `tokens(\n where: {id_in: ${addressesString}}\n ${blockString}\n orderBy: tradeVolumeUSD\n orderDirection: desc\n ) {\n id\n symbol\n name\n derivedPLS\n derivedUSD\n tradeVolumeUSD\n totalTransactions\n totalLiquidity\n }\n `\n}\n\nconst fetchTokenData = async (\n chainId: number,\n protocol: string,\n block24h: number,\n block48h: number,\n block7d: number,\n block14d: number,\n tokenAddresses: string[],\n) => {\n try {\n const queries = [\n TOKEN_AT_BLOCK(null, tokenAddresses),\n TOKEN_AT_BLOCK(block24h, tokenAddresses),\n TOKEN_AT_BLOCK(block48h, tokenAddresses),\n TOKEN_AT_BLOCK(block7d, tokenAddresses),\n TOKEN_AT_BLOCK(block14d, tokenAddresses),\n ];\n\n const promises = queries.map((query) => {\n const gqlQuery = gql`\n query tokens {\n data: ${query}\n }\n `\n return infoClientWithChain(chainId, protocol).request(gqlQuery)\n })\n\n const results = await Promise.all(promises)\n\n return { data: results.map(result => result.data), error: false }\n } catch (error) {\n console.error('Failed to fetch token data', error)\n return { error: true }\n }\n}\n\n// Transforms tokens into \"0xADDRESS: { ...TokenFields }\" format and cast strings to numbers\nconst parseTokenData = (tokens?: TokenFields[]) => {\n if (!tokens) {\n return {}\n }\n return tokens.reduce((accum: { [address: string]: FormattedTokenFields }, tokenData) => {\n const { derivedPLS, derivedUSD, tradeVolumeUSD, totalTransactions, totalLiquidity } = tokenData\n accum[tokenData.id] = {\n ...tokenData,\n derivedPLS: parseFloat(derivedPLS),\n derivedUSD: parseFloat(derivedUSD),\n tradeVolumeUSD: parseFloat(tradeVolumeUSD),\n totalTransactions: parseFloat(totalTransactions),\n totalLiquidity: parseFloat(totalLiquidity),\n }\n return accum\n }, {})\n}\n\nexport const fetchAllTokenDataByAddresses = async (\n chainId: number,\n protocol: string,\n blocks: Block[],\n tokenAddresses: string[],\n) => {\n const [block24h, block48h, block7d, block14d] = blocks ?? []\n\n const fetchDataPromises = [\n fetchTokenData(chainId, protocol, block24h?.number, block48h?.number, block7d?.number, block14d?.number, tokenAddresses),\n ];\n\n const [data] = await Promise.all(fetchDataPromises);\n\n const parsed = parseTokenData(data?.data[0])\n const parsed24 = parseTokenData(data?.data[1])\n const parsed48 = parseTokenData(data?.data[2])\n const parsed7d = parseTokenData(data?.data[3])\n const parsed14d = parseTokenData(data?.data[4])\n\n // Calculate data and format\n const formatted = tokenAddresses.reduce((accum: { [address: string]: { data: TokenData } }, address) => {\n const current: FormattedTokenFields | undefined = parsed[address]\n const oneDay: FormattedTokenFields | undefined = parsed24[address]\n const twoDays: FormattedTokenFields | undefined = parsed48[address]\n const week: FormattedTokenFields | undefined = parsed7d[address]\n const twoWeeks: FormattedTokenFields | undefined = parsed14d[address]\n\n const [volumeUSD, volumeUSDChange] = getChangeForPeriod(\n current?.tradeVolumeUSD,\n oneDay?.tradeVolumeUSD,\n twoDays?.tradeVolumeUSD,\n )\n const [volumeUSDWeek] = getChangeForPeriod(current?.tradeVolumeUSD, week?.tradeVolumeUSD, twoWeeks?.tradeVolumeUSD)\n const liquidityUSD = current ? current.totalLiquidity * current.derivedUSD : 0\n const liquidityUSDOneDayAgo = oneDay ? oneDay.totalLiquidity * oneDay.derivedUSD : 0\n const liquidityUSDChange = getPercentChange(liquidityUSD, liquidityUSDOneDayAgo)\n const liquidityToken = current ? current.totalLiquidity : 0\n // Prices of tokens for now, 24h ago and 7d ago\n const priceUSD = current ? current.derivedUSD : 0\n const priceUSDOneDay = oneDay ? oneDay.derivedUSD : 0\n const priceUSDWeek = week ? week.derivedUSD : 0\n const priceUSDChange = getPercentChange(priceUSD, priceUSDOneDay)\n const priceUSDChangeWeek = getPercentChange(priceUSD, priceUSDWeek)\n const txCount = getAmountChange(current?.totalTransactions, oneDay?.totalTransactions)\n\n accum[address] = {\n data: {\n exists: !!current,\n address,\n name: current ? current.name : '',\n symbol: current ? current.symbol : '',\n volumeUSD,\n volumeUSDChange,\n volumeUSDWeek,\n txCount,\n liquidityUSD,\n liquidityUSDChange,\n liquidityToken,\n priceUSD,\n priceUSDChange,\n priceUSDChangeWeek,\n },\n }\n return accum\n }, {})\n\n return formatted\n}\n\nexport const fetchAllTokenData = async (chainId: number, protocol: string, blocks: Block[]) => {\n const tokenAddresses = await fetchTokenAddresses(chainId, protocol)\n const data = await fetchAllTokenDataByAddresses(chainId, protocol, blocks, tokenAddresses)\n return data\n}\n","import { gql } from 'graphql-request'\nimport { mapBurns, mapMints, mapSwaps } from 'state/info/queries/helpers'\nimport { BurnResponse, MintResponse, SwapResponse } from 'state/info/queries/types'\nimport { Transaction } from 'state/info/types'\nimport { infoClientWithChain } from 'utils/graphql'\n\n/**\n * Data to display transaction table on Token page\n */\nconst TOKEN_TRANSACTIONS = gql`\n query tokenTransactions($address: String!) {\n mintsAs0: mints(first: 10, orderBy: timestamp, orderDirection: desc, where: { token0: $address }) {\n id\n timestamp\n pair {\n token0 {\n id\n symbol\n }\n token1 {\n id\n symbol\n }\n }\n to\n sender\n amount0\n amount1\n amountUSD\n }\n mintsAs1: mints(first: 10, orderBy: timestamp, orderDirection: desc, where: { token1: $address }) {\n id\n timestamp\n pair {\n token0 {\n id\n symbol\n }\n token1 {\n id\n symbol\n }\n }\n to\n sender\n amount0\n amount1\n amountUSD\n }\n swapsAs0: swaps(first: 10, orderBy: timestamp, orderDirection: desc, where: { token0: $address }) {\n id\n timestamp\n pair {\n token0 {\n id\n symbol\n }\n token1 {\n id\n symbol\n }\n }\n from\n amount0In\n amount1In\n amount0Out\n amount1Out\n amountUSD\n }\n swapsAs1: swaps(first: 10, orderBy: timestamp, orderDirection: desc, where: { token1: $address }) {\n id\n timestamp\n pair {\n token0 {\n id\n symbol\n }\n token1 {\n id\n symbol\n }\n }\n from\n amount0In\n amount1In\n amount0Out\n amount1Out\n amountUSD\n }\n burnsAs0: burns(first: 10, orderBy: timestamp, orderDirection: desc, where: { token0: $address }) {\n id\n timestamp\n pair {\n token0 {\n id\n symbol\n }\n token1 {\n id\n symbol\n }\n }\n sender\n amount0\n amount1\n amountUSD\n }\n burnsAs1: burns(first: 10, orderBy: timestamp, orderDirection: desc, where: { token1: $address }) {\n id\n timestamp\n pair {\n token0 {\n id\n symbol\n }\n token1 {\n id\n symbol\n }\n }\n sender\n amount0\n amount1\n amountUSD\n }\n }\n`\n\ninterface TransactionResults {\n mintsAs0: MintResponse[]\n mintsAs1: MintResponse[]\n swapsAs0: SwapResponse[]\n swapsAs1: SwapResponse[]\n burnsAs0: BurnResponse[]\n burnsAs1: BurnResponse[]\n}\n\nconst fetchTokenTransactions = async (chainId: number, protocol: string, address: string): Promise<{ data?: Transaction[]; error: boolean }> => {\n try {\n const data = await infoClientWithChain(chainId, protocol).request(TOKEN_TRANSACTIONS, {\n address,\n })\n const mints0 = data.mintsAs0.map(mapMints)\n const mints1 = data.mintsAs1.map(mapMints)\n\n const burns0 = data.burnsAs0.map(mapBurns)\n const burns1 = data.burnsAs1.map(mapBurns)\n\n const swaps0 = data.swapsAs0.map(mapSwaps)\n const swaps1 = data.swapsAs1.map(mapSwaps)\n\n return { data: [...mints0, ...mints1, ...burns0, ...burns1, ...swaps0, ...swaps1], error: false }\n } catch (error) {\n console.error(`Failed to fetch transactions for token ${address}`, error)\n return {\n error: true,\n }\n }\n}\n\nexport default fetchTokenTransactions\n","import dayjs from 'dayjs'\nimport duration from 'dayjs/plugin/duration'\nimport { useMemo } from 'react'\n\nimport fetchPoolChartData from 'state/info/queries/pools/chartData'\nimport { fetchAllPoolData, fetchAllPoolDataWithAddress } from 'state/info/queries/pools/poolData'\nimport fetchPoolTransactions from 'state/info/queries/pools/transactions'\nimport { fetchGlobalChartData } from 'state/info/queries/protocol/chart'\nimport { fetchProtocolData } from 'state/info/queries/protocol/overview'\nimport fetchTopTransactions from 'state/info/queries/protocol/transactions'\nimport fetchTokenChartData from 'state/info/queries/tokens/chartData'\nimport fetchPoolsForToken from 'state/info/queries/tokens/poolsForToken'\nimport fetchTokenPriceData from 'state/info/queries/tokens/priceData'\nimport { fetchAllTokenData, fetchAllTokenDataByAddresses } from 'state/info/queries/tokens/tokenData'\nimport fetchTokenTransactions from 'state/info/queries/tokens/transactions'\nimport { Block, Transaction } from 'state/info/types'\nimport { useQuery } from '@tanstack/react-query'\nimport { getDeltaTimestamps } from 'utils/getDeltaTimestamps'\nimport { useBlockFromTimeStampQuery } from 'pages/Info/hooks/useBlocksFromTimestamps'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport { ChartEntry, PoolData, PriceChartEntry, ProtocolData, TokenData } from './types'\n\ndayjs.extend(duration)\n\n// Protocol hooks\n\nexport const refreshIntervalForInfo = 15000 // 15s\nexport const QUERY_SETTINGS_IMMUTABLE = {\n refetchOnReconnect: false,\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n}\nexport const QUERY_SETTINGS_WITHOUT_INTERVAL_REFETCH = {\n retry: 3,\n retryDelay: 3000,\n}\nexport const QUERY_SETTINGS_INTERVAL_REFETCH = {\n refetchInterval: refreshIntervalForInfo,\n keepPreviousData: true,\n ...QUERY_SETTINGS_WITHOUT_INTERVAL_REFETCH,\n}\n\nexport const useProtocolDataQuery = (protocol: string): ProtocolData | undefined => {\n const { chainId } = useActiveChainId()\n const [t24, t48] = getDeltaTimestamps()\n const { blocks } = useBlockFromTimeStampQuery([t24, t48])\n const [block24, block48] = blocks ?? []\n const { data: protocolData } = useQuery({\n queryKey: [`info/${protocol}/protocol/updateProtocolData`, chainId],\n queryFn: () => fetchProtocolData(chainId, protocol, block24, block48),\n enabled: Boolean(chainId && block24 && block48),\n ...QUERY_SETTINGS_IMMUTABLE,\n ...QUERY_SETTINGS_WITHOUT_INTERVAL_REFETCH,\n })\n return protocolData ?? undefined\n}\n\nexport const useProtocolChartDataQuery = (protocol: string): ChartEntry[] | undefined => {\n const { chainId } = useActiveChainId()\n const { data: chartData } = useQuery({\n queryKey: [`info/${protocol}/protocol/updateProtocolChartData`, chainId],\n queryFn: () => fetchGlobalChartData(chainId, protocol),\n ...QUERY_SETTINGS_IMMUTABLE,\n ...QUERY_SETTINGS_WITHOUT_INTERVAL_REFETCH,\n })\n return chartData ?? undefined\n}\n\nexport const useProtocolTransactionsQuery = (protocol: string): Transaction[] | undefined => {\n const { chainId } = useActiveChainId()\n const { data: transactions } = useQuery({\n queryKey: [`info/${protocol}/protocol/updateProtocolTransactionsData`, chainId],\n queryFn: () => fetchTopTransactions(chainId, protocol),\n ...QUERY_SETTINGS_IMMUTABLE,\n ...QUERY_SETTINGS_INTERVAL_REFETCH, // update latest Transactions per 15s\n })\n return transactions ?? undefined\n}\n\n// export const useFeeToMints = (): [\n// FeeToMintTransaction[] | undefined,\n// (transactions: FeeToMintTransaction[]) => void,\n// ] => {\n// const feeToMints: FeeToMintTransaction[] | undefined = useSelector(\n// (state: AppState) => state.info.protocol.feeToMints,\n// )\n// const dispatch = useDispatch()\n// const setFeeToMints: (feeToMints: FeeToMintTransaction[]) => void = useCallback(\n// (transactionsData: FeeToMintTransaction[]) => dispatch(updateFeeToMints({ feeToMints: transactionsData })),\n// [dispatch],\n// )\n// return [feeToMints, setFeeToMints]\n// }\n\n// Pools hooks\n\nexport const useAllPoolDataQuery = (protocol: string) => {\n const { chainId } = useActiveChainId()\n const [t24h, t48h, t7d, t14d] = getDeltaTimestamps()\n const { blocks } = useBlockFromTimeStampQuery([t24h, t48h, t7d, t14d])\n const { data } = useQuery({\n queryKey: [`info/${protocol}/pools/data`, chainId],\n queryFn: () => fetchAllPoolData(chainId, protocol, blocks),\n enabled: Boolean(blocks && chainId),\n ...QUERY_SETTINGS_IMMUTABLE,\n ...QUERY_SETTINGS_WITHOUT_INTERVAL_REFETCH,\n })\n return useMemo(() => {\n return data ?? {}\n }, [data])\n}\n\nexport const usePoolDatasQuery = (protocol: string, poolAddresses: string[]): PoolData[] => {\n const { chainId } = useActiveChainId()\n const name = poolAddresses.join('')\n const [t24h, t48h, t7d, t14d] = getDeltaTimestamps()\n const { blocks } = useBlockFromTimeStampQuery([t24h, t48h, t7d, t14d])\n const { data } = useQuery({\n queryKey: [`info/${protocol}/pool/data/${name}`, chainId],\n queryFn: () => fetchAllPoolDataWithAddress(chainId, protocol, blocks, poolAddresses),\n enabled: Boolean(blocks && chainId),\n ...QUERY_SETTINGS_IMMUTABLE,\n ...QUERY_SETTINGS_INTERVAL_REFETCH,\n })\n\n return useMemo(() => {\n return poolAddresses\n .map((address) => {\n return data?.[address]?.data\n })\n .filter((pool) => pool)\n }, [data, poolAddresses])\n}\n\nexport const usePoolChartDataQuery = (protocol: string, address: string): ChartEntry[] | undefined => {\n const { chainId } = useActiveChainId()\n const { data } = useQuery({\n queryKey: [`info/${protocol}/pool/chartData/${address}`, chainId],\n queryFn: () => fetchPoolChartData(chainId, protocol, address),\n ...QUERY_SETTINGS_IMMUTABLE,\n ...QUERY_SETTINGS_WITHOUT_INTERVAL_REFETCH,\n })\n return data?.data ?? undefined\n}\n\nexport const usePoolTransactionsQuery = (protocol: string, address: string): Transaction[] | undefined => {\n const { chainId } = useActiveChainId()\n const { data } = useQuery({\n queryKey: [`info/${protocol}/pool/transactionsData/${address}`, chainId],\n queryFn: () => fetchPoolTransactions(chainId, protocol, address),\n ...QUERY_SETTINGS_IMMUTABLE,\n ...QUERY_SETTINGS_WITHOUT_INTERVAL_REFETCH,\n })\n return data?.data ?? undefined\n}\n\n// Tokens hooks\n\nexport const useAllTokenHighLight = (protocol: string): TokenData[] => {\n const { chainId } = useActiveChainId()\n const [t24h, t48h, t7d, t14d] = getDeltaTimestamps()\n const { blocks } = useBlockFromTimeStampQuery([t24h, t48h, t7d, t14d])\n const { data, isLoading } = useQuery({\n queryKey: [`info/${protocol}/token/data`, chainId],\n queryFn: () => fetchAllTokenData(chainId, protocol, blocks),\n enabled: Boolean(blocks && chainId),\n ...QUERY_SETTINGS_IMMUTABLE,\n ...QUERY_SETTINGS_WITHOUT_INTERVAL_REFETCH,\n })\n\n const tokensWithData = useMemo(() => {\n return data\n ? Object.keys(data)\n .map((k) => {\n return data?.[k]?.data\n })\n .filter((d) => d && d.exists)\n : []\n }, [data])\n return useMemo(() => {\n return isLoading ? [] : tokensWithData ?? []\n }, [isLoading, tokensWithData])\n}\n\nexport const useAllTokenDataQuery = (protocol: string): {\n [address: string]: { data?: TokenData }\n} => {\n const { chainId } = useActiveChainId()\n const [t24h, t48h, t7d, t14d] = getDeltaTimestamps()\n const { blocks } = useBlockFromTimeStampQuery([t24h, t48h, t7d, t14d])\n const { data } = useQuery({\n queryKey: [`info/${protocol}/token/data`, chainId],\n queryFn: () => fetchAllTokenData(chainId, protocol, blocks),\n enabled: Boolean(blocks && chainId),\n ...QUERY_SETTINGS_IMMUTABLE,\n ...QUERY_SETTINGS_WITHOUT_INTERVAL_REFETCH,\n })\n return data ?? {}\n}\n\nconst graphPerPage = 50\n\nconst fetcher = (chainId: number, protocol: string, addresses: string[], blocks: Block[]) => {\n const times = Math.ceil(addresses.length / graphPerPage)\n const addressGroup = []\n for (let i = 0; i < times; i++) {\n addressGroup.push(addresses.slice(i * graphPerPage, (i + 1) * graphPerPage))\n }\n return Promise.all(addressGroup.map((d) => fetchAllTokenDataByAddresses(chainId, protocol, blocks, d)))\n}\n\nexport const useTokenDatasQuery = (protocol: string, addresses?: string[], withSettings = true): TokenData[] | undefined => {\n const { chainId } = useActiveChainId()\n const name = addresses.join('')\n const [t24h, t48h, t7d, t14d] = getDeltaTimestamps()\n const { blocks } = useBlockFromTimeStampQuery([t24h, t48h, t7d, t14d])\n const { data, isLoading } = useQuery({\n queryKey: [`info/${protocol}/token/data/${name}`, chainId],\n queryFn: () => fetcher(chainId, protocol, addresses, blocks),\n enabled: Boolean(blocks && chainId),\n ...QUERY_SETTINGS_IMMUTABLE,\n ...(withSettings ? QUERY_SETTINGS_INTERVAL_REFETCH : QUERY_SETTINGS_WITHOUT_INTERVAL_REFETCH),\n })\n const allData = useMemo(() => {\n return data && data.length > 0\n ? data.reduce((a, b) => {\n return { ...a, ...b }\n }, {})\n : {}\n }, [data])\n\n const tokensWithData = useMemo(() => {\n if (!addresses && allData) {\n return undefined\n }\n return addresses\n .map((a) => {\n return allData?.[a]?.data\n })\n .filter((d) => d && d.exists)\n }, [addresses, allData])\n\n return useMemo(() => {\n return isLoading ? [] : tokensWithData ?? undefined\n }, [isLoading, tokensWithData])\n}\n\nexport const useTokenDataQuery = (protocol: string, address: string | undefined): TokenData | undefined => {\n const allTokenData = useTokenDatasQuery(protocol, [address])\n return allTokenData.find((d) => d.address === address) ?? undefined\n}\n\nexport const usePoolsForTokenQuery = (protocol: string, address: string): string[] | undefined => {\n const { chainId } = useActiveChainId()\n const { data } = useQuery({\n queryKey: [`info/${protocol}/token/poolAddress/${address}`, chainId],\n queryFn: () => fetchPoolsForToken(chainId, protocol, address),\n ...QUERY_SETTINGS_IMMUTABLE,\n ...QUERY_SETTINGS_WITHOUT_INTERVAL_REFETCH,\n })\n\n return data?.addresses ?? undefined\n}\n\nexport const useTokenChartDataQuery = (protocol: string, address: string): ChartEntry[] | undefined => {\n const { chainId } = useActiveChainId()\n const { data } = useQuery({\n queryKey: [`info/${protocol}/token/chartData/${address}`, chainId],\n queryFn: () => fetchTokenChartData(chainId, protocol, address),\n enabled: Boolean(address && chainId),\n ...QUERY_SETTINGS_IMMUTABLE,\n ...QUERY_SETTINGS_INTERVAL_REFETCH,\n })\n\n return data?.data ?? undefined\n}\n\nexport const useTokenPriceDataQuery = (\n protocol: string,\n address: string,\n interval: number,\n timeWindow: duration.Duration,\n): PriceChartEntry[] | undefined => {\n const { chainId } = useActiveChainId()\n const startTimestamp = dayjs().subtract(timeWindow).startOf('hours').unix()\n const { data } = useQuery({\n queryKey: [`info/${protocol}/token/priceData/${address}`, chainId],\n queryFn: () => fetchTokenPriceData(chainId, protocol, address, interval, startTimestamp),\n ...QUERY_SETTINGS_IMMUTABLE,\n ...QUERY_SETTINGS_INTERVAL_REFETCH,\n })\n return data?.data ?? undefined\n}\n\nexport const useTokenTransactionsQuery = (protocol: string, address: string): Transaction[] | undefined => {\n const { chainId } = useActiveChainId()\n const { data } = useQuery({\n queryKey: [`info/${protocol}/token/transactionsData/${address}`, chainId],\n queryFn: () => fetchTokenTransactions(chainId, protocol, address),\n ...QUERY_SETTINGS_IMMUTABLE,\n ...QUERY_SETTINGS_INTERVAL_REFETCH,\n })\n return data?.data ?? undefined\n}\n","import styled from 'styled-components'\nimport { Text, Flex } from '@pulsex/uikit'\n\nexport const ClickableColumnHeader = styled(Text)`\n cursor: pointer;\n`\n\nexport const TableWrapper = styled(Flex)`\n width: 100%;\n padding-top: 16px;\n flex-direction: column;\n gap: 16px;\n background-color: ${({ theme }) => theme.card.background};\n border-radius: ${({ theme }) => theme.radii.card};\n border: 1px solid ${({ theme }) => theme.colors.cardBorder};\n`\n\nexport const PageButtons = styled.div`\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: 0.2em;\n margin-bottom: 1.2em;\n`\n\nexport const Arrow = styled.div`\n color: ${({ theme }) => theme.colors.primary};\n padding: 0 20px;\n :hover {\n cursor: pointer;\n }\n`\n\nexport const Break = styled.div`\n height: 1px;\n background-color: ${({ theme }) => theme.colors.cardBorder};\n width: 100%;\n`\n","import React, { useCallback, useState, useMemo, useEffect } from 'react'\nimport styled from 'styled-components'\nimport { Text, Flex, Box, Skeleton, ArrowBackIcon, ArrowForwardIcon } from '@pulsex/uikit'\nimport { Link } from 'react-router-dom'\nimport { formatAmount } from 'utils/formatInfoNumbers'\nimport { PoolData } from 'state/info/types'\nimport { ITEMS_PER_INFO_TABLE_PAGE } from 'config/constants/info'\nimport { DoubleCurrencyLogo } from 'pages/Info/components/CurrencyLogo'\nimport { useTranslation } from '@pulsex/localization'\nimport { ClickableColumnHeader, TableWrapper, PageButtons, Arrow, Break } from './shared'\n\n/**\n * Columns on different layouts\n * 5 = | # | Pool | TVL | Volume 24H | Volume 7D |\n * 4 = | # | Pool | | Volume 24H | Volume 7D |\n * 3 = | # | Pool | | Volume 24H | |\n * 2 = | | Pool | | Volume 24H | |\n */\nconst ResponsiveGrid = styled.div`\n display: grid;\n grid-gap: 1em;\n align-items: center;\n grid-template-columns: 20px 3.5fr repeat(5, 1fr);\n\n padding: 0 24px;\n @media screen and (max-width: 900px) {\n grid-template-columns: 20px 1.5fr repeat(3, 1fr);\n & :nth-child(4),\n & :nth-child(5) {\n display: none;\n }\n }\n @media screen and (max-width: 500px) {\n grid-template-columns: 20px 1.5fr repeat(1, 1fr);\n & :nth-child(4),\n & :nth-child(5),\n & :nth-child(6),\n & :nth-child(7) {\n display: none;\n }\n }\n @media screen and (max-width: 480px) {\n grid-template-columns: 2.5fr repeat(1, 1fr);\n > *:nth-child(1) {\n display: none;\n }\n }\n`\n\nconst LinkWrapper = styled(Link)`\n text-decoration: none;\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n`\n\nconst SORT_FIELD = {\n volumeUSD: 'volumeUSD',\n liquidityUSD: 'liquidityUSD',\n volumeUSDWeek: 'volumeUSDWeek',\n lpFees24h: 'lpFees24h',\n lpApr7d: 'lpApr7d',\n}\n\nconst LoadingRow: React.FC = () => (\n \n \n \n \n \n \n \n \n \n)\n\nconst TableLoader: React.FC = () => (\n <>\n \n \n \n \n)\n\nconst DataRow = ({ protocol, poolData, index }: { protocol: string; poolData: PoolData; index: number }) => {\n return (\n \n \n {index + 1}\n \n \n \n {poolData.token0.symbol}/{poolData.token1.symbol}\n \n \n ${formatAmount(poolData.volumeUSD)}\n ${formatAmount(poolData.volumeUSDWeek)}\n ${formatAmount(poolData.lpFees24h)}\n {formatAmount(poolData.lpApr7d)}%\n ${formatAmount(poolData.liquidityUSD)}\n \n \n )\n}\n\ninterface PoolTableProps {\n protocol: string\n poolDatas: PoolData[]\n loading?: boolean // If true shows indication that SOME pools are loading, but the ones already fetched will be shown\n}\n\nconst PoolTable: React.FC = ({ protocol, poolDatas, loading }) => {\n // for sorting\n const [sortField, setSortField] = useState(SORT_FIELD.volumeUSD)\n const [sortDirection, setSortDirection] = useState(true)\n const { t } = useTranslation()\n\n // pagination\n const [page, setPage] = useState(1)\n const [maxPage, setMaxPage] = useState(1)\n useEffect(() => {\n let extraPages = 1\n if (poolDatas.length % ITEMS_PER_INFO_TABLE_PAGE === 0) {\n extraPages = 0\n }\n setMaxPage(Math.floor(poolDatas.length / ITEMS_PER_INFO_TABLE_PAGE) + extraPages)\n }, [poolDatas])\n\n const sortedPools = useMemo(() => {\n return poolDatas\n ? poolDatas\n .sort((a, b) => {\n if (a && b) {\n return a[sortField as keyof PoolData] > b[sortField as keyof PoolData]\n ? (sortDirection ? -1 : 1) * 1\n : (sortDirection ? -1 : 1) * -1\n }\n return -1\n })\n .slice(ITEMS_PER_INFO_TABLE_PAGE * (page - 1), page * ITEMS_PER_INFO_TABLE_PAGE)\n : []\n }, [page, poolDatas, sortDirection, sortField])\n\n const handleSort = useCallback(\n (newField: string) => {\n setSortField(newField)\n setSortDirection(sortField !== newField ? true : !sortDirection)\n },\n [sortDirection, sortField],\n )\n\n const arrow = useCallback(\n (field: string) => {\n const directionArrow = !sortDirection ? '↑' : '↓'\n return sortField === field ? directionArrow : ''\n },\n [sortDirection, sortField],\n )\n\n return (\n \n \n \n #\n \n \n {t('Pool')}\n \n handleSort(SORT_FIELD.volumeUSD)}\n textTransform=\"uppercase\"\n >\n {t('Volume 24H')} {arrow(SORT_FIELD.volumeUSD)}\n \n handleSort(SORT_FIELD.volumeUSDWeek)}\n textTransform=\"uppercase\"\n >\n {t('Volume 7D')} {arrow(SORT_FIELD.volumeUSDWeek)}\n \n handleSort(SORT_FIELD.lpFees24h)}\n textTransform=\"uppercase\"\n >\n {t('LP reward fees 24H')} {arrow(SORT_FIELD.lpFees24h)}\n \n handleSort(SORT_FIELD.lpApr7d)}\n textTransform=\"uppercase\"\n >\n {t('LP reward APR')} {arrow(SORT_FIELD.lpApr7d)}\n \n handleSort(SORT_FIELD.liquidityUSD)}\n textTransform=\"uppercase\"\n >\n {t('Liquidity')} {arrow(SORT_FIELD.liquidityUSD)}\n \n \n \n {sortedPools.length > 0 ? (\n <>\n {sortedPools.map((poolData, i) => {\n if (poolData) {\n return (\n \n \n \n \n )\n }\n return null\n })}\n {loading && }\n \n {\n setPage(page === 1 ? page : page - 1)\n }}\n >\n \n \n\n {t('Page %page% of %maxPage%', { page, maxPage })}\n\n {\n setPage(page === maxPage ? page : page + 1)\n }}\n >\n \n \n \n \n ) : (\n <>\n \n {/* spacer */}\n \n \n )}\n \n )\n}\n\nexport default PoolTable\n","// TODO PCS refactor ternaries\n/* eslint-disable no-nested-ternary */\nimport React, { useCallback, useState, useMemo, useEffect } from 'react'\nimport styled from 'styled-components'\nimport dayjs from 'dayjs'\nimport relativeTime from 'dayjs/plugin/relativeTime'\nimport {\n ArrowBackIcon,\n ArrowForwardIcon,\n Box,\n Flex,\n LinkExternal,\n Radio,\n Skeleton,\n Text,\n} from '@pulsex/uikit'\nimport { formatAmount } from 'utils/formatInfoNumbers'\nimport { getBlockExplorerLink } from 'utils'\nimport truncateHash from 'utils/truncateHash'\nimport { Transaction, TransactionType } from 'state/info/types'\nimport { ITEMS_PER_INFO_TABLE_PAGE } from 'config/constants/info'\nimport { useTranslation } from '@pulsex/localization'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport { ClickableColumnHeader, TableWrapper, PageButtons, Arrow, Break } from './shared'\n\ndayjs.extend(relativeTime)\n\nconst Wrapper = styled.div`\n width: 100%;\n`\n\nconst ResponsiveGrid = styled.div`\n display: grid;\n grid-gap: 1em;\n align-items: center;\n grid-template-columns: 2fr 0.8fr repeat(4, 1fr);\n padding: 0 24px;\n @media screen and (max-width: 940px) {\n grid-template-columns: 2fr repeat(4, 1fr);\n & > *:nth-child(5) {\n display: none;\n }\n }\n @media screen and (max-width: 800px) {\n grid-template-columns: 2fr repeat(2, 1fr);\n & > *:nth-child(5) {\n display: none;\n }\n & > *:nth-child(3) {\n display: none;\n }\n & > *:nth-child(4) {\n display: none;\n }\n }\n @media screen and (max-width: 500px) {\n grid-template-columns: 2fr 1fr;\n & > *:nth-child(5) {\n display: none;\n }\n & > *:nth-child(3) {\n display: none;\n }\n & > *:nth-child(4) {\n display: none;\n }\n & > *:nth-child(2) {\n display: none;\n }\n }\n`\n\nconst RadioGroup = styled(Flex)`\n align-items: center;\n margin-right: 16px;\n margin-top: 8px;\n cursor: pointer;\n`\n\nconst SORT_FIELD = {\n amountUSD: 'amountUSD',\n timestamp: 'timestamp',\n sender: 'sender',\n amountToken0: 'amountToken0',\n amountToken1: 'amountToken1',\n}\n\nconst TableLoader: React.FC = () => {\n const loadingRow = (\n \n \n \n \n \n \n \n \n )\n return (\n <>\n {loadingRow}\n {loadingRow}\n {loadingRow}\n \n )\n}\n\nconst DataRow: React.FC<{ transaction: Transaction }> = ({ transaction }) => {\n const { chainId } = useActiveChainId()\n const { t } = useTranslation()\n const abs0 = Math.abs(transaction.amountToken0)\n const abs1 = Math.abs(transaction.amountToken1)\n const outputTokenSymbol = transaction.amountToken0 < 0 ? transaction.token0Symbol : transaction.token1Symbol\n const inputTokenSymbol = transaction.amountToken1 < 0 ? transaction.token0Symbol : transaction.token1Symbol\n\n return (\n \n \n \n {transaction.type === TransactionType.MINT\n ? t('Add %token0% and %token1%', { token0: transaction.token0Symbol, token1: transaction.token1Symbol })\n : transaction.type === TransactionType.SWAP\n ? t('Swap %token0% for %token1%', { token0: inputTokenSymbol, token1: outputTokenSymbol })\n : t('Remove %token0% and %token1%', { token0: transaction.token0Symbol, token1: transaction.token1Symbol })}\n \n \n ${formatAmount(transaction.amountUSD)}\n \n {`${formatAmount(abs0)} ${transaction.token0Symbol}`}\n \n \n {`${formatAmount(abs1)} ${transaction.token1Symbol}`}\n \n \n {truncateHash(transaction.sender)}\n \n {dayjs.unix(parseInt(transaction.timestamp, 10)).toNow(true)}\n \n )\n}\n\nconst TransactionTable: React.FC<{\n transactions: Transaction[]\n}> = ({ transactions }) => {\n const [sortField, setSortField] = useState(SORT_FIELD.timestamp)\n const [sortDirection, setSortDirection] = useState(true)\n\n const { t } = useTranslation()\n\n const [page, setPage] = useState(1)\n const [maxPage, setMaxPage] = useState(1)\n\n const [txFilter, setTxFilter] = useState(undefined)\n\n const sortedTransactions = useMemo(() => {\n const toBeAbsList = [SORT_FIELD.amountToken0, SORT_FIELD.amountToken1]\n return transactions\n ? transactions\n .slice()\n .sort((a, b) => {\n if (a && b) {\n const firstField = a[sortField as keyof Transaction]\n const secondField = b[sortField as keyof Transaction]\n const [first, second] = toBeAbsList.includes(sortField)\n ? [Math.abs(firstField as number), Math.abs(secondField as number)]\n : [firstField, secondField]\n return first > second ? (sortDirection ? -1 : 1) * 1 : (sortDirection ? -1 : 1) * -1\n }\n return -1\n })\n .filter((x) => {\n return txFilter === undefined || x.type === txFilter\n })\n .slice(ITEMS_PER_INFO_TABLE_PAGE * (page - 1), page * ITEMS_PER_INFO_TABLE_PAGE)\n : []\n }, [transactions, page, sortField, sortDirection, txFilter])\n\n // Update maxPage based on amount of items & applied filtering\n useEffect(() => {\n if (transactions) {\n const filteredTransactions = transactions.filter((tx) => {\n return txFilter === undefined || tx.type === txFilter\n })\n if (filteredTransactions.length % ITEMS_PER_INFO_TABLE_PAGE === 0) {\n setMaxPage(Math.floor(filteredTransactions.length / ITEMS_PER_INFO_TABLE_PAGE))\n } else {\n setMaxPage(Math.floor(filteredTransactions.length / ITEMS_PER_INFO_TABLE_PAGE) + 1)\n }\n }\n }, [transactions, txFilter])\n\n const handleFilter = useCallback(\n (newFilter: TransactionType) => {\n if (newFilter !== txFilter) {\n setTxFilter(newFilter)\n setPage(1)\n }\n },\n [txFilter],\n )\n\n const handleSort = useCallback(\n (newField: string) => {\n setSortField(newField)\n setSortDirection(sortField !== newField ? true : !sortDirection)\n },\n [sortDirection, sortField],\n )\n\n const arrow = useCallback(\n (field: string) => {\n const directionArrow = !sortDirection ? '↑' : '↓'\n return sortField === field ? directionArrow : ''\n },\n [sortDirection, sortField],\n )\n\n return (\n \n \n \n handleFilter(undefined)}>\n null} scale=\"sm\" checked={txFilter === undefined} />\n {t('All')}\n \n\n handleFilter(TransactionType.SWAP)}>\n null} scale=\"sm\" checked={txFilter === TransactionType.SWAP} />\n {t('Swaps')}\n \n \n\n \n handleFilter(TransactionType.MINT)}>\n null} scale=\"sm\" checked={txFilter === TransactionType.MINT} />\n {t('Adds')}\n \n\n handleFilter(TransactionType.BURN)}>\n null} scale=\"sm\" checked={txFilter === TransactionType.BURN} />\n {t('Removes')}\n \n \n \n \n \n \n {t('Action')}\n \n handleSort(SORT_FIELD.amountUSD)}\n textTransform=\"uppercase\"\n >\n {t('Total Value')} {arrow(SORT_FIELD.amountUSD)}\n \n handleSort(SORT_FIELD.amountToken0)}\n textTransform=\"uppercase\"\n >\n {t('Token Amount')} {arrow(SORT_FIELD.amountToken0)}\n \n handleSort(SORT_FIELD.amountToken1)}\n textTransform=\"uppercase\"\n >\n {t('Token Amount')} {arrow(SORT_FIELD.amountToken1)}\n \n handleSort(SORT_FIELD.sender)}\n textTransform=\"uppercase\"\n >\n {t('Account')} {arrow(SORT_FIELD.sender)}\n \n handleSort(SORT_FIELD.timestamp)}\n textTransform=\"uppercase\"\n >\n {t('Time')} {arrow(SORT_FIELD.timestamp)}\n \n \n \n\n {transactions ? (\n <>\n {sortedTransactions.map((transaction, index) => {\n if (transaction) {\n return (\n // eslint-disable-next-line react/no-array-index-key\n \n \n \n \n )\n }\n return null\n })}\n {sortedTransactions.length === 0 ? (\n \n {t('No Transactions')}\n \n ) : undefined}\n \n {\n setPage(page === 1 ? page : page - 1)\n }}\n >\n \n \n\n {t('Page %page% of %maxPage%', { page, maxPage })}\n {\n setPage(page === maxPage ? page : page + 1)\n }}\n >\n \n \n \n \n ) : (\n <>\n \n {/* spacer */}\n \n \n )}\n \n \n )\n}\n\nexport default TransactionTable\n","import { ChainId } from '@pulsex/chains'\nimport { enumValues } from '@pulsex/utils/enumValues'\nimport { useAtom } from 'jotai'\nimport { atomWithStorage } from 'jotai/utils'\n\ntype TokenAndPoolList = Record>\n\nconst createDefaultTokenAndPoolList = () => {\n const listV1 = {} as TokenAndPoolList\n const listV2 = {} as TokenAndPoolList\n for (const chainId of enumValues(ChainId)) {\n listV1[chainId] = {\n pools: [],\n tokens: [],\n }\n }\n for (const chainId of enumValues(ChainId)) {\n listV2[chainId] = {\n pools: [],\n tokens: [],\n }\n }\n return { listV1, listV2 }\n}\n\nconst { listV1: defaultTokenAndPoolListV1, listV2: defaultTokenAndPoolListV2 } = createDefaultTokenAndPoolList()\n\nconst tokensAtomV1 = atomWithStorage('pcs:infoSavedTOkensAndPoolsV1', defaultTokenAndPoolListV1)\nconst tokensAtomV2 = atomWithStorage('pcs:infoSavedTOkensAndPoolsV2', defaultTokenAndPoolListV2)\n\nconst useInfoUserSavedTokensAndPools = (chainId: ChainId) => {\n\n // V1\n const [listsV1, setListsV1] = useAtom(tokensAtomV1)\n\n const addTokenV1 = (newToken: string) => {\n setListsV1({\n ...listsV1,\n [chainId]: {\n ...listsV1[chainId],\n tokens: [newToken, ...listsV1[chainId].tokens],\n },\n })\n }\n\n const removeTokenV1 = (token: string) => {\n setListsV1(() => ({\n ...listsV1,\n [chainId]: {\n ...listsV1[chainId],\n tokens: listsV1[chainId].tokens.filter((t) => t !== token),\n },\n }))\n }\n\n const addPoolV1 = (newPool: string) => {\n setListsV1({\n ...listsV1,\n [chainId]: {\n ...listsV1[chainId],\n pools: [newPool, ...listsV1[chainId].pools],\n },\n })\n }\n\n const removePoolV1 = (pool: string) => {\n setListsV1(() => ({\n ...listsV1,\n [chainId]: {\n ...listsV1[chainId],\n pools: listsV1[chainId].pools.filter((p) => p !== pool),\n },\n }))\n }\n\n // V2\n const [listsV2, setListsV2] = useAtom(tokensAtomV2)\n\n const addTokenV2 = (newToken: string) => {\n setListsV2({\n ...listsV2,\n [chainId]: {\n ...listsV2[chainId],\n tokens: [newToken, ...listsV2[chainId].tokens],\n },\n })\n }\n\n const removeTokenV2 = (token: string) => {\n setListsV2(() => ({\n ...listsV2,\n [chainId]: {\n ...listsV2[chainId],\n tokens: listsV2[chainId].tokens.filter((t) => t !== token),\n },\n }))\n }\n\n const addPoolV2 = (newPool: string) => {\n setListsV2({\n ...listsV2,\n [chainId]: {\n ...listsV2[chainId],\n pools: [newPool, ...listsV2[chainId].pools],\n },\n })\n }\n\n const removePoolV2 = (pool: string) => {\n setListsV2(() => ({\n ...listsV2,\n [chainId]: {\n ...listsV2[chainId],\n pools: listsV2[chainId].pools.filter((p) => p !== pool),\n },\n }))\n }\n\n return {\n v1: {\n savedTokens: listsV1[chainId]?.tokens ?? [],\n addToken: addTokenV1,\n removeToken: removeTokenV1,\n savedPools: listsV1[chainId]?.pools ?? [],\n addPool: addPoolV1,\n removePool: removePoolV1,\n },\n v2: {\n savedTokens: listsV2[chainId]?.tokens ?? [],\n addToken: addTokenV2,\n removeToken: removeTokenV2,\n savedPools: listsV2[chainId]?.pools ?? [],\n addPool: addPoolV2,\n removePool: removePoolV2,\n }\n }\n}\n\nexport default useInfoUserSavedTokensAndPools\n","import { Svg, SvgProps } from '@pulsex/uikit'\n\nconst LineChartLoaderSVG: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default LineChartLoaderSVG\n","import { Svg, SvgProps } from '@pulsex/uikit'\n\nconst BarChartLoaderSVG: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default BarChartLoaderSVG\n","import { Svg, SvgProps } from '@pulsex/uikit'\n\nconst CandleChartLoaderSVG: React.FC = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default CandleChartLoaderSVG\n","import { styled } from 'styled-components'\nimport { Box, Text } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport LineChartLoaderSVG from './LineChartLoaderSVG'\nimport BarChartLoaderSVG from './BarChartLoaderSVG'\nimport CandleChartLoaderSVG from './CandleChartLoaderSVG'\n\nconst LoadingText = styled(Box)`\n position: absolute;\n margin-left: auto;\n margin-right: auto;\n top: 50%;\n left: 0;\n right: 0;\n text-align: center;\n`\n\nconst LoadingIndicator = styled(Box)`\n height: 100%;\n position: relative;\n`\n\nexport const BarChartLoader: React.FC = () => {\n const { t } = useTranslation()\n return (\n \n \n \n \n {t('Loading chart data...')}\n \n \n \n )\n}\n\nexport const LineChartLoader: React.FC = () => {\n const { t } = useTranslation()\n return (\n \n \n \n \n {t('Loading chart data...')}\n \n \n \n )\n}\n\nexport const CandleChartLoader: React.FC = () => {\n const { t } = useTranslation()\n return (\n \n \n \n \n {t('Loading chart data...')}\n \n \n \n )\n}\n","import { useCallback, useMemo } from 'react'\nimport { useTranslation } from '@pulsex/localization'\n\nexport const useChartCallbacks = (setHoverValue, setHoverDate) => {\n const {\n currentLanguage: { locale },\n } = useTranslation()\n\n const onMouseLeave = useCallback(() => {\n setHoverDate(undefined)\n setHoverValue(undefined)\n }, [setHoverDate, setHoverValue])\n\n const onMouseMove = useCallback(\n (state) => {\n if (state.isTooltipActive) {\n setHoverValue(state.activePayload[0].payload.value)\n setHoverDate(\n state.activePayload[0].payload.time.toLocaleString(locale, {\n year: 'numeric',\n day: 'numeric',\n month: 'short',\n }),\n )\n }\n },\n [locale, setHoverDate, setHoverValue],\n )\n\n return useMemo(() => ({ onMouseLeave, onMouseMove }), [onMouseLeave, onMouseMove])\n}\n","import { Dispatch, SetStateAction } from 'react'\nimport { ResponsiveContainer, XAxis, YAxis, Tooltip, AreaChart, Area } from 'recharts'\nimport useTheme from 'hooks/useTheme'\nimport { formatAmount } from 'utils/formatInfoNumbers'\nimport { LineChartLoader } from 'components/ChartLoaders'\nimport { useChartCallbacks } from '../../../hooks/useChartCallbacks'\n\nexport type LineChartProps = {\n data: any[]\n setHoverValue: Dispatch> // used for value on hover\n setHoverDate: Dispatch> // used for label of value\n} & React.HTMLAttributes\n\n/**\n * Note: remember that it needs to be mounted inside the container with fixed height\n */\nconst LineChart = ({ data, setHoverValue, setHoverDate }: LineChartProps) => {\n const { theme } = useTheme()\n const { onMouseLeave, onMouseMove } = useChartCallbacks(setHoverValue, setHoverDate)\n if (!data || data.length === 0) {\n return \n }\n return (\n \n \n \n \n \n \n \n \n time.toLocaleDateString(undefined, { day: '2-digit' })}\n minTickGap={30}\n />\n `$${formatAmount(val)}`}\n orientation=\"right\"\n tick={{ dx: 10, fill: theme.colors.textSubtle }}\n />\n \n \n \n \n )\n}\n\nexport default LineChart\n","import { Dispatch, SetStateAction } from 'react'\nimport { BarChart, ResponsiveContainer, XAxis, YAxis, Tooltip, Bar } from 'recharts'\nimport useTheme from 'hooks/useTheme'\nimport { formatAmount } from 'utils/formatInfoNumbers'\nimport { BarChartLoader } from 'components/ChartLoaders'\nimport { useChartCallbacks } from '../../../hooks/useChartCallbacks'\n\nexport type LineChartProps = {\n data: any[]\n height?: string\n chartHeight?: string\n setHoverValue: Dispatch> // used for value on hover\n setHoverDate: Dispatch> // used for label of value\n} & React.HTMLAttributes\n\nconst CustomBar = ({\n x,\n y,\n width,\n height,\n fill,\n}: {\n x: number\n y: number\n width: number\n height: number\n fill: string\n}) => {\n return (\n \n \n \n )\n}\n\nconst Chart = ({ data, setHoverValue, setHoverDate }: LineChartProps) => {\n const { theme } = useTheme()\n const { onMouseLeave, onMouseMove } = useChartCallbacks(setHoverValue, setHoverDate)\n if (!data || data.length === 0) {\n return \n }\n return (\n \n \n time.toLocaleDateString(undefined, { day: '2-digit' })}\n minTickGap={30}\n />\n `$${formatAmount(val)}`}\n orientation=\"right\"\n tick={{ dx: 10, fill: theme.colors.textSubtle }}\n />\n \n (\n \n )}\n />\n \n \n )\n}\n\nexport default Chart\n","import { Flex } from '@pulsex/uikit'\nimport { styled } from 'styled-components'\n\nconst Wrapper = styled(Flex)`\n overflow-x: scroll;\n padding: 0;\n border-radius: 10px 10px 0 0;\n &::-webkit-scrollbar {\n display: none;\n }\n scrollbar-width: none; /* Firefox */\n`\n\nconst Inner = styled(Flex)`\n justify-content: space-between;\n background-color: ${({ theme }) => theme.colors.input};\n width: 100%;\n`\n\ninterface TabProps {\n isActive?: boolean\n onClick?: () => void\n}\n\nexport const TabToggle = styled(\"button\").withConfig({\n shouldForwardProp: (props) => ![\"isActive\"].includes(props),\n})`\n display: inline-flex;\n justify-content: center;\n cursor: pointer;\n flex: 1;\n border: 0;\n outline: 0;\n padding: 16px;\n margin: 0;\n border-radius: 10px 10px 0 0;\n font-size: 16px;\n font-weight: 600;\n color: ${({ theme, isActive }) => (isActive ? theme.colors.text : theme.colors.textSubtle)};\n background-color: ${({ theme, isActive }) => (isActive ? theme.card.background : theme.colors.input)};\n`\n\ninterface TabToggleGroupProps {\n children: React.ReactElement[]\n}\n\nexport const TabToggleGroup: React.FC = ({ children }) => {\n return (\n \n {children}\n \n )\n}\n","import { useRef, useState, useEffect, useCallback, Dispatch, SetStateAction } from 'react'\nimport { useTranslation } from '@pulsex/localization'\nimport { ColorType, createChart, IChartApi } from 'lightweight-charts'\nimport dayjs from 'dayjs'\nimport { useTheme } from '@pulsex/hooks'\nimport { CandleChartLoader } from 'components/ChartLoaders'\nimport { baseColors, lightColors, darkColors } from '@pulsex/uikit'\n\nconst CANDLE_CHART_HEIGHT = 250\n\nexport type LineChartProps = {\n data: any[]\n setValue?: Dispatch> // used for value on hover\n setLabel?: Dispatch> // used for value label on hover\n} & React.HTMLAttributes\n\nconst CandleChart = ({ data, setValue, setLabel, ...rest }: LineChartProps) => {\n const { theme } = useTheme()\n const {\n currentLanguage: { locale },\n } = useTranslation()\n const chartRef = useRef(null)\n const [chartCreated, setChart] = useState()\n\n const handleResize = useCallback(() => {\n if (chartCreated && chartRef?.current?.parentElement) {\n chartCreated.resize(chartRef.current.parentElement.clientWidth - 32, CANDLE_CHART_HEIGHT)\n chartCreated.timeScale().fitContent()\n chartCreated.timeScale().scrollToPosition(0, false)\n }\n }, [chartCreated, chartRef])\n\n // add event listener for resize\n const isClient = typeof window === 'object'\n useEffect(() => {\n if (!isClient) {\n return null\n }\n window.addEventListener('resize', handleResize)\n return () => window.removeEventListener('resize', handleResize)\n }, [isClient, chartRef, handleResize]) // Empty array ensures that effect is only run on mount and unmount\n\n // if chart not instantiated in canvas, create it\n useEffect(() => {\n if (!chartCreated && data && !!chartRef?.current?.parentElement) {\n const chart = createChart(chartRef.current, {\n height: CANDLE_CHART_HEIGHT,\n width: chartRef.current.parentElement.clientWidth - 32,\n layout: {\n background: {\n type: ColorType.Solid,\n color: 'transparent',\n },\n textColor: theme.colors.textSubtle,\n fontFamily: 'Roboto, sans-serif',\n fontSize: 12,\n },\n rightPriceScale: {\n scaleMargins: {\n top: 0.1,\n bottom: 0.1,\n },\n borderVisible: false,\n },\n timeScale: {\n borderVisible: false,\n secondsVisible: true,\n tickMarkFormatter: (unixTime: number) => {\n return dayjs.unix(unixTime).format('MM/DD h:mm a')\n },\n },\n watermark: {\n visible: false,\n },\n grid: {\n horzLines: {\n visible: false,\n },\n vertLines: {\n visible: false,\n },\n },\n crosshair: {\n horzLine: {\n visible: false,\n labelVisible: false,\n },\n mode: 1,\n vertLine: {\n visible: true,\n labelVisible: false,\n style: 3,\n width: 1,\n color: theme.colors.textSubtle,\n labelBackgroundColor: theme.colors.primary,\n },\n },\n })\n\n chart.timeScale().fitContent()\n setChart(chart)\n }\n }, [chartCreated, data, setValue, theme])\n\n useEffect(() => {\n if (chartCreated && data) {\n const series = chartCreated.addCandlestickSeries({\n upColor: baseColors.success,\n downColor: baseColors.failure,\n borderDownColor: baseColors.failure,\n borderUpColor: baseColors.success,\n wickDownColor: baseColors.failure,\n wickUpColor: baseColors.success,\n })\n\n series.setData(data)\n\n chartCreated.applyOptions({\n layout: {\n textColor: theme.isDark ? darkColors.textSubtle : lightColors.textSubtle,\n },\n })\n\n // update the title when hovering on the chart\n chartCreated.subscribeCrosshairMove((param) => {\n if (\n chartRef?.current &&\n (param === undefined ||\n param.time === undefined ||\n (param && param.point && param.point.x < 0) ||\n (param && param.point && param.point.x > chartRef.current.clientWidth) ||\n (param && param.point && param.point.y < 0) ||\n (param && param.point && param.point.y > CANDLE_CHART_HEIGHT))\n ) {\n // reset values\n if (setValue) setValue(undefined)\n if (setLabel) setLabel(undefined)\n } else if (series && param) {\n const timestamp = param.time as number\n const now = new Date(timestamp * 1000)\n const time = `${now.toLocaleString(locale, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n timeZone: 'UTC',\n })} (UTC)`\n const parsed = param.seriesData.get(series) as { open: number } | undefined\n if (setValue) setValue(parsed?.open)\n if (setLabel) setLabel(time)\n }\n })\n }\n }, [locale, chartCreated, data, setValue, setLabel, theme])\n\n return (\n <>\n {!chartCreated && }\n
    \n \n )\n}\n\nexport default CandleChart\n","import { useMemo, useState } from 'react'\nimport { Text, Box, Card, Flex, Skeleton } from '@pulsex/uikit'\nimport LineChart from 'pages/Info/components/InfoCharts/LineChart'\nimport BarChart from 'pages/Info/components/InfoCharts/BarChart'\nimport { TabToggleGroup, TabToggle } from 'components/TabToggle'\nimport { useTranslation } from '@pulsex/localization'\nimport { formatAmount } from 'utils/formatInfoNumbers'\nimport { ChartEntry, TokenData, PriceChartEntry } from 'state/info/types'\nimport dayjs from 'dayjs'\nimport CandleChart from '../CandleChart'\n\nenum ChartView {\n LIQUIDITY,\n VOLUME,\n PRICE,\n}\n\ninterface ChartCardProps {\n variant: 'pool' | 'token'\n chartData: ChartEntry[]\n tokenData?: TokenData\n tokenPriceData?: PriceChartEntry[]\n}\n\nconst ChartCard: React.FC> = ({\n variant,\n chartData,\n tokenData,\n tokenPriceData,\n}) => {\n const [view, setView] = useState(ChartView.VOLUME)\n const [hoverValue, setHoverValue] = useState()\n const [hoverDate, setHoverDate] = useState()\n const {\n t,\n currentLanguage: { locale },\n } = useTranslation()\n\n const currentDate = new Date().toLocaleString(locale, { month: 'short', year: 'numeric', day: 'numeric' })\n\n const formattedTvlData = useMemo(() => {\n if (chartData) {\n return chartData.map((day) => {\n return {\n time: dayjs.unix(day.date).toDate(),\n value: day.liquidityUSD,\n }\n })\n }\n return []\n }, [chartData])\n const formattedVolumeData = useMemo(() => {\n if (chartData) {\n return chartData.map((day) => {\n return {\n time: dayjs.unix(day.date).toDate(),\n value: day.volumeUSD,\n }\n })\n }\n return []\n }, [chartData])\n\n const getLatestValueDisplay = () => {\n let valueToDisplay = null\n if (hoverValue) {\n valueToDisplay = formatAmount(hoverValue)\n } else if (view === ChartView.VOLUME && formattedVolumeData.length > 0) {\n valueToDisplay = formatAmount(formattedVolumeData[formattedVolumeData.length - 1]?.value)\n } else if (view === ChartView.LIQUIDITY && formattedTvlData.length > 0) {\n valueToDisplay = formatAmount(formattedTvlData[formattedTvlData.length - 1]?.value)\n } else if ((view === ChartView.PRICE && tokenData?.priceUSD) || tokenData?.priceUSD === 0) {\n valueToDisplay = formatAmount(tokenData.priceUSD, { notation: 'standard' })\n }\n\n return valueToDisplay ? (\n \n ${valueToDisplay}\n \n ) : (\n \n )\n }\n\n return (\n \n \n setView(ChartView.VOLUME)}>\n {t('Volume')}\n \n setView(ChartView.LIQUIDITY)}>\n {t('Liquidity')}\n \n {variant === 'token' && (\n setView(ChartView.PRICE)}>\n {t('Price')}\n \n )}\n \n\n \n {getLatestValueDisplay()}\n \n {hoverDate || currentDate}\n \n \n\n \n {view === ChartView.LIQUIDITY ? (\n \n ) : view === ChartView.VOLUME ? (\n \n ) : view === ChartView.PRICE ? (\n \n ) : null}\n \n \n )\n}\n\nexport default ChartCard\n","/* eslint-disable no-nested-ternary */\nimport { useMemo } from 'react'\nimport dayjs from 'dayjs'\nimport duration from 'dayjs/plugin/duration'\nimport styled from 'styled-components'\nimport {\n Box,\n Breadcrumbs,\n Button,\n Card,\n Flex,\n Heading,\n LinkExternal,\n Spinner2,\n Text,\n useMatchBreakpoints,\n} from '@pulsex/uikit'\nimport Page from 'components/Layout/Page'\nimport { getBlockExplorerLink, getBlockExploreName } from 'utils'\nimport truncateHash from 'utils/truncateHash'\nimport { CurrencyLogo } from 'pages/Info/components/CurrencyLogo'\nimport { formatAmount } from 'utils/formatInfoNumbers'\nimport Percent from 'pages/Info/components/Percent'\nimport SaveIcon from 'pages/Info/components/SaveIcon'\nimport {\n usePoolDatasQuery,\n usePoolsForTokenQuery,\n useTokenChartDataQuery,\n useTokenDataQuery,\n useTokenPriceDataQuery,\n useTokenTransactionsQuery,\n} from 'state/info/hooks'\nimport PoolTable from 'pages/Info/components/InfoTables/PoolsTable'\nimport TransactionTable from 'pages/Info/components/InfoTables/TransactionsTable'\nimport useInfoUserSavedTokensAndPools from 'hooks/useInfoUserSavedTokensAndPoolsList'\nimport { ONE_HOUR_SECONDS } from 'config/constants/info'\nimport { useTranslation } from '@pulsex/localization'\nimport ChartCard from 'pages/Info/components/InfoCharts/ChartCard'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport { Link, useParams } from 'react-router-dom'\n\ndayjs.extend(duration)\n\nconst ContentLayout = styled.div`\n margin-top: 16px;\n display: grid;\n grid-template-columns: 260px 1fr;\n grid-gap: 1em;\n @media screen and (max-width: 800px) {\n grid-template-columns: 1fr;\n grid-template-rows: 1fr 1fr;\n }\n`\n\nconst DEFAULT_TIME_WINDOW = dayjs.duration(1, 'weeks')\n\nconst TokenPage: React.FC> = ({ protocol }) => {\n const { routeAddress = '' } = useParams()\n const { isXs, isSm } = useMatchBreakpoints()\n const { t } = useTranslation()\n const { chainId } = useActiveChainId()\n\n // In case somebody pastes checksummed address into url (since GraphQL expects lowercase address)\n const address = routeAddress.toLowerCase()\n const tokenData = useTokenDataQuery(protocol, address)\n const poolsForToken = usePoolsForTokenQuery(protocol, address)\n const poolDatas = usePoolDatasQuery(protocol, useMemo(() => poolsForToken ?? [], [poolsForToken]))\n \n const transactions = useTokenTransactionsQuery(protocol, address)\n const chartData = useTokenChartDataQuery(protocol, address)\n\n // pricing data\n const priceData = useTokenPriceDataQuery(protocol, address, ONE_HOUR_SECONDS, DEFAULT_TIME_WINDOW)\n const adjustedPriceData = useMemo(() => {\n // Include latest available price\n if (priceData && tokenData && priceData.length > 0) {\n return [\n ...priceData,\n {\n time: Date.now() / 1000,\n open: priceData[priceData.length - 1].close,\n close: tokenData?.priceUSD,\n high: tokenData?.priceUSD,\n low: priceData[priceData.length - 1].close,\n },\n ]\n }\n return undefined\n }, [priceData, tokenData])\n\n const { v1, v2 } = useInfoUserSavedTokensAndPools(chainId)\n const { savedTokens, addToken } = protocol === 'v1' ? v1 : v2\n\n return (\n \n {tokenData ? (\n !tokenData.exists ? (\n \n \n \n {t('No pool has been created with this token yet. Create one')}\n \n {t('here.')}\n \n \n \n \n ) : (\n <>\n {/* Stuff on top */}\n \n \n \n {t('Info')}\n \n \n {t('Tokens')}\n \n \n {tokenData.symbol}\n {`(${truncateHash(address)})`}\n \n \n \n \n {t(`View on ${getBlockExploreName(chainId)}`)}\n \n addToken(address)} />\n \n \n \n \n \n \n \n {tokenData.name}\n \n \n ({tokenData.symbol})\n \n \n \n \n ${formatAmount(tokenData.priceUSD, { notation: 'standard' })}\n \n \n \n \n \n \n \n \n \n \n \n \n \n\n {/* data on the right side of chart */}\n \n \n \n \n {t('Liquidity')}\n \n \n ${formatAmount(tokenData.liquidityUSD)}\n \n \n\n \n {t('Volume 24H')}\n \n \n ${formatAmount(tokenData.volumeUSD)}\n \n \n\n \n {t('Volume 7D')}\n \n \n ${formatAmount(tokenData.volumeUSDWeek)}\n \n\n \n {t('Transactions 24H')}\n \n \n {formatAmount(tokenData.txCount, { isInteger: true })}\n \n \n \n {/* charts card */}\n \n \n\n {/* pools and transaction tables */}\n \n {t('Pools')}\n \n\n \n\n \n {t('Transactions')}\n \n\n \n \n )\n ) : (\n \n \n \n )}\n \n )\n}\n\nexport default TokenPage\n","import React, { useState, useMemo, useCallback, useEffect } from 'react'\nimport styled from 'styled-components'\nimport { Text, Flex, Box, Skeleton, useMatchBreakpoints, ArrowBackIcon, ArrowForwardIcon } from '@pulsex/uikit'\nimport { Link } from 'react-router-dom'\nimport { TokenData } from 'state/info/types'\nimport { CurrencyLogo } from 'pages/Info/components/CurrencyLogo'\nimport { formatAmount } from 'utils/formatInfoNumbers'\nimport Percent from 'pages/Info/components/Percent'\nimport { useTranslation } from '@pulsex/localization'\nimport orderBy from 'lodash/orderBy'\nimport { ClickableColumnHeader, TableWrapper, PageButtons, Arrow, Break } from './shared'\n\n/**\n * Columns on different layouts\n * 6 = | # | Name | Price | Price Change | Volume 24H | TVL |\n * 5 = | # | Name | Price | | Volume 24H | TVL |\n * 4 = | # | Name | Price | | Volume 24H | |\n * 2 = | | Name | | | Volume 24H | |\n * On smallest screen Name is reduced to just symbol\n */\nconst ResponsiveGrid = styled.div`\n display: grid;\n grid-gap: 1em;\n align-items: center;\n\n padding: 0 24px;\n\n grid-template-columns: 20px 3fr repeat(4, 1fr);\n\n @media screen and (max-width: 900px) {\n grid-template-columns: 20px 2fr repeat(3, 1fr);\n & :nth-child(4) {\n display: none;\n }\n }\n\n @media screen and (max-width: 800px) {\n grid-template-columns: 20px 2fr repeat(2, 1fr);\n & :nth-child(6) {\n display: none;\n }\n }\n\n @media screen and (max-width: 670px) {\n grid-template-columns: 1fr 1fr;\n > *:first-child {\n display: none;\n }\n > *:nth-child(3) {\n display: none;\n }\n }\n`\n\nconst LinkWrapper = styled(Link)`\n text-decoration: none;\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n`\n\nconst ResponsiveLogo = styled(CurrencyLogo)`\n @media screen and (max-width: 670px) {\n width: 16px;\n height: 16px;\n }\n`\n\nconst LoadingRow: React.FC = () => (\n \n \n \n \n \n \n \n \n)\n\nconst TableLoader: React.FC = () => (\n <>\n \n \n \n \n)\n\nconst DataRow: React.FC<{ protocol: string; tokenData: TokenData; index: number }> = ({ protocol, tokenData, index }) => {\n const { isXs, isSm } = useMatchBreakpoints()\n return (\n \n \n \n {index + 1}\n \n \n \n {(isXs || isSm) && {tokenData.symbol}}\n {!isXs && !isSm && (\n \n {tokenData.name}\n ({tokenData.symbol})\n \n )}\n \n ${formatAmount(tokenData.priceUSD, { notation: 'standard' })}\n \n \n \n ${formatAmount(tokenData.volumeUSD)}\n ${formatAmount(tokenData.liquidityUSD)}\n \n \n )\n}\n\nconst SORT_FIELD = {\n name: 'name',\n volumeUSD: 'volumeUSD',\n liquidityUSD: 'liquidityUSD',\n priceUSD: 'priceUSD',\n priceUSDChange: 'priceUSDChange',\n priceUSDChangeWeek: 'priceUSDChangeWeek',\n}\n\nconst MAX_ITEMS = 10\n\nconst TokenTable: React.FC<{\n protocol: string\n tokenDatas: TokenData[] | undefined\n maxItems?: number\n}> = ({ protocol, tokenDatas, maxItems = MAX_ITEMS }) => {\n const [sortField, setSortField] = useState(SORT_FIELD.volumeUSD)\n const [sortDirection, setSortDirection] = useState(true)\n\n const { t } = useTranslation()\n\n const [page, setPage] = useState(1)\n const [maxPage, setMaxPage] = useState(1)\n useEffect(() => {\n let extraPages = 1\n if (tokenDatas) {\n if (tokenDatas.length % maxItems === 0) {\n extraPages = 0\n }\n setMaxPage(Math.floor(tokenDatas.length / maxItems) + extraPages)\n }\n }, [maxItems, tokenDatas])\n\n const sortedTokens = useMemo(() => {\n return tokenDatas\n ? orderBy(\n tokenDatas,\n (tokenData) => tokenData[sortField as keyof TokenData],\n sortDirection ? 'desc' : 'asc',\n ).slice(maxItems * (page - 1), page * maxItems)\n : []\n }, [tokenDatas, maxItems, page, sortDirection, sortField])\n\n const handleSort = useCallback(\n (newField: string) => {\n setSortField(newField)\n setSortDirection(sortField !== newField ? true : !sortDirection)\n },\n [sortDirection, sortField],\n )\n\n const arrow = useCallback(\n (field: string) => {\n const directionArrow = !sortDirection ? '↑' : '↓'\n return sortField === field ? directionArrow : ''\n },\n [sortDirection, sortField],\n )\n\n if (!tokenDatas) {\n return \n }\n\n return (\n \n \n \n #\n \n handleSort(SORT_FIELD.name)}\n textTransform=\"uppercase\"\n >\n {t('Name')} {arrow(SORT_FIELD.name)}\n \n handleSort(SORT_FIELD.priceUSD)}\n textTransform=\"uppercase\"\n >\n {t('Price')} {arrow(SORT_FIELD.priceUSD)}\n \n handleSort(SORT_FIELD.priceUSDChange)}\n textTransform=\"uppercase\"\n >\n {t('Price Change')} {arrow(SORT_FIELD.priceUSDChange)}\n \n handleSort(SORT_FIELD.volumeUSD)}\n textTransform=\"uppercase\"\n >\n {t('Volume 24H')} {arrow(SORT_FIELD.volumeUSD)}\n \n handleSort(SORT_FIELD.liquidityUSD)}\n textTransform=\"uppercase\"\n >\n {t('Liquidity')} {arrow(SORT_FIELD.liquidityUSD)}\n \n \n \n {sortedTokens.length > 0 ? (\n <>\n {sortedTokens.map((data, i) => {\n if (data) {\n return (\n \n \n \n \n )\n }\n return null\n })}\n \n {\n setPage(page === 1 ? page : page - 1)\n }}\n >\n \n \n {t('Page %page% of %maxPage%', { page, maxPage })}\n {\n setPage(page === maxPage ? page : page + 1)\n }}\n >\n \n \n \n \n ) : (\n <>\n \n \n \n )}\n \n )\n}\n\nexport default TokenTable\n","import { useMemo, useRef, useEffect } from 'react'\nimport styled from 'styled-components'\nimport { Text, Flex, Box, Card } from '@pulsex/uikit'\nimport { Link } from 'react-router-dom'\nimport { useAllTokenDataQuery } from 'state/info/hooks'\nimport { TokenData } from 'state/info/types'\nimport { CurrencyLogo } from 'pages/Info/components/CurrencyLogo'\nimport { formatAmount } from 'utils/formatInfoNumbers'\nimport Percent from 'pages/Info/components/Percent'\nimport { useTranslation } from '@pulsex/localization'\n\nconst CardWrapper = styled(Link)`\n display: inline-block;\n min-width: 190px;\n margin-left: 16px;\n &:hover {\n cursor: pointer;\n opacity: 0.6;\n }\n`\n\nconst TopMoverCard = styled(Box)`\n border: 1px solid ${({ theme }) => theme.colors.cardBorder};\n border-radius: ${({ theme }) => theme.radii.card};\n padding: 16px;\n`\n\nexport const ScrollableRow = styled.div`\n width: 100%;\n overflow-x: auto;\n padding: 16px 0;\n white-space: nowrap;\n &::-webkit-scrollbar {\n display: none;\n }\n`\n\nconst DataCard = ({ tokenData }: { tokenData: TokenData }) => {\n return (\n \n \n \n \n {/* wrapped in a box because of alignment issues between img and svg */}\n \n \n \n {tokenData.symbol}\n \n \n ${formatAmount(tokenData.priceUSD)}\n \n \n \n \n \n \n \n )\n}\n\nconst TopTokenMovers: React.FC<{ protocol: string }> = ({ protocol }) => {\n const allTokens = useAllTokenDataQuery(protocol)\n const { t } = useTranslation()\n\n const topPriceIncrease = useMemo(() => {\n return Object.values(allTokens)\n .sort(({ data: a }, { data: b }) => {\n // eslint-disable-next-line no-nested-ternary\n return a && b ? (Math.abs(a?.priceUSDChange) > Math.abs(b?.priceUSDChange) ? -1 : 1) : -1\n })\n .slice(0, Math.min(20, Object.values(allTokens).length))\n }, [allTokens])\n\n const increaseRef = useRef(null)\n const moveLeftRef = useRef(true)\n\n useEffect(() => {\n const scrollInterval = setInterval(() => {\n if (increaseRef.current) {\n if (increaseRef.current.scrollLeft === increaseRef.current.scrollWidth - increaseRef.current.clientWidth) {\n moveLeftRef.current = false\n } else if (increaseRef.current.scrollLeft === 0) {\n moveLeftRef.current = true\n }\n increaseRef.current.scrollTo(\n moveLeftRef.current ? increaseRef.current.scrollLeft + 1 : increaseRef.current.scrollLeft - 1,\n 0,\n )\n }\n }, 30)\n\n return () => {\n clearInterval(scrollInterval)\n }\n }, [])\n\n if (topPriceIncrease.length === 0 || !topPriceIncrease.some((entry) => entry.data)) {\n return null\n }\n\n return (\n \n \n {t('Top Movers')}\n \n \n {topPriceIncrease.map((entry) =>\n entry.data ? : null,\n )}\n \n \n )\n}\n\nexport default TopTokenMovers\n","import { useMemo } from 'react'\nimport { Card, Heading, Text } from '@pulsex/uikit'\nimport Page from 'components/Layout/Page'\nimport { useTranslation } from '@pulsex/localization'\nimport { useAllTokenDataQuery, useTokenDatasQuery } from 'state/info/hooks'\nimport useInfoUserSavedTokensAndPools from 'hooks/useInfoUserSavedTokensAndPoolsList'\nimport TokenTable from 'pages/Info/components/InfoTables/TokensTable'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport TopTokenMovers from 'pages/Info/components/TopTokenMovers'\n\nconst TokensOverview: React.FC<{ protocol: string }> = ({ protocol }) => {\n const { t } = useTranslation()\n const { chainId } = useActiveChainId()\n\n const allTokens = useAllTokenDataQuery(protocol)\n const { v1, v2 } = useInfoUserSavedTokensAndPools(chainId)\n const { savedTokens } = protocol === 'v1' ? v1 : v2\n\n const formattedTokens = useMemo(() => {\n return Object.values(allTokens)\n .map((token) => token.data)\n .filter((token) => token)\n }, [allTokens])\n\n const watchListTokens = useTokenDatasQuery(protocol, savedTokens)\n\n return (\n \n \n {t('Your Watchlist')}\n \n {savedTokens.length > 0 ? (\n \n ) : (\n \n \n {t('Saved tokens will appear here')}\n \n \n )}\n \n \n {t('All Tokens')}\n \n \n \n )\n}\n\nexport default TokensOverview\n","import dayjs from 'dayjs'\nimport { useMemo } from 'react'\nimport { useAllPoolDataQuery } from 'state/info/hooks'\n\nexport const usePoolsData = (protocol: string) => {\n\n // get all the pool datas that exist\n const allPoolData = useAllPoolDataQuery(protocol)\n\n // get all the pool datas that exist\n const poolsData = useMemo(() => {\n return Object.values(allPoolData)\n .map((pool) => {\n return {\n ...pool.data,\n }\n })\n .filter((pool) => pool.token1.name !== 'unknown' && pool.token0.name !== 'unknown')\n }, [allPoolData])\n return { poolsData }\n}\n\nexport const useNonSpamPoolsData = (protocol: string) => {\n const { poolsData: rawPoolsData, ...others } = usePoolsData(protocol)\n // top 10 pair need create at least 4 days\n const poolsData = useMemo(\n () =>\n rawPoolsData.reduce((acc, data) => {\n if (acc.length > 10) {\n acc.push(data)\n return acc\n }\n\n const maySpam = dayjs().diff(dayjs.unix(data.timestamp), 'day') < 4\n\n // top 10 should not show may spam tokens,\n if (maySpam) return acc\n\n // after top 10 will not filtered\n acc.push(data)\n return acc\n }, [] as typeof rawPoolsData),\n [rawPoolsData],\n )\n\n return {\n poolsData,\n ...others,\n }\n}\n","import { Text, Heading, Card } from '@pulsex/uikit'\nimport Page from 'components/Layout/Page'\nimport PoolTable from 'pages/Info/components/InfoTables/PoolsTable'\nimport useInfoUserSavedTokensAndPools from 'hooks/useInfoUserSavedTokensAndPoolsList'\nimport { useTranslation } from '@pulsex/localization'\nimport { usePoolDatasQuery } from 'state/info/hooks'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport { useNonSpamPoolsData } from '../hooks/usePoolsData'\n\nconst PoolsOverview: React.FC<{ protocol: string }> = ({ protocol }) => {\n const { t } = useTranslation()\n const { chainId } = useActiveChainId()\n const { poolsData } = useNonSpamPoolsData(protocol)\n\n const { v1, v2 } = useInfoUserSavedTokensAndPools(chainId)\n const { savedPools } = protocol === 'v1' ? v1 : v2\n const watchlistPools = usePoolDatasQuery(protocol, savedPools)\n\n return (\n \n \n {t('Your Watchlist')}\n \n \n {watchlistPools.length > 0 ? (\n \n ) : (\n \n {t('Saved pools will appear here')}\n \n )}\n \n \n {t('All Pools')}\n \n \n \n )\n}\n\nexport default PoolsOverview\n","/* eslint-disable no-nested-ternary */\nimport {\n Box,\n Breadcrumbs,\n Button,\n ButtonMenu,\n ButtonMenuItem,\n Card,\n Flex,\n Heading,\n HelpIcon,\n LinkExternal,\n Spinner2,\n Text,\n useMatchBreakpoints,\n useTooltip,\n} from '@pulsex/uikit'\nimport Page from 'components/Layout/Page'\nimport { useTranslation } from '@pulsex/localization'\nimport { useState, useMemo } from 'react'\nimport {\n usePoolChartDataQuery,\n usePoolDatasQuery,\n usePoolTransactionsQuery,\n} from 'state/info/hooks'\nimport useInfoUserSavedTokensAndPools from 'hooks/useInfoUserSavedTokensAndPoolsList'\nimport styled from 'styled-components'\nimport { getBlockExplorerLink, getBlockExploreName } from 'utils'\nimport { CurrencyLogo, DoubleCurrencyLogo } from 'pages/Info/components/CurrencyLogo'\nimport ChartCard from 'pages/Info/components/InfoCharts/ChartCard'\nimport TransactionTable from 'pages/Info/components/InfoTables/TransactionsTable'\nimport Percent from 'pages/Info/components/Percent'\nimport SaveIcon from 'pages/Info/components/SaveIcon'\nimport { formatAmount } from 'utils/formatInfoNumbers'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport { Link, useParams } from 'react-router-dom'\n\nconst ContentLayout = styled.div`\n display: grid;\n grid-template-columns: 300px 1fr;\n grid-gap: 1em;\n margin-top: 16px;\n @media screen and (max-width: 800px) {\n grid-template-columns: 1fr;\n grid-template-rows: 1fr 1fr;\n }\n`\n\nconst TokenButton = styled(Flex)`\n padding: 8px 0px;\n margin-right: 16px;\n :hover {\n cursor: pointer;\n opacity: 0.6;\n }\n`\n\nconst LockedTokensContainer = styled(Flex)`\n border: 1px solid ${({ theme }) => theme.colors.cardBorder};\n background-color: ${({ theme }) => theme.colors.background};\n padding: 16px;\n flex-direction: column;\n gap: 8px;\n margin-top: 8px;\n border-radius: 10px;\n max-width: 280px;\n`\n\nconst PoolPage: React.FC<{ protocol: string }> = ({ protocol }) => {\n const { routeAddress = '' } = useParams()\n const { isXs, isSm } = useMatchBreakpoints()\n const { t } = useTranslation()\n const { chainId } = useActiveChainId()\n const [showWeeklyData, setShowWeeklyData] = useState(0)\n const { tooltip, tooltipVisible, targetRef } = useTooltip(\n t(`Based on last 7 days' performance. Does not account for impermanent loss`),\n {},\n )\n\n // In case somebody pastes checksummed address into url (since GraphQL expects lowercase address)\n const address = routeAddress.toLowerCase()\n\n const poolData = usePoolDatasQuery(protocol, useMemo(() => [address], [address]))[0]\n const chartData = usePoolChartDataQuery(protocol, address)\n const transactions = usePoolTransactionsQuery(protocol, address)\n\n const { v1, v2 } = useInfoUserSavedTokensAndPools(chainId)\n const { savedPools, addPool } = protocol === 'v1' ? v1 : v2\n\n const hasSmallDifference = useMemo(() => {\n return poolData ? Math.abs(poolData.token1Price - poolData.token0Price) < 1 : false\n }, [poolData])\n\n return (\n \n {poolData ? (\n <>\n \n \n \n {t('Info')}\n \n \n {t('Pools')}\n \n \n {`${poolData.token0.symbol} / ${poolData.token1.symbol}`}\n \n \n \n \n {t(`View on ${getBlockExploreName(chainId)}`)}\n \n addPool(address)} />\n \n \n \n \n \n {`${poolData.token0.symbol} / ${poolData.token1.symbol}`}\n \n \n \n \n \n \n \n {`1 ${poolData.token0.symbol} = ${formatAmount(poolData.token1Price, {\n notation: 'standard',\n displayThreshold: 0.001,\n tokenPrecision: hasSmallDifference ? 'enhanced' : 'normal',\n })} ${poolData.token1.symbol}`}\n \n \n \n \n \n \n \n {`1 ${poolData.token1.symbol} = ${formatAmount(poolData.token0Price, {\n notation: 'standard',\n displayThreshold: 0.001,\n tokenPrecision: hasSmallDifference ? 'enhanced' : 'normal',\n })} ${poolData.token0.symbol}`}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {t('Liquidity')}\n \n \n ${formatAmount(poolData.liquidityUSD)}\n \n \n \n \n \n {t('LP reward APR')}\n \n \n {formatAmount(poolData.lpApr7d)}%\n \n \n \n \n \n \n {t('7D performance')}\n \n {tooltipVisible && tooltip}\n \n \n \n \n {t('Total Tokens Locked')}\n \n \n \n \n \n \n {poolData.token0.symbol}\n \n \n {formatAmount(poolData.liquidityToken0)}\n \n \n \n \n \n {poolData.token1.symbol}\n \n \n {formatAmount(poolData.liquidityToken1)}\n \n \n \n \n \n \n setShowWeeklyData(index)}\n scale=\"sm\"\n variant=\"subtle\"\n >\n {t('24H')}\n {t('7D')}\n \n \n \n \n {showWeeklyData ? t('Volume 7D') : t('Volume 24H')}\n \n \n ${showWeeklyData ? formatAmount(poolData.volumeUSDWeek) : formatAmount(poolData.volumeUSD)}\n \n \n \n \n \n {showWeeklyData ? t('LP reward fees 7D') : t('LP reward fees 24H')}\n \n \n ${showWeeklyData ? formatAmount(poolData.lpFees7d) : formatAmount(poolData.lpFees24h)}\n \n \n {t('out of $%totalFees% total fees', {\n totalFees: showWeeklyData\n ? formatAmount(poolData.totalFees7d)\n : formatAmount(poolData.totalFees24h),\n })}\n \n \n \n \n \n \n \n \n \n {t('Transactions')}\n \n \n \n ) : (\n \n \n \n )}\n \n )\n}\n\nexport default PoolPage\n","import React, { useMemo } from 'react'\nimport { styled } from 'styled-components'\nimport { Text, Flex, Box, CloseIcon, IconButton, useMatchBreakpoints } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\n\nconst Container = styled(Flex)`\n overflow: hidden;\n height: 100%;\n padding: 12px;\n align-items: center;\n background: linear-gradient(0deg, rgba(39, 38, 44, 0.4), rgba(39, 38, 44, 0.4)),\n linear-gradient(45deg, #fd000dfc 20%, #dc16e6ff 40%, #3944ffff 60%, #00e4fffa 100%);\n ${({ theme }) => theme.mediaQueries.md} {\n padding: 0px;\n background: linear-gradient(45deg, #fd000dfc 20%, #dc16e6ff 40%, #3944ffff 60%, #00e4fffa 100%);\n }\n`\n\nconst InnerContainer = styled(Flex)`\n width: 100%;\n height: 100%;\n justify-content: center;\n align-items: center;\n`\n\nconst SpeechBubble = styled.div`\n background: rgba(39, 38, 44, 0.4);\n border-radius: 16px;\n padding: 8px;\n\n height: 80%;\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n\n & ${Text} {\n flex-shrink: 0;\n margin-right: 4px;\n }\n`\n\ninterface TestnetWarningBanner {\n setShowWarning: React.Dispatch>\n}\n\nconst TestnetWarningBanner: React.FC = ({ setShowWarning }) => {\n const { t } = useTranslation()\n const { isMobile, isMd } = useMatchBreakpoints()\n const warningTextAsParts = useMemo(() => {\n const warningText = t(\"please note that this is a testnet and the dollar cost values displayed on the site are for testing purposes only. Assets on the testnet do not hold any real value.\")\n return warningText.split(/(\\/\\/)/g)\n }, [t])\n const warningTextComponent = (\n <>\n \n {t('TESTNET: ')}\n \n {warningTextAsParts.map((text, i) => (\n \n {text}\n \n ))}\n \n )\n return (\n \n {isMobile || isMd ? (\n <>\n {warningTextComponent}\n setShowWarning(false)} variant=\"text\">\n \n \n \n ) : (\n <>\n \n {warningTextComponent}\n \n setShowWarning(false)} variant=\"text\">\n \n \n \n )}\n \n )\n}\n\nexport default TestnetWarningBanner\n","import {\n MenuItemsType,\n DropdownMenuItemType,\n SwapIcon,\n EarnIcon,\n MoreIcon,\n DropdownMenuItems,\n} from '@pulsex/uikit'\nimport { ContextApi } from '@pulsex/localization'\n\nexport type ConfigMenuDropDownItemsType = DropdownMenuItems & { hideSubNav?: boolean }\nexport type ConfigMenuItemsType = Omit & { hideSubNav?: boolean } & {\n items?: ConfigMenuDropDownItemsType[]\n}\n\nconst config: (t: ContextApi['t']) => ConfigMenuItemsType[] = (t) => [\n {\n label: t('Trade'),\n icon: SwapIcon,\n href: '/',\n showItemsOnMobile: false,\n items: [\n {\n label: t('Exchange'),\n href: '/',\n },\n // {\n // label: t('Limit Orders'),\n // href: '/limit-orders',\n // },\n {\n label: t('Liquidity'),\n href: '/liquidity',\n },\n ],\n },\n {\n label: t('Earn'),\n href: '/farms',\n icon: EarnIcon,\n items: [\n {\n label: t('Farms'),\n href: '/farms',\n },\n {\n label: t('Pools'),\n href: '/pools',\n },\n ],\n },\n {\n label: '',\n href: '/info',\n icon: MoreIcon,\n hideSubNav: true,\n items: [\n {\n label: t('Burn'),\n href: '/burn',\n },\n {\n label: t('Info'),\n href: '/info',\n },\n // {\n // label: t('Voting'),\n // href: '/voting',\n // },\n {\n type: DropdownMenuItemType.DIVIDER,\n },\n // {\n // label: t('Bridge'),\n // href: 'https://pulseramp.com',\n // type: DropdownMenuItemType.EXTERNAL_LINK,\n // },\n // {\n // label: t('PLS Staking'),\n // href: 'https://stake.v2b.testnet.pulsechain.com',\n // type: DropdownMenuItemType.EXTERNAL_LINK,\n // },\n // {\n // label: t('Docs'),\n // href: 'https://docs.pulsex.com',\n // type: DropdownMenuItemType.EXTERNAL_LINK,\n // },\n {\n label: t('Twitter'),\n href: 'https://twitter.com/PulseXcom',\n type: DropdownMenuItemType.EXTERNAL_LINK,\n },\n {\n label: t('Telegram'),\n href: 'https://t.me/PulseXcom',\n type: DropdownMenuItemType.EXTERNAL_LINK,\n },\n ],\n },\n]\n\nexport default config\n","import { useMemo } from 'react'\nimport BigNumber from 'bignumber.js'\nimport { PLSX } from '@pulsex/tokens'\nimport { ChainId } from '@pulsex/chains'\nimport { BIG_ZERO } from '@pulsex/utils/bigNumber'\n\nimport { Address, erc20ABI, useAccount, useBalance, useContractRead } from 'wagmi'\nimport { useActiveChainId } from './useActiveChainId'\n\nconst useTokenBalance = (tokenAddress: Address, forcePulseChain?: boolean) => {\n const { address: account } = useAccount()\n const { chainId } = useActiveChainId()\n\n const { data, status, ...rest } = useContractRead({\n chainId: forcePulseChain ? ChainId.PULSECHAIN : chainId,\n abi: erc20ABI,\n address: tokenAddress,\n functionName: 'balanceOf',\n args: [account],\n enabled: !!account,\n watch: true,\n })\n\n return {\n ...rest,\n fetchStatus: status,\n balance: useMemo(() => (typeof data !== 'undefined' ? new BigNumber(data.toString()) : BIG_ZERO), [data]),\n }\n}\n\nexport const useGetPlsBalance = () => {\n const { address: account } = useAccount()\n const { chainId } = useActiveChainId()\n const { status, refetch, data } = useBalance({\n chainId,\n address: account,\n watch: true,\n enabled: !!account,\n })\n\n return { balance: data?.value ? BigInt(data.value) : 0n, fetchStatus: status, refresh: refetch }\n}\n\nexport const useGetPlsxBalance = () => {\n const { chainId } = useActiveChainId()\n const { balance, fetchStatus } = useTokenBalance(PLSX[chainId].address, false)\n\n return { balance: BigInt(balance.toString()), fetchStatus }\n}\n\nexport default useTokenBalance\n","import {\n Box,\n Button,\n CopyAddress,\n Flex,\n FlexGap,\n InjectedModalProps,\n LinkExternal,\n Message,\n Skeleton,\n Text\n} from '@pulsex/uikit'\nimport { WNATIVE } from '@pulsex/sdk'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport { FetchStatus } from 'config/constants/types'\nimport { useTranslation } from '@pulsex/localization'\nimport useAuth from 'hooks/useAuth'\nimport useNativeCurrency from 'hooks/useNativeCurrency'\nimport useTokenBalance, { useGetPlsxBalance } from 'hooks/useTokenBalance'\nimport { useBalance } from 'wagmi'\nimport { getBlockExplorerLink, getBlockExploreName } from 'utils'\nimport { formatBigInt, getFullDisplayBalance } from '@pulsex/utils/formatBalance'\nimport { ChainLogo } from 'components/Logo/ChainLogo'\n\ninterface WalletInfoProps {\n hasLowNativeBalance: boolean\n switchView: (newIndex: number) => void\n onDismiss: InjectedModalProps['onDismiss']\n}\n\nconst WalletInfo: React.FC = ({ hasLowNativeBalance, onDismiss }) => {\n const { t } = useTranslation()\n const { account, chainId, chain } = useActiveWeb3React()\n const nativeBalance = useBalance({ address: account, chainId })\n const native = useNativeCurrency()\n const wNativeToken = WNATIVE[chainId]\n const { balance: wNativeBalance, fetchStatus: wNativeFetchStatus } = useTokenBalance(wNativeToken?.address)\n const { balance: plsxBalance, fetchStatus: plsxFetchStatus } = useGetPlsxBalance()\n const { logout } = useAuth()\n\n const handleLogout = () => {\n onDismiss?.()\n logout()\n }\n\n return (\n <>\n \n {t('Your Address')}\n \n \n \n \n {hasLowNativeBalance && (\n \n \n \n {t('%currency% Balance Low', {\n currency: native.symbol,\n })}\n \n \n {t('You need %currency% for transaction fees.', {\n currency: native.symbol,\n })}\n \n \n \n )}\n {chain &&\n \n \n \n \n \n {chain.name}\n \n \n \n {getBlockExploreName(chainId)}\n \n \n \n \n {native.symbol} {t('Balance')}\n \n {!nativeBalance.isFetched ? (\n \n ) : (\n {formatBigInt(nativeBalance?.data?.value, 6)}\n )}\n \n {wNativeBalance.gt(0) && (\n \n \n {wNativeToken.symbol} {t('Balance')}\n \n {wNativeFetchStatus !== FetchStatus.Fetched ? (\n \n ) : (\n {getFullDisplayBalance(wNativeBalance, wNativeToken.decimals, 6)}\n )}\n \n )}\n \n {t('PLSX Balance')}\n {plsxFetchStatus !== FetchStatus.Fetched ? (\n \n ) : (\n {formatBigInt(plsxBalance, 3)}\n )}\n \n \n }\n \n \n )\n}\n\nexport default WalletInfo\n","import { BlockIcon, CheckmarkCircleIcon, Flex, Link, RefreshIcon } from '@pulsex/uikit'\nimport { styled } from 'styled-components'\nimport { useTranslation } from '@pulsex/localization'\nimport { TransactionDetails } from 'state/transactions/reducer'\nimport { TransactionType } from 'state/transactions/actions'\nimport { getBlockExplorerLink } from 'utils'\nimport { ChainLogo } from 'components/Logo/ChainLogo'\n\ninterface TransactionRowProps {\n txn: TransactionDetails\n chainId: number\n type: TransactionType\n onDismiss: () => void\n}\n\nconst TxnIcon = styled(Flex)`\n align-items: center;\n flex: none;\n width: 24px;\n`\n\nconst Summary = styled.div`\n flex: 1;\n padding: 0 8px;\n`\n\nconst TxnLink = styled(Link)`\n align-items: center;\n color: ${({ theme }) => theme.colors.text};\n display: flex;\n margin-bottom: 16px;\n width: 100%;\n\n &:hover {\n text-decoration: none;\n }\n`\n\nconst renderIcon = (txn: TransactionDetails) => {\n if (!txn.receipt) {\n return \n }\n\n return txn.receipt?.status === 1 || typeof txn.receipt?.status === 'undefined' ? (\n \n ) : (\n \n )\n}\n\nconst TransactionRow: React.FC> = ({ txn, chainId }) => {\n const { t } = useTranslation()\n\n if (!txn) {\n return null\n }\n\n return (\n \n {renderIcon(txn)}\n \n {txn.translatableSummary\n ? t(txn.translatableSummary.text, txn.translatableSummary.data)\n : txn.summary ?? txn.hash}\n \n \n \n \n \n )\n}\n\nexport default TransactionRow\n","import { styled } from 'styled-components'\nimport { Box, Button, Flex, Text } from '@pulsex/uikit'\nimport { useAppDispatch } from 'state'\nimport { useAllSortedRecentTransactions } from 'state/transactions/hooks'\nimport { useTranslation } from '@pulsex/localization'\nimport { clearAllTransactions } from 'state/transactions/actions'\nimport isEmpty from 'lodash/isEmpty'\nimport { chains } from 'utils/wagmi'\nimport TransactionRow from './TransactionRow'\n\nconst TransactionsContainer = styled(Box)`\n max-height: 300px;\n overflow-y: auto;\n`\n\ninterface WalletTransactionsProps {\n onDismiss: () => void\n}\n\nconst WalletTransactions: React.FC> = ({ onDismiss }) => {\n const dispatch = useAppDispatch()\n const { t } = useTranslation()\n const sortedTransactions = useAllSortedRecentTransactions()\n\n const hasTransactions = !isEmpty(sortedTransactions)\n\n const handleClearAll = () => {\n dispatch(clearAllTransactions())\n }\n\n return (\n \n \n \n {t('Recent Transactions')}\n \n {hasTransactions && (\n \n )}\n \n {hasTransactions ? (\n \n {Object.entries(sortedTransactions).map(([chainId, transactions]) => {\n const chainIdNumber = Number(chainId)\n return (\n \n \n {chains.find((c) => c.id === chainIdNumber)?.name ?? 'Unknown network'}\n \n {Object.values(transactions).map((txn) => (\n \n ))}\n \n )\n })}\n \n ) : (\n {t('No recent transactions')}\n )}\n \n )\n}\n\nexport default WalletTransactions\n","import { useTranslation } from '@pulsex/localization'\nimport { Button, Text, Message, MessageText } from '@pulsex/uikit'\nimport { ChainId } from '@pulsex/chains'\nimport { useSwitchNetwork } from 'hooks/useSwitchNetwork'\n\ninterface WalletWrongNetworkProps {\n onDismiss: () => void\n}\n\nconst WalletWrongNetwork: React.FC> = ({ onDismiss }) => {\n const { t } = useTranslation()\n const { switchNetworkAsync, canSwitch } = useSwitchNetwork()\n\n const handleSwitchNetwork = async (): Promise => {\n await switchNetworkAsync(ChainId.PULSECHAIN)\n onDismiss?.()\n }\n\n return (\n <>\n {t('You’re connected to the wrong network.')}\n {canSwitch ? (\n \n ) : (\n \n {t('Unable to switch network. Please try it on your wallet')}\n \n )}\n \n )\n}\n\nexport default WalletWrongNetwork\n","import { parseEther } from 'viem'\nimport { useState, useCallback } from 'react'\nimport {\n ButtonMenu,\n ButtonMenuItem,\n CloseIcon,\n Heading,\n IconButton,\n InjectedModalProps,\n ModalBody,\n ModalWrapper,\n ModalHeader as UIKitModalHeader,\n ModalTitle,\n} from '@pulsex/uikit'\nimport { useAccount, useBalance } from 'wagmi'\nimport { useTranslation } from '@pulsex/localization'\nimport styled from 'styled-components'\nimport WalletInfo from './WalletInfo'\nimport WalletTransactions from './WalletTransactions'\nimport WalletWrongNetwork from './WalletWrongNetwork'\n\nconst StyledModalWrapper = styled(ModalWrapper)`\n border-radius: 10px;\n min-width: 360px;\n width: 380px;\n\n ${({ theme }) => theme.mediaQueries.md} {\n width: 420px;\n }\n`;\n\nexport enum WalletView {\n WALLET_INFO,\n TRANSACTIONS,\n WRONG_NETWORK,\n}\n\ninterface WalletModalProps extends InjectedModalProps {\n initialView?: WalletView\n}\n\nexport const LOW_NATIVE_BALANCE = parseEther('0.002', 'wei')\n\nconst ModalHeader = styled(UIKitModalHeader)`\n background: ${({ theme }) => theme.colors.gradientBubblegum};\n`\n\nconst Tabs = styled.div`\n background-color: ${({ theme }) => theme.colors.dropdown};\n border-bottom: 1px solid ${({ theme }) => theme.colors.cardBorder};\n padding: 16px 24px;\n`\n\ninterface TabsComponentProps {\n view: WalletView\n handleClick: (newIndex: number) => void\n}\n\nconst TabsComponent: React.FC> = ({ view, handleClick }) => {\n const { t } = useTranslation()\n\n return (\n \n \n {t('Wallet')}\n {t('Transactions')}\n \n \n )\n}\n\nconst WalletModal: React.FC = ({ initialView = WalletView.WALLET_INFO, onDismiss }) => {\n const [view, setView] = useState(initialView)\n const { t } = useTranslation()\n const { address: account } = useAccount()\n const { data, isFetched } = useBalance({ address: account })\n const hasLowNativeBalance = isFetched && data && data.value <= LOW_NATIVE_BALANCE\n\n const handleClick = useCallback((newIndex: number) => {\n setView(newIndex)\n }, [])\n\n return (\n \n \n \n {t('Your Wallet')}\n \n \n \n \n \n {view !== WalletView.WRONG_NETWORK && }\n \n {view === WalletView.WALLET_INFO && (\n \n )}\n {view === WalletView.TRANSACTIONS && }\n {view === WalletView.WRONG_NETWORK && }\n \n \n )\n}\n\nexport default WalletModal\n","import { Flex, UserMenuItem, WarningIcon } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport { useAccount, useBalance } from 'wagmi'\nimport { LOW_NATIVE_BALANCE } from './WalletModal'\n\ninterface WalletUserMenuItemProps {\n isWrongNetwork: boolean\n onPresentWalletModal: () => void\n}\n\nconst WalletUserMenuItem: React.FC> = ({\n isWrongNetwork,\n onPresentWalletModal,\n}) => {\n const { t } = useTranslation()\n const { address: account } = useAccount()\n const { data, isFetched } = useBalance({ address: account })\n const hasLowNativeBalance = isFetched && data && data.value <= LOW_NATIVE_BALANCE\n\n return (\n \n \n {t('Wallet')}\n {hasLowNativeBalance && !isWrongNetwork && }\n {isWrongNetwork && }\n \n \n )\n}\n\nexport default WalletUserMenuItem\n","/* eslint-disable consistent-return */\nimport { useTranslation } from '@pulsex/localization'\nimport {\n Flex,\n LogoutIcon,\n RefreshIcon,\n useModal,\n UserMenu as UIKitUserMenu,\n UserMenuDivider,\n UserMenuItem,\n UserMenuVariant\n} from '@pulsex/uikit'\nimport { useEffect, useState, useLayoutEffect, useMemo, useRef } from 'react'\nimport { useAccount } from 'wagmi'\nimport jazzicon from '@metamask/jazzicon'\nimport useAuth from 'hooks/useAuth'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport { usePendingTransactions } from 'state/transactions/hooks'\nimport ConnectWalletButton from \"../../ConnectWalletButton\"\nimport WalletModal, { WalletView } from './WalletModal'\nimport WalletUserMenuItem from './WalletUserMenuItem'\n\nconst UserMenuItems = () => {\n const { t } = useTranslation()\n const { isWrongNetwork } = useActiveChainId()\n const { logout } = useAuth()\n const { hasPendingTransactions } = usePendingTransactions()\n const [onPresentWalletModal] = useModal()\n const [onPresentTransactionModal] = useModal()\n\n return (\n <>\n \n \n {t('Recent Transactions')}\n {hasPendingTransactions && }\n \n \n \n \n {t('Disconnect')}\n \n \n \n \n )\n}\n\nconst UserMenu = () => {\n const { t } = useTranslation()\n const { address: account } = useAccount()\n const { isWrongNetwork } = useActiveChainId()\n const { hasPendingTransactions, pendingNumber } = usePendingTransactions()\n const [userMenuText, setUserMenuText] = useState('')\n const [userMenuVariable] = useState('default')\n\n const icon = useMemo(() => account && jazzicon(20, parseInt(account.slice(2, 10), 16)), [account])\n const iconRef = useRef(null)\n useLayoutEffect(() => {\n const { current } = iconRef\n if (icon) {\n current?.appendChild(icon)\n return () => {\n try {\n current?.removeChild(icon)\n } catch (e) {\n console.error('Avatar icon not found')\n }\n }\n }\n }, [icon, iconRef])\n\n useEffect(() => {\n if (hasPendingTransactions) {\n setUserMenuText(t('%num% Pending', { num: pendingNumber }))\n } else {\n setUserMenuText('')\n }\n }, [hasPendingTransactions, pendingNumber, t])\n\n if (account) {\n return (\n \n {({ isOpen }) => (isOpen ? : null)}\n \n )\n }\n\n if (isWrongNetwork) {\n return (\n \n {({ isOpen }) => (isOpen ? : null)}\n \n )\n }\n\n return (\n \n )\n}\n\nexport default UserMenu\n","import { Currency, WNATIVE } from '@pulsex/sdk'\nimport { useMemo } from 'react'\nimport { useTranslation } from '@pulsex/localization'\nimport tryParseAmount from '@pulsex/utils/tryParseAmount'\nimport { useTransactionAdder } from 'state/transactions/hooks'\nimport { useCurrencyBalance } from 'state/wallet/hooks'\nimport useAccountActiveChain from 'hooks/useAccountActiveChain'\nimport { useWETHContract } from './useContract'\nimport { useCallWithGasPrice } from './useCallWithGasPrice'\n\nexport enum WrapType {\n NOT_APPLICABLE,\n WRAP,\n UNWRAP,\n}\n\nconst NOT_APPLICABLE = { wrapType: WrapType.NOT_APPLICABLE }\n/**\n * Given the selected input and output currency, return a wrap callback\n * @param inputCurrency the selected input currency\n * @param outputCurrency the selected output currency\n * @param typedValue the user input value\n */\nexport default function useWrapCallback(\n inputCurrency: Currency | undefined,\n outputCurrency: Currency | undefined,\n typedValue: string | undefined,\n): { wrapType: WrapType; execute?: undefined | (() => Promise); inputError?: string } {\n const { t } = useTranslation()\n const { account, chainId } = useAccountActiveChain()\n const { callWithGasPrice } = useCallWithGasPrice()\n const wethContract = useWETHContract()\n const balance = useCurrencyBalance(account ?? undefined, inputCurrency)\n // we can always parse the amount typed as the input currency, since wrapping is 1:1\n const inputAmount = useMemo(() => tryParseAmount(typedValue, inputCurrency), [inputCurrency, typedValue])\n const addTransaction = useTransactionAdder()\n\n return useMemo(() => {\n if (!wethContract || !chainId || !inputCurrency || !outputCurrency) return NOT_APPLICABLE\n\n const sufficientBalance = inputAmount && balance && !balance.lessThan(inputAmount)\n\n if (inputCurrency?.isNative && WNATIVE[chainId]?.equals(outputCurrency)) {\n return {\n wrapType: WrapType.WRAP,\n execute:\n sufficientBalance && inputAmount\n ? async () => {\n try {\n const txReceipt = await callWithGasPrice(wethContract, 'deposit', undefined, {\n value: inputAmount.quotient,\n })\n const amount = inputAmount.toSignificant(6)\n const native = inputCurrency.symbol\n const wrap = WNATIVE[chainId].symbol\n addTransaction(txReceipt, {\n summary: `Wrap ${amount} ${native} to ${wrap}`,\n type: 'wrap',\n })\n } catch (error) {\n console.error('Could not deposit', error)\n }\n }\n : undefined,\n inputError: sufficientBalance ? undefined : t('Insufficient %symbol% balance', { symbol: inputCurrency.symbol }),\n }\n }\n if (WNATIVE[chainId]?.equals(inputCurrency) && outputCurrency?.isNative) {\n return {\n wrapType: WrapType.UNWRAP,\n execute:\n sufficientBalance && inputAmount\n ? async () => {\n try {\n const txReceipt = await callWithGasPrice(wethContract, 'withdraw', [inputAmount.quotient])\n const amount = inputAmount.toSignificant(6)\n const wrap = WNATIVE[chainId].symbol\n const native = outputCurrency.symbol\n addTransaction(txReceipt, { summary: `Unwrap ${amount} ${wrap} to ${native}` })\n } catch (error) {\n console.error('Could not withdraw', error)\n }\n }\n : undefined,\n inputError: sufficientBalance ? undefined : t('Insufficient %symbol% balance', { symbol: inputCurrency.symbol }),\n }\n }\n return NOT_APPLICABLE\n }, [wethContract, chainId, inputCurrency, outputCurrency, inputAmount, balance, addTransaction, callWithGasPrice, t])\n}\n\nexport function useIsWrapping(currencyA: Currency | undefined, currencyB: Currency | undefined, value?: string) {\n const { wrapType } = useWrapCallback(currencyA, currencyB, value)\n\n return wrapType !== WrapType.NOT_APPLICABLE\n}\n","import { MaxUint256, Price, CurrencyAmount, Percent as Percent$1, TradeType, ZERO as ZERO$1, Fraction, ONE as ONE$1, sortedInsert, validateAndParseAddress } from '@pulsex/sdk';\nimport invariant9 from 'tiny-invariant';\nimport { Percent, sqrt, Price as Price$1, CurrencyAmount as CurrencyAmount$1, MaxUint256 as MaxUint256$1, Fraction as Fraction$1, ZERO as ZERO$2, TradeType as TradeType$1 } from '@pulsex/swap-sdk-core';\nimport { keccak256, encodeAbiParameters, parseAbiParameters, encodePacked, encodeFunctionData, toBytes, getAddress, pad, isBytes, slice, concat } from 'viem';\n\n// src/entities/pool.ts\n\n// src/constants.ts\nvar FACTORY_ADDRESS = \"0x1F98431c8aD98523631AE4a59f267346ea31F984\";\nvar ADDRESS_ZERO = \"0x0000000000000000000000000000000000000000\";\nvar POOL_INIT_CODE_HASH = \"0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54\";\nvar FeeAmount = /* @__PURE__ */ ((FeeAmount4) => {\n FeeAmount4[FeeAmount4[\"LOWEST\"] = 100] = \"LOWEST\";\n FeeAmount4[FeeAmount4[\"LOW\"] = 500] = \"LOW\";\n FeeAmount4[FeeAmount4[\"PULSEX\"] = 2900] = \"PULSEX\";\n FeeAmount4[FeeAmount4[\"MEDIUM\"] = 3e3] = \"MEDIUM\";\n FeeAmount4[FeeAmount4[\"HIGH\"] = 1e4] = \"HIGH\";\n return FeeAmount4;\n})(FeeAmount || {});\nvar TICK_SPACINGS = {\n [100 /* LOWEST */]: 1,\n [500 /* LOW */]: 10,\n [2900 /* PULSEX */]: 58,\n [3e3 /* MEDIUM */]: 60,\n [1e4 /* HIGH */]: 200\n};\nvar NEGATIVE_ONE = BigInt(-1);\nvar ZERO = 0n;\nvar ONE = 1n;\nvar Q96 = 2n ** 96n;\nvar Q192 = Q96 ** 2n;\nvar MAX_FEE = 10n ** 6n;\nvar ONE_HUNDRED_PERCENT = new Percent(\"1\");\nvar ZERO_PERCENT = new Percent(\"0\");\nvar Q128 = 2n ** 128n;\nfunction getCreate2Address(from_, salt_, initCodeHash) {\n const from = toBytes(getAddress(from_));\n const salt = pad(isBytes(salt_) ? salt_ : toBytes(salt_), {\n size: 32\n });\n return getAddress(slice(keccak256(concat([toBytes(\"0xff\"), from, salt, toBytes(initCodeHash)])), 12));\n}\nfunction computePoolAddress({\n factoryAddress,\n tokenA,\n tokenB,\n fee,\n initCodeHashManualOverride\n}) {\n const [token0, token1] = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA];\n const salt = keccak256(\n encodeAbiParameters(parseAbiParameters([\"address, address, uint24\"]), [token0.address, token1.address, fee])\n );\n return getCreate2Address(\n factoryAddress,\n salt,\n initCodeHashManualOverride ?? POOL_INIT_CODE_HASH\n );\n}\n\n// src/utils/liquidityMath.ts\nvar LiquidityMath = class {\n /**\n * Cannot be constructed.\n */\n constructor() {\n }\n static addDelta(x, y) {\n if (y < ZERO) {\n return x - y * NEGATIVE_ONE;\n }\n return x + y;\n }\n};\n\n// src/utils/fullMath.ts\nvar FullMath = class {\n /**\n * Cannot be constructed.\n */\n constructor() {\n }\n static mulDivRoundingUp(a, b, denominator) {\n const product = a * b;\n let result = product / denominator;\n if (product % denominator !== ZERO)\n result = result + ONE;\n return result;\n }\n};\nvar MaxUint160 = 2n ** 160n - ONE;\nfunction multiplyIn256(x, y) {\n const product = x * y;\n return product & MaxUint256;\n}\nfunction addIn256(x, y) {\n const sum = x + y;\n return sum & MaxUint256;\n}\nvar SqrtPriceMath = class {\n /**\n * Cannot be constructed.\n */\n constructor() {\n }\n static getAmount0Delta(sqrtRatioAX96, sqrtRatioBX96, liquidity, roundUp) {\n if (sqrtRatioAX96 > sqrtRatioBX96) {\n sqrtRatioAX96 = sqrtRatioBX96;\n sqrtRatioBX96 = sqrtRatioAX96;\n }\n const numerator1 = liquidity << 96n;\n const numerator2 = sqrtRatioBX96 - sqrtRatioAX96;\n return roundUp ? FullMath.mulDivRoundingUp(FullMath.mulDivRoundingUp(numerator1, numerator2, sqrtRatioBX96), ONE, sqrtRatioAX96) : numerator1 * numerator2 / sqrtRatioBX96 / sqrtRatioAX96;\n }\n static getAmount1Delta(sqrtRatioAX96, sqrtRatioBX96, liquidity, roundUp) {\n if (sqrtRatioAX96 > sqrtRatioBX96) {\n sqrtRatioAX96 = sqrtRatioBX96;\n sqrtRatioBX96 = sqrtRatioAX96;\n }\n return roundUp ? FullMath.mulDivRoundingUp(liquidity, sqrtRatioBX96 - sqrtRatioAX96, Q96) : liquidity * (sqrtRatioBX96 - sqrtRatioAX96) / Q96;\n }\n static getNextSqrtPriceFromInput(sqrtPX96, liquidity, amountIn, zeroForOne) {\n invariant9(sqrtPX96 > ZERO);\n invariant9(liquidity > ZERO);\n return zeroForOne ? this.getNextSqrtPriceFromAmount0RoundingUp(sqrtPX96, liquidity, amountIn, true) : this.getNextSqrtPriceFromAmount1RoundingDown(sqrtPX96, liquidity, amountIn, true);\n }\n static getNextSqrtPriceFromOutput(sqrtPX96, liquidity, amountOut, zeroForOne) {\n invariant9(sqrtPX96 > ZERO);\n invariant9(liquidity > ZERO);\n return zeroForOne ? this.getNextSqrtPriceFromAmount1RoundingDown(sqrtPX96, liquidity, amountOut, false) : this.getNextSqrtPriceFromAmount0RoundingUp(sqrtPX96, liquidity, amountOut, false);\n }\n static getNextSqrtPriceFromAmount0RoundingUp(sqrtPX96, liquidity, amount, add) {\n if (amount === ZERO)\n return sqrtPX96;\n const numerator1 = liquidity << 96n;\n if (add) {\n const product2 = multiplyIn256(amount, sqrtPX96);\n if (product2 / amount === sqrtPX96) {\n const denominator2 = addIn256(numerator1, product2);\n if (denominator2 >= numerator1) {\n return FullMath.mulDivRoundingUp(numerator1, sqrtPX96, denominator2);\n }\n }\n return FullMath.mulDivRoundingUp(numerator1, ONE, numerator1 / sqrtPX96 + amount);\n }\n const product = multiplyIn256(amount, sqrtPX96);\n invariant9(product / amount === sqrtPX96);\n invariant9(numerator1 > product);\n const denominator = numerator1 - product;\n return FullMath.mulDivRoundingUp(numerator1, sqrtPX96, denominator);\n }\n static getNextSqrtPriceFromAmount1RoundingDown(sqrtPX96, liquidity, amount, add) {\n if (add) {\n const quotient2 = amount <= MaxUint160 ? (amount << 96n) / liquidity : amount * Q96 / liquidity;\n return sqrtPX96 + quotient2;\n }\n const quotient = FullMath.mulDivRoundingUp(amount, Q96, liquidity);\n invariant9(sqrtPX96 > quotient);\n return sqrtPX96 - quotient;\n }\n};\n\n// src/utils/swapMath.ts\nvar SwapMath = class {\n /**\n * Cannot be constructed.\n */\n constructor() {\n }\n static computeSwapStep(sqrtRatioCurrentX96, sqrtRatioTargetX96, liquidity, amountRemaining, feePips) {\n const returnValues = {};\n const zeroForOne = sqrtRatioCurrentX96 >= sqrtRatioTargetX96;\n const exactIn = amountRemaining >= ZERO;\n if (exactIn) {\n const amountRemainingLessFee = amountRemaining * (MAX_FEE - BigInt(feePips)) / MAX_FEE;\n returnValues.amountIn = zeroForOne ? SqrtPriceMath.getAmount0Delta(sqrtRatioTargetX96, sqrtRatioCurrentX96, liquidity, true) : SqrtPriceMath.getAmount1Delta(sqrtRatioCurrentX96, sqrtRatioTargetX96, liquidity, true);\n if (amountRemainingLessFee >= returnValues.amountIn) {\n returnValues.sqrtRatioNextX96 = sqrtRatioTargetX96;\n } else {\n returnValues.sqrtRatioNextX96 = SqrtPriceMath.getNextSqrtPriceFromInput(\n sqrtRatioCurrentX96,\n liquidity,\n amountRemainingLessFee,\n zeroForOne\n );\n }\n } else {\n returnValues.amountOut = zeroForOne ? SqrtPriceMath.getAmount1Delta(sqrtRatioTargetX96, sqrtRatioCurrentX96, liquidity, false) : SqrtPriceMath.getAmount0Delta(sqrtRatioCurrentX96, sqrtRatioTargetX96, liquidity, false);\n if (amountRemaining * NEGATIVE_ONE >= returnValues.amountOut) {\n returnValues.sqrtRatioNextX96 = sqrtRatioTargetX96;\n } else {\n returnValues.sqrtRatioNextX96 = SqrtPriceMath.getNextSqrtPriceFromOutput(\n sqrtRatioCurrentX96,\n liquidity,\n amountRemaining * NEGATIVE_ONE,\n zeroForOne\n );\n }\n }\n const max = sqrtRatioTargetX96 === returnValues.sqrtRatioNextX96;\n if (zeroForOne) {\n returnValues.amountIn = max && exactIn ? returnValues.amountIn : SqrtPriceMath.getAmount0Delta(returnValues.sqrtRatioNextX96, sqrtRatioCurrentX96, liquidity, true);\n returnValues.amountOut = max && !exactIn ? returnValues.amountOut : SqrtPriceMath.getAmount1Delta(returnValues.sqrtRatioNextX96, sqrtRatioCurrentX96, liquidity, false);\n } else {\n returnValues.amountIn = max && exactIn ? returnValues.amountIn : SqrtPriceMath.getAmount1Delta(sqrtRatioCurrentX96, returnValues.sqrtRatioNextX96, liquidity, true);\n returnValues.amountOut = max && !exactIn ? returnValues.amountOut : SqrtPriceMath.getAmount0Delta(sqrtRatioCurrentX96, returnValues.sqrtRatioNextX96, liquidity, false);\n }\n if (!exactIn && returnValues.amountOut > amountRemaining * NEGATIVE_ONE) {\n returnValues.amountOut = amountRemaining * NEGATIVE_ONE;\n }\n if (exactIn && returnValues.sqrtRatioNextX96 !== sqrtRatioTargetX96) {\n returnValues.feeAmount = amountRemaining - returnValues.amountIn;\n } else {\n returnValues.feeAmount = FullMath.mulDivRoundingUp(\n returnValues.amountIn,\n BigInt(feePips),\n MAX_FEE - BigInt(feePips)\n );\n }\n return [returnValues.sqrtRatioNextX96, returnValues.amountIn, returnValues.amountOut, returnValues.feeAmount];\n }\n};\nvar TWO = 2n;\nvar POWERS_OF_2 = [128, 64, 32, 16, 8, 4, 2, 1].map((pow) => [pow, TWO ** BigInt(pow)]);\nfunction mostSignificantBit(x) {\n invariant9(x > ZERO, \"ZERO\");\n invariant9(x <= MaxUint256, \"MAX\");\n let msb = 0;\n for (const [power, min] of POWERS_OF_2) {\n if (x >= min) {\n x = x >> BigInt(power);\n msb += power;\n }\n }\n return msb;\n}\n\n// src/utils/tickMath.ts\nfunction mulShift(val, mulBy) {\n return val * BigInt(mulBy) >> 128n;\n}\nvar Q32 = 2n ** 32n;\nvar _TickMath = class {\n /**\n * Cannot be constructed.\n */\n constructor() {\n }\n /**\n * Returns the sqrt ratio as a Q64.96 for the given tick. The sqrt ratio is computed as sqrt(1.0001)^tick\n * @param tick the tick for which to compute the sqrt ratio\n */\n static getSqrtRatioAtTick(tick) {\n invariant9(tick >= _TickMath.MIN_TICK && tick <= _TickMath.MAX_TICK && Number.isInteger(tick), \"TICK\");\n const absTick = tick < 0 ? tick * -1 : tick;\n let ratio = (absTick & 1) != 0 ? BigInt(\"0xfffcb933bd6fad37aa2d162d1a594001\") : BigInt(\"0x100000000000000000000000000000000\");\n if ((absTick & 2) != 0)\n ratio = mulShift(ratio, \"0xfff97272373d413259a46990580e213a\");\n if ((absTick & 4) != 0)\n ratio = mulShift(ratio, \"0xfff2e50f5f656932ef12357cf3c7fdcc\");\n if ((absTick & 8) != 0)\n ratio = mulShift(ratio, \"0xffe5caca7e10e4e61c3624eaa0941cd0\");\n if ((absTick & 16) != 0)\n ratio = mulShift(ratio, \"0xffcb9843d60f6159c9db58835c926644\");\n if ((absTick & 32) != 0)\n ratio = mulShift(ratio, \"0xff973b41fa98c081472e6896dfb254c0\");\n if ((absTick & 64) != 0)\n ratio = mulShift(ratio, \"0xff2ea16466c96a3843ec78b326b52861\");\n if ((absTick & 128) != 0)\n ratio = mulShift(ratio, \"0xfe5dee046a99a2a811c461f1969c3053\");\n if ((absTick & 256) != 0)\n ratio = mulShift(ratio, \"0xfcbe86c7900a88aedcffc83b479aa3a4\");\n if ((absTick & 512) != 0)\n ratio = mulShift(ratio, \"0xf987a7253ac413176f2b074cf7815e54\");\n if ((absTick & 1024) != 0)\n ratio = mulShift(ratio, \"0xf3392b0822b70005940c7a398e4b70f3\");\n if ((absTick & 2048) != 0)\n ratio = mulShift(ratio, \"0xe7159475a2c29b7443b29c7fa6e889d9\");\n if ((absTick & 4096) != 0)\n ratio = mulShift(ratio, \"0xd097f3bdfd2022b8845ad8f792aa5825\");\n if ((absTick & 8192) != 0)\n ratio = mulShift(ratio, \"0xa9f746462d870fdf8a65dc1f90e061e5\");\n if ((absTick & 16384) != 0)\n ratio = mulShift(ratio, \"0x70d869a156d2a1b890bb3df62baf32f7\");\n if ((absTick & 32768) != 0)\n ratio = mulShift(ratio, \"0x31be135f97d08fd981231505542fcfa6\");\n if ((absTick & 65536) != 0)\n ratio = mulShift(ratio, \"0x9aa508b5b7a84e1c677de54f3e99bc9\");\n if ((absTick & 131072) != 0)\n ratio = mulShift(ratio, \"0x5d6af8dedb81196699c329225ee604\");\n if ((absTick & 262144) != 0)\n ratio = mulShift(ratio, \"0x2216e584f5fa1ea926041bedfe98\");\n if ((absTick & 524288) != 0)\n ratio = mulShift(ratio, \"0x48a170391f7dc42444e8fa2\");\n if (tick > 0)\n ratio = MaxUint256 / ratio;\n return ratio % Q32 > ZERO ? ratio / Q32 + ONE : ratio / Q32;\n }\n /**\n * Returns the tick corresponding to a given sqrt ratio, s.t. #getSqrtRatioAtTick(tick) <= sqrtRatioX96\n * and #getSqrtRatioAtTick(tick + 1) > sqrtRatioX96\n * @param sqrtRatioX96 the sqrt ratio as a Q64.96 for which to compute the tick\n */\n static getTickAtSqrtRatio(sqrtRatioX96) {\n invariant9(sqrtRatioX96 >= _TickMath.MIN_SQRT_RATIO && sqrtRatioX96 < _TickMath.MAX_SQRT_RATIO, \"SQRT_RATIO\");\n const sqrtRatioX128 = sqrtRatioX96 << 32n;\n const msb = mostSignificantBit(sqrtRatioX128);\n let r;\n if (BigInt(msb) >= 128n) {\n r = sqrtRatioX128 >> BigInt(msb - 127);\n } else {\n r = sqrtRatioX128 << BigInt(127 - msb);\n }\n let log_2 = BigInt(msb) - 128n << 64n;\n for (let i = 0; i < 14; i++) {\n r = r * r >> 127n;\n const f = r >> 128n;\n log_2 = log_2 | f << BigInt(63 - i);\n r = r >> f;\n }\n const log_sqrt10001 = log_2 * 255738958999603826347141n;\n const tickLow = Number(log_sqrt10001 - 3402992956809132418596140100660247210n >> 128n);\n const tickHigh = Number(log_sqrt10001 + 291339464771989622907027621153398088495n >> 128n);\n return tickLow === tickHigh ? tickLow : _TickMath.getSqrtRatioAtTick(tickHigh) <= sqrtRatioX96 ? tickHigh : tickLow;\n }\n};\nvar TickMath = _TickMath;\n/**\n * The minimum tick that can be used on any pool.\n */\n// eslint-disable-next-line @typescript-eslint/no-inferrable-types\nTickMath.MIN_TICK = -887272;\n/**\n * The maximum tick that can be used on any pool.\n */\nTickMath.MAX_TICK = -_TickMath.MIN_TICK;\n/**\n * The sqrt ratio corresponding to the minimum tick that could be used on any pool.\n */\nTickMath.MIN_SQRT_RATIO = 4295128739n;\n/**\n * The sqrt ratio corresponding to the maximum tick that could be used on any pool.\n */\nTickMath.MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342n;\n\n// src/entities/tickDataProvider.ts\nvar _NoTickDataProvider = class {\n async getTick(_tick) {\n throw new Error(_NoTickDataProvider.ERROR_MESSAGE);\n }\n async nextInitializedTickWithinOneWord(_tick, _lte, _tickSpacing) {\n throw new Error(_NoTickDataProvider.ERROR_MESSAGE);\n }\n};\nvar NoTickDataProvider = _NoTickDataProvider;\nNoTickDataProvider.ERROR_MESSAGE = \"No tick data provider was given\";\n\n// src/utils/isSorted.ts\nfunction isSorted(list, comparator) {\n for (let i = 0; i < list.length - 1; i++) {\n if (comparator(list[i], list[i + 1]) > 0) {\n return false;\n }\n }\n return true;\n}\n\n// src/utils/tickList.ts\nfunction tickComparator(a, b) {\n return a.index - b.index;\n}\nvar TickList = class {\n /**\n * Cannot be constructed\n */\n constructor() {\n }\n static validateList(ticks, tickSpacing) {\n invariant9(tickSpacing > 0, \"TICK_SPACING_NONZERO\");\n invariant9(\n ticks.every(({ index }) => index % tickSpacing === 0),\n \"TICK_SPACING\"\n );\n invariant9(ticks.reduce((accumulator, { liquidityNet }) => accumulator + liquidityNet, ZERO) === ZERO, \"ZERO_NET\");\n invariant9(isSorted(ticks, tickComparator), \"SORTED\");\n }\n static isBelowSmallest(ticks, tick) {\n invariant9(ticks.length > 0, \"LENGTH\");\n return tick < ticks[0].index;\n }\n static isAtOrAboveLargest(ticks, tick) {\n invariant9(ticks.length > 0, \"LENGTH\");\n return tick >= ticks[ticks.length - 1].index;\n }\n static getTick(ticks, index) {\n const tick = ticks[this.binarySearch(ticks, index)];\n invariant9(tick.index === index, \"NOT_CONTAINED\");\n return tick;\n }\n /**\n * Finds the largest tick in the list of ticks that is less than or equal to tick\n * @param ticks list of ticks\n * @param tick tick to find the largest tick that is less than or equal to tick\n * @private\n */\n static binarySearch(ticks, tick) {\n invariant9(!this.isBelowSmallest(ticks, tick), \"BELOW_SMALLEST\");\n let l = 0;\n let r = ticks.length - 1;\n let i;\n while (true) {\n i = Math.floor((l + r) / 2);\n if (ticks[i].index <= tick && (i === ticks.length - 1 || ticks[i + 1].index > tick)) {\n return i;\n }\n if (ticks[i].index < tick) {\n l = i + 1;\n } else {\n r = i - 1;\n }\n }\n }\n static nextInitializedTick(ticks, tick, lte) {\n if (lte) {\n invariant9(!TickList.isBelowSmallest(ticks, tick), \"BELOW_SMALLEST\");\n if (TickList.isAtOrAboveLargest(ticks, tick)) {\n return ticks[ticks.length - 1];\n }\n const index2 = this.binarySearch(ticks, tick);\n return ticks[index2];\n }\n invariant9(!this.isAtOrAboveLargest(ticks, tick), \"AT_OR_ABOVE_LARGEST\");\n if (this.isBelowSmallest(ticks, tick)) {\n return ticks[0];\n }\n const index = this.binarySearch(ticks, tick);\n return ticks[index + 1];\n }\n static nextInitializedTickWithinOneWord(ticks, tick, lte, tickSpacing) {\n const compressed = Math.floor(tick / tickSpacing);\n if (lte) {\n const wordPos2 = compressed >> 8;\n const minimum = (wordPos2 << 8) * tickSpacing;\n if (TickList.isBelowSmallest(ticks, tick)) {\n return [minimum, false];\n }\n const { index: index2 } = TickList.nextInitializedTick(ticks, tick, lte);\n const nextInitializedTick2 = Math.max(minimum, index2);\n return [nextInitializedTick2, nextInitializedTick2 === index2];\n }\n const wordPos = compressed + 1 >> 8;\n const maximum = ((wordPos + 1 << 8) - 1) * tickSpacing;\n if (this.isAtOrAboveLargest(ticks, tick)) {\n return [maximum, false];\n }\n const { index } = this.nextInitializedTick(ticks, tick, lte);\n const nextInitializedTick = Math.min(maximum, index);\n return [nextInitializedTick, nextInitializedTick === index];\n }\n static countInitializedTicksCrossed(ticks, tickBefore, tickAfter) {\n if (tickBefore === tickAfter) {\n return 0;\n }\n const beforeIndex = this.binarySearch(ticks, tickBefore);\n const afterIndex = this.binarySearch(ticks, tickAfter);\n return Math.abs(beforeIndex - afterIndex);\n }\n};\nvar Tick = class {\n constructor({ index, liquidityGross, liquidityNet }) {\n invariant9(index >= TickMath.MIN_TICK && index <= TickMath.MAX_TICK, \"TICK\");\n this.index = index;\n this.liquidityGross = BigInt(liquidityGross);\n this.liquidityNet = BigInt(liquidityNet);\n }\n};\n\n// src/entities/tickListDataProvider.ts\nvar TickListDataProvider = class {\n constructor(ticks, tickSpacing) {\n const ticksMapped = ticks.map((t) => t instanceof Tick ? t : new Tick(t));\n TickList.validateList(ticksMapped, tickSpacing);\n this.ticks = ticksMapped;\n }\n async getTick(tick) {\n return TickList.getTick(this.ticks, tick);\n }\n async nextInitializedTickWithinOneWord(tick, lte, tickSpacing) {\n return TickList.nextInitializedTickWithinOneWord(this.ticks, tick, lte, tickSpacing);\n }\n};\n\n// src/entities/pool.ts\nvar NO_TICK_DATA_PROVIDER_DEFAULT = new NoTickDataProvider();\nvar Pool = class {\n static getAddress(tokenA, tokenB, fee, initCodeHashManualOverride, factoryAddressOverride) {\n return computePoolAddress({\n factoryAddress: factoryAddressOverride ?? FACTORY_ADDRESS,\n fee,\n tokenA,\n tokenB,\n initCodeHashManualOverride\n });\n }\n /**\n * Construct a pool\n * @param tokenA One of the tokens in the pool\n * @param tokenB The other token in the pool\n * @param fee The fee in hundredths of a bips of the input amount of every swap that is collected by the pool\n * @param sqrtRatioX96 The sqrt of the current ratio of amounts of token1 to token0\n * @param liquidity The current value of in range liquidity\n * @param tickCurrent The current tick of the pool\n * @param ticks The current state of the pool ticks or a data provider that can return tick data\n */\n constructor(tokenA, tokenB, fee, sqrtRatioX96, liquidity, tickCurrent, ticks = NO_TICK_DATA_PROVIDER_DEFAULT) {\n invariant9(Number.isInteger(fee) && fee < 1e6, \"FEE\");\n [this.token0, this.token1] = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA];\n this.fee = fee;\n this.sqrtRatioX96 = BigInt(sqrtRatioX96);\n this.liquidity = BigInt(liquidity);\n this.tickCurrent = tickCurrent;\n this.tickDataProvider = Array.isArray(ticks) ? new TickListDataProvider(ticks, TICK_SPACINGS[fee]) : ticks;\n }\n /**\n * Returns true if the token is either token0 or token1\n * @param token The token to check\n * @returns True if token is either token0 or token\n */\n involvesToken(token) {\n return token.equals(this.token0) || token.equals(this.token1);\n }\n /**\n * Returns the current mid price of the pool in terms of token0, i.e. the ratio of token1 over token0\n */\n get token0Price() {\n return this._token0Price ?? (this._token0Price = new Price(this.token0, this.token1, Q192, this.sqrtRatioX96 * this.sqrtRatioX96));\n }\n /**\n * Returns the current mid price of the pool in terms of token1, i.e. the ratio of token0 over token1\n */\n get token1Price() {\n return this._token1Price ?? (this._token1Price = new Price(this.token1, this.token0, this.sqrtRatioX96 * this.sqrtRatioX96, Q192));\n }\n /**\n * Return the price of the given token in terms of the other token in the pool.\n * @param token The token to return price of\n * @returns The price of the given token, in terms of the other.\n */\n priceOf(token) {\n invariant9(this.involvesToken(token), \"TOKEN\");\n return token.equals(this.token0) ? this.token0Price : this.token1Price;\n }\n /**\n * Returns the chain ID of the tokens in the pool.\n */\n get chainId() {\n return this.token0.chainId;\n }\n /**\n * Given an input amount of a token, return the computed output amount, and a pool with state updated after the trade\n * @param inputAmount The input amount for which to quote the output amount\n * @param sqrtPriceLimitX96 The Q64.96 sqrt price limit\n * @returns The output amount and the pool with updated state\n */\n async getOutputAmount(inputAmount, sqrtPriceLimitX96) {\n invariant9(this.involvesToken(inputAmount.currency), \"TOKEN\");\n const zeroForOne = inputAmount.currency.equals(this.token0);\n const {\n amountCalculated: outputAmount,\n sqrtRatioX96,\n liquidity,\n tickCurrent\n } = await this.swap(zeroForOne, inputAmount.quotient, sqrtPriceLimitX96);\n const outputToken = zeroForOne ? this.token1 : this.token0;\n return [\n CurrencyAmount.fromRawAmount(outputToken, outputAmount * NEGATIVE_ONE),\n new Pool(this.token0, this.token1, this.fee, sqrtRatioX96, liquidity, tickCurrent, this.tickDataProvider)\n ];\n }\n /**\n * Given a desired output amount of a token, return the computed input amount and a pool with state updated after the trade\n * @param outputAmount the output amount for which to quote the input amount\n * @param sqrtPriceLimitX96 The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this value after the swap. If one for zero, the price cannot be greater than this value after the swap\n * @returns The input amount and the pool with updated state\n */\n async getInputAmount(outputAmount, sqrtPriceLimitX96) {\n invariant9(outputAmount.currency.isToken && this.involvesToken(outputAmount.currency), \"TOKEN\");\n const zeroForOne = outputAmount.currency.equals(this.token1);\n const {\n amountSpecifiedRemaining,\n amountCalculated: inputAmount,\n sqrtRatioX96,\n liquidity,\n tickCurrent\n } = await this.swap(zeroForOne, outputAmount.quotient * NEGATIVE_ONE, sqrtPriceLimitX96);\n invariant9(amountSpecifiedRemaining === ZERO, \"INSUFICIENT_LIQUIDITY\");\n const inputToken = zeroForOne ? this.token0 : this.token1;\n return [\n CurrencyAmount.fromRawAmount(inputToken, inputAmount),\n new Pool(this.token0, this.token1, this.fee, sqrtRatioX96, liquidity, tickCurrent, this.tickDataProvider)\n ];\n }\n /**\n * Executes a swap\n * @param zeroForOne Whether the amount in is token0 or token1\n * @param amountSpecified The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)\n * @param sqrtPriceLimitX96 The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this value after the swap. If one for zero, the price cannot be greater than this value after the swap\n * @returns amountCalculated\n * @returns sqrtRatioX96\n * @returns liquidity\n * @returns tickCurrent\n */\n async swap(zeroForOne, amountSpecified, sqrtPriceLimitX96) {\n if (!sqrtPriceLimitX96)\n sqrtPriceLimitX96 = zeroForOne ? TickMath.MIN_SQRT_RATIO + ONE : TickMath.MAX_SQRT_RATIO - ONE;\n if (zeroForOne) {\n invariant9(sqrtPriceLimitX96 > TickMath.MIN_SQRT_RATIO, \"RATIO_MIN\");\n invariant9(sqrtPriceLimitX96 < this.sqrtRatioX96, \"RATIO_CURRENT\");\n } else {\n invariant9(sqrtPriceLimitX96 < TickMath.MAX_SQRT_RATIO, \"RATIO_MAX\");\n invariant9(sqrtPriceLimitX96 > this.sqrtRatioX96, \"RATIO_CURRENT\");\n }\n const exactInput = amountSpecified >= ZERO;\n const state = {\n amountSpecifiedRemaining: amountSpecified,\n amountCalculated: ZERO,\n sqrtPriceX96: this.sqrtRatioX96,\n tick: this.tickCurrent,\n liquidity: this.liquidity\n };\n while (state.amountSpecifiedRemaining !== ZERO && state.sqrtPriceX96 != sqrtPriceLimitX96) {\n const step = {};\n step.sqrtPriceStartX96 = state.sqrtPriceX96;\n [step.tickNext, step.initialized] = await this.tickDataProvider.nextInitializedTickWithinOneWord(\n state.tick,\n zeroForOne,\n this.tickSpacing\n );\n if (step.tickNext < TickMath.MIN_TICK) {\n step.tickNext = TickMath.MIN_TICK;\n } else if (step.tickNext > TickMath.MAX_TICK) {\n step.tickNext = TickMath.MAX_TICK;\n }\n step.sqrtPriceNextX96 = TickMath.getSqrtRatioAtTick(step.tickNext);\n [state.sqrtPriceX96, step.amountIn, step.amountOut, step.feeAmount] = SwapMath.computeSwapStep(\n state.sqrtPriceX96,\n (zeroForOne ? step.sqrtPriceNextX96 < sqrtPriceLimitX96 : step.sqrtPriceNextX96 > sqrtPriceLimitX96) ? sqrtPriceLimitX96 : step.sqrtPriceNextX96,\n state.liquidity,\n state.amountSpecifiedRemaining,\n this.fee\n );\n if (exactInput) {\n state.amountSpecifiedRemaining = state.amountSpecifiedRemaining - (step.amountIn + step.feeAmount);\n state.amountCalculated = state.amountCalculated - step.amountOut;\n } else {\n state.amountSpecifiedRemaining = state.amountSpecifiedRemaining + step.amountOut;\n state.amountCalculated = state.amountCalculated + (step.amountIn + step.feeAmount);\n }\n if (state.sqrtPriceX96 === step.sqrtPriceNextX96) {\n if (step.initialized) {\n let liquidityNet = BigInt((await this.tickDataProvider.getTick(step.tickNext)).liquidityNet);\n if (zeroForOne)\n liquidityNet = liquidityNet * NEGATIVE_ONE;\n state.liquidity = LiquidityMath.addDelta(state.liquidity, liquidityNet);\n }\n state.tick = zeroForOne ? step.tickNext - 1 : step.tickNext;\n } else if (state.sqrtPriceX96 !== step.sqrtPriceStartX96) {\n state.tick = TickMath.getTickAtSqrtRatio(state.sqrtPriceX96);\n }\n }\n return {\n amountSpecifiedRemaining: state.amountSpecifiedRemaining,\n amountCalculated: state.amountCalculated,\n sqrtRatioX96: state.sqrtPriceX96,\n liquidity: state.liquidity,\n tickCurrent: state.tick\n };\n }\n get tickSpacing() {\n return TICK_SPACINGS[this.fee];\n }\n};\n\n// src/utils/maxLiquidityForAmounts.ts\nfunction maxLiquidityForAmount0Imprecise(sqrtRatioAX96, sqrtRatioBX96, amount0) {\n if (sqrtRatioAX96 > sqrtRatioBX96) {\n sqrtRatioAX96 = sqrtRatioBX96;\n sqrtRatioBX96 = sqrtRatioAX96;\n }\n const intermediate = sqrtRatioAX96 * sqrtRatioBX96 / Q96;\n return BigInt(amount0) * intermediate / (sqrtRatioBX96 - sqrtRatioAX96);\n}\nfunction maxLiquidityForAmount0Precise(sqrtRatioAX96, sqrtRatioBX96, amount0) {\n if (sqrtRatioAX96 > sqrtRatioBX96) {\n sqrtRatioAX96 = sqrtRatioBX96;\n sqrtRatioBX96 = sqrtRatioAX96;\n }\n const numerator = BigInt(amount0) * sqrtRatioAX96 * sqrtRatioBX96;\n const denominator = Q96 * (sqrtRatioBX96 - sqrtRatioAX96);\n return numerator / denominator;\n}\nfunction maxLiquidityForAmount1(sqrtRatioAX96, sqrtRatioBX96, amount1) {\n if (sqrtRatioAX96 > sqrtRatioBX96) {\n sqrtRatioAX96 = sqrtRatioBX96;\n sqrtRatioBX96 = sqrtRatioAX96;\n }\n return BigInt(amount1) * Q96 / (sqrtRatioBX96 - sqrtRatioAX96);\n}\nfunction maxLiquidityForAmounts(sqrtRatioCurrentX96, sqrtRatioAX96, sqrtRatioBX96, amount0, amount1, useFullPrecision) {\n if (sqrtRatioAX96 > sqrtRatioBX96) {\n sqrtRatioAX96 = sqrtRatioBX96;\n sqrtRatioBX96 = sqrtRatioAX96;\n }\n const maxLiquidityForAmount0 = useFullPrecision ? maxLiquidityForAmount0Precise : maxLiquidityForAmount0Imprecise;\n if (sqrtRatioCurrentX96 <= sqrtRatioAX96) {\n return maxLiquidityForAmount0(sqrtRatioAX96, sqrtRatioBX96, amount0);\n }\n if (sqrtRatioCurrentX96 < sqrtRatioBX96) {\n const liquidity0 = maxLiquidityForAmount0(sqrtRatioCurrentX96, sqrtRatioBX96, amount0);\n const liquidity1 = maxLiquidityForAmount1(sqrtRatioAX96, sqrtRatioCurrentX96, amount1);\n return liquidity0 < liquidity1 ? liquidity0 : liquidity1;\n }\n return maxLiquidityForAmount1(sqrtRatioAX96, sqrtRatioBX96, amount1);\n}\nfunction encodeSqrtRatioX96(amount1, amount0) {\n const numerator = BigInt(amount1) << 192n;\n const denominator = BigInt(amount0);\n const ratioX192 = numerator / denominator;\n return sqrt(ratioX192);\n}\n\n// src/utils/priceTickConversions.ts\nfunction tickToPrice(baseToken, quoteToken, tick) {\n const sqrtRatioX96 = TickMath.getSqrtRatioAtTick(tick);\n const ratioX192 = sqrtRatioX96 * sqrtRatioX96;\n return baseToken.sortsBefore(quoteToken) ? new Price$1(baseToken, quoteToken, Q192, ratioX192) : new Price$1(baseToken, quoteToken, ratioX192, Q192);\n}\nfunction priceToClosestTick(price) {\n const sorted = price.baseCurrency.sortsBefore(price.quoteCurrency);\n const sqrtRatioX96 = sorted ? encodeSqrtRatioX96(price.numerator, price.denominator) : encodeSqrtRatioX96(price.denominator, price.numerator);\n let tick = TickMath.getTickAtSqrtRatio(sqrtRatioX96);\n const nextTickPrice = tickToPrice(price.baseCurrency, price.quoteCurrency, tick + 1);\n if (sorted) {\n if (!price.lessThan(nextTickPrice)) {\n tick++;\n }\n } else if (!price.greaterThan(nextTickPrice)) {\n tick++;\n }\n return tick;\n}\n\n// src/utils/positionMath.ts\nfunction getToken0Amount(tickCurrent, tickLower, tickUpper, sqrtRatioX96, liquidity) {\n if (tickCurrent < tickLower) {\n return SqrtPriceMath.getAmount0Delta(\n TickMath.getSqrtRatioAtTick(tickLower),\n TickMath.getSqrtRatioAtTick(tickUpper),\n liquidity,\n false\n );\n }\n if (tickCurrent < tickUpper) {\n return SqrtPriceMath.getAmount0Delta(sqrtRatioX96, TickMath.getSqrtRatioAtTick(tickUpper), liquidity, false);\n }\n return ZERO;\n}\nfunction getToken1Amount(tickCurrent, tickLower, tickUpper, sqrtRatioX96, liquidity) {\n if (tickCurrent < tickLower) {\n return ZERO;\n }\n if (tickCurrent < tickUpper) {\n return SqrtPriceMath.getAmount1Delta(TickMath.getSqrtRatioAtTick(tickLower), sqrtRatioX96, liquidity, false);\n }\n return SqrtPriceMath.getAmount1Delta(\n TickMath.getSqrtRatioAtTick(tickLower),\n TickMath.getSqrtRatioAtTick(tickUpper),\n liquidity,\n false\n );\n}\nvar PositionMath = {\n getToken0Amount,\n getToken1Amount\n};\n\n// src/entities/position.ts\nvar Position = class {\n /**\n * Constructs a position for a given pool with the given liquidity\n * @param pool For which pool the liquidity is assigned\n * @param liquidity The amount of liquidity that is in the position\n * @param tickLower The lower tick of the position\n * @param tickUpper The upper tick of the position\n */\n constructor({ pool, liquidity, tickLower, tickUpper }) {\n // cached resuts for the getters\n this._token0Amount = null;\n this._token1Amount = null;\n this._mintAmounts = null;\n invariant9(tickLower < tickUpper, \"TICK_ORDER\");\n invariant9(tickLower >= TickMath.MIN_TICK && tickLower % pool.tickSpacing === 0, \"TICK_LOWER\");\n invariant9(tickUpper <= TickMath.MAX_TICK && tickUpper % pool.tickSpacing === 0, \"TICK_UPPER\");\n this.pool = pool;\n this.tickLower = tickLower;\n this.tickUpper = tickUpper;\n this.liquidity = BigInt(liquidity);\n }\n /**\n * Returns the price of token0 at the lower tick\n */\n get token0PriceLower() {\n return tickToPrice(this.pool.token0, this.pool.token1, this.tickLower);\n }\n /**\n * Returns the price of token0 at the upper tick\n */\n get token0PriceUpper() {\n return tickToPrice(this.pool.token0, this.pool.token1, this.tickUpper);\n }\n /**\n * Returns the amount of token0 that this position's liquidity could be burned for at the current pool price\n */\n get amount0() {\n if (this._token0Amount === null) {\n this._token0Amount = CurrencyAmount.fromRawAmount(\n this.pool.token0,\n PositionMath.getToken0Amount(\n this.pool.tickCurrent,\n this.tickLower,\n this.tickUpper,\n this.pool.sqrtRatioX96,\n this.liquidity\n )\n );\n }\n return this._token0Amount;\n }\n /**\n * Returns the amount of token1 that this position's liquidity could be burned for at the current pool price\n */\n get amount1() {\n if (this._token1Amount === null) {\n this._token1Amount = CurrencyAmount.fromRawAmount(\n this.pool.token1,\n PositionMath.getToken1Amount(\n this.pool.tickCurrent,\n this.tickLower,\n this.tickUpper,\n this.pool.sqrtRatioX96,\n this.liquidity\n )\n );\n }\n return this._token1Amount;\n }\n /**\n * Returns the lower and upper sqrt ratios if the price 'slips' up to slippage tolerance percentage\n * @param slippageTolerance The amount by which the price can 'slip' before the transaction will revert\n * @returns The sqrt ratios after slippage\n */\n ratiosAfterSlippage(slippageTolerance) {\n const priceLower = this.pool.token0Price.asFraction.multiply(new Percent$1(1).subtract(slippageTolerance));\n const priceUpper = this.pool.token0Price.asFraction.multiply(slippageTolerance.add(1));\n let sqrtRatioX96Lower = encodeSqrtRatioX96(priceLower.numerator, priceLower.denominator);\n if (sqrtRatioX96Lower <= TickMath.MIN_SQRT_RATIO) {\n sqrtRatioX96Lower = TickMath.MIN_SQRT_RATIO + 1n;\n }\n let sqrtRatioX96Upper = encodeSqrtRatioX96(priceUpper.numerator, priceUpper.denominator);\n if (sqrtRatioX96Upper >= TickMath.MAX_SQRT_RATIO) {\n sqrtRatioX96Upper = TickMath.MAX_SQRT_RATIO - 1n;\n }\n return {\n sqrtRatioX96Lower,\n sqrtRatioX96Upper\n };\n }\n /**\n * Returns the minimum amounts that must be sent in order to safely mint the amount of liquidity held by the position\n * with the given slippage tolerance\n * @param slippageTolerance Tolerance of unfavorable slippage from the current price\n * @returns The amounts, with slippage\n */\n mintAmountsWithSlippage(slippageTolerance) {\n const { sqrtRatioX96Upper, sqrtRatioX96Lower } = this.ratiosAfterSlippage(slippageTolerance);\n const poolLower = new Pool(\n this.pool.token0,\n this.pool.token1,\n this.pool.fee,\n sqrtRatioX96Lower,\n 0,\n TickMath.getTickAtSqrtRatio(sqrtRatioX96Lower)\n );\n const poolUpper = new Pool(\n this.pool.token0,\n this.pool.token1,\n this.pool.fee,\n sqrtRatioX96Upper,\n 0,\n TickMath.getTickAtSqrtRatio(sqrtRatioX96Upper)\n );\n const positionThatWillBeCreated = Position.fromAmounts({\n pool: this.pool,\n tickLower: this.tickLower,\n tickUpper: this.tickUpper,\n ...this.mintAmounts,\n // the mint amounts are what will be passed as calldata\n useFullPrecision: false\n });\n const { amount0 } = new Position({\n pool: poolUpper,\n liquidity: positionThatWillBeCreated.liquidity,\n tickLower: this.tickLower,\n tickUpper: this.tickUpper\n }).mintAmounts;\n const { amount1 } = new Position({\n pool: poolLower,\n liquidity: positionThatWillBeCreated.liquidity,\n tickLower: this.tickLower,\n tickUpper: this.tickUpper\n }).mintAmounts;\n return { amount0, amount1 };\n }\n /**\n * Returns the minimum amounts that should be requested in order to safely burn the amount of liquidity held by the\n * position with the given slippage tolerance\n * @param slippageTolerance tolerance of unfavorable slippage from the current price\n * @returns The amounts, with slippage\n */\n burnAmountsWithSlippage(slippageTolerance) {\n const { sqrtRatioX96Upper, sqrtRatioX96Lower } = this.ratiosAfterSlippage(slippageTolerance);\n const poolLower = new Pool(\n this.pool.token0,\n this.pool.token1,\n this.pool.fee,\n sqrtRatioX96Lower,\n 0,\n TickMath.getTickAtSqrtRatio(sqrtRatioX96Lower)\n );\n const poolUpper = new Pool(\n this.pool.token0,\n this.pool.token1,\n this.pool.fee,\n sqrtRatioX96Upper,\n 0,\n TickMath.getTickAtSqrtRatio(sqrtRatioX96Upper)\n );\n const { amount0 } = new Position({\n pool: poolUpper,\n liquidity: this.liquidity,\n tickLower: this.tickLower,\n tickUpper: this.tickUpper\n });\n const { amount1 } = new Position({\n pool: poolLower,\n liquidity: this.liquidity,\n tickLower: this.tickLower,\n tickUpper: this.tickUpper\n });\n return { amount0: amount0.quotient, amount1: amount1.quotient };\n }\n /**\n * Returns the minimum amounts that must be sent in order to mint the amount of liquidity held by the position at\n * the current price for the pool\n */\n get mintAmounts() {\n if (this._mintAmounts === null) {\n if (this.pool.tickCurrent < this.tickLower) {\n return {\n amount0: SqrtPriceMath.getAmount0Delta(\n TickMath.getSqrtRatioAtTick(this.tickLower),\n TickMath.getSqrtRatioAtTick(this.tickUpper),\n this.liquidity,\n true\n ),\n amount1: ZERO\n };\n }\n if (this.pool.tickCurrent < this.tickUpper) {\n return {\n amount0: SqrtPriceMath.getAmount0Delta(\n this.pool.sqrtRatioX96,\n TickMath.getSqrtRatioAtTick(this.tickUpper),\n this.liquidity,\n true\n ),\n amount1: SqrtPriceMath.getAmount1Delta(\n TickMath.getSqrtRatioAtTick(this.tickLower),\n this.pool.sqrtRatioX96,\n this.liquidity,\n true\n )\n };\n }\n return {\n amount0: ZERO,\n amount1: SqrtPriceMath.getAmount1Delta(\n TickMath.getSqrtRatioAtTick(this.tickLower),\n TickMath.getSqrtRatioAtTick(this.tickUpper),\n this.liquidity,\n true\n )\n };\n }\n return this._mintAmounts;\n }\n /**\n * Computes the maximum amount of liquidity received for a given amount of token0, token1,\n * and the prices at the tick boundaries.\n * @param pool The pool for which the position should be created\n * @param tickLower The lower tick of the position\n * @param tickUpper The upper tick of the position\n * @param amount0 token0 amount\n * @param amount1 token1 amount\n * @param useFullPrecision If false, liquidity will be maximized according to what the router can calculate,\n * not what core can theoretically support\n * @returns The amount of liquidity for the position\n */\n static fromAmounts({\n pool,\n tickLower,\n tickUpper,\n amount0,\n amount1,\n useFullPrecision\n }) {\n const sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(tickLower);\n const sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(tickUpper);\n return new Position({\n pool,\n tickLower,\n tickUpper,\n liquidity: maxLiquidityForAmounts(\n pool.sqrtRatioX96,\n sqrtRatioAX96,\n sqrtRatioBX96,\n amount0,\n amount1,\n useFullPrecision\n )\n });\n }\n /**\n * Computes a position with the maximum amount of liquidity received for a given amount of token0, assuming an unlimited amount of token1\n * @param pool The pool for which the position is created\n * @param tickLower The lower tick\n * @param tickUpper The upper tick\n * @param amount0 The desired amount of token0\n * @param useFullPrecision If true, liquidity will be maximized according to what the router can calculate,\n * not what core can theoretically support\n * @returns The position\n */\n static fromAmount0({\n pool,\n tickLower,\n tickUpper,\n amount0,\n useFullPrecision\n }) {\n return Position.fromAmounts({ pool, tickLower, tickUpper, amount0, amount1: MaxUint256, useFullPrecision });\n }\n /**\n * Computes a position with the maximum amount of liquidity received for a given amount of token1, assuming an unlimited amount of token0\n * @param pool The pool for which the position is created\n * @param tickLower The lower tick\n * @param tickUpper The upper tick\n * @param amount1 The desired amount of token1\n * @returns The position\n */\n static fromAmount1({\n pool,\n tickLower,\n tickUpper,\n amount1\n }) {\n return Position.fromAmounts({ pool, tickLower, tickUpper, amount0: MaxUint256, amount1, useFullPrecision: true });\n }\n};\nvar Route = class {\n /**\n * Creates an instance of route.\n * @param pools An array of `Pool` objects, ordered by the route the swap will take\n * @param input The input token\n * @param output The output token\n */\n constructor(pools, input, output) {\n this._midPrice = null;\n invariant9(pools.length > 0, \"POOLS\");\n const chainId = pools[0].chainId;\n const allOnSameChain = pools.every((pool) => pool.chainId === chainId);\n invariant9(allOnSameChain, \"CHAIN_IDS\");\n const wrappedInput = input.wrapped;\n invariant9(pools[0].involvesToken(wrappedInput), \"INPUT\");\n invariant9(pools[pools.length - 1].involvesToken(output.wrapped), \"OUTPUT\");\n const tokenPath = [wrappedInput];\n for (const [i, pool] of pools.entries()) {\n const currentInputToken = tokenPath[i];\n invariant9(currentInputToken.equals(pool.token0) || currentInputToken.equals(pool.token1), \"PATH\");\n const nextToken = currentInputToken.equals(pool.token0) ? pool.token1 : pool.token0;\n tokenPath.push(nextToken);\n }\n this.pools = pools;\n this.tokenPath = tokenPath;\n this.input = input;\n this.output = output ?? tokenPath[tokenPath.length - 1];\n }\n get chainId() {\n return this.pools[0].chainId;\n }\n /**\n * Returns the mid price of the route\n */\n get midPrice() {\n if (this._midPrice !== null)\n return this._midPrice;\n const price = this.pools.slice(1).reduce(\n ({ nextInput, price: price2 }, pool) => {\n return nextInput.equals(pool.token0) ? {\n nextInput: pool.token1,\n price: price2.multiply(pool.token0Price)\n } : {\n nextInput: pool.token0,\n price: price2.multiply(pool.token1Price)\n };\n },\n this.pools[0].token0.equals(this.input.wrapped) ? {\n nextInput: this.pools[0].token1,\n price: this.pools[0].token0Price\n } : {\n nextInput: this.pools[0].token0,\n price: this.pools[0].token1Price\n }\n ).price;\n return this._midPrice = new Price(this.input, this.output, price.denominator, price.numerator);\n }\n};\nfunction tradeComparator(a, b) {\n invariant9(a.inputAmount.currency.equals(b.inputAmount.currency), \"INPUT_CURRENCY\");\n invariant9(a.outputAmount.currency.equals(b.outputAmount.currency), \"OUTPUT_CURRENCY\");\n if (a.outputAmount.equalTo(b.outputAmount)) {\n if (a.inputAmount.equalTo(b.inputAmount)) {\n const aHops = a.swaps.reduce((total, cur) => total + cur.route.tokenPath.length, 0);\n const bHops = b.swaps.reduce((total, cur) => total + cur.route.tokenPath.length, 0);\n return aHops - bHops;\n }\n if (a.inputAmount.lessThan(b.inputAmount)) {\n return -1;\n } else {\n return 1;\n }\n } else {\n if (a.outputAmount.lessThan(b.outputAmount)) {\n return 1;\n } else {\n return -1;\n }\n }\n}\nvar Trade = class {\n /**\n * @deprecated Deprecated in favor of 'swaps' property. If the trade consists of multiple routes\n * this will return an error.\n *\n * When the trade consists of just a single route, this returns the route of the trade,\n * i.e. which pools the trade goes through.\n */\n get route() {\n invariant9(this.swaps.length == 1, \"MULTIPLE_ROUTES\");\n return this.swaps[0].route;\n }\n /**\n * The input amount for the trade assuming no slippage.\n */\n get inputAmount() {\n if (this._inputAmount) {\n return this._inputAmount;\n }\n const inputCurrency = this.swaps[0].inputAmount.currency;\n const totalInputFromRoutes = this.swaps.map(({ inputAmount }) => inputAmount).reduce((total, cur) => total.add(cur), CurrencyAmount.fromRawAmount(inputCurrency, 0));\n this._inputAmount = totalInputFromRoutes;\n return this._inputAmount;\n }\n /**\n * The output amount for the trade assuming no slippage.\n */\n get outputAmount() {\n if (this._outputAmount) {\n return this._outputAmount;\n }\n const outputCurrency = this.swaps[0].outputAmount.currency;\n const totalOutputFromRoutes = this.swaps.map(({ outputAmount }) => outputAmount).reduce((total, cur) => total.add(cur), CurrencyAmount.fromRawAmount(outputCurrency, 0));\n this._outputAmount = totalOutputFromRoutes;\n return this._outputAmount;\n }\n /**\n * The price expressed in terms of output amount/input amount.\n */\n get executionPrice() {\n return this._executionPrice ?? (this._executionPrice = new Price(\n this.inputAmount.currency,\n this.outputAmount.currency,\n this.inputAmount.quotient,\n this.outputAmount.quotient\n ));\n }\n /**\n * Returns the percent difference between the route's mid price and the price impact\n */\n get priceImpact() {\n if (this._priceImpact) {\n return this._priceImpact;\n }\n let spotOutputAmount = CurrencyAmount.fromRawAmount(this.outputAmount.currency, 0);\n for (const { route, inputAmount } of this.swaps) {\n const midPrice = route.midPrice;\n spotOutputAmount = spotOutputAmount.add(midPrice.quote(inputAmount));\n }\n const priceImpact = spotOutputAmount.subtract(this.outputAmount).divide(spotOutputAmount);\n this._priceImpact = new Percent$1(priceImpact.numerator, priceImpact.denominator);\n return this._priceImpact;\n }\n /**\n * Constructs an exact in trade with the given amount in and route\n * @template TInput The input token, either Ether or an ERC-20\n * @template TOutput The output token, either Ether or an ERC-20\n * @param route The route of the exact in trade\n * @param amountIn The amount being passed in\n * @returns The exact in trade\n */\n static async exactIn(route, amountIn) {\n return Trade.fromRoute(route, amountIn, TradeType.EXACT_INPUT);\n }\n /**\n * Constructs an exact out trade with the given amount out and route\n * @template TInput The input token, either Ether or an ERC-20\n * @template TOutput The output token, either Ether or an ERC-20\n * @param route The route of the exact out trade\n * @param amountOut The amount returned by the trade\n * @returns The exact out trade\n */\n static async exactOut(route, amountOut) {\n return Trade.fromRoute(route, amountOut, TradeType.EXACT_OUTPUT);\n }\n /**\n * Constructs a trade by simulating swaps through the given route\n * @template TInput The input token, either Ether or an ERC-20.\n * @template TOutput The output token, either Ether or an ERC-20.\n * @template TTradeType The type of the trade, either exact in or exact out.\n * @param route route to swap through\n * @param amount the amount specified, either input or output, depending on tradeType\n * @param tradeType whether the trade is an exact input or exact output swap\n * @returns The route\n */\n static async fromRoute(route, amount, tradeType) {\n const amounts = new Array(route.tokenPath.length);\n let inputAmount;\n let outputAmount;\n if (tradeType === TradeType.EXACT_INPUT) {\n invariant9(amount.currency.equals(route.input), \"INPUT\");\n amounts[0] = amount.wrapped;\n for (let i = 0; i < route.tokenPath.length - 1; i++) {\n const pool = route.pools[i];\n const [outputAmount2] = await pool.getOutputAmount(amounts[i]);\n amounts[i + 1] = outputAmount2;\n }\n inputAmount = CurrencyAmount.fromFractionalAmount(route.input, amount.numerator, amount.denominator);\n outputAmount = CurrencyAmount.fromFractionalAmount(\n route.output,\n amounts[amounts.length - 1].numerator,\n amounts[amounts.length - 1].denominator\n );\n } else {\n invariant9(amount.currency.equals(route.output), \"OUTPUT\");\n amounts[amounts.length - 1] = amount.wrapped;\n for (let i = route.tokenPath.length - 1; i > 0; i--) {\n const pool = route.pools[i - 1];\n const [inputAmount2] = await pool.getInputAmount(amounts[i]);\n amounts[i - 1] = inputAmount2;\n }\n inputAmount = CurrencyAmount.fromFractionalAmount(route.input, amounts[0].numerator, amounts[0].denominator);\n outputAmount = CurrencyAmount.fromFractionalAmount(route.output, amount.numerator, amount.denominator);\n }\n return new Trade({\n routes: [{ inputAmount, outputAmount, route }],\n tradeType\n });\n }\n /**\n * Constructs a trade from routes by simulating swaps\n *\n * @template TInput The input token, either Ether or an ERC-20.\n * @template TOutput The output token, either Ether or an ERC-20.\n * @template TTradeType The type of the trade, either exact in or exact out.\n * @param routes the routes to swap through and how much of the amount should be routed through each\n * @param tradeType whether the trade is an exact input or exact output swap\n * @returns The trade\n */\n static async fromRoutes(routes, tradeType) {\n const populatedRoutes = [];\n for (const { route, amount } of routes) {\n const amounts = new Array(route.tokenPath.length);\n let inputAmount;\n let outputAmount;\n if (tradeType === TradeType.EXACT_INPUT) {\n invariant9(amount.currency.equals(route.input), \"INPUT\");\n inputAmount = CurrencyAmount.fromFractionalAmount(route.input, amount.numerator, amount.denominator);\n amounts[0] = CurrencyAmount.fromFractionalAmount(route.input.wrapped, amount.numerator, amount.denominator);\n for (let i = 0; i < route.tokenPath.length - 1; i++) {\n const pool = route.pools[i];\n const [outputAmount2] = await pool.getOutputAmount(amounts[i]);\n amounts[i + 1] = outputAmount2;\n }\n outputAmount = CurrencyAmount.fromFractionalAmount(\n route.output,\n amounts[amounts.length - 1].numerator,\n amounts[amounts.length - 1].denominator\n );\n } else {\n invariant9(amount.currency.equals(route.output), \"OUTPUT\");\n outputAmount = CurrencyAmount.fromFractionalAmount(route.output, amount.numerator, amount.denominator);\n amounts[amounts.length - 1] = CurrencyAmount.fromFractionalAmount(\n route.output.wrapped,\n amount.numerator,\n amount.denominator\n );\n for (let i = route.tokenPath.length - 1; i > 0; i--) {\n const pool = route.pools[i - 1];\n const [inputAmount2] = await pool.getInputAmount(amounts[i]);\n amounts[i - 1] = inputAmount2;\n }\n inputAmount = CurrencyAmount.fromFractionalAmount(route.input, amounts[0].numerator, amounts[0].denominator);\n }\n populatedRoutes.push({ route, inputAmount, outputAmount });\n }\n return new Trade({\n routes: populatedRoutes,\n tradeType\n });\n }\n /**\n * Creates a trade without computing the result of swapping through the route. Useful when you have simulated the trade\n * elsewhere and do not have any tick data\n * @template TInput The input token, either Ether or an ERC-20\n * @template TOutput The output token, either Ether or an ERC-20\n * @template TTradeType The type of the trade, either exact in or exact out\n * @param constructorArguments The arguments passed to the trade constructor\n * @returns The unchecked trade\n */\n static createUncheckedTrade(constructorArguments) {\n return new Trade({\n ...constructorArguments,\n routes: [\n {\n inputAmount: constructorArguments.inputAmount,\n outputAmount: constructorArguments.outputAmount,\n route: constructorArguments.route\n }\n ]\n });\n }\n /**\n * Creates a trade without computing the result of swapping through the routes. Useful when you have simulated the trade\n * elsewhere and do not have any tick data\n * @template TInput The input token, either Ether or an ERC-20\n * @template TOutput The output token, either Ether or an ERC-20\n * @template TTradeType The type of the trade, either exact in or exact out\n * @param constructorArguments The arguments passed to the trade constructor\n * @returns The unchecked trade\n */\n static createUncheckedTradeWithMultipleRoutes(constructorArguments) {\n return new Trade(constructorArguments);\n }\n /**\n * Construct a trade by passing in the pre-computed property values\n * @param routes The routes through which the trade occurs\n * @param tradeType The type of trade, exact input or exact output\n */\n constructor({\n routes,\n tradeType\n }) {\n const inputCurrency = routes[0].inputAmount.currency;\n const outputCurrency = routes[0].outputAmount.currency;\n invariant9(\n routes.every(({ route }) => inputCurrency.wrapped.equals(route.input.wrapped)),\n \"INPUT_CURRENCY_MATCH\"\n );\n invariant9(\n routes.every(({ route }) => outputCurrency.wrapped.equals(route.output.wrapped)),\n \"OUTPUT_CURRENCY_MATCH\"\n );\n const numPools = routes.map(({ route }) => route.pools.length).reduce((total, cur) => total + cur, 0);\n const poolAddressSet = /* @__PURE__ */ new Set();\n for (const { route } of routes) {\n for (const pool of route.pools) {\n poolAddressSet.add(Pool.getAddress(pool.token0, pool.token1, pool.fee));\n }\n }\n invariant9(numPools == poolAddressSet.size, \"POOLS_DUPLICATED\");\n this.swaps = routes;\n this.tradeType = tradeType;\n }\n /**\n * Get the minimum amount that must be received from this trade for the given slippage tolerance\n * @param slippageTolerance The tolerance of unfavorable slippage from the execution price of this trade\n * @returns The amount out\n */\n minimumAmountOut(slippageTolerance, amountOut = this.outputAmount) {\n invariant9(!slippageTolerance.lessThan(ZERO$1), \"SLIPPAGE_TOLERANCE\");\n if (this.tradeType === TradeType.EXACT_OUTPUT) {\n return amountOut;\n } else {\n const slippageAdjustedAmountOut = new Fraction(ONE$1).add(slippageTolerance).invert().multiply(amountOut.quotient).quotient;\n return CurrencyAmount.fromRawAmount(amountOut.currency, slippageAdjustedAmountOut);\n }\n }\n /**\n * Get the maximum amount in that can be spent via this trade for the given slippage tolerance\n * @param slippageTolerance The tolerance of unfavorable slippage from the execution price of this trade\n * @returns The amount in\n */\n maximumAmountIn(slippageTolerance, amountIn = this.inputAmount) {\n invariant9(!slippageTolerance.lessThan(ZERO$1), \"SLIPPAGE_TOLERANCE\");\n if (this.tradeType === TradeType.EXACT_INPUT) {\n return amountIn;\n } else {\n const slippageAdjustedAmountIn = new Fraction(ONE$1).add(slippageTolerance).multiply(amountIn.quotient).quotient;\n return CurrencyAmount.fromRawAmount(amountIn.currency, slippageAdjustedAmountIn);\n }\n }\n /**\n * Return the execution price after accounting for slippage tolerance\n * @param slippageTolerance the allowed tolerated slippage\n * @returns The execution price\n */\n worstExecutionPrice(slippageTolerance) {\n return new Price(\n this.inputAmount.currency,\n this.outputAmount.currency,\n this.maximumAmountIn(slippageTolerance).quotient,\n this.minimumAmountOut(slippageTolerance).quotient\n );\n }\n /**\n * Given a list of pools, and a fixed amount in, returns the top `maxNumResults` trades that go from an input token\n * amount to an output token, making at most `maxHops` hops.\n * Note this does not consider aggregation, as routes are linear. It's possible a better route exists by splitting\n * the amount in among multiple routes.\n * @param pools the pools to consider in finding the best trade\n * @param nextAmountIn exact amount of input currency to spend\n * @param currencyOut the desired currency out\n * @param maxNumResults maximum number of results to return\n * @param maxHops maximum number of hops a returned trade can make, e.g. 1 hop goes through a single pool\n * @param currentPools used in recursion; the current list of pools\n * @param currencyAmountIn used in recursion; the original value of the currencyAmountIn parameter\n * @param bestTrades used in recursion; the current list of best trades\n * @returns The exact in trade\n */\n static async bestTradeExactIn(pools, currencyAmountIn, currencyOut, { maxNumResults = 3, maxHops = 3 } = {}, currentPools = [], nextAmountIn = currencyAmountIn, bestTrades = []) {\n invariant9(pools.length > 0, \"POOLS\");\n invariant9(maxHops > 0, \"MAX_HOPS\");\n invariant9(currencyAmountIn === nextAmountIn || currentPools.length > 0, \"INVALID_RECURSION\");\n const amountIn = nextAmountIn.wrapped;\n const tokenOut = currencyOut.wrapped;\n for (let i = 0; i < pools.length; i++) {\n const pool = pools[i];\n if (!pool.token0.equals(amountIn.currency) && !pool.token1.equals(amountIn.currency))\n continue;\n let amountOut;\n try {\n ;\n [amountOut] = await pool.getOutputAmount(amountIn);\n } catch (error) {\n if (error.isInsufficientInputAmountError) {\n continue;\n }\n throw error;\n }\n if (amountOut.currency.isToken && amountOut.currency.equals(tokenOut)) {\n sortedInsert(\n bestTrades,\n await Trade.fromRoute(\n new Route([...currentPools, pool], currencyAmountIn.currency, currencyOut),\n currencyAmountIn,\n TradeType.EXACT_INPUT\n ),\n maxNumResults,\n tradeComparator\n );\n } else if (maxHops > 1 && pools.length > 1) {\n const poolsExcludingThisPool = pools.slice(0, i).concat(pools.slice(i + 1, pools.length));\n await Trade.bestTradeExactIn(\n poolsExcludingThisPool,\n currencyAmountIn,\n currencyOut,\n {\n maxNumResults,\n maxHops: maxHops - 1\n },\n [...currentPools, pool],\n amountOut,\n bestTrades\n );\n }\n }\n return bestTrades;\n }\n /**\n * similar to the above method but instead targets a fixed output amount\n * given a list of pools, and a fixed amount out, returns the top `maxNumResults` trades that go from an input token\n * to an output token amount, making at most `maxHops` hops\n * note this does not consider aggregation, as routes are linear. it's possible a better route exists by splitting\n * the amount in among multiple routes.\n * @param pools the pools to consider in finding the best trade\n * @param currencyIn the currency to spend\n * @param currencyAmountOut the desired currency amount out\n * @param nextAmountOut the exact amount of currency out\n * @param maxNumResults maximum number of results to return\n * @param maxHops maximum number of hops a returned trade can make, e.g. 1 hop goes through a single pool\n * @param currentPools used in recursion; the current list of pools\n * @param bestTrades used in recursion; the current list of best trades\n * @returns The exact out trade\n */\n static async bestTradeExactOut(pools, currencyIn, currencyAmountOut, { maxNumResults = 3, maxHops = 3 } = {}, currentPools = [], nextAmountOut = currencyAmountOut, bestTrades = []) {\n invariant9(pools.length > 0, \"POOLS\");\n invariant9(maxHops > 0, \"MAX_HOPS\");\n invariant9(currencyAmountOut === nextAmountOut || currentPools.length > 0, \"INVALID_RECURSION\");\n const amountOut = nextAmountOut.wrapped;\n const tokenIn = currencyIn.wrapped;\n for (let i = 0; i < pools.length; i++) {\n const pool = pools[i];\n if (!pool.token0.equals(amountOut.currency) && !pool.token1.equals(amountOut.currency))\n continue;\n let amountIn;\n try {\n ;\n [amountIn] = await pool.getInputAmount(amountOut);\n } catch (error) {\n if (error.isInsufficientReservesError) {\n continue;\n }\n throw error;\n }\n if (amountIn.currency.equals(tokenIn)) {\n sortedInsert(\n bestTrades,\n await Trade.fromRoute(\n new Route([pool, ...currentPools], currencyIn, currencyAmountOut.currency),\n currencyAmountOut,\n TradeType.EXACT_OUTPUT\n ),\n maxNumResults,\n tradeComparator\n );\n } else if (maxHops > 1 && pools.length > 1) {\n const poolsExcludingThisPool = pools.slice(0, i).concat(pools.slice(i + 1, pools.length));\n await Trade.bestTradeExactOut(\n poolsExcludingThisPool,\n currencyIn,\n currencyAmountOut,\n {\n maxNumResults,\n maxHops: maxHops - 1\n },\n [pool, ...currentPools],\n amountIn,\n bestTrades\n );\n }\n }\n return bestTrades;\n }\n};\n\n// src/utils/calldata.ts\nfunction toHex(bigintIsh) {\n const bigInt = BigInt(bigintIsh);\n let hex = bigInt.toString(16);\n if (hex.length % 2 !== 0) {\n hex = `0${hex}`;\n }\n return `0x${hex}`;\n}\nfunction encodeRouteToPath(route, exactOutput) {\n const firstInputToken = route.input.wrapped;\n const { path, types } = route.pools.reduce(\n ({ inputToken, path: path2, types: types2 }, pool, index) => {\n const outputToken = pool.token0.equals(inputToken) ? pool.token1 : pool.token0;\n if (index === 0) {\n return {\n inputToken: outputToken,\n types: [\"address\", \"uint24\", \"address\"],\n path: [inputToken.address, pool.fee, outputToken.address]\n };\n }\n return {\n inputToken: outputToken,\n types: [...types2, \"uint24\", \"address\"],\n path: [...path2, pool.fee, outputToken.address]\n };\n },\n { inputToken: firstInputToken, path: [], types: [] }\n );\n return exactOutput ? encodePacked(types.reverse(), path.reverse()) : encodePacked(types, path);\n}\nfunction nearestUsableTick(tick, tickSpacing) {\n invariant9(Number.isInteger(tick) && Number.isInteger(tickSpacing), \"INTEGERS\");\n invariant9(tickSpacing > 0, \"TICK_SPACING\");\n invariant9(tick >= TickMath.MIN_TICK && tick <= TickMath.MAX_TICK, \"TICK_BOUND\");\n const rounded = Math.round(tick / tickSpacing) * tickSpacing;\n if (rounded < TickMath.MIN_TICK)\n return rounded + tickSpacing;\n if (rounded > TickMath.MAX_TICK)\n return rounded - tickSpacing;\n return rounded;\n}\n\n// src/utils/position.ts\nvar PositionLibrary = class {\n /**\n * Cannot be constructed.\n */\n constructor() {\n }\n // replicates the portions of Position#update required to compute unaccounted fees\n static getTokensOwed(feeGrowthInside0LastX128, feeGrowthInside1LastX128, liquidity, feeGrowthInside0X128, feeGrowthInside1X128) {\n const tokensOwed0 = subIn256(feeGrowthInside0X128, feeGrowthInside0LastX128) * liquidity / Q128;\n const tokensOwed1 = subIn256(feeGrowthInside1X128, feeGrowthInside1LastX128) * liquidity / Q128;\n return [tokensOwed0, tokensOwed1];\n }\n};\n\n// src/utils/tickLibrary.ts\nvar Q256 = 2n ** 256n;\nfunction subIn256(x, y) {\n const difference = x - y;\n if (difference < ZERO) {\n return Q256 + difference;\n }\n return difference;\n}\nvar TickLibrary = class {\n /**\n * Cannot be constructed.\n */\n constructor() {\n }\n static getFeeGrowthInside(feeGrowthOutsideLower, feeGrowthOutsideUpper, tickLower, tickUpper, tickCurrent, feeGrowthGlobal0X128, feeGrowthGlobal1X128) {\n let feeGrowthBelow0X128;\n let feeGrowthBelow1X128;\n if (tickCurrent >= tickLower) {\n feeGrowthBelow0X128 = feeGrowthOutsideLower.feeGrowthOutside0X128;\n feeGrowthBelow1X128 = feeGrowthOutsideLower.feeGrowthOutside1X128;\n } else {\n feeGrowthBelow0X128 = subIn256(feeGrowthGlobal0X128, feeGrowthOutsideLower.feeGrowthOutside0X128);\n feeGrowthBelow1X128 = subIn256(feeGrowthGlobal1X128, feeGrowthOutsideLower.feeGrowthOutside1X128);\n }\n let feeGrowthAbove0X128;\n let feeGrowthAbove1X128;\n if (tickCurrent < tickUpper) {\n feeGrowthAbove0X128 = feeGrowthOutsideUpper.feeGrowthOutside0X128;\n feeGrowthAbove1X128 = feeGrowthOutsideUpper.feeGrowthOutside1X128;\n } else {\n feeGrowthAbove0X128 = subIn256(feeGrowthGlobal0X128, feeGrowthOutsideUpper.feeGrowthOutside0X128);\n feeGrowthAbove1X128 = subIn256(feeGrowthGlobal1X128, feeGrowthOutsideUpper.feeGrowthOutside1X128);\n }\n return [\n subIn256(subIn256(feeGrowthGlobal0X128, feeGrowthBelow0X128), feeGrowthAbove0X128),\n subIn256(subIn256(feeGrowthGlobal1X128, feeGrowthBelow1X128), feeGrowthAbove1X128)\n ];\n }\n};\nfunction parseNumberToFraction(num, precision = 6) {\n if (Number.isNaN(num) || !Number.isFinite(num)) {\n return void 0;\n }\n const scalar = 10 ** precision;\n return new Fraction$1(BigInt(Math.floor(num * scalar)), BigInt(scalar));\n}\n\n// src/utils/feeCalculator.ts\nvar FeeCalculator = {\n getEstimatedLPFee,\n getEstimatedLPFeeByAmounts,\n getLiquidityFromTick,\n getLiquidityFromSqrtRatioX96,\n getAverageLiquidity,\n getLiquidityBySingleAmount,\n getDependentAmount,\n getLiquidityByAmountsAndPrice,\n getAmountsByLiquidityAndPrice,\n getAmountsAtNewPrice\n};\nfunction getEstimatedLPFeeWithProtocolFee({ amount, currency, ...rest }) {\n return getEstimatedLPFeeByAmountsWithProtocolFee({\n ...rest,\n amountA: amount,\n amountB: CurrencyAmount$1.fromRawAmount(currency, MaxUint256$1)\n });\n}\nfunction getEstimatedLPFee({ amount, currency, ...rest }) {\n return getEstimatedLPFeeByAmounts({\n ...rest,\n amountA: amount,\n amountB: CurrencyAmount$1.fromRawAmount(currency, MaxUint256$1)\n });\n}\nfunction getEstimatedLPFeeByAmountsWithProtocolFee(options) {\n try {\n return tryGetEstimatedLPFeeByAmounts(options);\n } catch (e) {\n console.error(e);\n return new Fraction$1(ZERO$2);\n }\n}\nfunction getEstimatedLPFeeByAmounts({ protocolFee = ZERO_PERCENT, ...rest }) {\n try {\n const fee = tryGetEstimatedLPFeeByAmounts(rest);\n return ONE_HUNDRED_PERCENT.subtract(protocolFee).multiply(fee).asFraction;\n } catch (e) {\n console.error(e);\n return new Fraction$1(ZERO$2);\n }\n}\nfunction tryGetEstimatedLPFeeByAmounts({\n amountA,\n amountB,\n volume24H,\n sqrtRatioX96,\n tickLower,\n tickUpper,\n mostActiveLiquidity,\n fee,\n insidePercentage = ONE_HUNDRED_PERCENT\n}) {\n invariant9(!Number.isNaN(fee) && fee >= 0, \"INVALID_FEE\");\n const tickCurrent = TickMath.getTickAtSqrtRatio(sqrtRatioX96);\n if (tickCurrent < tickLower || tickCurrent > tickUpper) {\n return new Fraction$1(ZERO$2);\n }\n const liquidity = FeeCalculator.getLiquidityByAmountsAndPrice({\n amountA,\n amountB,\n tickUpper,\n tickLower,\n sqrtRatioX96\n });\n if (!liquidity) {\n return new Fraction$1(ZERO$2);\n }\n const volumeInFraction = parseNumberToFraction(volume24H) || new Fraction$1(ZERO$2);\n return insidePercentage.multiply(volumeInFraction.multiply(BigInt(fee)).multiply(liquidity)).divide(MAX_FEE * (liquidity + mostActiveLiquidity)).asFraction;\n}\nfunction getDependentAmount(options) {\n const { currency, amount, sqrtRatioX96, tickLower, tickUpper } = options;\n const currentTick = TickMath.getTickAtSqrtRatio(sqrtRatioX96);\n const liquidity = FeeCalculator.getLiquidityBySingleAmount(options);\n const isToken0 = currency.wrapped.sortsBefore(amount.currency.wrapped);\n const getTokenAmount = isToken0 ? PositionMath.getToken0Amount : PositionMath.getToken1Amount;\n if (!liquidity) {\n return void 0;\n }\n return CurrencyAmount$1.fromRawAmount(\n currency,\n getTokenAmount(currentTick, tickLower, tickUpper, sqrtRatioX96, liquidity)\n );\n}\nfunction getLiquidityBySingleAmount({ amount, currency, ...rest }) {\n return getLiquidityByAmountsAndPrice({\n amountA: amount,\n amountB: CurrencyAmount$1.fromRawAmount(currency, MaxUint256$1),\n ...rest\n });\n}\nfunction getLiquidityByAmountsAndPrice({\n amountA,\n amountB,\n tickUpper,\n tickLower,\n sqrtRatioX96\n}) {\n const isToken0 = amountA.currency.wrapped.address !== amountB.currency.wrapped.address ? amountA.currency.wrapped.sortsBefore(amountB.currency.wrapped) : true;\n const [inputAmount0, inputAmount1] = isToken0 ? [amountA.quotient, amountB.quotient] : [amountB.quotient, amountA.quotient];\n const sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(tickLower);\n const sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(tickUpper);\n try {\n return maxLiquidityForAmounts(sqrtRatioX96, sqrtRatioAX96, sqrtRatioBX96, inputAmount0, inputAmount1, true);\n } catch (e) {\n console.error(e);\n return void 0;\n }\n}\nfunction getAmountsByLiquidityAndPrice(options) {\n const { currencyA, currencyB, liquidity, sqrtRatioX96, tickLower, tickUpper } = options;\n const currentTick = TickMath.getTickAtSqrtRatio(sqrtRatioX96);\n const isToken0 = currencyA.wrapped.sortsBefore(currencyB.wrapped);\n const adjustedAmount0 = PositionMath.getToken0Amount(currentTick, tickLower, tickUpper, sqrtRatioX96, liquidity);\n const adjustedAmount1 = PositionMath.getToken1Amount(currentTick, tickLower, tickUpper, sqrtRatioX96, liquidity);\n return [\n CurrencyAmount$1.fromRawAmount(currencyA, isToken0 ? adjustedAmount0 : adjustedAmount1),\n CurrencyAmount$1.fromRawAmount(currencyB, isToken0 ? adjustedAmount1 : adjustedAmount0)\n ];\n}\nfunction getAmountsAtNewPrice({ newSqrtRatioX96, ...rest }) {\n const { tickLower, tickUpper, amountA, amountB } = rest;\n const liquidity = FeeCalculator.getLiquidityByAmountsAndPrice(rest);\n if (!liquidity) {\n return void 0;\n }\n return FeeCalculator.getAmountsByLiquidityAndPrice({\n liquidity,\n currencyA: amountA.currency,\n currencyB: amountB.currency,\n tickLower,\n tickUpper,\n sqrtRatioX96: newSqrtRatioX96\n });\n}\nfunction getAverageLiquidity(ticks, tickSpacing, tickLower, tickUpper) {\n invariant9(tickLower <= tickUpper, \"INVALID_TICK_RANGE\");\n TickList.validateList(ticks, tickSpacing);\n if (tickLower === tickUpper) {\n return FeeCalculator.getLiquidityFromTick(ticks, tickLower);\n }\n const lowerOutOfBound = tickLower < ticks[0].index;\n let lastTick = lowerOutOfBound ? new Tick({ index: TickMath.MIN_TICK, liquidityNet: ZERO$2, liquidityGross: ZERO$2 }) : TickList.nextInitializedTick(ticks, tickLower, true);\n let currentTick = TickList.nextInitializedTick(ticks, tickLower, false);\n let currentL = lowerOutOfBound ? ZERO$2 : FeeCalculator.getLiquidityFromTick(ticks, currentTick.index);\n let weightedL = ZERO$2;\n const getWeightedLFromLastTickTo = (toTick) => currentL * BigInt(toTick - Math.max(lastTick.index, tickLower));\n while (currentTick.index < tickUpper) {\n weightedL += getWeightedLFromLastTickTo(currentTick.index);\n currentL += currentTick.liquidityNet;\n lastTick = currentTick;\n if (currentTick.index === ticks[ticks.length - 1].index) {\n break;\n }\n currentTick = TickList.nextInitializedTick(ticks, currentTick.index, false);\n }\n weightedL += getWeightedLFromLastTickTo(tickUpper);\n return weightedL / BigInt(tickUpper - tickLower);\n}\nfunction getLiquidityFromSqrtRatioX96(ticks, sqrtRatioX96) {\n const tick = TickMath.getTickAtSqrtRatio(sqrtRatioX96);\n return FeeCalculator.getLiquidityFromTick(ticks, tick);\n}\nfunction getLiquidityFromTick(ticks, tick) {\n let liquidity = ZERO$2;\n if (!ticks?.length)\n return liquidity;\n if (tick < ticks[0].index || tick > ticks[ticks.length - 1].index) {\n return liquidity;\n }\n for (let i = 0; i < ticks.length - 1; ++i) {\n liquidity += ticks[i].liquidityNet;\n const lowerTick = ticks[i].index;\n const upperTick = ticks[i + 1]?.index;\n if (lowerTick <= tick && tick <= upperTick) {\n break;\n }\n }\n return liquidity;\n}\nvar FEE_BASE = 10n ** 4n;\nfunction parseProtocolFees(feeProtocol) {\n const packed = Number(feeProtocol);\n if (Number.isNaN(packed)) {\n throw new Error(`Invalid fee protocol ${feeProtocol}`);\n }\n const token0ProtocolFee = packed % 2 ** 16;\n const token1ProtocolFee = packed >> 16;\n return [new Percent(token0ProtocolFee, FEE_BASE), new Percent(token1ProtocolFee, FEE_BASE)];\n}\nfunction sqrtRatioX96ToPrice(sqrtRatioX96, currencyA, currencyB) {\n const ratioX192 = sqrtRatioX96 * sqrtRatioX96;\n return currencyA.wrapped.sortsBefore(currencyB.wrapped) ? new Price$1(currencyA.wrapped, currencyB.wrapped, Q192, ratioX192) : new Price$1(currencyA.wrapped, currencyB.wrapped, ratioX192, Q192);\n}\nvar IMulticall = [\n {\n inputs: [\n {\n internalType: \"bytes[]\",\n name: \"data\",\n type: \"bytes[]\"\n }\n ],\n name: \"multicall\",\n outputs: [\n {\n internalType: \"bytes[]\",\n name: \"results\",\n type: \"bytes[]\"\n }\n ],\n stateMutability: \"payable\",\n type: \"function\"\n }\n];\nvar _Multicall = class {\n /**\n * Cannot be constructed.\n */\n constructor() {\n }\n static encodeMulticall(calldatas) {\n if (!Array.isArray(calldatas)) {\n calldatas = [calldatas];\n }\n return calldatas.length === 1 ? calldatas[0] : encodeFunctionData({ abi: _Multicall.ABI, functionName: \"multicall\", args: [calldatas] });\n }\n};\nvar Multicall = _Multicall;\nMulticall.ABI = IMulticall;\n\n// src/abi/NonfungiblePositionManager.ts\nvar nonfungiblePositionManagerABI = [\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"_deployer\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"_factory\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"_WETH9\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"_tokenDescriptor_\", \"type\": \"address\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"approved\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"operator\", \"type\": \"address\" },\n { \"indexed\": false, \"internalType\": \"bool\", \"name\": \"approved\", \"type\": \"bool\" }\n ],\n \"name\": \"ApprovalForAll\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" },\n { \"indexed\": false, \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"amount0\", \"type\": \"uint256\" },\n { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"amount1\", \"type\": \"uint256\" }\n ],\n \"name\": \"Collect\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" },\n { \"indexed\": false, \"internalType\": \"uint128\", \"name\": \"liquidity\", \"type\": \"uint128\" },\n { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"amount0\", \"type\": \"uint256\" },\n { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"amount1\", \"type\": \"uint256\" }\n ],\n \"name\": \"DecreaseLiquidity\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" },\n { \"indexed\": false, \"internalType\": \"uint128\", \"name\": \"liquidity\", \"type\": \"uint128\" },\n { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"amount0\", \"type\": \"uint256\" },\n { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"amount1\", \"type\": \"uint256\" }\n ],\n \"name\": \"IncreaseLiquidity\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"DOMAIN_SEPARATOR\",\n \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"PERMIT_TYPEHASH\",\n \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"WETH9\",\n \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }\n ],\n \"name\": \"approve\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" }],\n \"name\": \"balanceOf\",\n \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"baseURI\",\n \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }],\n \"name\": \"burn\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n { \"internalType\": \"uint128\", \"name\": \"amount0Max\", \"type\": \"uint128\" },\n { \"internalType\": \"uint128\", \"name\": \"amount1Max\", \"type\": \"uint128\" }\n ],\n \"internalType\": \"struct INonfungiblePositionManager.CollectParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"collect\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"amount0\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"amount1\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"token0\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"token1\", \"type\": \"address\" },\n { \"internalType\": \"uint24\", \"name\": \"fee\", \"type\": \"uint24\" },\n { \"internalType\": \"uint160\", \"name\": \"sqrtPriceX96\", \"type\": \"uint160\" }\n ],\n \"name\": \"createAndInitializePoolIfNecessary\",\n \"outputs\": [{ \"internalType\": \"address\", \"name\": \"pool\", \"type\": \"address\" }],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" },\n { \"internalType\": \"uint128\", \"name\": \"liquidity\", \"type\": \"uint128\" },\n { \"internalType\": \"uint256\", \"name\": \"amount0Min\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"amount1Min\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"deadline\", \"type\": \"uint256\" }\n ],\n \"internalType\": \"struct INonfungiblePositionManager.DecreaseLiquidityParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"decreaseLiquidity\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"amount0\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"amount1\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"deployer\",\n \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"factory\",\n \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }],\n \"name\": \"getApproved\",\n \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"amount0Desired\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"amount1Desired\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"amount0Min\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"amount1Min\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"deadline\", \"type\": \"uint256\" }\n ],\n \"internalType\": \"struct INonfungiblePositionManager.IncreaseLiquidityParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"increaseLiquidity\",\n \"outputs\": [\n { \"internalType\": \"uint128\", \"name\": \"liquidity\", \"type\": \"uint128\" },\n { \"internalType\": \"uint256\", \"name\": \"amount0\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"amount1\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"operator\", \"type\": \"address\" }\n ],\n \"name\": \"isApprovedForAll\",\n \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n { \"internalType\": \"address\", \"name\": \"token0\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"token1\", \"type\": \"address\" },\n { \"internalType\": \"uint24\", \"name\": \"fee\", \"type\": \"uint24\" },\n { \"internalType\": \"int24\", \"name\": \"tickLower\", \"type\": \"int24\" },\n { \"internalType\": \"int24\", \"name\": \"tickUpper\", \"type\": \"int24\" },\n { \"internalType\": \"uint256\", \"name\": \"amount0Desired\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"amount1Desired\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"amount0Min\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"amount1Min\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"deadline\", \"type\": \"uint256\" }\n ],\n \"internalType\": \"struct INonfungiblePositionManager.MintParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"mint\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" },\n { \"internalType\": \"uint128\", \"name\": \"liquidity\", \"type\": \"uint128\" },\n { \"internalType\": \"uint256\", \"name\": \"amount0\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"amount1\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"bytes[]\", \"name\": \"data\", \"type\": \"bytes[]\" }],\n \"name\": \"multicall\",\n \"outputs\": [{ \"internalType\": \"bytes[]\", \"name\": \"results\", \"type\": \"bytes[]\" }],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }],\n \"name\": \"ownerOf\",\n \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"amount0Owed\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"amount1Owed\", \"type\": \"uint256\" },\n { \"internalType\": \"bytes\", \"name\": \"data\", \"type\": \"bytes\" }\n ],\n \"name\": \"pancakeV3MintCallback\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"deadline\", \"type\": \"uint256\" },\n { \"internalType\": \"uint8\", \"name\": \"v\", \"type\": \"uint8\" },\n { \"internalType\": \"bytes32\", \"name\": \"r\", \"type\": \"bytes32\" },\n { \"internalType\": \"bytes32\", \"name\": \"s\", \"type\": \"bytes32\" }\n ],\n \"name\": \"permit\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }],\n \"name\": \"positions\",\n \"outputs\": [\n { \"internalType\": \"uint96\", \"name\": \"nonce\", \"type\": \"uint96\" },\n { \"internalType\": \"address\", \"name\": \"operator\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"token0\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"token1\", \"type\": \"address\" },\n { \"internalType\": \"uint24\", \"name\": \"fee\", \"type\": \"uint24\" },\n { \"internalType\": \"int24\", \"name\": \"tickLower\", \"type\": \"int24\" },\n { \"internalType\": \"int24\", \"name\": \"tickUpper\", \"type\": \"int24\" },\n { \"internalType\": \"uint128\", \"name\": \"liquidity\", \"type\": \"uint128\" },\n { \"internalType\": \"uint256\", \"name\": \"feeGrowthInside0LastX128\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"feeGrowthInside1LastX128\", \"type\": \"uint256\" },\n { \"internalType\": \"uint128\", \"name\": \"tokensOwed0\", \"type\": \"uint128\" },\n { \"internalType\": \"uint128\", \"name\": \"tokensOwed1\", \"type\": \"uint128\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n { \"inputs\": [], \"name\": \"refundETH\", \"outputs\": [], \"stateMutability\": \"payable\", \"type\": \"function\" },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }\n ],\n \"name\": \"safeTransferFrom\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" },\n { \"internalType\": \"bytes\", \"name\": \"_data\", \"type\": \"bytes\" }\n ],\n \"name\": \"safeTransferFrom\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"value\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"deadline\", \"type\": \"uint256\" },\n { \"internalType\": \"uint8\", \"name\": \"v\", \"type\": \"uint8\" },\n { \"internalType\": \"bytes32\", \"name\": \"r\", \"type\": \"bytes32\" },\n { \"internalType\": \"bytes32\", \"name\": \"s\", \"type\": \"bytes32\" }\n ],\n \"name\": \"selfPermit\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"nonce\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"expiry\", \"type\": \"uint256\" },\n { \"internalType\": \"uint8\", \"name\": \"v\", \"type\": \"uint8\" },\n { \"internalType\": \"bytes32\", \"name\": \"r\", \"type\": \"bytes32\" },\n { \"internalType\": \"bytes32\", \"name\": \"s\", \"type\": \"bytes32\" }\n ],\n \"name\": \"selfPermitAllowed\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"nonce\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"expiry\", \"type\": \"uint256\" },\n { \"internalType\": \"uint8\", \"name\": \"v\", \"type\": \"uint8\" },\n { \"internalType\": \"bytes32\", \"name\": \"r\", \"type\": \"bytes32\" },\n { \"internalType\": \"bytes32\", \"name\": \"s\", \"type\": \"bytes32\" }\n ],\n \"name\": \"selfPermitAllowedIfNecessary\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"value\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"deadline\", \"type\": \"uint256\" },\n { \"internalType\": \"uint8\", \"name\": \"v\", \"type\": \"uint8\" },\n { \"internalType\": \"bytes32\", \"name\": \"r\", \"type\": \"bytes32\" },\n { \"internalType\": \"bytes32\", \"name\": \"s\", \"type\": \"bytes32\" }\n ],\n \"name\": \"selfPermitIfNecessary\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"operator\", \"type\": \"address\" },\n { \"internalType\": \"bool\", \"name\": \"approved\", \"type\": \"bool\" }\n ],\n \"name\": \"setApprovalForAll\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"bytes4\", \"name\": \"interfaceId\", \"type\": \"bytes4\" }],\n \"name\": \"supportsInterface\",\n \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"amountMinimum\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" }\n ],\n \"name\": \"sweepToken\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"uint256\", \"name\": \"index\", \"type\": \"uint256\" }],\n \"name\": \"tokenByIndex\",\n \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"index\", \"type\": \"uint256\" }\n ],\n \"name\": \"tokenOfOwnerByIndex\",\n \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }],\n \"name\": \"tokenURI\",\n \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"amountMinimum\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" }\n ],\n \"name\": \"unwrapWETH9\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n { \"stateMutability\": \"payable\", \"type\": \"receive\" }\n];\n\n// src/abi/SelfPermit.ts\nvar selfPermitABI = [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"selfPermit\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"expiry\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"selfPermitAllowed\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"expiry\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"selfPermitAllowedIfNecessary\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"selfPermitIfNecessary\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n }\n];\n\n// src/selfPermit.ts\nfunction isAllowedPermit(permitOptions) {\n return \"nonce\" in permitOptions;\n}\nvar _SelfPermit = class {\n /**\n * Cannot be constructed.\n */\n constructor() {\n }\n static encodePermit(token, options) {\n return isAllowedPermit(options) ? encodeFunctionData({\n abi: _SelfPermit.ABI,\n functionName: \"selfPermitAllowed\",\n args: [token.address, BigInt(options.nonce), BigInt(options.expiry), options.v, options.r, options.s]\n }) : encodeFunctionData({\n abi: _SelfPermit.ABI,\n functionName: \"selfPermit\",\n args: [token.address, BigInt(options.amount), BigInt(options.deadline), options.v, options.r, options.s]\n });\n }\n};\nvar SelfPermit = _SelfPermit;\nSelfPermit.ABI = selfPermitABI;\n\n// src/abi/IPeripheryPaymentsWithFee.ts\nvar peripheryPaymentsWithFeeABI = [\n {\n \"inputs\": [],\n \"name\": \"refundETH\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountMinimum\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"sweepToken\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountMinimum\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"feeBips\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"feeRecipient\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"sweepTokenWithFee\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountMinimum\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"unwrapWETH9\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountMinimum\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"feeBips\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"feeRecipient\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"unwrapWETH9WithFee\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n }\n];\n\n// src/payments.ts\nvar _Payments = class {\n /**\n * Cannot be constructed.\n */\n constructor() {\n }\n static encodeFeeBips(fee) {\n return fee.multiply(1e4).quotient;\n }\n static encodeUnwrapWETH9(amountMinimum, recipient, feeOptions) {\n recipient = validateAndParseAddress(recipient);\n if (feeOptions) {\n const feeBips = this.encodeFeeBips(feeOptions.fee);\n const feeRecipient = validateAndParseAddress(feeOptions.recipient);\n return encodeFunctionData({\n abi: _Payments.ABI,\n functionName: \"unwrapWETH9WithFee\",\n args: [amountMinimum, recipient, feeBips, feeRecipient]\n });\n }\n return encodeFunctionData({ abi: _Payments.ABI, functionName: \"unwrapWETH9\", args: [amountMinimum, recipient] });\n }\n static encodeSweepToken(token, amountMinimum, recipient, feeOptions) {\n recipient = validateAndParseAddress(recipient);\n if (feeOptions) {\n const feeBips = this.encodeFeeBips(feeOptions.fee);\n const feeRecipient = validateAndParseAddress(feeOptions.recipient);\n return encodeFunctionData({\n abi: _Payments.ABI,\n functionName: \"sweepTokenWithFee\",\n args: [token.address, amountMinimum, recipient, feeBips, feeRecipient]\n });\n }\n return encodeFunctionData({\n abi: _Payments.ABI,\n functionName: \"sweepToken\",\n args: [token.address, amountMinimum, recipient]\n });\n }\n static encodeRefundETH() {\n return encodeFunctionData({ abi: _Payments.ABI, functionName: \"refundETH\" });\n }\n};\nvar Payments = _Payments;\nPayments.ABI = peripheryPaymentsWithFeeABI;\n\n// src/nonfungiblePositionManager.ts\nvar MaxUint128 = 2n ** 128n - 1n;\nfunction isMint(options) {\n return Object.keys(options).some((k) => k === \"recipient\");\n}\nvar _NonfungiblePositionManager = class {\n /**\n * Cannot be constructed.\n */\n // eslint-disable-next-line\n constructor() {\n }\n static encodeCreate(pool) {\n return encodeFunctionData({\n abi: _NonfungiblePositionManager.ABI,\n functionName: \"createAndInitializePoolIfNecessary\",\n args: [pool.token0.address, pool.token1.address, pool.fee, pool.sqrtRatioX96]\n });\n }\n static createCallParameters(pool) {\n return {\n calldata: this.encodeCreate(pool),\n value: toHex(0)\n };\n }\n static addCallParameters(position, options) {\n invariant9(position.liquidity > ZERO, \"ZERO_LIQUIDITY\");\n const calldatas = [];\n const { amount0: amount0Desired, amount1: amount1Desired } = position.mintAmounts;\n const minimumAmounts = position.mintAmountsWithSlippage(options.slippageTolerance);\n const amount0Min = minimumAmounts.amount0;\n const amount1Min = minimumAmounts.amount1;\n const deadline = BigInt(options.deadline);\n if (isMint(options) && options.createPool) {\n calldatas.push(this.encodeCreate(position.pool));\n }\n if (options.token0Permit) {\n calldatas.push(SelfPermit.encodePermit(position.pool.token0, options.token0Permit));\n }\n if (options.token1Permit) {\n calldatas.push(SelfPermit.encodePermit(position.pool.token1, options.token1Permit));\n }\n if (isMint(options)) {\n const recipient = validateAndParseAddress(options.recipient);\n calldatas.push(\n encodeFunctionData({\n abi: _NonfungiblePositionManager.ABI,\n functionName: \"mint\",\n args: [\n {\n token0: position.pool.token0.address,\n token1: position.pool.token1.address,\n fee: position.pool.fee,\n tickLower: position.tickLower,\n tickUpper: position.tickUpper,\n amount0Desired,\n amount1Desired,\n amount0Min,\n amount1Min,\n recipient,\n deadline\n }\n ]\n })\n );\n } else {\n calldatas.push(\n encodeFunctionData({\n abi: _NonfungiblePositionManager.ABI,\n functionName: \"increaseLiquidity\",\n args: [\n {\n tokenId: BigInt(options.tokenId),\n amount0Desired,\n amount1Desired,\n amount0Min,\n amount1Min,\n deadline\n }\n ]\n })\n );\n }\n let value = toHex(0);\n if (options.useNative) {\n const { wrapped } = options.useNative;\n invariant9(position.pool.token0.equals(wrapped) || position.pool.token1.equals(wrapped), \"NO_WETH\");\n const wrappedValue = position.pool.token0.equals(wrapped) ? amount0Desired : amount1Desired;\n if (wrappedValue > ZERO) {\n calldatas.push(Payments.encodeRefundETH());\n }\n value = toHex(wrappedValue);\n }\n return {\n calldata: Multicall.encodeMulticall(calldatas),\n value\n };\n }\n static encodeCollect(options) {\n const calldatas = [];\n const tokenId = BigInt(options.tokenId);\n const involvesETH = options.expectedCurrencyOwed0.currency.isNative || options.expectedCurrencyOwed1.currency.isNative;\n const recipient = validateAndParseAddress(options.recipient);\n calldatas.push(\n encodeFunctionData({\n abi: _NonfungiblePositionManager.ABI,\n functionName: \"collect\",\n args: [\n {\n tokenId,\n recipient: involvesETH ? ADDRESS_ZERO : recipient,\n amount0Max: MaxUint128,\n amount1Max: MaxUint128\n }\n ]\n })\n );\n if (involvesETH) {\n const ethAmount = options.expectedCurrencyOwed0.currency.isNative ? options.expectedCurrencyOwed0.quotient : options.expectedCurrencyOwed1.quotient;\n const token = options.expectedCurrencyOwed0.currency.isNative ? options.expectedCurrencyOwed1.currency : options.expectedCurrencyOwed0.currency;\n const tokenAmount = options.expectedCurrencyOwed0.currency.isNative ? options.expectedCurrencyOwed1.quotient : options.expectedCurrencyOwed0.quotient;\n calldatas.push(Payments.encodeUnwrapWETH9(ethAmount, recipient));\n calldatas.push(Payments.encodeSweepToken(token, tokenAmount, recipient));\n }\n return calldatas;\n }\n static collectCallParameters(options) {\n const calldatas = _NonfungiblePositionManager.encodeCollect(options);\n return {\n calldata: Multicall.encodeMulticall(calldatas),\n value: toHex(0)\n };\n }\n /**\n * Produces the calldata for completely or partially exiting a position\n * @param position The position to exit\n * @param options Additional information necessary for generating the calldata\n * @returns The call parameters\n */\n static removeCallParameters(position, options) {\n const calldatas = [];\n const deadline = BigInt(options.deadline);\n const tokenId = BigInt(options.tokenId);\n const partialPosition = new Position({\n pool: position.pool,\n liquidity: options.liquidityPercentage.multiply(position.liquidity).quotient,\n tickLower: position.tickLower,\n tickUpper: position.tickUpper\n });\n invariant9(partialPosition.liquidity > ZERO, \"ZERO_LIQUIDITY\");\n const { amount0: amount0Min, amount1: amount1Min } = partialPosition.burnAmountsWithSlippage(\n options.slippageTolerance\n );\n if (options.permit) {\n calldatas.push(\n encodeFunctionData({\n abi: _NonfungiblePositionManager.ABI,\n functionName: \"permit\",\n args: [\n validateAndParseAddress(options.permit.spender),\n tokenId,\n BigInt(options.permit.deadline),\n options.permit.v,\n options.permit.r,\n options.permit.s\n ]\n })\n );\n }\n calldatas.push(\n encodeFunctionData({\n abi: _NonfungiblePositionManager.ABI,\n functionName: \"decreaseLiquidity\",\n args: [\n {\n tokenId,\n liquidity: partialPosition.liquidity,\n amount0Min,\n amount1Min,\n deadline\n }\n ]\n })\n );\n const { expectedCurrencyOwed0, expectedCurrencyOwed1, ...rest } = options.collectOptions;\n calldatas.push(\n ..._NonfungiblePositionManager.encodeCollect({\n tokenId: toHex(options.tokenId),\n // add the underlying value to the expected currency already owed\n expectedCurrencyOwed0: expectedCurrencyOwed0.add(\n CurrencyAmount.fromRawAmount(expectedCurrencyOwed0.currency, amount0Min)\n ),\n expectedCurrencyOwed1: expectedCurrencyOwed1.add(\n CurrencyAmount.fromRawAmount(expectedCurrencyOwed1.currency, amount1Min)\n ),\n ...rest\n })\n );\n if (options.liquidityPercentage.equalTo(ONE)) {\n if (options.burnToken) {\n calldatas.push(\n encodeFunctionData({ abi: _NonfungiblePositionManager.ABI, functionName: \"burn\", args: [tokenId] })\n );\n }\n } else {\n invariant9(options.burnToken !== true, \"CANNOT_BURN\");\n }\n return {\n calldata: Multicall.encodeMulticall(calldatas),\n value: toHex(0)\n };\n }\n static safeTransferFromParameters(options) {\n const recipient = validateAndParseAddress(options.recipient);\n const sender = validateAndParseAddress(options.sender);\n let calldata;\n if (options.data) {\n calldata = encodeFunctionData({\n abi: _NonfungiblePositionManager.ABI,\n functionName: \"safeTransferFrom\",\n args: [sender, recipient, BigInt(options.tokenId), options.data]\n });\n } else {\n calldata = encodeFunctionData({\n abi: _NonfungiblePositionManager.ABI,\n functionName: \"safeTransferFrom\",\n args: [sender, recipient, BigInt(options.tokenId)]\n });\n }\n return {\n calldata,\n value: toHex(0)\n };\n }\n};\nvar NonfungiblePositionManager = _NonfungiblePositionManager;\nNonfungiblePositionManager.ABI = nonfungiblePositionManagerABI;\n\n// src/abi/Quoter.ts\nvar quoterABI = [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_deployer\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_factory\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_WETH9\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"WETH9\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"deployer\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"factory\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"int256\",\n \"name\": \"amount0Delta\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"amount1Delta\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"pancakeV3SwapCallback\",\n \"outputs\": [],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"quoteExactInput\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenIn\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenOut\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"fee\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceLimitX96\",\n \"type\": \"uint160\"\n }\n ],\n \"name\": \"quoteExactInputSingle\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"quoteExactOutput\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenIn\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenOut\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"fee\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceLimitX96\",\n \"type\": \"uint160\"\n }\n ],\n \"name\": \"quoteExactOutputSingle\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n];\n\n// src/abi/QuoterV2.ts\nvar quoterV2ABI = [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_deployer\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_factory\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_WETH9\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"WETH9\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"deployer\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"factory\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"int256\",\n \"name\": \"amount0Delta\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"amount1Delta\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"pancakeV3SwapCallback\",\n \"outputs\": [],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"quoteExactInput\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint160[]\",\n \"name\": \"sqrtPriceX96AfterList\",\n \"type\": \"uint160[]\"\n },\n {\n \"internalType\": \"uint32[]\",\n \"name\": \"initializedTicksCrossedList\",\n \"type\": \"uint32[]\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenIn\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenOut\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"fee\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceLimitX96\",\n \"type\": \"uint160\"\n }\n ],\n \"internalType\": \"struct IQuoterV2.QuoteExactInputSingleParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"quoteExactInputSingle\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceX96After\",\n \"type\": \"uint160\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"initializedTicksCrossed\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"quoteExactOutput\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint160[]\",\n \"name\": \"sqrtPriceX96AfterList\",\n \"type\": \"uint160[]\"\n },\n {\n \"internalType\": \"uint32[]\",\n \"name\": \"initializedTicksCrossedList\",\n \"type\": \"uint32[]\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenIn\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenOut\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"fee\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceLimitX96\",\n \"type\": \"uint160\"\n }\n ],\n \"internalType\": \"struct IQuoterV2.QuoteExactOutputSingleParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"quoteExactOutputSingle\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceX96After\",\n \"type\": \"uint160\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"initializedTicksCrossed\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n];\n\n// src/quoter.ts\nvar SwapQuoter = class {\n /**\n * Produces the on-chain method name of the appropriate function within QuoterV2,\n * and the relevant hex encoded parameters.\n * @template TInput The input token, either Ether or an ERC-20\n * @template TOutput The output token, either Ether or an ERC-20\n * @param route The swap route, a list of pools through which a swap can occur\n * @param amount The amount of the quote, either an amount in, or an amount out\n * @param tradeType The trade type, either exact input or exact output\n * @param options The optional params including price limit and Quoter contract switch\n * @returns The formatted calldata\n */\n static quoteCallParameters(route, amount, tradeType, options = {}) {\n const singleHop = route.pools.length === 1;\n const quoteAmount = amount.quotient;\n let calldata;\n const swapAbi = options.useQuoterV2 ? this.V2ABI : this.V1ABI;\n if (singleHop) {\n const baseQuoteParams = {\n tokenIn: route.tokenPath[0].address,\n tokenOut: route.tokenPath[1].address,\n fee: route.pools[0].fee,\n sqrtPriceLimitX96: BigInt(options?.sqrtPriceLimitX96 ?? 0)\n };\n const v2QuoteParams = {\n ...baseQuoteParams,\n ...tradeType === TradeType$1.EXACT_INPUT ? { amountIn: quoteAmount } : { amount: quoteAmount }\n };\n const v1QuoteParams = [\n baseQuoteParams.tokenIn,\n baseQuoteParams.tokenOut,\n baseQuoteParams.fee,\n quoteAmount,\n baseQuoteParams.sqrtPriceLimitX96\n ];\n const tradeTypeFunctionName = tradeType === TradeType$1.EXACT_INPUT ? \"quoteExactInputSingle\" : \"quoteExactOutputSingle\";\n if (options.useQuoterV2) {\n calldata = encodeFunctionData({\n abi: this.V2ABI,\n functionName: tradeTypeFunctionName,\n // @ts-ignore // FIXME\n args: [v2QuoteParams]\n });\n } else {\n calldata = encodeFunctionData({\n abi: this.V1ABI,\n functionName: tradeTypeFunctionName,\n args: v1QuoteParams\n });\n }\n } else {\n invariant9(options?.sqrtPriceLimitX96 === void 0, \"MULTIHOP_PRICE_LIMIT\");\n const path = encodeRouteToPath(route, tradeType === TradeType$1.EXACT_OUTPUT);\n const tradeTypeFunctionName = tradeType === TradeType$1.EXACT_INPUT ? \"quoteExactInput\" : \"quoteExactOutput\";\n calldata = encodeFunctionData({\n // @ts-ignore\n abi: swapAbi,\n functionName: tradeTypeFunctionName,\n args: [path, quoteAmount]\n });\n }\n return {\n calldata,\n value: toHex(0)\n };\n }\n};\nSwapQuoter.V1ABI = quoterABI;\nSwapQuoter.V2ABI = quoterV2ABI;\n\n// src/abi/V3Staker.ts\nvar v3StakerABI = [\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IUniswapV3Factory\",\n \"name\": \"_factory\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"contract INonfungiblePositionManager\",\n \"name\": \"_nonfungiblePositionManager\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_maxIncentiveStartLeadTime\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_maxIncentiveDuration\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"oldOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"DepositTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"contract IERC20Minimal\",\n \"name\": \"rewardToken\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"contract IUniswapV3Pool\",\n \"name\": \"pool\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"startTime\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"endTime\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"refundee\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"reward\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"IncentiveCreated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"incentiveId\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"refund\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"IncentiveEnded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"reward\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"RewardClaimed\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"incentiveId\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint128\",\n \"name\": \"liquidity\",\n \"type\": \"uint128\"\n }\n ],\n \"name\": \"TokenStaked\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"incentiveId\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"TokenUnstaked\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IERC20Minimal\",\n \"name\": \"rewardToken\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountRequested\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"claimReward\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"reward\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"contract IERC20Minimal\",\n \"name\": \"rewardToken\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"contract IUniswapV3Pool\",\n \"name\": \"pool\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"startTime\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"endTime\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"refundee\",\n \"type\": \"address\"\n }\n ],\n \"internalType\": \"struct IUniswapV3Staker.IncentiveKey\",\n \"name\": \"key\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"reward\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"createIncentive\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"deposits\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint48\",\n \"name\": \"numberOfStakes\",\n \"type\": \"uint48\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"tickLower\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"tickUpper\",\n \"type\": \"int24\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"contract IERC20Minimal\",\n \"name\": \"rewardToken\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"contract IUniswapV3Pool\",\n \"name\": \"pool\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"startTime\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"endTime\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"refundee\",\n \"type\": \"address\"\n }\n ],\n \"internalType\": \"struct IUniswapV3Staker.IncentiveKey\",\n \"name\": \"key\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"endIncentive\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"refund\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"factory\",\n \"outputs\": [\n {\n \"internalType\": \"contract IUniswapV3Factory\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"contract IERC20Minimal\",\n \"name\": \"rewardToken\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"contract IUniswapV3Pool\",\n \"name\": \"pool\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"startTime\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"endTime\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"refundee\",\n \"type\": \"address\"\n }\n ],\n \"internalType\": \"struct IUniswapV3Staker.IncentiveKey\",\n \"name\": \"key\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getRewardInfo\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"reward\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint160\",\n \"name\": \"secondsInsideX128\",\n \"type\": \"uint160\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"incentives\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"totalRewardUnclaimed\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint160\",\n \"name\": \"totalSecondsClaimedX128\",\n \"type\": \"uint160\"\n },\n {\n \"internalType\": \"uint96\",\n \"name\": \"numberOfStakes\",\n \"type\": \"uint96\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"maxIncentiveDuration\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"maxIncentiveStartLeadTime\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"data\",\n \"type\": \"bytes[]\"\n }\n ],\n \"name\": \"multicall\",\n \"outputs\": [\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"results\",\n \"type\": \"bytes[]\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"nonfungiblePositionManager\",\n \"outputs\": [\n {\n \"internalType\": \"contract INonfungiblePositionManager\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"onERC721Received\",\n \"outputs\": [\n {\n \"internalType\": \"bytes4\",\n \"name\": \"\",\n \"type\": \"bytes4\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IERC20Minimal\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"rewards\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"contract IERC20Minimal\",\n \"name\": \"rewardToken\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"contract IUniswapV3Pool\",\n \"name\": \"pool\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"startTime\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"endTime\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"refundee\",\n \"type\": \"address\"\n }\n ],\n \"internalType\": \"struct IUniswapV3Staker.IncentiveKey\",\n \"name\": \"key\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"stakeToken\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"incentiveId\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"stakes\",\n \"outputs\": [\n {\n \"internalType\": \"uint160\",\n \"name\": \"secondsPerLiquidityInsideInitialX128\",\n \"type\": \"uint160\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"liquidity\",\n \"type\": \"uint128\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferDeposit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"contract IERC20Minimal\",\n \"name\": \"rewardToken\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"contract IUniswapV3Pool\",\n \"name\": \"pool\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"startTime\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"endTime\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"refundee\",\n \"type\": \"address\"\n }\n ],\n \"internalType\": \"struct IUniswapV3Staker.IncentiveKey\",\n \"name\": \"key\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"unstakeToken\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"withdrawToken\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n];\n\n// src/staker.ts\nvar _Staker = class {\n constructor() {\n }\n /**\n * To claim rewards, must unstake and then claim.\n * @param incentiveKey The unique identifier of a staking program.\n * @param options Options for producing the calldata to claim. Can't claim unless you unstake.\n * @returns The calldatas for 'unstakeToken' and 'claimReward'.\n */\n static encodeClaim(incentiveKey, options) {\n const calldatas = [];\n calldatas.push(\n encodeFunctionData({\n abi: _Staker.ABI,\n functionName: \"unstakeToken\",\n args: [this._encodeIncentiveKey(incentiveKey), BigInt(options.tokenId)]\n })\n );\n const recipient = validateAndParseAddress(options.recipient);\n const amount = options.amount ?? 0;\n calldatas.push(\n encodeFunctionData({\n abi: _Staker.ABI,\n functionName: \"claimReward\",\n args: [incentiveKey.rewardToken.address, recipient, BigInt(amount)]\n })\n );\n return calldatas;\n }\n /**\n *\n * Note: A `tokenId` can be staked in many programs but to claim rewards and continue the program you must unstake, claim, and then restake.\n * @param incentiveKeys An IncentiveKey or array of IncentiveKeys that `tokenId` is staked in.\n * Input an array of IncentiveKeys to claim rewards for each program.\n * @param options ClaimOptions to specify tokenId, recipient, and amount wanting to collect.\n * Note that you can only specify one amount and one recipient across the various programs if you are collecting from multiple programs at once.\n * @returns\n */\n static collectRewards(incentiveKeys, options) {\n incentiveKeys = Array.isArray(incentiveKeys) ? incentiveKeys : [incentiveKeys];\n let calldatas = [];\n for (let i = 0; i < incentiveKeys.length; i++) {\n const incentiveKey = incentiveKeys[i];\n calldatas = calldatas.concat(this.encodeClaim(incentiveKey, options));\n calldatas.push(\n encodeFunctionData({\n abi: _Staker.ABI,\n functionName: \"stakeToken\",\n args: [this._encodeIncentiveKey(incentiveKey), BigInt(options.tokenId)]\n })\n );\n }\n return {\n calldata: Multicall.encodeMulticall(calldatas),\n value: toHex(0)\n };\n }\n /**\n *\n * @param incentiveKeys A list of incentiveKeys to unstake from. Should include all incentiveKeys (unique staking programs) that `options.tokenId` is staked in.\n * @param withdrawOptions Options for producing claim calldata and withdraw calldata. Can't withdraw without unstaking all programs for `tokenId`.\n * @returns Calldata for unstaking, claiming, and withdrawing.\n */\n static withdrawToken(incentiveKeys, withdrawOptions) {\n let calldatas = [];\n incentiveKeys = Array.isArray(incentiveKeys) ? incentiveKeys : [incentiveKeys];\n const claimOptions = {\n tokenId: withdrawOptions.tokenId,\n recipient: withdrawOptions.recipient,\n amount: withdrawOptions.amount\n };\n for (let i = 0; i < incentiveKeys.length; i++) {\n const incentiveKey = incentiveKeys[i];\n calldatas = calldatas.concat(this.encodeClaim(incentiveKey, claimOptions));\n }\n const owner = validateAndParseAddress(withdrawOptions.owner);\n calldatas.push(\n encodeFunctionData({\n abi: _Staker.ABI,\n functionName: \"withdrawToken\",\n args: [BigInt(withdrawOptions.tokenId), owner, toHex(0)]\n })\n );\n return {\n calldata: Multicall.encodeMulticall(calldatas),\n value: toHex(0)\n };\n }\n /**\n *\n * @param incentiveKeys A single IncentiveKey or array of IncentiveKeys to be encoded and used in the data parameter in `safeTransferFrom`\n * @returns An IncentiveKey as a string\n */\n static encodeDeposit(incentiveKeys) {\n incentiveKeys = Array.isArray(incentiveKeys) ? incentiveKeys : [incentiveKeys];\n let data;\n if (incentiveKeys.length > 1) {\n const keys = [];\n for (let i = 0; i < incentiveKeys.length; i++) {\n const incentiveKey = incentiveKeys[i];\n keys.push(this._encodeIncentiveKey(incentiveKey));\n }\n data = encodeAbiParameters(parseAbiParameters([`${_Staker.INCENTIVE_KEY_ABI}[]`]), [keys]);\n } else {\n data = encodeAbiParameters(parseAbiParameters(_Staker.INCENTIVE_KEY_ABI), [\n this._encodeIncentiveKey(incentiveKeys[0])\n ]);\n }\n return data;\n }\n /**\n *\n * @param incentiveKey An `IncentiveKey` which represents a unique staking program.\n * @returns An encoded IncentiveKey to be read by viem\n */\n static _encodeIncentiveKey(incentiveKey) {\n const { token0, token1, fee } = incentiveKey.pool;\n const refundee = validateAndParseAddress(incentiveKey.refundee);\n return {\n rewardToken: incentiveKey.rewardToken.address,\n pool: Pool.getAddress(token0, token1, fee),\n startTime: BigInt(incentiveKey.startTime),\n endTime: BigInt(incentiveKey.endTime),\n refundee\n };\n }\n};\nvar Staker = _Staker;\nStaker.ABI = v3StakerABI;\nStaker.INCENTIVE_KEY_ABI = \"tuple(address rewardToken, address pool, uint256 startTime, uint256 endTime, address refundee)\";\n\n// src/abi/SwapRouter.ts\nvar swapRouterABI = [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_deployer\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_factory\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_WETH9\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"WETH9\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"deployer\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOutMinimum\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct ISwapRouter.ExactInputParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"exactInput\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenIn\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenOut\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"fee\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOutMinimum\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceLimitX96\",\n \"type\": \"uint160\"\n }\n ],\n \"internalType\": \"struct ISwapRouter.ExactInputSingleParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"exactInputSingle\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountInMaximum\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct ISwapRouter.ExactOutputParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"exactOutput\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenIn\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenOut\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"fee\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountInMaximum\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceLimitX96\",\n \"type\": \"uint160\"\n }\n ],\n \"internalType\": \"struct ISwapRouter.ExactOutputSingleParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"exactOutputSingle\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"factory\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"data\",\n \"type\": \"bytes[]\"\n }\n ],\n \"name\": \"multicall\",\n \"outputs\": [\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"results\",\n \"type\": \"bytes[]\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"int256\",\n \"name\": \"amount0Delta\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"amount1Delta\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"_data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"pancakeV3SwapCallback\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"refundETH\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"selfPermit\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"expiry\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"selfPermitAllowed\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"expiry\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"selfPermitAllowedIfNecessary\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"selfPermitIfNecessary\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountMinimum\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"sweepToken\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountMinimum\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"feeBips\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"feeRecipient\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"sweepTokenWithFee\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountMinimum\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"unwrapWETH9\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountMinimum\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"feeBips\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"feeRecipient\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"unwrapWETH9WithFee\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"receive\"\n }\n];\n\n// src/swapRouter.ts\nvar _SwapRouter = class {\n /**\n * Cannot be constructed.\n */\n constructor() {\n }\n /**\n * Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given trade.\n * @param trade to produce call parameters for\n * @param options options for the call parameters\n */\n static swapCallParameters(trades, options) {\n if (!Array.isArray(trades)) {\n trades = [trades];\n }\n const sampleTrade = trades[0];\n const tokenIn = sampleTrade.inputAmount.currency.wrapped;\n const tokenOut = sampleTrade.outputAmount.currency.wrapped;\n invariant9(\n trades.every((trade) => trade.inputAmount.currency.wrapped.equals(tokenIn)),\n \"TOKEN_IN_DIFF\"\n );\n invariant9(\n trades.every((trade) => trade.outputAmount.currency.wrapped.equals(tokenOut)),\n \"TOKEN_OUT_DIFF\"\n );\n const calldatas = [];\n const ZERO_IN = CurrencyAmount.fromRawAmount(trades[0].inputAmount.currency, 0);\n const ZERO_OUT = CurrencyAmount.fromRawAmount(trades[0].outputAmount.currency, 0);\n const totalAmountOut = trades.reduce(\n (sum, trade) => sum.add(trade.minimumAmountOut(options.slippageTolerance)),\n ZERO_OUT\n );\n const mustRefund = sampleTrade.inputAmount.currency.isNative && sampleTrade.tradeType === TradeType.EXACT_OUTPUT;\n const inputIsNative = sampleTrade.inputAmount.currency.isNative;\n const outputIsNative = sampleTrade.outputAmount.currency.isNative;\n const routerMustCustody = outputIsNative || !!options.fee;\n const totalValue = inputIsNative ? trades.reduce((sum, trade) => sum.add(trade.maximumAmountIn(options.slippageTolerance)), ZERO_IN) : ZERO_IN;\n if (options.inputTokenPermit) {\n invariant9(sampleTrade.inputAmount.currency.isToken, \"NON_TOKEN_PERMIT\");\n calldatas.push(SelfPermit.encodePermit(sampleTrade.inputAmount.currency, options.inputTokenPermit));\n }\n const recipient = validateAndParseAddress(options.recipient);\n const deadline = BigInt(options.deadline);\n for (const trade of trades) {\n for (const { route, inputAmount, outputAmount } of trade.swaps) {\n const amountIn = BigInt(trade.maximumAmountIn(options.slippageTolerance, inputAmount).quotient);\n const amountOut = BigInt(trade.minimumAmountOut(options.slippageTolerance, outputAmount).quotient);\n const singleHop = route.pools.length === 1;\n if (singleHop) {\n if (trade.tradeType === TradeType.EXACT_INPUT) {\n const exactInputSingleParams = {\n tokenIn: route.tokenPath[0].address,\n tokenOut: route.tokenPath[1].address,\n fee: route.pools[0].fee,\n recipient: routerMustCustody ? ADDRESS_ZERO : recipient,\n deadline,\n amountIn,\n amountOutMinimum: amountOut,\n sqrtPriceLimitX96: BigInt(options.sqrtPriceLimitX96 ?? 0)\n };\n calldatas.push(\n encodeFunctionData({\n abi: _SwapRouter.ABI,\n functionName: \"exactInputSingle\",\n args: [exactInputSingleParams]\n })\n );\n } else {\n const exactOutputSingleParams = {\n tokenIn: route.tokenPath[0].address,\n tokenOut: route.tokenPath[1].address,\n fee: route.pools[0].fee,\n recipient: routerMustCustody ? ADDRESS_ZERO : recipient,\n deadline,\n amountOut,\n amountInMaximum: amountIn,\n sqrtPriceLimitX96: BigInt(options.sqrtPriceLimitX96 ?? 0)\n };\n calldatas.push(\n encodeFunctionData({\n abi: _SwapRouter.ABI,\n functionName: \"exactOutputSingle\",\n args: [exactOutputSingleParams]\n })\n );\n }\n } else {\n invariant9(options.sqrtPriceLimitX96 === void 0, \"MULTIHOP_PRICE_LIMIT\");\n const path = encodeRouteToPath(route, trade.tradeType === TradeType.EXACT_OUTPUT);\n if (trade.tradeType === TradeType.EXACT_INPUT) {\n const exactInputParams = {\n path,\n recipient: routerMustCustody ? ADDRESS_ZERO : recipient,\n deadline,\n amountIn,\n amountOutMinimum: amountOut\n };\n calldatas.push(\n encodeFunctionData({ abi: _SwapRouter.ABI, functionName: \"exactInput\", args: [exactInputParams] })\n );\n } else {\n const exactOutputParams = {\n path,\n recipient: routerMustCustody ? ADDRESS_ZERO : recipient,\n deadline,\n amountOut,\n amountInMaximum: amountIn\n };\n calldatas.push(\n encodeFunctionData({ abi: _SwapRouter.ABI, functionName: \"exactOutput\", args: [exactOutputParams] })\n );\n }\n }\n }\n }\n if (routerMustCustody) {\n if (options.fee) {\n if (outputIsNative) {\n calldatas.push(Payments.encodeUnwrapWETH9(totalAmountOut.quotient, recipient, options.fee));\n } else {\n calldatas.push(\n Payments.encodeSweepToken(\n sampleTrade.outputAmount.currency.wrapped,\n totalAmountOut.quotient,\n recipient,\n options.fee\n )\n );\n }\n } else {\n calldatas.push(Payments.encodeUnwrapWETH9(totalAmountOut.quotient, recipient));\n }\n }\n if (mustRefund) {\n calldatas.push(Payments.encodeRefundETH());\n }\n return {\n calldata: Multicall.encodeMulticall(calldatas),\n value: toHex(totalValue.quotient)\n };\n }\n};\nvar SwapRouter = _SwapRouter;\n// public static INTERFACE: Interface = new Interface(ISwapRouter)\nSwapRouter.ABI = swapRouterABI;\n\n// src/abi/MasterChefV3.ts\nvar MasterChefV3 = [\n {\n \"inputs\": [\n { \"internalType\": \"contract IERC20\", \"name\": \"_CAKE\", \"type\": \"address\" },\n {\n \"internalType\": \"contract INonfungiblePositionManager\",\n \"name\": \"_nonfungiblePositionManager\",\n \"type\": \"address\"\n },\n { \"internalType\": \"address\", \"name\": \"_WETH\", \"type\": \"address\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [{ \"internalType\": \"uint256\", \"name\": \"pid\", \"type\": \"uint256\" }],\n \"name\": \"DuplicatedPool\",\n \"type\": \"error\"\n },\n { \"inputs\": [], \"name\": \"InconsistentAmount\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"InsufficientAmount\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"InvalidNFT\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"InvalidPeriodDuration\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"InvalidPid\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"NoBalance\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"NoLMPool\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"NoLiquidity\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"NotEmpty\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"NotOwner\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"NotOwnerOrOperator\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"NotPancakeNFT\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"WrongReceiver\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"ZeroAddress\", \"type\": \"error\" },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"internalType\": \"uint256\", \"name\": \"pid\", \"type\": \"uint256\" },\n { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"allocPoint\", \"type\": \"uint256\" },\n { \"indexed\": true, \"internalType\": \"contract IPancakeV3Pool\", \"name\": \"v3Pool\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"contract ILMPool\", \"name\": \"lmPool\", \"type\": \"address\" }\n ],\n \"name\": \"AddPool\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"uint256\", \"name\": \"pid\", \"type\": \"uint256\" },\n { \"indexed\": true, \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" },\n { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"liquidity\", \"type\": \"uint256\" },\n { \"indexed\": false, \"internalType\": \"int24\", \"name\": \"tickLower\", \"type\": \"int24\" },\n { \"indexed\": false, \"internalType\": \"int24\", \"name\": \"tickUpper\", \"type\": \"int24\" }\n ],\n \"name\": \"Deposit\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" },\n { \"indexed\": false, \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"uint256\", \"name\": \"pid\", \"type\": \"uint256\" },\n { \"indexed\": true, \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" },\n { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"reward\", \"type\": \"uint256\" }\n ],\n \"name\": \"Harvest\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [{ \"indexed\": false, \"internalType\": \"address\", \"name\": \"deployer\", \"type\": \"address\" }],\n \"name\": \"NewLMPoolDeployerAddress\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [{ \"indexed\": false, \"internalType\": \"address\", \"name\": \"operator\", \"type\": \"address\" }],\n \"name\": \"NewOperatorAddress\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [{ \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"periodDuration\", \"type\": \"uint256\" }],\n \"name\": \"NewPeriodDuration\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [{ \"indexed\": false, \"internalType\": \"address\", \"name\": \"receiver\", \"type\": \"address\" }],\n \"name\": \"NewReceiver\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"internalType\": \"uint256\", \"name\": \"periodNumber\", \"type\": \"uint256\" },\n { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"startTime\", \"type\": \"uint256\" },\n { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"endTime\", \"type\": \"uint256\" },\n { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"cakePerSecond\", \"type\": \"uint256\" },\n { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"cakeAmount\", \"type\": \"uint256\" }\n ],\n \"name\": \"NewUpkeepPeriod\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"previousOwner\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [{ \"indexed\": false, \"internalType\": \"bool\", \"name\": \"emergency\", \"type\": \"bool\" }],\n \"name\": \"SetEmergency\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"internalType\": \"uint256\", \"name\": \"pid\", \"type\": \"uint256\" },\n { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"allocPoint\", \"type\": \"uint256\" }\n ],\n \"name\": \"SetPool\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [{ \"indexed\": true, \"internalType\": \"address\", \"name\": \"farmBoostContract\", \"type\": \"address\" }],\n \"name\": \"UpdateFarmBoostContract\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"uint256\", \"name\": \"pid\", \"type\": \"uint256\" },\n { \"indexed\": true, \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" },\n { \"indexed\": false, \"internalType\": \"int128\", \"name\": \"liquidity\", \"type\": \"int128\" },\n { \"indexed\": false, \"internalType\": \"int24\", \"name\": \"tickLower\", \"type\": \"int24\" },\n { \"indexed\": false, \"internalType\": \"int24\", \"name\": \"tickUpper\", \"type\": \"int24\" }\n ],\n \"name\": \"UpdateLiquidity\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"internalType\": \"uint256\", \"name\": \"periodNumber\", \"type\": \"uint256\" },\n { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"oldEndTime\", \"type\": \"uint256\" },\n { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"newEndTime\", \"type\": \"uint256\" },\n { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"remainingCake\", \"type\": \"uint256\" }\n ],\n \"name\": \"UpdateUpkeepPeriod\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n { \"indexed\": false, \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"uint256\", \"name\": \"pid\", \"type\": \"uint256\" },\n { \"indexed\": true, \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }\n ],\n \"name\": \"Withdraw\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"BOOST_PRECISION\",\n \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"CAKE\",\n \"outputs\": [{ \"internalType\": \"contract IERC20\", \"name\": \"\", \"type\": \"address\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"FARM_BOOSTER\",\n \"outputs\": [{ \"internalType\": \"contract IFarmBooster\", \"name\": \"\", \"type\": \"address\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"LMPoolDeployer\",\n \"outputs\": [{ \"internalType\": \"contract ILMPoolDeployer\", \"name\": \"\", \"type\": \"address\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"MAX_BOOST_PRECISION\",\n \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"MAX_DURATION\",\n \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"MIN_DURATION\",\n \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"PERIOD_DURATION\",\n \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"PRECISION\",\n \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"WETH\",\n \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_allocPoint\", \"type\": \"uint256\" },\n { \"internalType\": \"contract IPancakeV3Pool\", \"name\": \"_v3Pool\", \"type\": \"address\" },\n { \"internalType\": \"bool\", \"name\": \"_withUpdate\", \"type\": \"bool\" }\n ],\n \"name\": \"add\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" }],\n \"name\": \"balanceOf\",\n \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"uint256\", \"name\": \"_tokenId\", \"type\": \"uint256\" }],\n \"name\": \"burn\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"cakeAmountBelongToMC\",\n \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n { \"internalType\": \"uint128\", \"name\": \"amount0Max\", \"type\": \"uint128\" },\n { \"internalType\": \"uint128\", \"name\": \"amount1Max\", \"type\": \"uint128\" }\n ],\n \"internalType\": \"struct INonfungiblePositionManagerStruct.CollectParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"collect\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"amount0\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"amount1\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n { \"internalType\": \"uint128\", \"name\": \"amount0Max\", \"type\": \"uint128\" },\n { \"internalType\": \"uint128\", \"name\": \"amount1Max\", \"type\": \"uint128\" }\n ],\n \"internalType\": \"struct INonfungiblePositionManagerStruct.CollectParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n },\n { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" }\n ],\n \"name\": \"collectTo\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"amount0\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"amount1\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" },\n { \"internalType\": \"uint128\", \"name\": \"liquidity\", \"type\": \"uint128\" },\n { \"internalType\": \"uint256\", \"name\": \"amount0Min\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"amount1Min\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"deadline\", \"type\": \"uint256\" }\n ],\n \"internalType\": \"struct INonfungiblePositionManagerStruct.DecreaseLiquidityParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"decreaseLiquidity\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"amount0\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"amount1\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"emergency\",\n \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"address\", \"name\": \"_v3Pool\", \"type\": \"address\" }],\n \"name\": \"getLatestPeriodInfo\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"cakePerSecond\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"endTime\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"uint256\", \"name\": \"_pid\", \"type\": \"uint256\" }],\n \"name\": \"getLatestPeriodInfoByPid\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"cakePerSecond\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"endTime\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_tokenId\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"_to\", \"type\": \"address\" }\n ],\n \"name\": \"harvest\",\n \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"reward\", \"type\": \"uint256\" }],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"amount0Desired\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"amount1Desired\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"amount0Min\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"amount1Min\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"deadline\", \"type\": \"uint256\" }\n ],\n \"internalType\": \"struct INonfungiblePositionManagerStruct.IncreaseLiquidityParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"increaseLiquidity\",\n \"outputs\": [\n { \"internalType\": \"uint128\", \"name\": \"liquidity\", \"type\": \"uint128\" },\n { \"internalType\": \"uint256\", \"name\": \"amount0\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"amount1\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"latestPeriodCakePerSecond\",\n \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"latestPeriodEndTime\",\n \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"latestPeriodNumber\",\n \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"latestPeriodStartTime\",\n \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"bytes[]\", \"name\": \"data\", \"type\": \"bytes[]\" }],\n \"name\": \"multicall\",\n \"outputs\": [{ \"internalType\": \"bytes[]\", \"name\": \"results\", \"type\": \"bytes[]\" }],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"nonfungiblePositionManager\",\n \"outputs\": [{ \"internalType\": \"contract INonfungiblePositionManager\", \"name\": \"\", \"type\": \"address\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"_from\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"_tokenId\", \"type\": \"uint256\" },\n { \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }\n ],\n \"name\": \"onERC721Received\",\n \"outputs\": [{ \"internalType\": \"bytes4\", \"name\": \"\", \"type\": \"bytes4\" }],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"operatorAddress\",\n \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"uint256\", \"name\": \"_tokenId\", \"type\": \"uint256\" }],\n \"name\": \"pendingCake\",\n \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"reward\", \"type\": \"uint256\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n \"name\": \"poolInfo\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"allocPoint\", \"type\": \"uint256\" },\n { \"internalType\": \"contract IPancakeV3Pool\", \"name\": \"v3Pool\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"token0\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"token1\", \"type\": \"address\" },\n { \"internalType\": \"uint24\", \"name\": \"fee\", \"type\": \"uint24\" },\n { \"internalType\": \"uint256\", \"name\": \"totalLiquidity\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"totalBoostLiquidity\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"poolLength\",\n \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"receiver\",\n \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n { \"inputs\": [], \"name\": \"renounceOwnership\", \"outputs\": [], \"stateMutability\": \"nonpayable\", \"type\": \"function\" },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_pid\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"_allocPoint\", \"type\": \"uint256\" },\n { \"internalType\": \"bool\", \"name\": \"_withUpdate\", \"type\": \"bool\" }\n ],\n \"name\": \"set\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"bool\", \"name\": \"_emergency\", \"type\": \"bool\" }],\n \"name\": \"setEmergency\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"contract ILMPoolDeployer\", \"name\": \"_LMPoolDeployer\", \"type\": \"address\" }],\n \"name\": \"setLMPoolDeployer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"address\", \"name\": \"_operatorAddress\", \"type\": \"address\" }],\n \"name\": \"setOperator\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"uint256\", \"name\": \"_periodDuration\", \"type\": \"uint256\" }],\n \"name\": \"setPeriodDuration\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"address\", \"name\": \"_receiver\", \"type\": \"address\" }],\n \"name\": \"setReceiver\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"amountMinimum\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" }\n ],\n \"name\": \"sweepToken\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"index\", \"type\": \"uint256\" }\n ],\n \"name\": \"tokenOfOwnerByIndex\",\n \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalAllocPoint\",\n \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"amountMinimum\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" }\n ],\n \"name\": \"unwrapWETH9\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_tokenId\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"_newMultiplier\", \"type\": \"uint256\" }\n ],\n \"name\": \"updateBoostMultiplier\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"address\", \"name\": \"_newFarmBoostContract\", \"type\": \"address\" }],\n \"name\": \"updateFarmBoostContract\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"uint256\", \"name\": \"_tokenId\", \"type\": \"uint256\" }],\n \"name\": \"updateLiquidity\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"uint256[]\", \"name\": \"pids\", \"type\": \"uint256[]\" }],\n \"name\": \"updatePools\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_amount\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"_duration\", \"type\": \"uint256\" },\n { \"internalType\": \"bool\", \"name\": \"_withUpdate\", \"type\": \"bool\" }\n ],\n \"name\": \"upkeep\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n \"name\": \"userPositionInfos\",\n \"outputs\": [\n { \"internalType\": \"uint128\", \"name\": \"liquidity\", \"type\": \"uint128\" },\n { \"internalType\": \"uint128\", \"name\": \"boostLiquidity\", \"type\": \"uint128\" },\n { \"internalType\": \"int24\", \"name\": \"tickLower\", \"type\": \"int24\" },\n { \"internalType\": \"int24\", \"name\": \"tickUpper\", \"type\": \"int24\" },\n { \"internalType\": \"uint256\", \"name\": \"rewardGrowthInside\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"reward\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"user\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"pid\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"boostMultiplier\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n \"name\": \"v3PoolAddressPid\",\n \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_tokenId\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"_to\", \"type\": \"address\" }\n ],\n \"name\": \"withdraw\",\n \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"reward\", \"type\": \"uint256\" }],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n { \"stateMutability\": \"payable\", \"type\": \"receive\" }\n];\n\nexport { ADDRESS_ZERO, FACTORY_ADDRESS, FeeAmount, FeeCalculator, FullMath, LiquidityMath, MasterChefV3, MaxUint128, Multicall, NoTickDataProvider, NonfungiblePositionManager, POOL_INIT_CODE_HASH, Payments, Pool, Position, PositionLibrary, PositionMath, Route, SelfPermit, SqrtPriceMath, Staker, SwapMath, SwapQuoter, SwapRouter, TICK_SPACINGS, Tick, TickLibrary, TickList, TickListDataProvider, TickMath, Trade, computePoolAddress, encodeRouteToPath, encodeSqrtRatioX96, getAmountsAtNewPrice, getAmountsByLiquidityAndPrice, getAverageLiquidity, getDependentAmount, getEstimatedLPFee, getEstimatedLPFeeByAmounts, getEstimatedLPFeeByAmountsWithProtocolFee, getEstimatedLPFeeWithProtocolFee, getLiquidityByAmountsAndPrice, getLiquidityBySingleAmount, getLiquidityFromSqrtRatioX96, getLiquidityFromTick, isMint, isSorted, maxLiquidityForAmounts, mostSignificantBit, nearestUsableTick, nonfungiblePositionManagerABI, parseProtocolFees, peripheryPaymentsWithFeeABI, priceToClosestTick, quoterABI, quoterV2ABI, selfPermitABI, sqrtRatioX96ToPrice, subIn256, swapRouterABI, tickToPrice, toHex, tradeComparator, v3StakerABI };\n","import { ChainId } from '@pulsex/chains'\nimport { Address } from 'viem'\n\nexport const MULTICALL_ADDRESS: { [key in ChainId]?: Address } = {\n [ChainId.PULSECHAIN]: '0xD77D4b2F85590628Adc0D42189fD3Af4B9679d62',\n [ChainId.PULSECHAIN_TESTNET]: '0xA2313da2da9bf47DCE5f3cd36BE827ECd72aE685',\n}\n","import { ChainId } from '@pulsex/chains'\n\nexport const DEFAULT_BLOCK_CONFLICT_TOLERANCE = 0\n\nexport const BLOCK_CONFLICT_TOLERANCE: { [key in ChainId]?: number } = {\n [ChainId.PULSECHAIN]: 3,\n [ChainId.PULSECHAIN_TESTNET]: 3,\n}\n","import { ChainId } from '@pulsex/chains'\n\nexport const DEFAULT_GAS_LIMIT = 150000000n\n\nexport const DEFAULT_GAS_LIMIT_BY_CHAIN: { [key in ChainId]?: bigint } = {\n [ChainId.PULSECHAIN]: 100000000n,\n [ChainId.PULSECHAIN_TESTNET]: 100000000n,\n}\n\nexport const DEFAULT_GAS_BUFFER = 3000000n\n\nexport const DEFAULT_GAS_BUFFER_BY_CHAIN: { [key in ChainId]?: bigint } = {\n [ChainId.PULSECHAIN]: DEFAULT_GAS_BUFFER,\n [ChainId.PULSECHAIN_TESTNET]: DEFAULT_GAS_BUFFER,\n}\n","import { ChainId } from '@pulsex/chains'\nimport { GetContractReturnType, PublicClient, getContract } from 'viem'\n\nimport { MULTICALL_ADDRESS } from './constants/contracts'\nimport { iMulticallABI } from './abis/IMulticall'\n\ntype Params = {\n chainId: ChainId\n client?: PublicClient\n}\n\nexport function getMulticallContract({\n chainId,\n client,\n}: Params): GetContractReturnType {\n const address = MULTICALL_ADDRESS[chainId]\n if (!address) {\n throw new Error(`Multicall not supported on chain ${chainId}`)\n }\n\n return getContract({ abi: iMulticallABI, address, publicClient: client })\n}\n","export const iMulticallABI = [\n {\n inputs: [],\n name: 'gasLeft',\n outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'gaslimit',\n outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n { internalType: 'address', name: 'target', type: 'address' },\n { internalType: 'uint256', name: 'gasLimit', type: 'uint256' },\n { internalType: 'bytes', name: 'callData', type: 'bytes' },\n ],\n internalType: 'struct MultiCallV2.Call[]',\n name: 'calls',\n type: 'tuple[]',\n },\n ],\n name: 'multicall',\n outputs: [\n { internalType: 'uint256', name: 'blockNumber', type: 'uint256' },\n {\n components: [\n { internalType: 'bool', name: 'success', type: 'bool' },\n { internalType: 'uint256', name: 'gasUsed', type: 'uint256' },\n { internalType: 'bytes', name: 'returnData', type: 'bytes' },\n ],\n internalType: 'struct MultiCallV2.Result[]',\n name: 'returnData',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n { internalType: 'address', name: 'target', type: 'address' },\n { internalType: 'uint256', name: 'gasLimit', type: 'uint256' },\n { internalType: 'bytes', name: 'callData', type: 'bytes' },\n ],\n internalType: 'struct MultiCallV2.Call[]',\n name: 'calls',\n type: 'tuple[]',\n },\n { internalType: 'uint256', name: 'gasBuffer', type: 'uint256' },\n ],\n name: 'multicallWithGasLimitation',\n outputs: [\n { internalType: 'uint256', name: 'blockNumber', type: 'uint256' },\n {\n components: [\n { internalType: 'bool', name: 'success', type: 'bool' },\n { internalType: 'uint256', name: 'gasUsed', type: 'uint256' },\n { internalType: 'bytes', name: 'returnData', type: 'bytes' },\n ],\n internalType: 'struct MultiCallV2.Result[]',\n name: 'returnData',\n type: 'tuple[]',\n },\n { internalType: 'uint256', name: 'lastSuccessIndex', type: 'uint256' },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n]\n","import { ChainId } from '@pulsex/chains'\nimport { BigintIsh } from '@pulsex/sdk'\nimport { toBigInt } from '@pulsex/utils/toBigInt'\nimport { PublicClient } from 'viem'\n\nimport {\n DEFAULT_GAS_BUFFER,\n DEFAULT_GAS_BUFFER_BY_CHAIN,\n DEFAULT_GAS_LIMIT,\n DEFAULT_GAS_LIMIT_BY_CHAIN,\n} from './constants'\nimport { getMulticallContract } from './getMulticallContract'\n\nexport type GetGasLimitParams = {\n chainId: ChainId\n client?: PublicClient\n\n // If provided then would override the gas limit got from on chain\n gasLimit?: BigintIsh\n\n // The gas limit should be whichever is smaller between gasLimit and maxGasLimit\n maxGasLimit?: BigintIsh\n\n gasBuffer?: BigintIsh\n}\n\nexport function getDefaultGasLimit(chainId?: ChainId) {\n const gasLimitOnChain = chainId && DEFAULT_GAS_LIMIT_BY_CHAIN[chainId]\n return gasLimitOnChain !== undefined ? gasLimitOnChain : DEFAULT_GAS_LIMIT\n}\n\nexport function getDefaultGasBuffer(chainId?: ChainId) {\n const gasBufferOnChain = chainId && DEFAULT_GAS_BUFFER_BY_CHAIN[chainId]\n return gasBufferOnChain !== undefined ? gasBufferOnChain : DEFAULT_GAS_BUFFER\n}\n\nexport type GetGasLimitOnChainParams = Pick\n\nexport async function getGasLimitOnChain({ chainId, client }: GetGasLimitOnChainParams) {\n const multicall = getMulticallContract({ chainId, client })\n const gasLeft = (await multicall.read.gasLeft()) as bigint\n return gasLeft\n}\n\nexport async function getGasLimit({\n chainId,\n gasLimit: gasLimitInput,\n maxGasLimit: maxGasLimitInput = getDefaultGasLimit(chainId),\n gasBuffer: gasBufferInput = getDefaultGasBuffer(chainId),\n client,\n}: GetGasLimitParams) {\n const gasLimitOverride = gasLimitInput && toBigInt(gasLimitInput)\n const maxGasLimit = toBigInt(maxGasLimitInput)\n const gasBuffer = toBigInt(gasBufferInput)\n\n const gasLimit = gasLimitOverride || (await getGasLimitOnChain({ chainId, client })) || maxGasLimit\n const minGasLimit = gasLimit < maxGasLimit ? gasLimit : maxGasLimit\n return minGasLimit - gasBuffer\n}\n","import { ChainId } from '@pulsex/chains'\n\nimport { BLOCK_CONFLICT_TOLERANCE, DEFAULT_BLOCK_CONFLICT_TOLERANCE } from './constants'\n\nexport function getBlockConflictTolerance(chainId: ChainId) {\n return BLOCK_CONFLICT_TOLERANCE[chainId] || DEFAULT_BLOCK_CONFLICT_TOLERANCE\n}\n","import { toBigInt } from '@pulsex/utils/toBigInt'\n\nimport { GetGasLimitParams, getDefaultGasBuffer, getGasLimit } from './getGasLimit'\nimport { MulticallRequestWithGas } from './types'\nimport { getMulticallContract } from './getMulticallContract'\nimport { getBlockConflictTolerance } from './getBlockConflictTolerance'\n\nexport type CallByGasLimitParams = GetGasLimitParams & {\n // Normally we expect to get quotes from within the same block\n // But for some chains like BSC the block time is quite short so need some extra tolerance\n // 0 means no block conflict and all the multicall results should be queried within the same block\n blockConflictTolerance?: number\n\n // Treat unexecuted calls as failed calls\n dropUnexecutedCalls?: boolean\n}\n\nexport async function multicallByGasLimit(\n calls: MulticallRequestWithGas[],\n { chainId, gasBuffer = getDefaultGasBuffer(chainId), client, dropUnexecutedCalls, ...rest }: CallByGasLimitParams,\n) {\n const gasLimit = await getGasLimit({\n chainId,\n gasBuffer,\n client,\n ...rest,\n })\n const callChunks = splitCallsIntoChunks(calls, gasLimit)\n return callByChunks(callChunks, { gasBuffer, client, chainId, dropUnexecutedCalls })\n}\n\ntype CallParams = Pick<\n CallByGasLimitParams,\n 'chainId' | 'client' | 'gasBuffer' | 'blockConflictTolerance' | 'dropUnexecutedCalls'\n>\n\nexport type SingleCallResult = {\n result: string\n gasUsed: bigint\n success: boolean\n}\n\nexport type CallResult = {\n results: SingleCallResult[]\n // Will be the greatest block number if block conflict tolerance is not 0\n blockNumber: bigint\n}\n\nexport type MulticallReturn = CallResult & {\n lastSuccessIndex: number\n}\n\ntype CallReturnFromContract = [bigint, { success: boolean; gasUsed: bigint; returnData: string }[], bigint]\n\nfunction formatCallReturn([blockNumber, results, successIndex]: CallReturnFromContract): MulticallReturn {\n const lastSuccessIndex = Number(successIndex)\n return {\n lastSuccessIndex,\n blockNumber,\n results: results.slice(0, lastSuccessIndex + 1).map(({ gasUsed, success, returnData }) => ({\n gasUsed,\n success,\n result: returnData,\n })),\n }\n}\n\nasync function call(calls: MulticallRequestWithGas[], params: CallParams): Promise {\n const {\n chainId,\n client,\n gasBuffer = getDefaultGasBuffer(chainId),\n blockConflictTolerance = getBlockConflictTolerance(chainId),\n dropUnexecutedCalls = false,\n } = params\n if (!calls.length) {\n return {\n results: [],\n blockNumber: 0n,\n }\n }\n\n const contract = getMulticallContract({ chainId, client })\n const { result } = await contract.simulate.multicallWithGasLimitation([calls, gasBuffer])\n const { results, lastSuccessIndex, blockNumber } = formatCallReturn(result as CallReturnFromContract)\n if (lastSuccessIndex === calls.length - 1) {\n return {\n results,\n blockNumber,\n }\n }\n console.warn(\n `Gas limit reached. Total num of ${calls.length} calls. First ${\n lastSuccessIndex + 1\n } calls executed. The remaining ${\n calls.length - lastSuccessIndex - 1\n } calls are not executed. Pls try adjust the gas limit per call.`,\n )\n const remainingCalls = calls.slice(lastSuccessIndex + 1)\n if (dropUnexecutedCalls) {\n return {\n results: [...results, ...remainingCalls.map(() => ({ result: '0x', gasUsed: 0n, success: false }))],\n blockNumber,\n }\n }\n const { results: remainingResults, blockNumber: nextBlockNumber } = await call(\n calls.slice(lastSuccessIndex + 1),\n params,\n )\n if (Number(nextBlockNumber - blockNumber) > blockConflictTolerance) {\n throw new Error(\n `Multicall failed because of block conflict. Latest calls are made at block ${nextBlockNumber} while last calls made at block ${blockNumber}. Block conflict tolerance is ${blockConflictTolerance}`,\n )\n }\n return {\n results: [...results, ...remainingResults],\n // Use the latest block number\n blockNumber: nextBlockNumber,\n }\n}\n\nasync function callByChunks(chunks: MulticallRequestWithGas[][], params: CallParams): Promise {\n const { blockConflictTolerance = getBlockConflictTolerance(params.chainId) } = params\n const callReturns = await Promise.all(chunks.map((chunk) => call(chunk, params)))\n\n let minBlock = 0n\n let maxBlock = 0n\n let results: SingleCallResult[] = []\n for (const { results: callResults, blockNumber } of callReturns) {\n if (minBlock === 0n || blockNumber < minBlock) {\n minBlock = blockNumber\n }\n if (blockNumber > maxBlock) {\n maxBlock = blockNumber\n }\n if (Number(maxBlock - minBlock) > blockConflictTolerance) {\n throw new Error(\n `Multicall failed because of block conflict. Min block is ${minBlock} while max block is ${maxBlock}. Block conflict tolerance is ${blockConflictTolerance}`,\n )\n }\n results = [...results, ...callResults]\n }\n return {\n results,\n blockNumber: maxBlock,\n }\n}\n\nfunction splitCallsIntoChunks(calls: MulticallRequestWithGas[], gasLimit: bigint): MulticallRequestWithGas[][] {\n const chunks: MulticallRequestWithGas[][] = [[]]\n\n let gasLeft = gasLimit\n for (const callRequest of calls) {\n const { target, callData, gasLimit: gasCostLimit } = callRequest\n const singleGasLimit = toBigInt(gasCostLimit)\n const currentChunk = chunks[chunks.length - 1]\n if (singleGasLimit > gasLeft) {\n chunks.push([callRequest])\n gasLeft = gasLimit - singleGasLimit\n\n // Single call exceeds the gas limit\n if (gasLeft < 0n) {\n console.warn(\n `Multicall request may fail as the gas cost of a single call exceeds the gas limit ${gasLimit}. Gas cost: ${singleGasLimit}. To: ${target}. Data: ${callData}`,\n )\n }\n continue\n }\n\n currentChunk.push(callRequest)\n gasLeft -= singleGasLimit\n }\n\n return chunks\n}\n","import { Token, Percent, ERC20Token, CurrencyAmount as CurrencyAmount$1, PairV1, PairV2, RouteV1 as RouteV1$1, RouteV2 as RouteV2$1, TradeType, Fraction, InsufficientInputAmountError, InsufficientReservesError, Ether, Price, WNATIVE, ZERO, ONE, TradeV1, TradeV2, validateAndParseAddress, sortedInsert } from '@pulsex/sdk';\nimport axios3 from 'axios';\nimport _16 from 'lodash';\nimport { ChainId } from '@pulsex/chains';\nimport { parseUnits, getContract, encodeFunctionData, decodeFunctionResult, toBytes, hexToString, encodePacked } from 'viem';\nimport { FeeAmount, Position, TickMath, SqrtPriceMath, SelfPermit, Payments, toHex, NonfungiblePositionManager, Multicall } from '@pulsex/v3-sdk';\nimport invariant3 from 'tiny-invariant';\nimport retry7 from 'async-retry';\nimport NodeCache from 'node-cache';\nimport FixedReverseHeap from 'mnemonist/fixed-reverse-heap.js';\nimport Queue from 'mnemonist/queue.js';\nimport stats from 'stats-lite';\nimport { multicallByGasLimit } from '@pulsex/multicall';\nimport { MaxUint256 } from '@pulsex/swap-sdk-core';\nimport Timeout from 'await-timeout';\nimport { GraphQLClient, gql } from 'graphql-request';\n\n// src/providers/cache-node.ts\nvar NodeJSCache = class {\n constructor(nodeCache) {\n this.nodeCache = nodeCache;\n }\n async get(key) {\n return this.nodeCache.get(key);\n }\n async set(key, value) {\n return this.nodeCache.set(key, value);\n }\n async has(key) {\n return this.nodeCache.has(key);\n }\n};\n\n// src/util/log.ts\nvar NullLogger = class {\n constructor() {\n this.ERROR_MESSAGE = 'NullLogger does not support. Instantiate a valid logger using \"setGlobalLogger\"';\n this.src = true;\n }\n addStream(_stream) {\n throw new Error(this.ERROR_MESSAGE);\n }\n addSerializers(_serializers) {\n throw new Error(this.ERROR_MESSAGE);\n }\n child(_options, _simple) {\n return this;\n }\n reopenFileStreams() {\n throw new Error(this.ERROR_MESSAGE);\n }\n level(_value) {\n return;\n }\n levels(_name, _value) {\n return;\n }\n trace(..._rest) {\n return true;\n }\n debug(..._rest) {\n return true;\n }\n info(..._rest) {\n return true;\n }\n warn(..._rest) {\n return true;\n }\n error(..._rest) {\n return true;\n }\n fatal(..._rest) {\n return true;\n }\n addListener(_event, _listener) {\n throw new Error(this.ERROR_MESSAGE);\n }\n on(_event, _listener) {\n throw new Error(this.ERROR_MESSAGE);\n }\n once(_event, _listener) {\n throw new Error(this.ERROR_MESSAGE);\n }\n removeListener(_event, _listener) {\n throw new Error(this.ERROR_MESSAGE);\n }\n off(_event, _listener) {\n throw new Error(this.ERROR_MESSAGE);\n }\n removeAllListeners(_event) {\n throw new Error(this.ERROR_MESSAGE);\n }\n setMaxListeners(_n) {\n throw new Error(this.ERROR_MESSAGE);\n }\n getMaxListeners() {\n throw new Error(this.ERROR_MESSAGE);\n }\n listeners(_event) {\n throw new Error(this.ERROR_MESSAGE);\n }\n rawListeners(_event) {\n throw new Error(this.ERROR_MESSAGE);\n }\n emit(_event, ..._args) {\n throw new Error(this.ERROR_MESSAGE);\n }\n listenerCount(_event) {\n throw new Error(this.ERROR_MESSAGE);\n }\n prependListener(_event, _listener) {\n throw new Error(this.ERROR_MESSAGE);\n }\n prependOnceListener(_event, _listener) {\n throw new Error(this.ERROR_MESSAGE);\n }\n eventNames() {\n throw new Error(this.ERROR_MESSAGE);\n }\n};\nvar log = new NullLogger();\nvar setGlobalLogger = (_log) => {\n log = _log;\n};\n\n// src/providers/caching-gas-provider.ts\nvar CachingGasStationProvider = class {\n /**\n * Creates an instance of CachingGasStationProvider.\n * @param chainId The chain id to use.\n * @param gasPriceProvider The provider to use to get the gas price when not in the cache.\n * @param cache Cache instance to hold cached pools.\n */\n constructor(chainId, gasPriceProvider, cache) {\n this.chainId = chainId;\n this.gasPriceProvider = gasPriceProvider;\n this.cache = cache;\n this.GAS_KEY = (chainId) => `gasPrice-${chainId}`;\n }\n async getGasPrice() {\n const cachedGasPrice = await this.cache.get(this.GAS_KEY(this.chainId));\n if (cachedGasPrice) {\n log.info(\n { cachedGasPrice },\n `Got gas station price from local cache: ${cachedGasPrice.gasPriceWei}.`\n );\n return cachedGasPrice;\n }\n log.info(\"Gas station price local cache miss.\");\n const gasPrice = await this.gasPriceProvider.getGasPrice();\n await this.cache.set(this.GAS_KEY(this.chainId), gasPrice);\n return gasPrice;\n }\n};\n\n// src/util/metric.ts\nvar MetricLoggerUnit = /* @__PURE__ */ ((MetricLoggerUnit2) => {\n MetricLoggerUnit2[\"Seconds\"] = \"Seconds\";\n MetricLoggerUnit2[\"Microseconds\"] = \"Microseconds\";\n MetricLoggerUnit2[\"Milliseconds\"] = \"Milliseconds\";\n MetricLoggerUnit2[\"Bytes\"] = \"Bytes\";\n MetricLoggerUnit2[\"Kilobytes\"] = \"Kilobytes\";\n MetricLoggerUnit2[\"Megabytes\"] = \"Megabytes\";\n MetricLoggerUnit2[\"Gigabytes\"] = \"Gigabytes\";\n MetricLoggerUnit2[\"Terabytes\"] = \"Terabytes\";\n MetricLoggerUnit2[\"Bits\"] = \"Bits\";\n MetricLoggerUnit2[\"Kilobits\"] = \"Kilobits\";\n MetricLoggerUnit2[\"Megabits\"] = \"Megabits\";\n MetricLoggerUnit2[\"Gigabits\"] = \"Gigabits\";\n MetricLoggerUnit2[\"Terabits\"] = \"Terabits\";\n MetricLoggerUnit2[\"Percent\"] = \"Percent\";\n MetricLoggerUnit2[\"Count\"] = \"Count\";\n MetricLoggerUnit2[\"BytesPerSecond\"] = \"Bytes/Second\";\n MetricLoggerUnit2[\"KilobytesPerSecond\"] = \"Kilobytes/Second\";\n MetricLoggerUnit2[\"MegabytesPerSecond\"] = \"Megabytes/Second\";\n MetricLoggerUnit2[\"GigabytesPerSecond\"] = \"Gigabytes/Second\";\n MetricLoggerUnit2[\"TerabytesPerSecond\"] = \"Terabytes/Second\";\n MetricLoggerUnit2[\"BitsPerSecond\"] = \"Bits/Second\";\n MetricLoggerUnit2[\"KilobitsPerSecond\"] = \"Kilobits/Second\";\n MetricLoggerUnit2[\"MegabitsPerSecond\"] = \"Megabits/Second\";\n MetricLoggerUnit2[\"GigabitsPerSecond\"] = \"Gigabits/Second\";\n MetricLoggerUnit2[\"TerabitsPerSecond\"] = \"Terabits/Second\";\n MetricLoggerUnit2[\"CountPerSecond\"] = \"Count/Second\";\n MetricLoggerUnit2[\"None\"] = \"None\";\n return MetricLoggerUnit2;\n})(MetricLoggerUnit || {});\nvar IMetric = class {\n};\nvar MetricLogger = class extends IMetric {\n constructor(context) {\n super();\n this.log = log.child(context || {});\n }\n setProperty(key, value) {\n this.log = this.log.child({ [key]: value });\n }\n putDimensions(dimensions) {\n this.log = this.log.child(dimensions);\n }\n putMetric(key, value, unit) {\n this.log.info(\n { key, value, unit },\n `[Metric]: ${key}: ${value} | ${unit ? unit : \"\"}`\n );\n }\n};\nvar metric = new MetricLogger();\nvar setGlobalMetric = (_metric) => {\n metric = _metric;\n};\n\n// src/providers/caching-token-list-provider.ts\nvar CachingTokenListProvider = class {\n /**\n * Creates an instance of CachingTokenListProvider.\n * Token metadata (e.g. symbol and decimals) generally don't change so can be cached indefinitely.\n *\n * @param chainId The chain id to use.\n * @param tokenList The token list to get the tokens from.\n * @param tokenCache Cache instance to hold cached tokens.\n */\n constructor(chainId, tokenList, tokenCache) {\n this.tokenCache = tokenCache;\n this.CACHE_KEY = (tokenInfo) => `token-list-token-${this.chainId}/${this.tokenList.name}/${this.tokenList.timestamp}/${this.tokenList.version}/${tokenInfo.address.toLowerCase()}/${tokenInfo.decimals}/${tokenInfo.symbol}/${tokenInfo.name}`;\n this.chainId = chainId;\n this.tokenList = tokenList;\n this.chainToTokenInfos = _16.reduce(\n this.tokenList.tokens,\n (result, tokenInfo) => {\n const chainId2 = tokenInfo.chainId.toString();\n if (!result[chainId2]) {\n result[chainId2] = [];\n }\n result[chainId2].push(tokenInfo);\n return result;\n },\n {}\n );\n this.chainSymbolToTokenInfo = _16.mapValues(\n this.chainToTokenInfos,\n (tokenInfos) => _16.keyBy(tokenInfos, \"symbol\")\n );\n this.chainAddressToTokenInfo = _16.mapValues(\n this.chainToTokenInfos,\n (tokenInfos) => _16.keyBy(tokenInfos, (tokenInfo) => tokenInfo.address.toLowerCase())\n );\n }\n static async fromTokenListURI(chainId, tokenListURI, tokenCache) {\n const now = Date.now();\n const tokenList = await this.buildTokenList(tokenListURI);\n metric.putMetric(\n \"TokenListLoad\",\n Date.now() - now,\n \"Milliseconds\" /* Milliseconds */\n );\n return new CachingTokenListProvider(chainId, tokenList, tokenCache);\n }\n static async buildTokenList(tokenListURI) {\n log.info(`Getting tokenList from ${tokenListURI}.`);\n const response = await axios3.get(tokenListURI);\n log.info(`Got tokenList from ${tokenListURI}.`);\n const { data: tokenList, status } = response;\n if (status != 200) {\n log.error(\n { response },\n `Unabled to get token list from ${tokenListURI}.`\n );\n throw new Error(`Unable to get token list from ${tokenListURI}`);\n }\n return tokenList;\n }\n static async fromTokenList(chainId, tokenList, tokenCache) {\n const now = Date.now();\n const tokenProvider = new CachingTokenListProvider(\n chainId,\n tokenList,\n tokenCache\n );\n metric.putMetric(\n \"TokenListLoad\",\n Date.now() - now,\n \"Milliseconds\" /* Milliseconds */\n );\n return tokenProvider;\n }\n async getTokens(_addresses) {\n const addressToToken = {};\n const symbolToToken = {};\n for (const address of _addresses) {\n const token = await this.getTokenByAddress(address);\n if (!token) {\n continue;\n }\n addressToToken[address.toLowerCase()] = token;\n if (!token.symbol) {\n continue;\n }\n symbolToToken[token.symbol.toLowerCase()] = token;\n }\n return {\n getTokenByAddress: (address) => addressToToken[address.toLowerCase()],\n getTokenBySymbol: (symbol) => symbolToToken[symbol.toLowerCase()],\n getAllTokens: () => {\n return Object.values(addressToToken);\n }\n };\n }\n async getTokenBySymbol(_symbol) {\n let symbol = _symbol;\n if (_symbol == \"PLS\") {\n symbol = \"WPLS\";\n }\n if (!this.chainSymbolToTokenInfo[this.chainId.toString()]) {\n return void 0;\n }\n const tokenInfo = this.chainSymbolToTokenInfo[this.chainId.toString()][symbol];\n if (!tokenInfo) {\n return void 0;\n }\n const token = await this.buildToken(tokenInfo);\n return token;\n }\n async getTokenByAddress(address) {\n if (!this.chainAddressToTokenInfo[this.chainId.toString()]) {\n return void 0;\n }\n const tokenInfo = this.chainAddressToTokenInfo[this.chainId.toString()][address.toLowerCase()];\n if (!tokenInfo) {\n return void 0;\n }\n const token = await this.buildToken(tokenInfo);\n return token;\n }\n async buildToken(tokenInfo) {\n const cacheKey = this.CACHE_KEY(tokenInfo);\n const cachedToken = await this.tokenCache.get(cacheKey);\n if (cachedToken) {\n return cachedToken;\n }\n const token = new Token(\n this.chainId,\n tokenInfo.address,\n tokenInfo.decimals,\n tokenInfo.symbol,\n tokenInfo.name\n );\n await this.tokenCache.set(cacheKey, token);\n return token;\n }\n};\nvar PULSEX_QUOTER_ADDRESSES = {\n [ChainId.PULSECHAIN]: \"0xdd6Aec93F7b76416Ad9e72094C2CE6f4c47C2e02\",\n [ChainId.PULSECHAIN_TESTNET]: \"0x470bE60eaBB2fdf458BB5887db072193e5CA17D6\"\n};\nvar PULSEX_MULTICALL_ADDRESSES = {\n [ChainId.PULSECHAIN]: \"0xD77D4b2F85590628Adc0D42189fD3Af4B9679d62\",\n [ChainId.PULSECHAIN_TESTNET]: \"0xA2313da2da9bf47DCE5f3cd36BE827ECd72aE685\"\n};\nvar PULSEX_SWAP_ROUTER_ADDRESSES = {\n [ChainId.PULSECHAIN]: \"0xa619F23c632CA9f36CD4Dcea6272E1eA174aAC27\",\n [ChainId.PULSECHAIN_TESTNET]: \"0xbaE59Ee3b1d472BF67f11a0BC91273a9e71eF4Cf\"\n};\nvar TOKEN_VALIDATOR_ADDRESSES = {\n [ChainId.PULSECHAIN]: \"0xac40F373Dd1eE9a943C1dfCb652feD469264D9bA\",\n [ChainId.PULSECHAIN_TESTNET]: \"0xc1b06BC42Cb6476D99847E4d469d9c549c1322d3\"\n};\nvar MULTICALL2_ADDRESS = \"0xdc6ed7C2EE5ab7fd303334B34F7524Cbb463DE57\";\nvar WETH9 = {};\nvar ARB_GASINFO_ADDRESS = \"0x000000000000000000000000000000000000006C\";\nvar OVM_GASPRICE_ADDRESS = \"0x420000000000000000000000000000000000000F\";\nvar V3_CORE_FACTORY_ADDRESSES = {\n [ChainId.PULSECHAIN]: \"0x0000000000000000000000000000000000000000\",\n [ChainId.PULSECHAIN_TESTNET]: \"0x0000000000000000000000000000000000000000\"\n};\nvar QUOTER_V2_ADDRESSES = {\n [ChainId.PULSECHAIN]: \"0x0000000000000000000000000000000000000000\",\n [ChainId.PULSECHAIN_TESTNET]: \"0x0000000000000000000000000000000000000000\"\n};\nvar PERMIT2_ADDRESS = \"0x000000000022D473030F116dDEE9F6B43aC78BA3\";\nvar UNIVERSAL_ROUTER_ADDRESS = \"0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD\";\nvar CurrencyAmount = class extends CurrencyAmount$1 {\n};\nvar MAX_UINT160 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffff\");\nfunction parseAmount(value, currency) {\n const typedValueParsed = parseUnits(value, currency.decimals).toString();\n return CurrencyAmount.fromRawAmount(currency, BigInt(typedValueParsed));\n}\nfunction parseFeeAmount(feeAmountStr) {\n switch (feeAmountStr) {\n case \"10000\":\n return FeeAmount.HIGH;\n case \"3000\":\n return FeeAmount.MEDIUM;\n case \"500\":\n return FeeAmount.LOW;\n case \"100\":\n return FeeAmount.LOWEST;\n default:\n throw new Error(`Fee amount ${feeAmountStr} not supported.`);\n }\n}\nfunction unparseFeeAmount(feeAmount) {\n switch (feeAmount) {\n case FeeAmount.HIGH:\n return \"10000\";\n case FeeAmount.MEDIUM:\n return \"3000\";\n case FeeAmount.LOW:\n return \"500\";\n case FeeAmount.LOWEST:\n return \"100\";\n default:\n throw new Error(`Fee amount ${feeAmount} not supported.`);\n }\n}\nvar SUPPORTED_CHAINS = [\n ChainId.PULSECHAIN,\n ChainId.PULSECHAIN_TESTNET\n];\nvar V1_SUPPORTED = [\n ChainId.PULSECHAIN,\n ChainId.PULSECHAIN_TESTNET\n];\nvar V2_SUPPORTED = [\n ChainId.PULSECHAIN,\n ChainId.PULSECHAIN_TESTNET\n];\nvar ID_TO_CHAIN_ID = (id) => {\n switch (id) {\n case 369:\n return ChainId.PULSECHAIN;\n case 943:\n return ChainId.PULSECHAIN_TESTNET;\n default:\n throw new Error(`Unknown chain id: ${id}`);\n }\n};\nvar ChainName = /* @__PURE__ */ ((ChainName2) => {\n ChainName2[\"PULSECHAIN\"] = \"pulsechain\";\n ChainName2[\"PULSECHAIN_TESTNET\"] = \"pulsechainTestnet\";\n return ChainName2;\n})(ChainName || {});\nvar NativeCurrencyName = /* @__PURE__ */ ((NativeCurrencyName2) => {\n NativeCurrencyName2[\"PULSECHAIN\"] = \"PLS\";\n NativeCurrencyName2[\"PULSECHAIN_TESTNET\"] = \"tPLS\";\n return NativeCurrencyName2;\n})(NativeCurrencyName || {});\nvar NATIVE_NAMES_BY_ID = {\n [ChainId.PULSECHAIN]: [\n \"PLS\",\n \"Pulse\",\n \"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\"\n ],\n [ChainId.PULSECHAIN_TESTNET]: [\n \"tPLS\",\n \"Test Pulse\",\n \"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\"\n ]\n};\nvar NATIVE_CURRENCY = {\n [ChainId.PULSECHAIN]: \"PLS\" /* PULSECHAIN */,\n [ChainId.PULSECHAIN_TESTNET]: \"tPLS\" /* PULSECHAIN_TESTNET */\n};\nvar ID_TO_NETWORK_NAME = (id) => {\n switch (id) {\n case 369:\n return \"pulsechain\" /* PULSECHAIN */;\n case 943:\n return \"pulsechainTestnet\" /* PULSECHAIN_TESTNET */;\n default:\n throw new Error(`Unknown chain id: ${id}`);\n }\n};\nvar CHAIN_IDS_LIST = Object.values(ChainId).map(\n (c) => c.toString()\n);\nvar ID_TO_PROVIDER = (id) => {\n switch (id) {\n case ChainId.PULSECHAIN:\n return `https://rpc.pulsechain.com`;\n case ChainId.PULSECHAIN_TESTNET:\n return `https://rpc.v4.testnet.pulsechain.com`;\n default:\n throw new Error(`Chain id: ${id} not supported`);\n }\n};\nvar WRAPPED_NATIVE_CURRENCY = {\n [ChainId.PULSECHAIN]: new Token(\n ChainId.PULSECHAIN,\n \"0xA1077a294dDE1B09bB078844df40758a5D0f9a27\",\n 18,\n \"WPLS\",\n \"Wrapped Pulse\"\n ),\n [ChainId.PULSECHAIN_TESTNET]: new Token(\n ChainId.PULSECHAIN_TESTNET,\n \"0x70499adEBB11Efd915E3b69E700c331778628707\",\n 18,\n \"WPLS\",\n \"Wrapped Pulse\"\n )\n};\nvar _ExtendedEther = class extends Ether {\n get wrapped() {\n if (this.chainId in WRAPPED_NATIVE_CURRENCY)\n return WRAPPED_NATIVE_CURRENCY[this.chainId];\n throw new Error(\"Unsupported chain ID\");\n }\n static onChain(chainId) {\n return this._cachedExtendedEther[chainId] ?? (this._cachedExtendedEther[chainId] = new _ExtendedEther(chainId));\n }\n};\nvar ExtendedEther = _ExtendedEther;\nExtendedEther._cachedExtendedEther = {};\nvar cachedNativeCurrency = {};\nfunction nativeOnChain(chainId) {\n if (cachedNativeCurrency[chainId] != void 0) {\n return cachedNativeCurrency[chainId];\n } else {\n cachedNativeCurrency[chainId] = ExtendedEther.onChain(chainId);\n }\n return cachedNativeCurrency[chainId];\n}\n\n// src/routers/sdk/constants.ts\nvar MSG_SENDER = \"0x0000000000000000000000000000000000000001\";\nvar ADDRESS_THIS = \"0x0000000000000000000000000000000000000002\";\nvar V1_FEE_PATH_PLACEHOLDER = 1;\nvar V2_FEE_PATH_PLACEHOLDER = 2;\n\n// src/abis/IApproveAndCall.ts\nvar approveAndCallAbi = [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"approveMax\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"approveMaxMinusOne\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"approveZeroThenMax\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"approveZeroThenMaxMinusOne\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"callPositionManager\",\n \"outputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"result\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getApprovalType\",\n \"outputs\": [\n {\n \"internalType\": \"enum IApproveAndCall.ApprovalType\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token0\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"token1\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount0Min\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount1Min\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct IApproveAndCall.IncreaseLiquidityParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"increaseLiquidity\",\n \"outputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"result\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token0\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"token1\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"fee\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"tickLower\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"tickUpper\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount0Min\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount1Min\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n }\n ],\n \"internalType\": \"struct IApproveAndCall.MintParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"mint\",\n \"outputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"result\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n }\n];\n\n// src/routers/sdk/approveAndCall.ts\nfunction isMint(options) {\n return Object.keys(options).some((k) => k === \"recipient\");\n}\nvar _ApproveAndCall = class {\n /**\n * Cannot be constructed.\n */\n constructor() {\n }\n static encodeApproveMax(token) {\n return encodeFunctionData({\n abi: _ApproveAndCall.ABI,\n functionName: \"approveMax\",\n args: [token.address]\n });\n }\n static encodeApproveMaxMinusOne(token) {\n return encodeFunctionData({\n abi: _ApproveAndCall.ABI,\n functionName: \"approveMaxMinusOne\",\n args: [token.address]\n });\n }\n static encodeApproveZeroThenMax(token) {\n return encodeFunctionData({\n abi: _ApproveAndCall.ABI,\n functionName: \"approveZeroThenMax\",\n args: [token.address]\n });\n }\n static encodeApproveZeroThenMaxMinusOne(token) {\n return encodeFunctionData({\n abi: _ApproveAndCall.ABI,\n functionName: \"approveZeroThenMaxMinusOne\",\n args: [token.address]\n });\n }\n static encodeCallPositionManager(calldatas) {\n invariant3(calldatas.length > 0, \"NULL_CALLDATA\");\n if (calldatas.length == 1) {\n return encodeFunctionData({\n abi: _ApproveAndCall.ABI,\n functionName: \"callPositionManager\",\n args: calldatas\n });\n }\n const encodedMulticall = encodeFunctionData({\n abi: NonfungiblePositionManager.ABI,\n functionName: \"multicall\",\n args: [calldatas]\n });\n return encodeFunctionData({\n abi: _ApproveAndCall.ABI,\n functionName: \"callPositionManager\",\n args: [encodedMulticall]\n });\n }\n /**\n * Encode adding liquidity to a position in the nft manager contract\n * @param position Forcasted position with expected amount out from swap\n * @param minimalPosition Forcasted position with custom minimal token amounts\n * @param addLiquidityOptions Options for adding liquidity\n * @param slippageTolerance Defines maximum slippage\n */\n static encodeAddLiquidity(position, minimalPosition, addLiquidityOptions, slippageTolerance) {\n let { amount0: amount0Min, amount1: amount1Min } = position.mintAmountsWithSlippage(slippageTolerance);\n if (minimalPosition.amount0.quotient < amount0Min) {\n amount0Min = minimalPosition.amount0.quotient;\n }\n if (minimalPosition.amount1.quotient < amount1Min) {\n amount1Min = minimalPosition.amount1.quotient;\n }\n if (isMint(addLiquidityOptions)) {\n return encodeFunctionData({\n abi: _ApproveAndCall.ABI,\n functionName: \"mint\",\n args: [\n {\n token0: position.pool.token0.address,\n token1: position.pool.token1.address,\n fee: position.pool.fee,\n tickLower: position.tickLower,\n tickUpper: position.tickUpper,\n amount0Min,\n amount1Min,\n recipient: addLiquidityOptions.recipient\n }\n ]\n });\n }\n return encodeFunctionData({\n abi: _ApproveAndCall.ABI,\n functionName: \"increaseLiquidity\",\n args: [\n {\n token0: position.pool.token0.address,\n token1: position.pool.token1.address,\n amount0Min,\n amount1Min,\n tokenId: BigInt(addLiquidityOptions.tokenId)\n }\n ]\n });\n }\n static encodeApprove(token, approvalType) {\n switch (approvalType) {\n case 1 /* MAX */:\n return _ApproveAndCall.encodeApproveMax(token.wrapped);\n case 2 /* MAX_MINUS_ONE */:\n return _ApproveAndCall.encodeApproveMaxMinusOne(token.wrapped);\n case 3 /* ZERO_THEN_MAX */:\n return _ApproveAndCall.encodeApproveZeroThenMax(token.wrapped);\n case 4 /* ZERO_THEN_MAX_MINUS_ONE */:\n return _ApproveAndCall.encodeApproveZeroThenMaxMinusOne(token.wrapped);\n default:\n throw \"Error: invalid ApprovalType\";\n }\n }\n};\nvar ApproveAndCall = _ApproveAndCall;\nApproveAndCall.ABI = approveAndCallAbi;\n\n// src/abis/IMulticallExtended.ts\nvar multicallExtendedAbi = [\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"previousBlockhash\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"data\",\n \"type\": \"bytes[]\"\n }\n ],\n \"name\": \"multicall\",\n \"outputs\": [\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"results\",\n \"type\": \"bytes[]\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"data\",\n \"type\": \"bytes[]\"\n }\n ],\n \"name\": \"multicall\",\n \"outputs\": [\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"results\",\n \"type\": \"bytes[]\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"data\",\n \"type\": \"bytes[]\"\n }\n ],\n \"name\": \"multicall\",\n \"outputs\": [\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"results\",\n \"type\": \"bytes[]\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n }\n];\n\n// src/routers/sdk/multicallExtended.ts\nfunction validateAndParseBytes32(bytes32) {\n if (!bytes32.match(/^0x[0-9a-fA-F]{64}$/)) {\n throw new Error(`${bytes32} is not valid bytes32.`);\n }\n return bytes32.toLowerCase();\n}\nvar _MulticallExtended = class {\n /**\n * Cannot be constructed.\n */\n constructor() {\n }\n static encodeMulticall(calldatas, validation) {\n if (typeof validation === \"undefined\") {\n return Multicall.encodeMulticall(calldatas);\n }\n if (!Array.isArray(calldatas)) {\n calldatas = [calldatas];\n }\n if (typeof validation === \"string\" && validation.startsWith(\"0x\")) {\n const previousBlockhash = validateAndParseBytes32(validation);\n return encodeFunctionData({\n abi: _MulticallExtended.ABI,\n functionName: \"multicall\",\n args: [previousBlockhash, calldatas]\n });\n }\n const deadline = BigInt(validation);\n return encodeFunctionData({\n abi: _MulticallExtended.ABI,\n functionName: \"multicall\",\n args: [deadline, calldatas]\n });\n }\n};\nvar MulticallExtended = _MulticallExtended;\nMulticallExtended.ABI = multicallExtendedAbi;\n\n// src/abis/IPeripheryPaymentsWithFeeExtended.ts\nvar peripheryPaymentsWithFeeExtendedAbi = [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"pull\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"refundETH\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountMinimum\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"sweepToken\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountMinimum\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"sweepToken\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountMinimum\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"feeBips\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"feeRecipient\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"sweepTokenWithFee\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountMinimum\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"feeBips\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"feeRecipient\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"sweepTokenWithFee\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountMinimum\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"unwrapWETH9\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountMinimum\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"unwrapWETH9\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountMinimum\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"feeBips\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"feeRecipient\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"unwrapWETH9WithFee\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountMinimum\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"feeBips\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"feeRecipient\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"unwrapWETH9WithFee\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"wrapETH\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n }\n];\nfunction encodeFeeBips(fee) {\n return fee.multiply(1e4).quotient;\n}\nvar _PaymentsExtended = class {\n /**\n * Cannot be constructed.\n */\n constructor() {\n }\n static encodeUnwrapWETH9(amountMinimum, recipient, feeOptions) {\n if (typeof recipient === \"string\") {\n return Payments.encodeUnwrapWETH9(amountMinimum, recipient, feeOptions);\n }\n if (!!feeOptions) {\n const feeBips = encodeFeeBips(feeOptions.fee);\n const feeRecipient = validateAndParseAddress(feeOptions.recipient);\n return encodeFunctionData({\n abi: _PaymentsExtended.ABI,\n functionName: \"unwrapWETH9WithFee\",\n args: [amountMinimum, feeBips, feeRecipient]\n });\n }\n return encodeFunctionData({\n abi: _PaymentsExtended.ABI,\n functionName: \"unwrapWETH9\",\n args: [amountMinimum]\n });\n }\n static encodeSweepToken(token, amountMinimum, recipient, feeOptions) {\n if (typeof recipient === \"string\") {\n return Payments.encodeSweepToken(token, amountMinimum, recipient, feeOptions);\n }\n if (!!feeOptions) {\n const feeBips = encodeFeeBips(feeOptions.fee);\n const feeRecipient = validateAndParseAddress(feeOptions.recipient);\n return encodeFunctionData({\n abi: _PaymentsExtended.ABI,\n functionName: \"sweepTokenWithFee\",\n args: [token.address, amountMinimum, feeBips, feeRecipient]\n });\n }\n return encodeFunctionData({\n abi: _PaymentsExtended.ABI,\n functionName: \"sweepToken\",\n args: [token.address, amountMinimum]\n });\n }\n static encodePull(token, amount) {\n return encodeFunctionData({ abi: _PaymentsExtended.ABI, functionName: \"pull\", args: [token.address, amount] });\n }\n static encodeWrapETH(amount) {\n return encodeFunctionData({ abi: _PaymentsExtended.ABI, functionName: \"wrapETH\", args: [amount] });\n }\n};\nvar PaymentsExtended = _PaymentsExtended;\nPaymentsExtended.ABI = peripheryPaymentsWithFeeExtendedAbi;\n\n// src/abis/ISwapRouter02.ts\nvar swapRouter02Abi = [\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"previousBlockhash\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"data\",\n \"type\": \"bytes[]\"\n }\n ],\n \"name\": \"multicall\",\n \"outputs\": [\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"results\",\n \"type\": \"bytes[]\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"data\",\n \"type\": \"bytes[]\"\n }\n ],\n \"name\": \"multicall\",\n \"outputs\": [\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"results\",\n \"type\": \"bytes[]\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"data\",\n \"type\": \"bytes[]\"\n }\n ],\n \"name\": \"multicall\",\n \"outputs\": [\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"results\",\n \"type\": \"bytes[]\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"selfPermit\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"expiry\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"selfPermitAllowed\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"expiry\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"selfPermitAllowedIfNecessary\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"selfPermitIfNecessary\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOutMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"path\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"swapExactTokensForTokensV1\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOutMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"path\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"swapExactTokensForTokensV2\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountInMax\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"path\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"swapTokensForExactTokensV1\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountInMax\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"path\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"swapTokensForExactTokensV2\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n }\n];\nvar MixedRouteSDK = class {\n /**\n * Creates an instance of route.\n * @param pools An array of `TPool` objects (pools or pairs), ordered by the route the swap will take\n * @param input The input token\n * @param output The output token\n */\n constructor(pools, input, output) {\n this._midPrice = null;\n invariant3(pools.length > 0, \"POOLS\");\n const chainId = pools[0].chainId;\n const allOnSameChain = pools.every((pool) => pool.chainId === chainId);\n invariant3(allOnSameChain, \"CHAIN_IDS\");\n const wrappedInput = input.wrapped;\n invariant3(pools[0].involvesToken(wrappedInput), \"INPUT\");\n invariant3(pools[pools.length - 1].involvesToken(output.wrapped), \"OUTPUT\");\n const tokenPath = [wrappedInput];\n for (const [i, pool] of pools.entries()) {\n const currentInputToken = tokenPath[i];\n invariant3(currentInputToken.equals(pool.token0) || currentInputToken.equals(pool.token1), \"PATH\");\n const nextToken = currentInputToken.equals(pool.token0) ? pool.token1 : pool.token0;\n tokenPath.push(nextToken);\n }\n this.pools = pools;\n this.path = tokenPath;\n this.input = input;\n this.output = output ?? tokenPath[tokenPath.length - 1];\n }\n get chainId() {\n return this.pools[0].chainId;\n }\n /**\n * Returns the mid price of the route\n */\n get midPrice() {\n if (this._midPrice !== null)\n return this._midPrice;\n const price = this.pools.slice(1).reduce(\n ({ nextInput, price: price2 }, pool) => {\n return nextInput.equals(pool.token0) ? {\n nextInput: pool.token1,\n price: price2.multiply(pool.token0Price)\n } : {\n nextInput: pool.token0,\n price: price2.multiply(pool.token1Price)\n };\n },\n this.pools[0].token0.equals(this.input.wrapped) ? {\n nextInput: this.pools[0].token1,\n price: this.pools[0].token0Price\n } : {\n nextInput: this.pools[0].token0,\n price: this.pools[0].token1Price\n }\n ).price;\n return this._midPrice = new Price(this.input, this.output, price.denominator, price.numerator);\n }\n};\nfunction tradeComparator(a, b) {\n invariant3(a.inputAmount.currency.equals(b.inputAmount.currency), \"INPUT_CURRENCY\");\n invariant3(a.outputAmount.currency.equals(b.outputAmount.currency), \"OUTPUT_CURRENCY\");\n if (a.outputAmount.equalTo(b.outputAmount)) {\n if (a.inputAmount.equalTo(b.inputAmount)) {\n const aHops = a.swaps.reduce((total, cur) => total + cur.route.path.length, 0);\n const bHops = b.swaps.reduce((total, cur) => total + cur.route.path.length, 0);\n return aHops - bHops;\n }\n if (a.inputAmount.lessThan(b.inputAmount)) {\n return -1;\n } else {\n return 1;\n }\n } else {\n if (a.outputAmount.lessThan(b.outputAmount)) {\n return 1;\n } else {\n return -1;\n }\n }\n}\nvar MixedRouteTrade = class {\n /**\n * @deprecated Deprecated in favor of 'swaps' property. If the trade consists of multiple routes\n * this will return an error.\n *\n * When the trade consists of just a single route, this returns the route of the trade,\n * i.e. which pools the trade goes through.\n */\n get route() {\n invariant3(this.swaps.length == 1, \"MULTIPLE_ROUTES\");\n return this.swaps[0].route;\n }\n /**\n * The input amount for the trade assuming no slippage.\n */\n get inputAmount() {\n if (this._inputAmount) {\n return this._inputAmount;\n }\n const inputCurrency = this.swaps[0].inputAmount.currency;\n const totalInputFromRoutes = this.swaps.map(({ inputAmount }) => inputAmount).reduce((total, cur) => total.add(cur), CurrencyAmount$1.fromRawAmount(inputCurrency, 0));\n this._inputAmount = totalInputFromRoutes;\n return this._inputAmount;\n }\n /**\n * The output amount for the trade assuming no slippage.\n */\n get outputAmount() {\n if (this._outputAmount) {\n return this._outputAmount;\n }\n const outputCurrency = this.swaps[0].outputAmount.currency;\n const totalOutputFromRoutes = this.swaps.map(({ outputAmount }) => outputAmount).reduce((total, cur) => total.add(cur), CurrencyAmount$1.fromRawAmount(outputCurrency, 0));\n this._outputAmount = totalOutputFromRoutes;\n return this._outputAmount;\n }\n /**\n * The price expressed in terms of output amount/input amount.\n */\n get executionPrice() {\n return this._executionPrice ?? (this._executionPrice = new Price(\n this.inputAmount.currency,\n this.outputAmount.currency,\n this.inputAmount.quotient,\n this.outputAmount.quotient\n ));\n }\n /**\n * Returns the percent difference between the route's mid price and the price impact\n */\n get priceImpact() {\n if (this._priceImpact) {\n return this._priceImpact;\n }\n let spotOutputAmount = CurrencyAmount$1.fromRawAmount(this.outputAmount.currency, 0);\n for (const { route, inputAmount } of this.swaps) {\n const midPrice = route.midPrice;\n spotOutputAmount = spotOutputAmount.add(midPrice.quote(inputAmount));\n }\n const priceImpact = spotOutputAmount.subtract(this.outputAmount).divide(spotOutputAmount);\n this._priceImpact = new Percent(priceImpact.numerator, priceImpact.denominator);\n return this._priceImpact;\n }\n /**\n * Constructs a trade by simulating swaps through the given route\n * @template TInput The input token, either Ether or an ERC-20.\n * @template TOutput The output token, either Ether or an ERC-20.\n * @template TTradeType The type of the trade, either exact in or exact out.\n * @param route route to swap through\n * @param amount the amount specified, either input or output, depending on tradeType\n * @param tradeType whether the trade is an exact input or exact output swap\n * @returns The route\n */\n static async fromRoute(route, amount, tradeType) {\n const amounts = new Array(route.path.length);\n let inputAmount;\n let outputAmount;\n invariant3(tradeType === TradeType.EXACT_INPUT, \"TRADE_TYPE\");\n invariant3(amount.currency.equals(route.input), \"INPUT\");\n amounts[0] = amount.wrapped;\n for (let i = 0; i < route.path.length - 1; i++) {\n const pool = route.pools[i];\n const [outputAmount2] = await pool.getOutputAmount(amounts[i]);\n amounts[i + 1] = outputAmount2;\n }\n inputAmount = CurrencyAmount$1.fromFractionalAmount(route.input, amount.numerator, amount.denominator);\n outputAmount = CurrencyAmount$1.fromFractionalAmount(\n route.output,\n amounts[amounts.length - 1].numerator,\n amounts[amounts.length - 1].denominator\n );\n return new MixedRouteTrade({\n routes: [{ inputAmount, outputAmount, route }],\n tradeType\n });\n }\n /**\n * Constructs a trade from routes by simulating swaps\n *\n * @template TInput The input token, either Ether or an ERC-20.\n * @template TOutput The output token, either Ether or an ERC-20.\n * @template TTradeType The type of the trade, either exact in or exact out.\n * @param routes the routes to swap through and how much of the amount should be routed through each\n * @param tradeType whether the trade is an exact input or exact output swap\n * @returns The trade\n */\n static async fromRoutes(routes, tradeType) {\n const populatedRoutes = [];\n invariant3(tradeType === TradeType.EXACT_INPUT, \"TRADE_TYPE\");\n for (const { route, amount } of routes) {\n const amounts = new Array(route.path.length);\n let inputAmount;\n let outputAmount;\n invariant3(amount.currency.equals(route.input), \"INPUT\");\n inputAmount = CurrencyAmount$1.fromFractionalAmount(route.input, amount.numerator, amount.denominator);\n amounts[0] = CurrencyAmount$1.fromFractionalAmount(route.input.wrapped, amount.numerator, amount.denominator);\n for (let i = 0; i < route.path.length - 1; i++) {\n const pool = route.pools[i];\n const [outputAmount2] = await pool.getOutputAmount(amounts[i]);\n amounts[i + 1] = outputAmount2;\n }\n outputAmount = CurrencyAmount$1.fromFractionalAmount(\n route.output,\n amounts[amounts.length - 1].numerator,\n amounts[amounts.length - 1].denominator\n );\n populatedRoutes.push({ route, inputAmount, outputAmount });\n }\n return new MixedRouteTrade({\n routes: populatedRoutes,\n tradeType\n });\n }\n /**\n * Creates a trade without computing the result of swapping through the route. Useful when you have simulated the trade\n * elsewhere and do not have any tick data\n * @template TInput The input token, either Ether or an ERC-20\n * @template TOutput The output token, either Ether or an ERC-20\n * @template TTradeType The type of the trade, either exact in or exact out\n * @param constructorArguments The arguments passed to the trade constructor\n * @returns The unchecked trade\n */\n static createUncheckedTrade(constructorArguments) {\n return new MixedRouteTrade({\n ...constructorArguments,\n routes: [\n {\n inputAmount: constructorArguments.inputAmount,\n outputAmount: constructorArguments.outputAmount,\n route: constructorArguments.route\n }\n ]\n });\n }\n /**\n * Creates a trade without computing the result of swapping through the routes. Useful when you have simulated the trade\n * elsewhere and do not have any tick data\n * @template TInput The input token, either Ether or an ERC-20\n * @template TOutput The output token, either Ether or an ERC-20\n * @template TTradeType The type of the trade, either exact in or exact out\n * @param constructorArguments The arguments passed to the trade constructor\n * @returns The unchecked trade\n */\n static createUncheckedTradeWithMultipleRoutes(constructorArguments) {\n return new MixedRouteTrade(constructorArguments);\n }\n /**\n * Construct a trade by passing in the pre-computed property values\n * @param routes The routes through which the trade occurs\n * @param tradeType The type of trade, exact input or exact output\n */\n constructor({\n routes,\n tradeType\n }) {\n const inputCurrency = routes[0].inputAmount.currency;\n const outputCurrency = routes[0].outputAmount.currency;\n invariant3(\n routes.every(({ route }) => inputCurrency.wrapped.equals(route.input.wrapped)),\n \"INPUT_CURRENCY_MATCH\"\n );\n invariant3(\n routes.every(({ route }) => outputCurrency.wrapped.equals(route.output.wrapped)),\n \"OUTPUT_CURRENCY_MATCH\"\n );\n const numPools = routes.map(({ route }) => route.pools.length).reduce((total, cur) => total + cur, 0);\n const poolAddressSet = /* @__PURE__ */ new Set();\n for (const { route } of routes) {\n for (const pool of route.pools) {\n pool instanceof PairV1 ? poolAddressSet.add(PairV1.getAddress(pool.token0, pool.token1)) : poolAddressSet.add(PairV2.getAddress(pool.token0, pool.token1));\n }\n }\n invariant3(numPools == poolAddressSet.size, \"POOLS_DUPLICATED\");\n invariant3(tradeType === TradeType.EXACT_INPUT, \"TRADE_TYPE\");\n this.swaps = routes;\n this.tradeType = tradeType;\n }\n /**\n * Get the minimum amount that must be received from this trade for the given slippage tolerance\n * @param slippageTolerance The tolerance of unfavorable slippage from the execution price of this trade\n * @returns The amount out\n */\n minimumAmountOut(slippageTolerance, amountOut = this.outputAmount) {\n invariant3(!slippageTolerance.lessThan(ZERO), \"SLIPPAGE_TOLERANCE\");\n const slippageAdjustedAmountOut = new Fraction(ONE).add(slippageTolerance).invert().multiply(amountOut.quotient).quotient;\n return CurrencyAmount$1.fromRawAmount(amountOut.currency, slippageAdjustedAmountOut);\n }\n /**\n * Get the maximum amount in that can be spent via this trade for the given slippage tolerance\n * @param slippageTolerance The tolerance of unfavorable slippage from the execution price of this trade\n * @returns The amount in\n */\n maximumAmountIn(slippageTolerance, amountIn = this.inputAmount) {\n invariant3(!slippageTolerance.lessThan(ZERO), \"SLIPPAGE_TOLERANCE\");\n return amountIn;\n }\n /**\n * Return the execution price after accounting for slippage tolerance\n * @param slippageTolerance the allowed tolerated slippage\n * @returns The execution price\n */\n worstExecutionPrice(slippageTolerance) {\n return new Price(\n this.inputAmount.currency,\n this.outputAmount.currency,\n this.maximumAmountIn(slippageTolerance).quotient,\n this.minimumAmountOut(slippageTolerance).quotient\n );\n }\n /**\n * Given a list of pools, and a fixed amount in, returns the top `maxNumResults` trades that go from an input token\n * amount to an output token, making at most `maxHops` hops.\n * Note this does not consider aggregation, as routes are linear. It's possible a better route exists by splitting\n * the amount in among multiple routes.\n * @param pools the pools to consider in finding the best trade\n * @param nextAmountIn exact amount of input currency to spend\n * @param currencyOut the desired currency out\n * @param maxNumResults maximum number of results to return\n * @param maxHops maximum number of hops a returned trade can make, e.g. 1 hop goes through a single pool\n * @param currentPools used in recursion; the current list of pools\n * @param currencyAmountIn used in recursion; the original value of the currencyAmountIn parameter\n * @param bestTrades used in recursion; the current list of best trades\n * @returns The exact in trade\n */\n static async bestTradeExactIn(pools, currencyAmountIn, currencyOut, { maxNumResults = 3, maxHops = 3 } = {}, currentPools = [], nextAmountIn = currencyAmountIn, bestTrades = []) {\n invariant3(pools.length > 0, \"POOLS\");\n invariant3(maxHops > 0, \"MAX_HOPS\");\n invariant3(currencyAmountIn === nextAmountIn || currentPools.length > 0, \"INVALID_RECURSION\");\n const amountIn = nextAmountIn.wrapped;\n const tokenOut = currencyOut.wrapped;\n for (let i = 0; i < pools.length; i++) {\n const pool = pools[i];\n if (!pool.token0.equals(amountIn.currency) && !pool.token1.equals(amountIn.currency))\n continue;\n if (pool instanceof PairV1) {\n if (pool.reserve0.equalTo(ZERO) || pool.reserve1.equalTo(ZERO))\n continue;\n }\n if (pool instanceof PairV2) {\n if (pool.reserve0.equalTo(ZERO) || pool.reserve1.equalTo(ZERO))\n continue;\n }\n let amountOut;\n try {\n ;\n [amountOut] = await pool.getOutputAmount(amountIn);\n } catch (error) {\n if (error.isInsufficientInputAmountError) {\n continue;\n }\n throw error;\n }\n if (amountOut.currency.isToken && amountOut.currency.equals(tokenOut)) {\n sortedInsert(\n bestTrades,\n await MixedRouteTrade.fromRoute(\n new MixedRouteSDK([...currentPools, pool], currencyAmountIn.currency, currencyOut),\n currencyAmountIn,\n TradeType.EXACT_INPUT\n ),\n maxNumResults,\n tradeComparator\n );\n } else if (maxHops > 1 && pools.length > 1) {\n const poolsExcludingThisPool = pools.slice(0, i).concat(pools.slice(i + 1, pools.length));\n await MixedRouteTrade.bestTradeExactIn(\n poolsExcludingThisPool,\n currencyAmountIn,\n currencyOut,\n {\n maxNumResults,\n maxHops: maxHops - 1\n },\n [...currentPools, pool],\n amountOut,\n bestTrades\n );\n }\n }\n return bestTrades;\n }\n};\nvar RouteV1 = class extends RouteV1$1 {\n constructor(v1Route) {\n super(v1Route.pairs, v1Route.input, v1Route.output);\n this.protocol = \"V1\" /* V1 */;\n this.pools = this.pairs;\n }\n};\nvar RouteV2 = class extends RouteV2$1 {\n constructor(v2Route) {\n super(v2Route.pairs, v2Route.input, v2Route.output);\n this.protocol = \"V2\" /* V2 */;\n this.pools = this.pairs;\n }\n};\nvar MixedRoute = class extends MixedRouteSDK {\n constructor(mixedRoute) {\n super(mixedRoute.pools, mixedRoute.input, mixedRoute.output);\n this.protocol = \"MIXED\" /* MIXED */;\n }\n};\n\n// src/routers/sdk/entities/trade.ts\nvar Trade = class {\n // construct a trade across v1 and v2 routes from pre-computed amounts\n constructor({\n v1Routes,\n v2Routes,\n tradeType,\n mixedRoutes\n }) {\n this.swaps = [];\n this.routes = [];\n for (const { routev1, inputAmount, outputAmount } of v1Routes) {\n const route = new RouteV1(routev1);\n this.routes.push(route);\n this.swaps.push({\n route,\n inputAmount,\n outputAmount\n });\n }\n for (const { routev2, inputAmount, outputAmount } of v2Routes) {\n const route = new RouteV2(routev2);\n this.routes.push(route);\n this.swaps.push({\n route,\n inputAmount,\n outputAmount\n });\n }\n if (mixedRoutes) {\n for (const { mixedRoute, inputAmount, outputAmount } of mixedRoutes) {\n const route = new MixedRoute(mixedRoute);\n this.routes.push(route);\n this.swaps.push({\n route,\n inputAmount,\n outputAmount\n });\n }\n }\n this.tradeType = tradeType;\n const inputCurrency = this.swaps[0].inputAmount.currency;\n const outputCurrency = this.swaps[0].outputAmount.currency;\n invariant3(\n this.swaps.every(({ route }) => inputCurrency.wrapped.equals(route.input.wrapped)),\n \"INPUT_CURRENCY_MATCH\"\n );\n invariant3(\n this.swaps.every(({ route }) => outputCurrency.wrapped.equals(route.output.wrapped)),\n \"OUTPUT_CURRENCY_MATCH\"\n );\n const numPools = this.swaps.map(({ route }) => route.pools.length).reduce((total, cur) => total + cur, 0);\n const poolAddressSet = /* @__PURE__ */ new Set();\n for (const { route } of this.swaps) {\n for (const pool of route.pools) {\n if (pool instanceof PairV1) {\n poolAddressSet.add(PairV1.getAddress(pool.token0, pool.token1));\n } else if (pool instanceof PairV2) {\n poolAddressSet.add(PairV2.getAddress(pool.token0, pool.token1));\n } else {\n throw new Error(\"Unexpected pool type in route when constructing trade object\");\n }\n }\n }\n invariant3(numPools == poolAddressSet.size, \"POOLS_DUPLICATED\");\n }\n get inputAmount() {\n if (this._inputAmount) {\n return this._inputAmount;\n }\n const inputCurrency = this.swaps[0].inputAmount.currency;\n const totalInputFromRoutes = this.swaps.map(({ inputAmount }) => inputAmount).reduce((total, cur) => total.add(cur), CurrencyAmount$1.fromRawAmount(inputCurrency, 0));\n this._inputAmount = totalInputFromRoutes;\n return this._inputAmount;\n }\n get outputAmount() {\n if (this._outputAmount) {\n return this._outputAmount;\n }\n const outputCurrency = this.swaps[0].outputAmount.currency;\n const totalOutputFromRoutes = this.swaps.map(({ outputAmount }) => outputAmount).reduce((total, cur) => total.add(cur), CurrencyAmount$1.fromRawAmount(outputCurrency, 0));\n this._outputAmount = totalOutputFromRoutes;\n return this._outputAmount;\n }\n /**\n * The price expressed in terms of output amount/input amount.\n */\n get executionPrice() {\n return this._executionPrice ?? (this._executionPrice = new Price(\n this.inputAmount.currency,\n this.outputAmount.currency,\n this.inputAmount.quotient,\n this.outputAmount.quotient\n ));\n }\n /**\n * Returns the percent difference between the route's mid price and the price impact\n */\n get priceImpact() {\n if (this._priceImpact) {\n return this._priceImpact;\n }\n let spotOutputAmount = CurrencyAmount$1.fromRawAmount(this.outputAmount.currency, 0);\n for (const { route, inputAmount } of this.swaps) {\n const midPrice = route.midPrice;\n spotOutputAmount = spotOutputAmount.add(midPrice.quote(inputAmount));\n }\n const priceImpact = spotOutputAmount.subtract(this.outputAmount).divide(spotOutputAmount);\n this._priceImpact = new Percent(priceImpact.numerator, priceImpact.denominator);\n return this._priceImpact;\n }\n /**\n * Get the minimum amount that must be received from this trade for the given slippage tolerance\n * @param slippageTolerance The tolerance of unfavorable slippage from the execution price of this trade\n * @returns The amount out\n */\n minimumAmountOut(slippageTolerance, amountOut = this.outputAmount) {\n invariant3(!slippageTolerance.lessThan(ZERO), \"SLIPPAGE_TOLERANCE\");\n if (this.tradeType === TradeType.EXACT_OUTPUT) {\n return amountOut;\n } else {\n const slippageAdjustedAmountOut = new Fraction(ONE).add(slippageTolerance).invert().multiply(amountOut.quotient).quotient;\n return CurrencyAmount$1.fromRawAmount(amountOut.currency, slippageAdjustedAmountOut);\n }\n }\n /**\n * Get the maximum amount in that can be spent via this trade for the given slippage tolerance\n * @param slippageTolerance The tolerance of unfavorable slippage from the execution price of this trade\n * @returns The amount in\n */\n maximumAmountIn(slippageTolerance, amountIn = this.inputAmount) {\n invariant3(!slippageTolerance.lessThan(ZERO), \"SLIPPAGE_TOLERANCE\");\n if (this.tradeType === TradeType.EXACT_INPUT) {\n return amountIn;\n } else {\n const slippageAdjustedAmountIn = new Fraction(ONE).add(slippageTolerance).multiply(amountIn.quotient).quotient;\n return CurrencyAmount$1.fromRawAmount(amountIn.currency, slippageAdjustedAmountIn);\n }\n }\n /**\n * Return the execution price after accounting for slippage tolerance\n * @param slippageTolerance the allowed tolerated slippage\n * @returns The execution price\n */\n worstExecutionPrice(slippageTolerance) {\n return new Price(\n this.inputAmount.currency,\n this.outputAmount.currency,\n this.maximumAmountIn(slippageTolerance).quotient,\n this.minimumAmountOut(slippageTolerance).quotient\n );\n }\n static async fromRoutes(v1Routes, v2Routes, tradeType, mixedRoutes) {\n const populatedV1Routes = [];\n const populatedV2Routes = [];\n const populatedMixedRoutes = [];\n for (const { routev1, amount } of v1Routes) {\n const v1Trade = new TradeV1(routev1, amount, tradeType);\n const { inputAmount, outputAmount } = v1Trade;\n populatedV1Routes.push({\n routev1,\n inputAmount,\n outputAmount\n });\n }\n for (const { routev2, amount } of v2Routes) {\n const v2Trade = new TradeV2(routev2, amount, tradeType);\n const { inputAmount, outputAmount } = v2Trade;\n populatedV2Routes.push({\n routev2,\n inputAmount,\n outputAmount\n });\n }\n if (mixedRoutes) {\n for (const { mixedRoute, amount } of mixedRoutes) {\n const mixedRouteTrade = await MixedRouteTrade.fromRoute(mixedRoute, amount, tradeType);\n const { inputAmount, outputAmount } = mixedRouteTrade;\n populatedMixedRoutes.push({\n mixedRoute,\n inputAmount,\n outputAmount\n });\n }\n }\n return new Trade({\n v1Routes: populatedV1Routes,\n v2Routes: populatedV2Routes,\n mixedRoutes: populatedMixedRoutes,\n tradeType\n });\n }\n static async fromRoute(route, amount, tradeType) {\n let v1Routes = [];\n let v2Routes = [];\n let mixedRoutes = [];\n if (route instanceof RouteV1$1) {\n const v1Trade = new TradeV1(route, amount, tradeType);\n const { inputAmount, outputAmount } = v1Trade;\n v1Routes = [{ routev1: route, inputAmount, outputAmount }];\n } else if (route instanceof RouteV2$1) {\n const v2Trade = new TradeV2(route, amount, tradeType);\n const { inputAmount, outputAmount } = v2Trade;\n v2Routes = [{ routev2: route, inputAmount, outputAmount }];\n } else if (route instanceof MixedRouteSDK) {\n const mixedRouteTrade = await MixedRouteTrade.fromRoute(route, amount, tradeType);\n const { inputAmount, outputAmount } = mixedRouteTrade;\n mixedRoutes = [{ mixedRoute: route, inputAmount, outputAmount }];\n } else {\n throw new Error(\"Invalid route type\");\n }\n return new Trade({\n v1Routes,\n v2Routes,\n mixedRoutes,\n tradeType\n });\n }\n};\nvar partitionMixedRouteByProtocol = (route) => {\n let acc = [];\n let left = 0;\n let right = 0;\n while (right < route.pools.length) {\n if (route.pools[left] instanceof PairV1 && route.pools[right] instanceof PairV2 || route.pools[left] instanceof PairV2 && route.pools[right] instanceof PairV1) {\n acc.push(route.pools.slice(left, right));\n left = right;\n }\n right++;\n if (right === route.pools.length) {\n acc.push(route.pools.slice(left, right));\n }\n }\n return acc;\n};\nvar getOutputOfPools = (pools, firstInputToken) => {\n const { inputToken: outputToken } = pools.reduce(\n ({ inputToken }, pool) => {\n if (!pool.involvesToken(inputToken))\n throw new Error(\"PATH\");\n const outputToken2 = pool.token0.equals(inputToken) ? pool.token1 : pool.token0;\n return {\n inputToken: outputToken2\n };\n },\n { inputToken: firstInputToken }\n );\n return outputToken;\n};\n\n// src/routers/sdk/swapRouter.ts\nvar ZERO3 = 0n;\nvar REFUND_ETH_PRICE_IMPACT_THRESHOLD = new Percent(50n, 100n);\nvar _SwapRouter = class {\n /**\n * Cannot be constructed.\n */\n constructor() {\n }\n /**\n * @notice Generates the calldata for a Swap with a V1 Route.\n * @param trade The V1Trade to encode.\n * @param options SwapOptions to use for the trade.\n * @param routerMustCustody Flag for whether funds should be sent to the router\n * @param performAggregatedSlippageCheck Flag for whether we want to perform an aggregated slippage check\n * @returns A string array of calldatas for the trade.\n */\n static encodeV1Swap(trade, options, routerMustCustody, performAggregatedSlippageCheck) {\n const amountIn = trade.maximumAmountIn(options.slippageTolerance).quotient;\n const amountOut = trade.minimumAmountOut(options.slippageTolerance).quotient;\n const path = trade.route.path.map((token) => token.address);\n const recipient = routerMustCustody ? ADDRESS_THIS : typeof options.recipient === \"undefined\" ? MSG_SENDER : validateAndParseAddress(options.recipient);\n if (trade.tradeType === TradeType.EXACT_INPUT) {\n const exactInputParams = [amountIn, performAggregatedSlippageCheck ? 0n : amountOut, path, recipient];\n return encodeFunctionData({\n abi: _SwapRouter.ABI,\n functionName: \"swapExactTokensForTokensV1\",\n args: exactInputParams\n });\n }\n const exactOutputParams = [amountOut, amountIn, path, recipient];\n return encodeFunctionData({\n abi: _SwapRouter.ABI,\n functionName: \"swapTokensForExactTokensV1\",\n args: exactOutputParams\n });\n }\n /**\n * @notice Generates the calldata for a Swap with a V2 Route.\n * @param trade The V2Trade to encode.\n * @param options SwapOptions to use for the trade.\n * @param routerMustCustody Flag for whether funds should be sent to the router\n * @param performAggregatedSlippageCheck Flag for whether we want to perform an aggregated slippage check\n * @returns A string array of calldatas for the trade.\n */\n static encodeV2Swap(trade, options, routerMustCustody, performAggregatedSlippageCheck) {\n const amountIn = trade.maximumAmountIn(options.slippageTolerance).quotient;\n const amountOut = trade.minimumAmountOut(options.slippageTolerance).quotient;\n const path = trade.route.path.map((token) => token.address);\n const recipient = routerMustCustody ? ADDRESS_THIS : typeof options.recipient === \"undefined\" ? MSG_SENDER : validateAndParseAddress(options.recipient);\n if (trade.tradeType === TradeType.EXACT_INPUT) {\n const exactInputParams = [amountIn, performAggregatedSlippageCheck ? 0n : amountOut, path, recipient];\n return encodeFunctionData({\n abi: _SwapRouter.ABI,\n functionName: \"swapExactTokensForTokensV2\",\n args: exactInputParams\n });\n }\n const exactOutputParams = [amountOut, amountIn, path, recipient];\n return encodeFunctionData({\n abi: _SwapRouter.ABI,\n functionName: \"swapTokensForExactTokensV2\",\n args: exactOutputParams\n });\n }\n /**\n * @notice Generates the calldata for a MixedRouteSwap. Since single hop routes are not MixedRoutes, we will instead generate\n * them via the existing encodeV3Swap and encodeV2Swap methods.\n * @param trade The MixedRouteTrade to encode.\n * @param options SwapOptions to use for the trade.\n * @param routerMustCustody Flag for whether funds should be sent to the router\n * @param performAggregatedSlippageCheck Flag for whether we want to perform an aggregated slippage check\n * @returns A string array of calldatas for the trade.\n */\n static encodeMixedRouteSwap(trade, options, routerMustCustody, performAggregatedSlippageCheck) {\n const calldatas = [];\n invariant3(trade.tradeType === TradeType.EXACT_INPUT, \"TRADE_TYPE\");\n for (const { route, inputAmount, outputAmount } of trade.swaps) {\n const amountIn = trade.maximumAmountIn(options.slippageTolerance, inputAmount).quotient;\n const amountOut = trade.minimumAmountOut(options.slippageTolerance, outputAmount).quotient;\n const singleHop = route.pools.length === 1;\n const recipient = routerMustCustody ? ADDRESS_THIS : typeof options.recipient === \"undefined\" ? MSG_SENDER : validateAndParseAddress(options.recipient);\n const mixedRouteIsAllV1 = (route2) => {\n return route2.pools.every((pool) => pool instanceof PairV1);\n };\n if (singleHop) {\n if (mixedRouteIsAllV1(route)) {\n const path = route.path.map((token) => token.address);\n const exactInputParams = [amountIn, performAggregatedSlippageCheck ? 0n : amountOut, path, recipient];\n calldatas.push(encodeFunctionData({\n abi: _SwapRouter.ABI,\n functionName: \"swapExactTokensForTokensV1\",\n args: exactInputParams\n }));\n } else {\n const path = route.path.map((token) => token.address);\n const exactInputParams = [amountIn, performAggregatedSlippageCheck ? 0n : amountOut, path, recipient];\n calldatas.push(encodeFunctionData({\n abi: _SwapRouter.ABI,\n functionName: \"swapExactTokensForTokensV2\",\n args: exactInputParams\n }));\n }\n } else {\n const sections = partitionMixedRouteByProtocol(route);\n const isLastSectionInRoute = (i) => {\n return i === sections.length - 1;\n };\n let outputToken;\n let inputToken = route.input.wrapped;\n for (let i = 0; i < sections.length; i++) {\n const section = sections[i];\n outputToken = getOutputOfPools(section, inputToken);\n const newRouteOriginal = new MixedRouteSDK(\n [...section],\n section[0].token0.equals(inputToken) ? section[0].token0 : section[0].token1,\n outputToken\n );\n const newRoute = new MixedRoute(newRouteOriginal);\n inputToken = outputToken;\n if (mixedRouteIsAllV1(newRoute)) {\n const exactInputParams = [\n i == 0 ? amountIn : 0n,\n // amountIn\n !isLastSectionInRoute(i) ? 0n : amountOut,\n // amountOutMin\n newRoute.path.map((token) => token.address),\n // path\n isLastSectionInRoute(i) ? recipient : ADDRESS_THIS\n // to\n ];\n calldatas.push(encodeFunctionData({\n abi: _SwapRouter.ABI,\n functionName: \"swapExactTokensForTokensV1\",\n args: exactInputParams\n }));\n } else {\n const exactInputParams = [\n i == 0 ? amountIn : 0n,\n // amountIn\n !isLastSectionInRoute(i) ? 0n : amountOut,\n // amountOutMin\n newRoute.path.map((token) => token.address),\n // path\n isLastSectionInRoute(i) ? recipient : ADDRESS_THIS\n // to\n ];\n calldatas.push(encodeFunctionData({\n abi: _SwapRouter.ABI,\n functionName: \"swapExactTokensForTokensV2\",\n args: exactInputParams\n }));\n }\n }\n }\n }\n return calldatas;\n }\n static encodeSwaps(trades, options, isSwapAndAdd) {\n if (trades instanceof Trade) {\n invariant3(\n trades.swaps.every(\n (swap) => swap.route.protocol == \"V1\" /* V1 */ || swap.route.protocol == \"V2\" /* V2 */ || swap.route.protocol == \"MIXED\" /* MIXED */\n ),\n \"UNSUPPORTED_PROTOCOL\"\n );\n let individualTrades = [];\n for (const { route, inputAmount, outputAmount } of trades.swaps) {\n if (route.protocol == \"V1\" /* V1 */) {\n individualTrades.push(\n new TradeV1(\n route,\n trades.tradeType == TradeType.EXACT_INPUT ? inputAmount : outputAmount,\n trades.tradeType\n )\n );\n } else if (route.protocol == \"V2\" /* V2 */) {\n individualTrades.push(\n new TradeV2(\n route,\n trades.tradeType == TradeType.EXACT_INPUT ? inputAmount : outputAmount,\n trades.tradeType\n )\n );\n } else if (route.protocol == \"MIXED\" /* MIXED */) {\n individualTrades.push(\n /// we can change the naming of this function on MixedRouteTrade if needed\n MixedRouteTrade.createUncheckedTrade({\n route,\n inputAmount,\n outputAmount,\n tradeType: trades.tradeType\n })\n );\n } else {\n throw new Error(\"UNSUPPORTED_TRADE_PROTOCOL\");\n }\n }\n trades = individualTrades;\n }\n if (!Array.isArray(trades)) {\n trades = [trades];\n }\n const numberOfTrades = trades.reduce(\n (numberOfTrades2, trade) => numberOfTrades2 + (trade instanceof MixedRouteTrade ? trade.swaps.length : 1),\n 0\n );\n const sampleTrade = trades[0];\n invariant3(\n trades.every((trade) => trade.inputAmount.currency.equals(sampleTrade.inputAmount.currency)),\n \"TOKEN_IN_DIFF\"\n );\n invariant3(\n trades.every((trade) => trade.outputAmount.currency.equals(sampleTrade.outputAmount.currency)),\n \"TOKEN_OUT_DIFF\"\n );\n invariant3(\n trades.every((trade) => trade.tradeType === sampleTrade.tradeType),\n \"TRADE_TYPE_DIFF\"\n );\n const calldatas = [];\n const inputIsNative = sampleTrade.inputAmount.currency.isNative;\n const outputIsNative = sampleTrade.outputAmount.currency.isNative;\n const performAggregatedSlippageCheck = sampleTrade.tradeType === TradeType.EXACT_INPUT && numberOfTrades > 2;\n const routerMustCustody = outputIsNative || !!options.fee || !!isSwapAndAdd || performAggregatedSlippageCheck;\n if (options.inputTokenPermit) {\n invariant3(sampleTrade.inputAmount.currency.isToken, \"NON_TOKEN_PERMIT\");\n calldatas.push(SelfPermit.encodePermit(sampleTrade.inputAmount.currency, options.inputTokenPermit));\n }\n for (const trade of trades) {\n if (trade instanceof TradeV1) {\n calldatas.push(_SwapRouter.encodeV1Swap(trade, options, routerMustCustody, performAggregatedSlippageCheck));\n } else if (trade instanceof TradeV2) {\n calldatas.push(_SwapRouter.encodeV2Swap(trade, options, routerMustCustody, performAggregatedSlippageCheck));\n } else if (trade instanceof MixedRouteTrade) {\n for (const calldata of _SwapRouter.encodeMixedRouteSwap(\n trade,\n options,\n routerMustCustody,\n performAggregatedSlippageCheck\n )) {\n calldatas.push(calldata);\n }\n } else {\n throw new Error(\"Unsupported trade object\");\n }\n }\n const ZERO_IN = CurrencyAmount$1.fromRawAmount(sampleTrade.inputAmount.currency, 0);\n const ZERO_OUT = CurrencyAmount$1.fromRawAmount(sampleTrade.outputAmount.currency, 0);\n const minimumAmountOut = trades.reduce(\n (sum, trade) => sum.add(trade.minimumAmountOut(options.slippageTolerance)),\n ZERO_OUT\n );\n const quoteAmountOut = trades.reduce(\n (sum, trade) => sum.add(trade.outputAmount),\n ZERO_OUT\n );\n const totalAmountIn = trades.reduce(\n (sum, trade) => sum.add(trade.maximumAmountIn(options.slippageTolerance)),\n ZERO_IN\n );\n return {\n calldatas,\n sampleTrade,\n routerMustCustody,\n inputIsNative,\n outputIsNative,\n totalAmountIn,\n minimumAmountOut,\n quoteAmountOut\n };\n }\n /**\n * Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given trade.\n * @param trades to produce call parameters for\n * @param options options for the call parameters\n */\n static swapCallParameters(trades, options) {\n const {\n calldatas,\n sampleTrade,\n routerMustCustody,\n inputIsNative,\n outputIsNative,\n totalAmountIn,\n minimumAmountOut\n } = _SwapRouter.encodeSwaps(trades, options);\n if (routerMustCustody) {\n if (outputIsNative) {\n calldatas.push(PaymentsExtended.encodeUnwrapWETH9(minimumAmountOut.quotient, options.recipient, options.fee));\n } else {\n calldatas.push(\n PaymentsExtended.encodeSweepToken(\n sampleTrade.outputAmount.currency.wrapped,\n minimumAmountOut.quotient,\n options.recipient,\n options.fee\n )\n );\n }\n }\n if (inputIsNative && (sampleTrade.tradeType === TradeType.EXACT_OUTPUT || _SwapRouter.riskOfPartialFill(trades))) {\n calldatas.push(Payments.encodeRefundETH());\n }\n return {\n calldata: MulticallExtended.encodeMulticall(calldatas, options.deadlineOrPreviousBlockhash),\n value: toHex(inputIsNative ? totalAmountIn.quotient : ZERO3)\n };\n }\n /**\n * Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given trade.\n * @param trades to produce call parameters for\n * @param options options for the call parameters\n */\n static swapAndAddCallParameters(trades, options, position, addLiquidityOptions, tokenInApprovalType, tokenOutApprovalType) {\n const {\n calldatas,\n inputIsNative,\n outputIsNative,\n sampleTrade,\n totalAmountIn: totalAmountSwapped,\n quoteAmountOut,\n minimumAmountOut\n } = _SwapRouter.encodeSwaps(trades, options, true);\n if (options.outputTokenPermit) {\n invariant3(quoteAmountOut.currency.isToken, \"NON_TOKEN_PERMIT_OUTPUT\");\n calldatas.push(SelfPermit.encodePermit(quoteAmountOut.currency, options.outputTokenPermit));\n }\n const chainId = sampleTrade.route.chainId;\n const zeroForOne = position.pool.token0.wrapped.address === totalAmountSwapped.currency.wrapped.address;\n const { positionAmountIn, positionAmountOut } = _SwapRouter.getPositionAmounts(position, zeroForOne);\n const tokenIn = inputIsNative ? WNATIVE[chainId] : positionAmountIn.currency.wrapped;\n const tokenOut = outputIsNative ? WNATIVE[chainId] : positionAmountOut.currency.wrapped;\n const amountOutRemaining = positionAmountOut.subtract(quoteAmountOut.wrapped);\n if (amountOutRemaining.greaterThan(CurrencyAmount$1.fromRawAmount(positionAmountOut.currency, 0))) {\n outputIsNative ? calldatas.push(PaymentsExtended.encodeWrapETH(amountOutRemaining.quotient)) : calldatas.push(PaymentsExtended.encodePull(tokenOut, amountOutRemaining.quotient));\n }\n inputIsNative ? calldatas.push(PaymentsExtended.encodeWrapETH(positionAmountIn.quotient)) : calldatas.push(PaymentsExtended.encodePull(tokenIn, positionAmountIn.quotient));\n if (tokenInApprovalType !== 0 /* NOT_REQUIRED */)\n calldatas.push(ApproveAndCall.encodeApprove(tokenIn, tokenInApprovalType));\n if (tokenOutApprovalType !== 0 /* NOT_REQUIRED */)\n calldatas.push(ApproveAndCall.encodeApprove(tokenOut, tokenOutApprovalType));\n const minimalPosition = Position.fromAmounts({\n pool: position.pool,\n tickLower: position.tickLower,\n tickUpper: position.tickUpper,\n amount0: zeroForOne ? position.amount0.quotient.toString() : minimumAmountOut.quotient.toString(),\n amount1: zeroForOne ? minimumAmountOut.quotient.toString() : position.amount1.quotient.toString(),\n useFullPrecision: false\n });\n calldatas.push(\n ApproveAndCall.encodeAddLiquidity(position, minimalPosition, addLiquidityOptions, options.slippageTolerance)\n );\n if (inputIsNative) {\n calldatas.push(PaymentsExtended.encodeUnwrapWETH9(ZERO3));\n } else {\n calldatas.push(PaymentsExtended.encodeSweepToken(tokenIn, ZERO3));\n }\n if (outputIsNative) {\n calldatas.push(PaymentsExtended.encodeUnwrapWETH9(ZERO3));\n } else {\n calldatas.push(PaymentsExtended.encodeSweepToken(tokenOut, ZERO3));\n }\n let value;\n if (inputIsNative) {\n value = totalAmountSwapped.wrapped.add(positionAmountIn.wrapped).quotient;\n } else if (outputIsNative) {\n value = amountOutRemaining.quotient;\n } else {\n value = ZERO3;\n }\n return {\n calldata: MulticallExtended.encodeMulticall(calldatas, options.deadlineOrPreviousBlockhash),\n value: toHex(value.toString())\n };\n }\n // if price impact is very high, there's a chance of hitting max/min prices resulting in a partial fill of the swap\n static riskOfPartialFill(trades) {\n if (Array.isArray(trades)) {\n return trades.some((trade) => {\n return _SwapRouter.v3TradeWithHighPriceImpact(trade);\n });\n } else {\n return _SwapRouter.v3TradeWithHighPriceImpact(trades);\n }\n }\n static v3TradeWithHighPriceImpact(trade) {\n return !(trade instanceof TradeV1 || trade instanceof TradeV2) && trade.priceImpact.greaterThan(REFUND_ETH_PRICE_IMPACT_THRESHOLD);\n }\n static getPositionAmounts(position, zeroForOne) {\n const { amount0, amount1 } = position.mintAmounts;\n const currencyAmount0 = CurrencyAmount$1.fromRawAmount(position.pool.token0, amount0);\n const currencyAmount1 = CurrencyAmount$1.fromRawAmount(position.pool.token1, amount1);\n const [positionAmountIn, positionAmountOut] = zeroForOne ? [currencyAmount0, currencyAmount1] : [currencyAmount1, currencyAmount0];\n return { positionAmountIn, positionAmountOut };\n }\n};\nvar SwapRouter = _SwapRouter;\nSwapRouter.ABI = swapRouter02Abi;\nfunction encodeMixedRouteToPath(route) {\n const firstInputToken = route.input.wrapped;\n const { path, types } = route.pools.reduce(\n ({ inputToken, path: path2, types: types2 }, pool, index) => {\n const outputToken = pool.token0.equals(inputToken) ? pool.token1 : pool.token0;\n if (index === 0) {\n return {\n inputToken: outputToken,\n types: [\"address\", \"uint24\", \"address\"],\n path: [inputToken.address, pool instanceof PairV1 ? V1_FEE_PATH_PLACEHOLDER : V2_FEE_PATH_PLACEHOLDER, outputToken.address]\n };\n } else {\n return {\n inputToken: outputToken,\n types: [...types2, \"uint24\", \"address\"],\n path: [...path2, pool instanceof PairV1 ? V1_FEE_PATH_PLACEHOLDER : V2_FEE_PATH_PLACEHOLDER, outputToken.address]\n };\n }\n },\n { inputToken: firstInputToken, path: [], types: [] }\n );\n return encodePacked(types, path);\n}\n\n// src/util/protocols.ts\nvar TO_PROTOCOL = (protocol) => {\n switch (protocol.toLowerCase()) {\n case \"v1\":\n return \"V1\" /* V1 */;\n case \"v2\":\n return \"V2\" /* V2 */;\n case \"mixed\":\n return \"MIXED\" /* MIXED */;\n default:\n throw new Error(`Unknown protocol: {id}`);\n }\n};\nvar routeToString = (route) => {\n const routeStr = [];\n const tokens = route.path;\n const tokenPath = _16.map(tokens, (token) => `${token.symbol}`);\n const pools = route.protocol === \"MIXED\" /* MIXED */ ? route.pools : route.pairs;\n const poolFeePath = _16.map(pools, (pool) => {\n return `${pool instanceof PairV1 ? ` -- [${PairV1.getAddress(\n pool.token0,\n pool.token1\n )}]` : ` -- [${PairV2.getAddress(\n pool.token0,\n pool.token1\n )}]`} --> `;\n });\n for (let i = 0; i < tokenPath.length; i++) {\n routeStr.push(tokenPath[i]);\n if (i < poolFeePath.length) {\n routeStr.push(poolFeePath[i]);\n }\n }\n return routeStr.join(\"\");\n};\nvar routeAmountsToString = (routeAmounts) => {\n const total = _16.reduce(\n routeAmounts,\n (total2, cur) => {\n return total2.add(cur.amount);\n },\n CurrencyAmount.fromRawAmount(routeAmounts[0].amount.currency, 0)\n );\n const routeStrings = _16.map(routeAmounts, ({ protocol, route, amount }) => {\n const portion = amount.divide(total);\n const percent = new Percent(portion.numerator, portion.denominator);\n return `[${protocol == \"MIXED\" /* MIXED */ ? \"V1 + V2\" : protocol}] ${percent.toFixed(2)}% = ${routeToString(route)}`;\n });\n return _16.join(routeStrings, \", \");\n};\nvar routeAmountToString = (routeAmount) => {\n const { route, amount } = routeAmount;\n return `${amount.toExact()} = ${routeToString(route)}`;\n};\nvar poolToString = (p) => {\n return `${p.token0.symbol}/${p.token1.symbol}`;\n};\n\n// src/abis/ERC20.ts\nvar erc20Abi = [\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"name_\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"symbol_\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"subtractedValue\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"decreaseAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"addedValue\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"increaseAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n];\n\n// src/providers/token-provider.ts\nvar eUSDC_PULSECHAIN = new ERC20Token(\n ChainId.PULSECHAIN,\n \"0x15D38573d2feeb82e7ad5187aB8c1D52810B1f07\",\n 6,\n \"USDC\",\n \"USDC from Ethereum\"\n);\nvar eUSDT_PULSECHAIN = new ERC20Token(\n ChainId.PULSECHAIN,\n \"0x0Cb6F5a34ad42ec934882A05265A7d5F59b51A2f\",\n 6,\n \"USDT\",\n \"Tether USD from Ethereum\"\n);\nvar eWBTC_PULSECHAIN = new ERC20Token(\n ChainId.PULSECHAIN,\n \"0xb17D901469B9208B17d916112988A3FeD19b5cA1\",\n 8,\n \"WBTC\",\n \"Wrapped BTC from Ethereum\"\n);\nvar eDAI_PULSECHAIN = new ERC20Token(\n ChainId.PULSECHAIN,\n \"0xefD766cCb38EaF1dfd701853BFCe31359239F305\",\n 18,\n \"DAI\",\n \"Dai Stablecoin from Ethereum\"\n);\nvar PLSX_PULSECHAIN = new ERC20Token(\n ChainId.PULSECHAIN,\n \"0x95B303987A60C71504D99Aa1b13B4DA07b0790ab\",\n 18,\n \"PLSX\",\n \"PulseX\"\n);\nvar eHEX_PULSECHAIN = new ERC20Token(\n ChainId.PULSECHAIN,\n \"0x57fde0a71132198BBeC939B98976993d8D89D225\",\n 8,\n \"HEX\",\n \"HEX from Ethereum\"\n);\nvar HEX_PULSECHAIN = new ERC20Token(\n ChainId.PULSECHAIN,\n \"0x2b591e99afE9f32eAA6214f7B7629768c40Eeb39\",\n 8,\n \"HEX\",\n \"HEX\"\n);\nvar INC_PULSECHAIN = new ERC20Token(\n ChainId.PULSECHAIN,\n \"0x2fa878Ab3F87CC1C9737Fc071108F904c0B0C95d\",\n 18,\n \"INC\",\n \"Incentive\"\n);\nvar WETH_PULSECHAIN = new ERC20Token(\n ChainId.PULSECHAIN,\n \"0x02DcdD04e3F455D838cd1249292C58f3B79e3C3C\",\n 18,\n \"WETH\",\n \"WETH from Ethereum\"\n);\nvar PLSX_TESTNET = new ERC20Token(\n ChainId.PULSECHAIN_TESTNET,\n \"0x8a810ea8B121d08342E9e7696f4a9915cBE494B7\",\n 18,\n \"PLSX\",\n \"PulseX\"\n);\nvar INC_TESTNET = new ERC20Token(\n ChainId.PULSECHAIN_TESTNET,\n \"0x6eFAfcb715F385c71d8AF763E8478FeEA6faDF63\",\n 18,\n \"INC\",\n \"Incentive\"\n);\nvar HEX_TESTNET = new ERC20Token(\n ChainId.PULSECHAIN_TESTNET,\n \"0x2b591e99afE9f32eAA6214f7B7629768c40Eeb39\",\n 8,\n \"HEX\",\n \"HEX\"\n);\nvar tDAI_TESTNET = new ERC20Token(\n ChainId.PULSECHAIN_TESTNET,\n \"0x826e4e896CC2f5B371Cd7Bb0bd929DB3e3DB67c0\",\n 18,\n \"tDAI\",\n \"DAI Mock\"\n);\nvar TokenProvider = class {\n constructor(chainId, multicall2Provider) {\n this.chainId = chainId;\n this.multicall2Provider = multicall2Provider;\n }\n async getTokenSymbol(addresses, providerConfig) {\n let result;\n try {\n result = await this.multicall2Provider.callSameFunctionOnMultipleContracts({\n addresses,\n abi: erc20Abi,\n functionName: \"symbol\",\n providerConfig\n });\n } catch (error) {\n log.error(\n { addresses },\n `TokenProvider.getTokenSymbol[string] failed with error ${error}. Trying with bytes32.`\n );\n const bytes32Abi = [\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\"\n }\n ],\n stateMutability: \"view\",\n type: \"function\"\n }\n ];\n try {\n result = await this.multicall2Provider.callSameFunctionOnMultipleContracts({\n addresses,\n abi: bytes32Abi,\n functionName: \"symbol\",\n providerConfig,\n bytes32SymbolCall: true\n });\n } catch (error2) {\n log.fatal(\n { addresses },\n `TokenProvider.getTokenSymbol[bytes32] failed with error ${error2}.`\n );\n throw new Error(\n \"[TokenProvider.getTokenSymbol] Impossible to fetch token symbol.\"\n );\n }\n }\n return { result };\n }\n async getTokenDecimals(addresses, providerConfig) {\n return this.multicall2Provider.callSameFunctionOnMultipleContracts({\n addresses,\n abi: erc20Abi,\n functionName: \"decimals\",\n providerConfig\n });\n }\n async getTokens(_addresses, providerConfig) {\n const addressToToken = {};\n const symbolToToken = {};\n const addresses = _16(_addresses).map((address) => address.toLowerCase()).uniq().value();\n if (addresses.length > 0) {\n const [symbolsResult, decimalsResult] = await Promise.all([\n this.getTokenSymbol(addresses, providerConfig),\n this.getTokenDecimals(addresses, providerConfig)\n ]);\n const { results: symbols } = symbolsResult.result;\n const { results: decimals } = decimalsResult;\n for (let i = 0; i < addresses.length; i++) {\n const address = addresses[i];\n const symbolResult = symbols[i];\n const decimalResult = decimals[i];\n if (!symbolResult?.success || !decimalResult?.success) {\n log.info(\n {\n symbolResult,\n decimalResult\n },\n `Dropping token with address ${address} as symbol or decimal are invalid`\n );\n continue;\n }\n const symbol = symbolResult.result;\n const decimal = decimalResult.result;\n addressToToken[address.toLowerCase()] = new ERC20Token(\n this.chainId,\n address,\n decimal,\n symbol\n );\n symbolToToken[symbol.toLowerCase()] = addressToToken[address.toLowerCase()];\n }\n log.info(\n `Got token symbol and decimals for ${Object.values(addressToToken).length} out of ${addresses.length} tokens on-chain ${providerConfig ? `as of: ${providerConfig?.blockNumber}` : \"\"}`\n );\n }\n return {\n getTokenByAddress: (address) => {\n return addressToToken[address.toLowerCase()];\n },\n getTokenBySymbol: (symbol) => {\n return symbolToToken[symbol.toLowerCase()];\n },\n getAllTokens: () => {\n return Object.values(addressToToken);\n }\n };\n }\n};\nvar DAI_ON = (chainId) => {\n switch (chainId) {\n case ChainId.PULSECHAIN:\n return eDAI_PULSECHAIN;\n default:\n throw new Error(`Chain id: ${chainId} not supported`);\n }\n};\nvar USDT_ON = (chainId) => {\n switch (chainId) {\n case ChainId.PULSECHAIN:\n return eUSDT_PULSECHAIN;\n default:\n throw new Error(`Chain id: ${chainId} not supported`);\n }\n};\nvar USDC_ON = (chainId) => {\n switch (chainId) {\n case ChainId.PULSECHAIN:\n return eUSDC_PULSECHAIN;\n default:\n throw new Error(`Chain id: ${chainId} not supported`);\n }\n};\nvar WNATIVE_ON = (chainId) => {\n return WRAPPED_NATIVE_CURRENCY[chainId];\n};\n\n// src/providers/caching-token-provider.ts\nvar CACHE_SEED_TOKENS = {\n [ChainId.PULSECHAIN]: {\n eUSDC: eUSDC_PULSECHAIN,\n eUSDT: eUSDT_PULSECHAIN,\n eDAI: eDAI_PULSECHAIN,\n eWBTC: eWBTC_PULSECHAIN,\n PLSX: PLSX_PULSECHAIN,\n eHEX: eHEX_PULSECHAIN,\n HEX: HEX_PULSECHAIN,\n INC: INC_PULSECHAIN,\n WETH: WETH_PULSECHAIN,\n WPLS: WRAPPED_NATIVE_CURRENCY[ChainId.PULSECHAIN]\n },\n [ChainId.PULSECHAIN_TESTNET]: {\n WPLS: WRAPPED_NATIVE_CURRENCY[ChainId.PULSECHAIN_TESTNET],\n PLSX: PLSX_TESTNET,\n INC: INC_TESTNET,\n HEX: HEX_TESTNET,\n tDAI: tDAI_TESTNET\n }\n // Currently we do not have providers for Moonbeam mainnet or Gnosis testnet\n};\nvar CachingTokenProviderWithFallback = class {\n constructor(chainId, tokenCache, primaryTokenProvider, fallbackTokenProvider) {\n this.chainId = chainId;\n this.tokenCache = tokenCache;\n this.primaryTokenProvider = primaryTokenProvider;\n this.fallbackTokenProvider = fallbackTokenProvider;\n this.CACHE_KEY = (chainId, address) => `token-${chainId}-${address}`;\n }\n async getTokens(_addresses) {\n const seedTokens = CACHE_SEED_TOKENS[this.chainId];\n if (seedTokens) {\n for (const token of Object.values(seedTokens)) {\n await this.tokenCache.set(\n this.CACHE_KEY(this.chainId, token.address.toLowerCase()),\n token\n );\n }\n }\n const addressToToken = {};\n const symbolToToken = {};\n const addresses = _16(_addresses).map((address) => address.toLowerCase()).uniq().value();\n const addressesToFindInPrimary = [];\n const addressesToFindInSecondary = [];\n for (const address of addresses) {\n if (await this.tokenCache.has(this.CACHE_KEY(this.chainId, address))) {\n addressToToken[address.toLowerCase()] = await this.tokenCache.get(\n this.CACHE_KEY(this.chainId, address)\n );\n symbolToToken[addressToToken[address].symbol] = await this.tokenCache.get(this.CACHE_KEY(this.chainId, address));\n } else {\n addressesToFindInPrimary.push(address);\n }\n }\n log.info(\n { addressesToFindInPrimary },\n `Found ${addresses.length - addressesToFindInPrimary.length} out of ${addresses.length} tokens in local cache. ${addressesToFindInPrimary.length > 0 ? `Checking primary token provider for ${addressesToFindInPrimary.length} tokens` : ``}\n `\n );\n if (addressesToFindInPrimary.length > 0) {\n const primaryTokenAccessor = await this.primaryTokenProvider.getTokens(\n addressesToFindInPrimary\n );\n for (const address of addressesToFindInPrimary) {\n const token = primaryTokenAccessor.getTokenByAddress(address);\n if (token) {\n addressToToken[address.toLowerCase()] = token;\n symbolToToken[addressToToken[address].symbol] = token;\n await this.tokenCache.set(\n this.CACHE_KEY(this.chainId, address.toLowerCase()),\n addressToToken[address]\n );\n } else {\n addressesToFindInSecondary.push(address);\n }\n }\n log.info(\n { addressesToFindInSecondary },\n `Found ${addressesToFindInPrimary.length - addressesToFindInSecondary.length} tokens in primary. ${this.fallbackTokenProvider ? `Checking secondary token provider for ${addressesToFindInSecondary.length} tokens` : `No fallback token provider specified. About to return.`}`\n );\n }\n if (this.fallbackTokenProvider && addressesToFindInSecondary.length > 0) {\n const secondaryTokenAccessor = await this.fallbackTokenProvider.getTokens(\n addressesToFindInSecondary\n );\n for (const address of addressesToFindInSecondary) {\n const token = secondaryTokenAccessor.getTokenByAddress(address);\n if (token) {\n addressToToken[address.toLowerCase()] = token;\n symbolToToken[addressToToken[address].symbol] = token;\n await this.tokenCache.set(\n this.CACHE_KEY(this.chainId, address.toLowerCase()),\n addressToToken[address]\n );\n }\n }\n }\n return {\n getTokenByAddress: (address) => {\n return addressToToken[address.toLowerCase()];\n },\n getTokenBySymbol: (symbol) => {\n return symbolToToken[symbol.toLowerCase()];\n },\n getAllTokens: () => {\n return Object.values(addressToToken);\n }\n };\n }\n};\n\n// src/providers/gas-price-provider.ts\nvar IGasPriceProvider = class {\n};\n\n// src/providers/eip-1559-gas-price-provider.ts\nvar DEFAULT_PRIORITY_FEE_PERCENTILE = 50;\nvar DEFAULT_BLOCKS_TO_LOOK_BACK = 4;\nvar EIP1559GasPriceProvider = class extends IGasPriceProvider {\n constructor(provider, priorityFeePercentile = DEFAULT_PRIORITY_FEE_PERCENTILE, blocksToConsider = DEFAULT_BLOCKS_TO_LOOK_BACK) {\n super();\n this.provider = provider;\n this.priorityFeePercentile = priorityFeePercentile;\n this.blocksToConsider = blocksToConsider;\n }\n async getGasPrice() {\n const feeHistoryRaw = await this.provider.getFeeHistory({\n blockCount: this.blocksToConsider,\n blockTag: \"latest\",\n rewardPercentiles: [this.priorityFeePercentile]\n });\n const feeHistory = {\n baseFeePerGas: _16.map(feeHistoryRaw.baseFeePerGas, (b) => b),\n gasUsedRatio: feeHistoryRaw.gasUsedRatio,\n oldestBlock: feeHistoryRaw.oldestBlock,\n reward: _16.map(feeHistoryRaw.reward, (b) => b[0])\n };\n const nextBlockBaseFeePerGas = feeHistory.baseFeePerGas[feeHistory.baseFeePerGas.length - 1];\n const averagePriorityFeePerGas = _16.reduce(\n feeHistory.reward,\n (sum, cur) => sum + cur,\n BigInt(0)\n ) / BigInt(feeHistory.reward.length);\n log.info(\n {\n feeHistory,\n feeHistoryReadable: {\n baseFeePerGas: _16.map(feeHistory.baseFeePerGas, (f) => f.toString()),\n oldestBlock: feeHistory.oldestBlock.toString(),\n reward: _16.map(feeHistory.reward, (r) => r.toString())\n },\n nextBlockBaseFeePerGas: nextBlockBaseFeePerGas.toString(),\n averagePriorityFeePerGas: averagePriorityFeePerGas.toString()\n },\n \"Got fee history from provider and computed gas estimate\"\n );\n const gasPriceWei = nextBlockBaseFeePerGas + averagePriorityFeePerGas;\n const blockNumber = feeHistory.oldestBlock + BigInt(this.blocksToConsider);\n log.info(\n `Estimated gas price in wei: ${gasPriceWei.toString()} as of block ${blockNumber.toString()}`\n );\n return { gasPriceWei };\n }\n};\n\n// src/abis/TokenValidator.ts\nvar tokenValidatorAbi = [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_factoryV1\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_factoryV2\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_WETH9\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"WETH9\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"tokens\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"baseTokens\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountToBorrow\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"batchValidate\",\n \"outputs\": [\n {\n \"internalType\": \"enum ITokenValidator.Status[]\",\n \"name\": \"isFotResults\",\n \"type\": \"uint8[]\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"factoryV1\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"factoryV2\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount0\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"uniswapV2Call\",\n \"outputs\": [],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"baseTokens\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountToBorrow\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"validate\",\n \"outputs\": [\n {\n \"internalType\": \"enum ITokenValidator.Status\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n];\n\n// src/providers/token-validator-provider.ts\nvar DEFAULT_ALLOWLIST = /* @__PURE__ */ new Set([\n // RYOSHI. Does not allow transfers between contracts so fails validation.\n \"0x777E2ae845272a2F540ebf6a3D03734A5a8f618e\".toLowerCase()\n]);\nvar TokenValidationResult = /* @__PURE__ */ ((TokenValidationResult2) => {\n TokenValidationResult2[TokenValidationResult2[\"UNKN\"] = 0] = \"UNKN\";\n TokenValidationResult2[TokenValidationResult2[\"FOT\"] = 1] = \"FOT\";\n TokenValidationResult2[TokenValidationResult2[\"STF\"] = 2] = \"STF\";\n return TokenValidationResult2;\n})(TokenValidationResult || {});\nvar AMOUNT_TO_FLASH_BORROW = \"1000\";\nvar GAS_LIMIT_PER_VALIDATE = 1e6;\nvar TokenValidatorProvider = class {\n constructor(chainId, multicall2Provider, tokenValidationCache, tokenValidatorAddress = TOKEN_VALIDATOR_ADDRESSES[chainId], gasLimitPerCall = GAS_LIMIT_PER_VALIDATE, amountToFlashBorrow = AMOUNT_TO_FLASH_BORROW, allowList = DEFAULT_ALLOWLIST) {\n this.chainId = chainId;\n this.multicall2Provider = multicall2Provider;\n this.tokenValidationCache = tokenValidationCache;\n this.tokenValidatorAddress = tokenValidatorAddress;\n this.gasLimitPerCall = gasLimitPerCall;\n this.amountToFlashBorrow = amountToFlashBorrow;\n this.allowList = allowList;\n this.CACHE_KEY = (chainId, address) => `token-${chainId}-${address}`;\n this.BASES = [WRAPPED_NATIVE_CURRENCY[this.chainId].address];\n }\n async validateTokens(tokens, providerConfig) {\n const tokenAddressToToken = _16.keyBy(tokens, \"address\");\n const addressesRaw = _16(tokens).map((token) => token.address).uniq().value();\n const addresses = [];\n const tokenToResult = {};\n for (const address of addressesRaw) {\n if (await this.tokenValidationCache.has(\n this.CACHE_KEY(this.chainId, address)\n )) {\n tokenToResult[address.toLowerCase()] = await this.tokenValidationCache.get(\n this.CACHE_KEY(this.chainId, address)\n );\n } else {\n addresses.push(address);\n }\n }\n log.info(\n `Got token validation results for ${addressesRaw.length - addresses.length} tokens from cache. Getting ${addresses.length} on-chain.`\n );\n const functionParams = _16(addresses).map((address) => [address, this.BASES, this.amountToFlashBorrow]).value();\n const multicallResult = await this.multicall2Provider.callSameFunctionOnContractWithMultipleParams({\n address: this.tokenValidatorAddress,\n abi: tokenValidatorAbi,\n functionName: \"validate\",\n functionParams,\n providerConfig,\n additionalConfig: {\n gasLimitPerCallOverride: this.gasLimitPerCall\n }\n });\n for (let i = 0; i < multicallResult.results.length; i++) {\n const resultWrapper = multicallResult.results[i];\n const tokenAddress = addresses[i];\n const token = tokenAddressToToken[tokenAddress];\n if (this.allowList.has(token.address.toLowerCase())) {\n tokenToResult[token.address.toLowerCase()] = 0 /* UNKN */;\n await this.tokenValidationCache.set(\n this.CACHE_KEY(this.chainId, token.address.toLowerCase()),\n tokenToResult[token.address.toLowerCase()]\n );\n continue;\n }\n if (!resultWrapper.success) {\n log.info(\n { result: resultWrapper },\n `Failed to validate token ${token.symbol}`\n );\n continue;\n }\n const validationResult = resultWrapper.result[0];\n tokenToResult[token.address.toLowerCase()] = validationResult;\n await this.tokenValidationCache.set(\n this.CACHE_KEY(this.chainId, token.address.toLowerCase()),\n tokenToResult[token.address.toLowerCase()]\n );\n }\n return {\n getValidationByToken: (token) => tokenToResult[token.address.toLowerCase()]\n };\n }\n};\n\n// src/abis/IPulseXPair.ts\nvar pulsexPairABI = [\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount0\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount1\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"senderOrigin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Burn\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount0\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount1\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"senderOrigin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Mint\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount0In\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount1In\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount0Out\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount1Out\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Swap\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint112\",\n \"name\": \"reserve0\",\n \"type\": \"uint112\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint112\",\n \"name\": \"reserve1\",\n \"type\": \"uint112\"\n }\n ],\n \"name\": \"Sync\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"DOMAIN_SEPARATOR\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"MINIMUM_LIQUIDITY\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"PERMIT_TYPEHASH\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"senderOrigin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"burn\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount0\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount1\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"factory\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"getReserves\",\n \"outputs\": [\n {\n \"internalType\": \"uint112\",\n \"name\": \"reserve0\",\n \"type\": \"uint112\"\n },\n {\n \"internalType\": \"uint112\",\n \"name\": \"reserve1\",\n \"type\": \"uint112\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"blockTimestampLast\",\n \"type\": \"uint32\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"kLast\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"senderOrigin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"mint\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"liquidity\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"nonces\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"permit\",\n \"outputs\": [],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"price0CumulativeLast\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"price1CumulativeLast\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"skim\",\n \"outputs\": [],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount0Out\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount1Out\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"swap\",\n \"outputs\": [],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [],\n \"name\": \"sync\",\n \"outputs\": [],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"token0\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"token1\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n];\n\n// src/providers/v2/pool-provider.ts\nvar V2PoolProvider = class {\n /**\n * Creates an instance of V2PoolProvider.\n * @param chainId The chain id to use.\n * @param multicall2Provider The multicall provider to use to get the pools.\n * @param retryOptions The retry options for each call to the multicall.\n */\n constructor(chainId, multicall2Provider, retryOptions = {\n retries: 2,\n minTimeout: 50,\n maxTimeout: 500\n }) {\n this.chainId = chainId;\n this.multicall2Provider = multicall2Provider;\n this.retryOptions = retryOptions;\n // Computing pool addresses is slow as it requires hashing, encoding etc.\n // Addresses never change so can always be cached.\n this.POOL_ADDRESS_CACHE = {};\n }\n async getPools(tokenPairs, providerConfig) {\n const poolAddressSet = /* @__PURE__ */ new Set();\n const sortedTokenPairs = [];\n const sortedPoolAddresses = [];\n for (const tokenPair of tokenPairs) {\n const [tokenA, tokenB] = tokenPair;\n const { poolAddress, token0, token1 } = this.getPoolAddress(\n tokenA,\n tokenB\n );\n if (poolAddressSet.has(poolAddress)) {\n continue;\n }\n poolAddressSet.add(poolAddress);\n sortedTokenPairs.push([token0, token1]);\n sortedPoolAddresses.push(poolAddress);\n }\n log.debug(\n `getPools called with ${tokenPairs.length} token pairs. Deduped down to ${poolAddressSet.size}`\n );\n const reservesResults = await this.getPoolsData(\n sortedPoolAddresses,\n \"getReserves\",\n providerConfig\n );\n log.info(\n `Got reserves for ${poolAddressSet.size} pools ${providerConfig?.blockNumber ? `as of block: ${await providerConfig?.blockNumber}.` : ``}`\n );\n const poolAddressToPool = {};\n const invalidPools = [];\n for (let i = 0; i < sortedPoolAddresses.length; i++) {\n const reservesResult = reservesResults[i];\n if (!reservesResult?.success) {\n const [token02, token12] = sortedTokenPairs[i];\n invalidPools.push([token02, token12]);\n continue;\n }\n const [token0, token1] = sortedTokenPairs[i];\n const [reserve0, reserve1] = reservesResult.result;\n const pool = new PairV2(\n CurrencyAmount.fromRawAmount(token0, reserve0.toString()),\n CurrencyAmount.fromRawAmount(token1, reserve1.toString())\n );\n const poolAddress = sortedPoolAddresses[i];\n poolAddressToPool[poolAddress] = pool;\n }\n if (invalidPools.length > 0) {\n log.info(\n {\n invalidPools: _16.map(\n invalidPools,\n ([token0, token1]) => `${token0.symbol}/${token1.symbol}`\n )\n },\n `${invalidPools.length} pools invalid after checking their slot0 and liquidity results. Dropping.`\n );\n }\n const poolStrs = _16.map(Object.values(poolAddressToPool), poolToString);\n log.debug({ poolStrs }, `Found ${poolStrs.length} valid pools`);\n return {\n getPool: (tokenA, tokenB) => {\n const { poolAddress } = this.getPoolAddress(tokenA, tokenB);\n return poolAddressToPool[poolAddress];\n },\n getPoolByAddress: (address) => poolAddressToPool[address],\n getAllPools: () => Object.values(poolAddressToPool)\n };\n }\n getPoolAddress(tokenA, tokenB) {\n const [token0, token1] = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA];\n const cacheKey = `${this.chainId}/${token0.address}/${token1.address}`;\n const cachedAddress = this.POOL_ADDRESS_CACHE[cacheKey];\n if (cachedAddress) {\n return { poolAddress: cachedAddress, token0, token1 };\n }\n const poolAddress = PairV2.getAddress(token0, token1);\n this.POOL_ADDRESS_CACHE[cacheKey] = poolAddress;\n return { poolAddress, token0, token1 };\n }\n async getPoolsData(poolAddresses, functionName, providerConfig) {\n const { results, blockNumber } = await retry7(async () => {\n return this.multicall2Provider.callSameFunctionOnMultipleContracts({\n addresses: poolAddresses,\n abi: pulsexPairABI,\n functionName,\n providerConfig\n });\n }, this.retryOptions);\n log.debug(`Pool data fetched as of block ${blockNumber}`);\n return results;\n }\n};\nvar V1PoolProvider = class {\n /**\n * Creates an instance of V1PoolProvider.\n * @param chainId The chain id to use.\n * @param multicall2Provider The multicall provider to use to get the pools.\n * @param retryOptions The retry options for each call to the multicall.\n */\n constructor(chainId, multicall2Provider, retryOptions = {\n retries: 2,\n minTimeout: 50,\n maxTimeout: 500\n }) {\n this.chainId = chainId;\n this.multicall2Provider = multicall2Provider;\n this.retryOptions = retryOptions;\n // Computing pool addresses is slow as it requires hashing, encoding etc.\n // Addresses never change so can always be cached.\n this.POOL_ADDRESS_CACHE = {};\n }\n async getPools(tokenPairs, providerConfig) {\n const poolAddressSet = /* @__PURE__ */ new Set();\n const sortedTokenPairs = [];\n const sortedPoolAddresses = [];\n for (const tokenPair of tokenPairs) {\n const [tokenA, tokenB] = tokenPair;\n const { poolAddress, token0, token1 } = this.getPoolAddress(\n tokenA,\n tokenB\n );\n if (poolAddressSet.has(poolAddress)) {\n continue;\n }\n poolAddressSet.add(poolAddress);\n sortedTokenPairs.push([token0, token1]);\n sortedPoolAddresses.push(poolAddress);\n }\n log.debug(\n `getPools called with ${tokenPairs.length} token pairs. Deduped down to ${poolAddressSet.size}`\n );\n const reservesResults = await this.getPoolsData(\n sortedPoolAddresses,\n \"getReserves\",\n providerConfig\n );\n log.info(\n `Got reserves for ${poolAddressSet.size} pools ${providerConfig?.blockNumber ? `as of block: ${await providerConfig?.blockNumber}.` : ``}`\n );\n const poolAddressToPool = {};\n const invalidPools = [];\n for (let i = 0; i < sortedPoolAddresses.length; i++) {\n const reservesResult = reservesResults[i];\n if (!reservesResult?.success) {\n const [token02, token12] = sortedTokenPairs[i];\n invalidPools.push([token02, token12]);\n continue;\n }\n const [token0, token1] = sortedTokenPairs[i];\n const [reserve0, reserve1] = reservesResult.result;\n const pool = new PairV1(\n CurrencyAmount.fromRawAmount(token0, reserve0.toString()),\n CurrencyAmount.fromRawAmount(token1, reserve1.toString())\n );\n const poolAddress = sortedPoolAddresses[i];\n poolAddressToPool[poolAddress] = pool;\n }\n if (invalidPools.length > 0) {\n log.info(\n {\n invalidPools: _16.map(\n invalidPools,\n ([token0, token1]) => `${token0.symbol}/${token1.symbol}`\n )\n },\n `${invalidPools.length} pools invalid after checking their slot0 and liquidity results. Dropping.`\n );\n }\n const poolStrs = _16.map(Object.values(poolAddressToPool), poolToString);\n log.debug({ poolStrs }, `Found ${poolStrs.length} valid pools`);\n return {\n getPool: (tokenA, tokenB) => {\n const { poolAddress } = this.getPoolAddress(tokenA, tokenB);\n return poolAddressToPool[poolAddress];\n },\n getPoolByAddress: (address) => poolAddressToPool[address],\n getAllPools: () => Object.values(poolAddressToPool)\n };\n }\n getPoolAddress(tokenA, tokenB) {\n const [token0, token1] = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA];\n const cacheKey = `${this.chainId}/${token0.address}/${token1.address}`;\n const cachedAddress = this.POOL_ADDRESS_CACHE[cacheKey];\n if (cachedAddress) {\n return { poolAddress: cachedAddress, token0, token1 };\n }\n const poolAddress = PairV1.getAddress(token0, token1);\n this.POOL_ADDRESS_CACHE[cacheKey] = poolAddress;\n return { poolAddress, token0, token1 };\n }\n async getPoolsData(poolAddresses, functionName, providerConfig) {\n const { results, blockNumber } = await retry7(async () => {\n return this.multicall2Provider.callSameFunctionOnMultipleContracts({\n addresses: poolAddresses,\n abi: pulsexPairABI,\n functionName,\n providerConfig\n });\n }, this.retryOptions);\n log.debug(`Pool data fetched as of block ${blockNumber}`);\n return results;\n }\n};\nfunction buildTrade(tokenInCurrency, tokenOutCurrency, tradeType, routeAmounts) {\n const v1RouteAmounts = _16.filter(\n routeAmounts,\n (routeAmount) => routeAmount.protocol === \"V1\" /* V1 */\n );\n const v2RouteAmounts = _16.filter(\n routeAmounts,\n (routeAmount) => routeAmount.protocol === \"V2\" /* V2 */\n );\n const mixedRouteAmounts = _16.filter(\n routeAmounts,\n (routeAmount) => routeAmount.protocol === \"MIXED\" /* MIXED */\n );\n const v1Routes = _16.map(\n v1RouteAmounts,\n (routeAmount) => {\n const { route, amount, quote } = routeAmount;\n if (tradeType == TradeType.EXACT_INPUT) {\n const amountCurrency = CurrencyAmount.fromFractionalAmount(\n tokenInCurrency,\n amount.numerator,\n amount.denominator\n );\n const quoteCurrency = CurrencyAmount.fromFractionalAmount(\n tokenOutCurrency,\n quote.numerator,\n quote.denominator\n );\n const routeV1SDK = new RouteV1$1(\n route.pairs,\n amountCurrency.currency,\n quoteCurrency.currency\n );\n return {\n routev1: routeV1SDK,\n inputAmount: amountCurrency,\n outputAmount: quoteCurrency\n };\n } else {\n const quoteCurrency = CurrencyAmount.fromFractionalAmount(\n tokenInCurrency,\n quote.numerator,\n quote.denominator\n );\n const amountCurrency = CurrencyAmount.fromFractionalAmount(\n tokenOutCurrency,\n amount.numerator,\n amount.denominator\n );\n const routeV1SDK = new RouteV1$1(\n route.pairs,\n quoteCurrency.currency,\n amountCurrency.currency\n );\n return {\n routev1: routeV1SDK,\n inputAmount: quoteCurrency,\n outputAmount: amountCurrency\n };\n }\n }\n );\n const v2Routes = _16.map(\n v2RouteAmounts,\n (routeAmount) => {\n const { route, amount, quote } = routeAmount;\n if (tradeType == TradeType.EXACT_INPUT) {\n const amountCurrency = CurrencyAmount.fromFractionalAmount(\n tokenInCurrency,\n amount.numerator,\n amount.denominator\n );\n const quoteCurrency = CurrencyAmount.fromFractionalAmount(\n tokenOutCurrency,\n quote.numerator,\n quote.denominator\n );\n const routeV2SDK = new RouteV2$1(\n route.pairs,\n amountCurrency.currency,\n quoteCurrency.currency\n );\n return {\n routev2: routeV2SDK,\n inputAmount: amountCurrency,\n outputAmount: quoteCurrency\n };\n } else {\n const quoteCurrency = CurrencyAmount.fromFractionalAmount(\n tokenInCurrency,\n quote.numerator,\n quote.denominator\n );\n const amountCurrency = CurrencyAmount.fromFractionalAmount(\n tokenOutCurrency,\n amount.numerator,\n amount.denominator\n );\n const routeV2SDK = new RouteV2$1(\n route.pairs,\n quoteCurrency.currency,\n amountCurrency.currency\n );\n return {\n routev2: routeV2SDK,\n inputAmount: quoteCurrency,\n outputAmount: amountCurrency\n };\n }\n }\n );\n const mixedRoutes = _16.map(\n mixedRouteAmounts,\n (routeAmount) => {\n const { route, amount, quote } = routeAmount;\n if (tradeType != TradeType.EXACT_INPUT) {\n throw new Error(\n \"Mixed routes are only supported for exact input trades\"\n );\n }\n const amountCurrency = CurrencyAmount.fromFractionalAmount(\n tokenInCurrency,\n amount.numerator,\n amount.denominator\n );\n const quoteCurrency = CurrencyAmount.fromFractionalAmount(\n tokenOutCurrency,\n quote.numerator,\n quote.denominator\n );\n const routeRaw = new MixedRouteSDK(\n route.pools,\n amountCurrency.currency,\n quoteCurrency.currency\n );\n return {\n mixedRoute: routeRaw,\n inputAmount: amountCurrency,\n outputAmount: quoteCurrency\n };\n }\n );\n const trade = new Trade({ v1Routes, v2Routes, mixedRoutes, tradeType });\n return trade;\n}\nfunction buildSwapMethodParameters(trade, swapConfig, chainId) {\n if (swapConfig.type == 1 /* SWAP_ROUTER_02 */) {\n const { recipient, slippageTolerance, deadline, inputTokenPermit } = swapConfig;\n return {\n ...SwapRouter.swapCallParameters(trade, {\n recipient,\n slippageTolerance,\n deadlineOrPreviousBlockhash: deadline,\n inputTokenPermit\n }),\n to: PULSEX_SWAP_ROUTER_ADDRESSES[chainId]\n };\n }\n throw new Error(`Unsupported swap type ${swapConfig}`);\n}\n\n// src/util/unsupported-tokens.ts\nvar UNSUPPORTED_TOKENS = {\n name: \"Unsupported Token List\",\n timestamp: \"2021-01-05T20:47:02.923Z\",\n version: {\n major: 1,\n minor: 0,\n patch: 0\n },\n tags: {},\n logoURI: \"ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir\",\n keywords: [\"uniswap\", \"unsupported\", \"broken\"],\n tokens: [\n {\n name: \"USD Token\",\n address: \"0xd233d1f6fd11640081abb8db125f722b5dc729dc\",\n symbol: \"USD\",\n decimals: 9,\n chainId: 1,\n logoURI: \"\"\n },\n {\n name: \"UNI HODL\",\n address: \"0x4bf5dc91E2555449293D7824028Eb8Fe5879B689\",\n symbol: \"UniH\",\n decimals: 18,\n chainId: 1,\n logoURI: \"\"\n },\n {\n name: \"Gold Tether\",\n address: \"0x4922a015c4407F87432B179bb209e125432E4a2A\",\n symbol: \"XAUt\",\n decimals: 6,\n chainId: 1,\n logoURI: \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png\"\n },\n {\n name: \"Grump Cat\",\n address: \"0x93B2FfF814FCaEFFB01406e80B4Ecd89Ca6A021b\",\n symbol: \"GRUMPY\",\n decimals: 9,\n chainId: 1,\n logoURI: \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png\"\n },\n {\n name: \"apeUSD-UMA Synthetic USD (Dec 2021)\",\n address: \"0xfA5e27893aee4805283D86e4283Da64F8c72dd56\",\n symbol: \"apeUSD-UMA-DEC21\",\n decimals: 18,\n chainId: 1,\n logoURI: \"\"\n },\n {\n chainId: 1,\n address: \"0xc6b11850241c5127eab73af4b6c68bc267cbbff4\",\n name: \"oWETHp Put 360 DEC2520\",\n symbol: \"oWETH-360P-12/25/20\",\n decimals: 7\n },\n {\n chainId: 1,\n name: \"oYFIp Put 25000 OCT0220\",\n address: \"0x452b421be5b30f0c6ad8c3f03c06bdaab4f5c56c\",\n symbol: \"oYFI-25000P-10/02/20\",\n decimals: 7\n },\n {\n chainId: 1,\n name: \"oWETHp Put 360 OCT3020\",\n address: \"0x0578779e746d7186253a36cf651ea786acfcf087\",\n symbol: \"oWETH-360P-10/30/20\",\n decimals: 7\n },\n {\n chainId: 1,\n name: \"ETHc Call 500 OCT3020\",\n address: \"0xf9aba2e43fb19184408ea3b572a0fd672946f87b\",\n symbol: \"oETH-500C-10/30/20\",\n decimals: 6\n },\n {\n chainId: 1,\n name: \"oBALp Put 22 OCT0220\",\n address: \"0xdb0991dfc7e828b5a2837dc82d68e16490562c8d\",\n symbol: \"oBAL-22P-10/02/20\",\n decimals: 7\n },\n {\n chainId: 1,\n name: \"oCOMPp Put 150 SEP2520\",\n address: \"0xe951ebe6b4420ab3f4844cf36dedd263d095b416\",\n symbol: \"oCOMP-150P-09/25/20\",\n decimals: 7\n },\n {\n chainId: 1,\n name: \"oCRVp Put 3 SEP252020\",\n address: \"0x9215bd49b59748419eac6bad9dbe247df06ebdb9\",\n symbol: \"oCRV-3P-09/25/20\",\n decimals: 7\n },\n {\n chainId: 1,\n name: \"oETHp Put 180 SEP2520\",\n address: \"0xE3A2c34Fa2F59ffa95C4ACd1E5663633d45Bc3AD\",\n symbol: \"oETH-180P-09/25/20\",\n decimals: 7\n },\n {\n chainId: 1,\n name: \"oETHc Call 400 SEP2520\",\n address: \"0x05977EBC26825C0CD6097E0Ad7204721516711Eb\",\n symbol: \"oETH-400C-09/25/20\",\n decimals: 7\n },\n {\n chainId: 1,\n name: \"oWETHp Put 380 SEP1820\",\n address: \"0x31f88266301b08631f9f0e33fd5c43c2a5d1e5b2\",\n symbol: \"oWETH-380P-09/18/20\",\n decimals: 7\n },\n {\n chainId: 1,\n name: \"oYFIp Put 8500 SEP1820\",\n address: \"0xd1cec2f67fdc4c60e0963515dfc3343f31e32e47\",\n symbol: \"oYFI-8500P-09/18/20\",\n decimals: 7\n },\n {\n chainId: 1,\n name: \"oWETHp Put 370 SEP1120\",\n address: \"0x15844029b2c2bf24506e9937739a9a912f1e4354\",\n symbol: \"oWETH-370P-09/11/20\",\n decimals: 7\n },\n {\n chainId: 1,\n name: \"oWETHp Put 400 SEP0420\",\n address: \"0x5562c33c383f6386be4f6dcdbd35a3a99bbcfde6\",\n symbol: \"oWETH-400P-09/04/20\",\n decimals: 7\n },\n {\n chainId: 1,\n name: \"oETHp Put 200 AUG2820\",\n address: \"0x3CBFC1397deF0602c2d211c70A1c0c38CEDB5448\",\n symbol: \"oWETH-400P-09/04/20\",\n decimals: 7\n },\n {\n chainId: 1,\n name: \"Opyn cDai Insurance\",\n symbol: \"ocDai\",\n address: \"0x98cc3bd6af1880fcfda17ac477b2f612980e5e33\",\n decimals: 8\n },\n {\n chainId: 1,\n name: \"Opyn cUSDC Insurance\",\n symbol: \"ocUSDC\",\n address: \"0x8ED9f862363fFdFD3a07546e618214b6D59F03d4\",\n decimals: 8\n },\n {\n chainId: 1,\n address: \"0x176C674Ee533C6139B0dc8b458D72A93dCB3e705\",\n symbol: \"iAAVE\",\n name: \"Synth Inverse Aave\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iAAVE.svg\",\n tags: [\"inverse\", \"synth\"]\n },\n {\n chainId: 1,\n address: \"0x8A8079c7149B8A1611e5C5d978DCA3bE16545F83\",\n symbol: \"iADA\",\n name: \"Synth Inverse Cardano\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iADA.svg\",\n tags: [\"inverse\", \"synth\"]\n },\n {\n chainId: 1,\n address: \"0xAFD870F32CE54EfdBF677466B612bf8ad164454B\",\n symbol: \"iBNB\",\n name: \"Synth Inverse Binance Coin\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBNB.svg\",\n tags: [\"inverse\", \"synth\"]\n },\n {\n chainId: 1,\n address: \"0xD6014EA05BDe904448B743833dDF07c3C7837481\",\n symbol: \"iBTC\",\n name: \"Synth Inverse Bitcoin\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBTC.svg\",\n tags: [\"inverse\", \"synth\"]\n },\n {\n chainId: 1,\n address: \"0x336213e1DDFC69f4701Fc3F86F4ef4A160c1159d\",\n symbol: \"iCEX\",\n name: \"Synth Inverse Centralised Exchange Index\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCEX.svg\",\n tags: [\"index\", \"inverse\", \"synth\"]\n },\n {\n chainId: 1,\n address: \"0x6345728B1ccE16E6f8C509950b5c84FFF88530d9\",\n symbol: \"iCOMP\",\n name: \"Synth Inverse Compound\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCOMP.svg\",\n tags: [\"inverse\", \"synth\"]\n },\n {\n chainId: 1,\n address: \"0xCB98f42221b2C251A4E74A1609722eE09f0cc08E\",\n symbol: \"iDASH\",\n name: \"Synth Inverse Dash\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDASH.svg\",\n tags: [\"inverse\", \"synth\"]\n },\n {\n chainId: 1,\n address: \"0x14d10003807AC60d07BB0ba82cAeaC8d2087c157\",\n symbol: \"iDEFI\",\n name: \"Synth Inverse DeFi Index\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDEFI.svg\",\n tags: [\"index\", \"inverse\", \"synth\"]\n },\n {\n chainId: 1,\n address: \"0x46a97629C9C1F58De6EC18C7F536e7E6d6A6ecDe\",\n symbol: \"iDOT\",\n name: \"Synth Inverse Polkadot\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDOT.svg\",\n tags: [\"inverse\", \"synth\"]\n },\n {\n chainId: 1,\n address: \"0xF4EebDD0704021eF2a6Bbe993fdf93030Cd784b4\",\n symbol: \"iEOS\",\n name: \"Synth Inverse EOS\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iEOS.svg\",\n tags: [\"inverse\", \"synth\"]\n },\n {\n chainId: 1,\n address: \"0xd50c1746D835d2770dDA3703B69187bFfeB14126\",\n symbol: \"iETC\",\n name: \"Synth Inverse Ethereum Classic\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETC.svg\",\n tags: [\"inverse\", \"synth\"]\n },\n {\n chainId: 1,\n address: \"0xA9859874e1743A32409f75bB11549892138BBA1E\",\n symbol: \"iETH\",\n name: \"Synth Inverse Ether\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETH.svg\",\n tags: [\"inverse\", \"synth\"]\n },\n {\n chainId: 1,\n address: \"0x2d7aC061fc3db53c39fe1607fB8cec1B2C162B01\",\n symbol: \"iLINK\",\n name: \"Synth Inverse Chainlink\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLINK.svg\",\n tags: [\"inverse\", \"synth\"]\n },\n {\n chainId: 1,\n address: \"0x79da1431150C9b82D2E5dfc1C68B33216846851e\",\n symbol: \"iLTC\",\n name: \"Synth Inverse Litecoin\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLTC.svg\",\n tags: [\"inverse\", \"synth\"]\n },\n {\n chainId: 1,\n address: \"0xA5a5DF41883Cdc00c4cCC6E8097130535399d9a3\",\n symbol: \"iOIL\",\n name: \"Synth Inverse Perpetual Oil Futures\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iOIL.svg\",\n tags: [\"inverse\", \"synth\"]\n },\n {\n chainId: 1,\n address: \"0x0fEd38108bdb8e62ef7b5680E8E0726E2F29e0De\",\n symbol: \"iREN\",\n name: \"Synth Inverse Ren\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iREN.svg\",\n tags: [\"inverse\", \"synth\"]\n },\n {\n chainId: 1,\n address: \"0xC5807183a9661A533CB08CbC297594a0B864dc12\",\n symbol: \"iTRX\",\n name: \"Synth Inverse TRON\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iTRX.svg\",\n tags: [\"inverse\", \"synth\"]\n },\n {\n chainId: 1,\n address: \"0x36A00FF9072570eF4B9292117850B8FE08d96cce\",\n symbol: \"iUNI\",\n name: \"Synth Inverse Uniswap\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iUNI.svg\",\n tags: [\"inverse\", \"synth\"]\n },\n {\n chainId: 1,\n address: \"0x4AdF728E2Df4945082cDD6053869f51278fae196\",\n symbol: \"iXMR\",\n name: \"Synth Inverse Monero\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXMR.svg\",\n tags: [\"inverse\", \"synth\"]\n },\n {\n chainId: 1,\n address: \"0x27269b3e45A4D3E79A3D6BFeE0C8fB13d0D711A6\",\n symbol: \"iXRP\",\n name: \"Synth Inverse Ripple\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXRP.svg\",\n tags: [\"inverse\", \"synth\"]\n },\n {\n chainId: 1,\n address: \"0x8deef89058090ac5655A99EEB451a4f9183D1678\",\n symbol: \"iXTZ\",\n name: \"Synth Inverse Tezos\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXTZ.svg\",\n tags: [\"inverse\", \"synth\"]\n },\n {\n chainId: 1,\n address: \"0x592244301CeA952d6daB2fdC1fE6bd9E53917306\",\n symbol: \"iYFI\",\n name: \"Synth Inverse yearn.finance\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iYFI.svg\",\n tags: [\"inverse\", \"synth\"]\n },\n {\n chainId: 1,\n address: \"0xcD39b5434a0A92cf47D1F567a7dF84bE356814F0\",\n symbol: \"s1INCH\",\n name: \"Synth 1inch\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/s1INCH.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0x7537AAe01f3B218DAE75e10d952473823F961B87\",\n symbol: \"sAAPL\",\n name: \"Synth Apple\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAPL.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0xd2dF355C19471c8bd7D8A3aa27Ff4e26A21b4076\",\n symbol: \"sAAVE\",\n name: \"Synth Aave\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAVE.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0xe36E2D3c7c34281FA3bC737950a68571736880A1\",\n symbol: \"sADA\",\n name: \"Synth Cardano\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sADA.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0x9CF7E61853ea30A41b02169391b393B901eac457\",\n symbol: \"sAMZN\",\n name: \"Synth Amazon\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAMZN.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0xF48e200EAF9906362BB1442fca31e0835773b8B4\",\n symbol: \"sAUD\",\n name: \"Synth Australian Dollars\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAUD.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0x617aeCB6137B5108D1E7D4918e3725C8cEbdB848\",\n symbol: \"sBNB\",\n name: \"Synth Binance Coin\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBNB.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6\",\n symbol: \"sBTC\",\n name: \"Synth Bitcoin\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBTC.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0xeABACD844A196D7Faf3CE596edeBF9900341B420\",\n symbol: \"sCEX\",\n name: \"Synth Centralised Exchange Index\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCEX.svg\",\n tags: [\"index\", \"synth\"]\n },\n {\n chainId: 1,\n address: \"0x0F83287FF768D1c1e17a42F44d644D7F22e8ee1d\",\n symbol: \"sCHF\",\n name: \"Synth Swiss Franc\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCHF.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0x9EeF4CA7aB9fa8bc0650127341C2d3F707a40f8A\",\n symbol: \"sCOIN\",\n name: \"Synth Coinbase\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOIN.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0xEb029507d3e043DD6C87F2917C4E82B902c35618\",\n symbol: \"sCOMP\",\n name: \"Synth Compound\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOMP.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0xD38aEb759891882e78E957c80656572503D8c1B1\",\n symbol: \"sCRV\",\n name: \"Synth Curve DAO Token\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCRV.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0xfE33ae95A9f0DA8A845aF33516EDc240DCD711d6\",\n symbol: \"sDASH\",\n name: \"Synth Dash\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDASH.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0xe1aFe1Fd76Fd88f78cBf599ea1846231B8bA3B6B\",\n symbol: \"sDEFI\",\n name: \"Synth DeFi Index\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDEFI.svg\",\n tags: [\"index\", \"synth\"]\n },\n {\n chainId: 1,\n address: \"0x1715AC0743102BF5Cd58EfBB6Cf2dC2685d967b6\",\n symbol: \"sDOT\",\n name: \"Synth Polkadot\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDOT.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0x88C8Cf3A212c0369698D13FE98Fcb76620389841\",\n symbol: \"sEOS\",\n name: \"Synth EOS\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEOS.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0x22602469d704BfFb0936c7A7cfcD18f7aA269375\",\n symbol: \"sETC\",\n name: \"Synth Ethereum Classic\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETC.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0x5e74C9036fb86BD7eCdcb084a0673EFc32eA31cb\",\n symbol: \"sETH\",\n name: \"Synth Ether\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETH.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0xD71eCFF9342A5Ced620049e616c5035F1dB98620\",\n symbol: \"sEUR\",\n name: \"Synth Euros\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEUR.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0xf50B5e535F62a56A9BD2d8e2434204E726c027Fa\",\n symbol: \"sFB\",\n name: \"Synth Facebook\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFB.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0x23348160D7f5aca21195dF2b70f28Fce2B0be9fC\",\n symbol: \"sFTSE\",\n name: \"Synth FTSE 100 Index\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFTSE.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0x97fe22E7341a0Cd8Db6F6C021A24Dc8f4DAD855F\",\n symbol: \"sGBP\",\n name: \"Synth Pound Sterling\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGBP.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0xC63B8ECCE56aB9C46184eC6aB85e4771fEa4c8AD\",\n symbol: \"sGOOG\",\n name: \"Synth Alphabet\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGOOG.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0xF6b1C627e95BFc3c1b4c9B825a032Ff0fBf3e07d\",\n symbol: \"sJPY\",\n name: \"Synth Japanese Yen\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sJPY.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0x269895a3dF4D73b077Fc823dD6dA1B95f72Aaf9B\",\n symbol: \"sKRW\",\n name: \"Synth South Korean Won\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sKRW.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0xbBC455cb4F1B9e4bFC4B73970d360c8f032EfEE6\",\n symbol: \"sLINK\",\n name: \"Synth Chainlink\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLINK.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0xC14103C2141E842e228FBaC594579e798616ce7A\",\n symbol: \"sLTC\",\n name: \"Synth Litecoin\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLTC.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0x745a824D6aBBD236AA794b5530062778A6Ad7523\",\n symbol: \"sMSFT\",\n name: \"Synth Microsoft\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sMSFT.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0x5A7E3c07604EB515C16b36cd51906a65f021F609\",\n symbol: \"sNFLX\",\n name: \"Synth Netflix\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNFLX.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0x757de3ac6B830a931eF178C6634c5C551773155c\",\n symbol: \"sNIKKEI\",\n name: \"Synth Nikkei 225 Index\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNIKKEI.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0x6d16cF3EC5F763d4d99cB0B0b110eefD93B11B56\",\n symbol: \"sOIL\",\n name: \"Synth Perpetual Oil Futures\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sOIL.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0xD31533E8d0f3DF62060e94B3F1318137bB6E3525\",\n symbol: \"sREN\",\n name: \"Synth Ren\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sREN.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0x0352557B007A4Aae1511C114409b932F06F9E2f4\",\n symbol: \"sRUNE\",\n name: \"Synth THORChain\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sRUNE.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0xf2E08356588EC5cd9E437552Da87C0076b4970B0\",\n symbol: \"sTRX\",\n name: \"Synth TRON\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTRX.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0x918dA91Ccbc32B7a6A0cc4eCd5987bbab6E31e6D\",\n symbol: \"sTSLA\",\n name: \"Synth Tesla\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTSLA.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0x30635297E450b930f8693297eBa160D9e6c8eBcf\",\n symbol: \"sUNI\",\n name: \"Synth Uniswap\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sUNI.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0x6A22e5e94388464181578Aa7A6B869e00fE27846\",\n symbol: \"sXAG\",\n name: \"Synth Silver Ounce\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAG.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0x261EfCdD24CeA98652B9700800a13DfBca4103fF\",\n symbol: \"sXAU\",\n name: \"Synth Gold Ounce\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAU.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0x5299d6F7472DCc137D7f3C4BcfBBB514BaBF341A\",\n symbol: \"sXMR\",\n name: \"Synth Monero\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXMR.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0xa2B0fDe6D710e201d0d608e924A484d1A5fEd57c\",\n symbol: \"sXRP\",\n name: \"Synth Ripple\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXRP.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0x2e59005c5c0f0a4D77CcA82653d48b46322EE5Cd\",\n symbol: \"sXTZ\",\n name: \"Synth Tezos\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXTZ.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0x992058B7DB08F9734d84485bfbC243C4ee6954A7\",\n symbol: \"sYFI\",\n name: \"Synth yearn.finance\",\n decimals: 18,\n logoURI: \"https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sYFI.svg\",\n tags: [\"synth\"]\n },\n {\n chainId: 1,\n address: \"0x81ab848898b5ffD3354dbbEfb333D5D183eEDcB5\",\n name: \"yUSD Synthetic Expiring 1 September 2020\",\n symbol: \"yUSDSEP20\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0xB2FdD60AD80ca7bA89B9BAb3b5336c2601C020b4\",\n name: \"yUSD Synthetic Expiring 1 October 2020\",\n symbol: \"yUSDOCT20\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x208d174775dc39fe18b1b374972f77ddec6c0f73\",\n name: \"uUSDrBTC Synthetic Expiring 1 Oct 2020\",\n symbol: \"uUSDrBTC-OCT\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0xf06ddacf71e2992e2122a1a0168c6967afdf63ce\",\n name: \"uUSDrBTC Synthetic Expiring 31 Dec 2020\",\n symbol: \"uUSDrBTC-DEC\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0xd16c79c8a39d44b2f3eb45d2019cd6a42b03e2a9\",\n name: \"uUSDwETH Synthetic Expiring 31 Dec 2020\",\n symbol: \"uUSDwETH-DEC\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x3d995510f8d82c2ea341845932b5ddde0bead9a3\",\n name: \"uGAS-JAN21 Token Expiring 31 Jan 2021\",\n symbol: \"uGAS-JAN21\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x90f802c7e8fb5d40b0de583e34c065a3bd2020d8\",\n name: \"YD-ETH-MAR21 Token Expiring 31 Mar 2021\",\n symbol: \"YD-ETH-MAR21\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x002f0b1a71c5730cf2f4da1970a889207bdb6d0d\",\n name: \"YD-BTC-MAR21 Token Expiring 31 Mar 2021\",\n symbol: \"YD-BTC-MAR21\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x1062ad0e59fa67fa0b27369113098cc941dd0d5f\",\n name: \"UMA 35 Call Expirying 30 Apr 2021\",\n symbol: \"UMAc35-0421\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0xf93340b1a3adf7eedcaec25fae8171d4b736e89f\",\n name: \"pxUSD Synthetic USD Expiring 1 April 2021\",\n symbol: \"pxUSD_MAR2021\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x84bd083b1c8bf929f39c98bc17cf518f40154f58\",\n name: \"Mario Cash Synthetic Token Expiring 15 January 2021\",\n symbol: \"Mario Cash-JAN-2021\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x81fab276aec924fbde190cf379783526d413cf70\",\n name: \"uGAS-FEB21 Token Expiring 28 Feb 2021\",\n symbol: \"uGAS-FEB21\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x4e110603e70b0b5f1c403ee543b37e1f1244cf28\",\n name: \"uGAS-MAR21 Token Expiring 31 Mar 2021\",\n symbol: \"uGAS-MAR21\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0xcf55a7f92d5e0c6683debbc1fc20c0a6e056df13\",\n name: \"Zelda Elastic Cash\",\n symbol: \"Zelda Elastic Cash\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x654eebac62240e6c56bab5f6adf7cfa74a894510\",\n name: \"Zelda Spring Nuts Cash\",\n symbol: \"Zelda Spring Nuts Cash\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0xa48920cc1ad85d8ea13af5d7be180c0338c306dd\",\n name: \"Zelda Summer Nuts Cash\",\n symbol: \"Zelda Summer Nuts Cash\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x249a198d59b57fda5dda90630febc86fd8c7594c\",\n name: \"Zelda Whirlwind Cash\",\n symbol: \"Zelda Whirlwind Cash\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x5ed1406873c9eb91f6f9a67ac4e152387c1132e7\",\n name: \"Zelda Reinforced Cash\",\n symbol: \"Zelda Reinforced Cash\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x8104c9f13118320eefe5fbea8a44d600b85981ef\",\n name: \"Mini Mario Summer Cash\",\n symbol: \"Mini Mario Summer Cash\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x69746c719e59674b147df25f50e7cfa0673cb625\",\n name: \"Mini Mario Spring Cash\",\n symbol: \"Mini Mario Spring Cash\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x6b1257641d18791141f025eab36fb567c4b564ff\",\n name: \"Bitcoin Dominance Token 31 March 2021\",\n symbol: \"BTCDOM-MAR2021\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x4e83b6287588a96321b2661c5e041845ff7814af\",\n name: \"Altcoin Dominance Token 31 March 2021\",\n symbol: \"ALTDOM-MAR2021\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x59fec83ec709c893aedd1a144cf1828eb04127cd\",\n name: \"pxGOLD Synthetic GOLD Expiring 31 May 2021\",\n symbol: \"pxGOLD_MAY2021\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x89337BFb7938804c3776C9FB921EccAf5ab76758\",\n name: \"Compound Annualized Rate Future Expiring 28 March 2021\",\n symbol: \"CAR-USDC-MAR21\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0xec58d3aefc9aaa2e0036fa65f70d569f49d9d1ed\",\n name: \"uSTONKS Index Token April 2021\",\n symbol: \"uSTONKS_APR21\",\n decimals: 6\n },\n {\n chainId: 1,\n address: \"0xa6B9d7E3d76cF23549293Fb22c488E0Ea591A44e\",\n name: \"uGAS-JUN21 Token Expiring 30 Jun 2021\",\n symbol: \"uGAS-JUN21\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0xe813b65da6c38a04591aed3f082d32db7d53c382\",\n name: \"Yield Dollar [WETH Dec 2021]\",\n symbol: \"YD-ETH-DEC21\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x4b606e9eb2228c70f44453afe5a73e1fea258ce1\",\n name: \"pxUSD Synthetic USD Expiring 31 Mar 2022\",\n symbol: \"pxUSD_MAR2022\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x5247c0db4044fb6f97f32c7e1b48758019a5a912\",\n name: \"pxGOLD Synthetic Gold Expiring 31 Mar 2022\",\n symbol: \"pxGOLD_MAR2022\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x56fb1acaff95c0b6ebcd17c8361a63d98b1a5a11\",\n name: \"uForex CNYUSD Synthetic Token April 2021\",\n symbol: \"uCNYUSD-APR\",\n decimals: 6\n },\n {\n chainId: 1,\n address: \"0xd49fa405dce086c65d66ca1ca41f8e98583812b4\",\n name: \"uForex EURUSD Synthetic Token April 2021\",\n symbol: \"uEURUSD-APR\",\n decimals: 6\n },\n {\n chainId: 1,\n address: \"0x29dddacba3b231ee8d673dd0f0fa759ea145561b\",\n name: \"DEFI_PULSE_TOTAL_TVL Synthetic Token Expiring 15 April 2021\",\n symbol: \"TVL_ALL_APRIL15\",\n decimals: 6\n },\n {\n chainId: 1,\n address: \"0xcbe430927370e95b4b10cfc702c6017ec7abefc3\",\n name: \"Yield Dollar [WETH Jun 2021]\",\n symbol: \"YD-ETH-JUN21\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x4b7fb448df91c8ed973494f8c8c4f12daf3a8521\",\n name: \"Yield Dollar [renBTC Jun 2021]\",\n symbol: \"YD-BTC-JUN21\",\n decimals: 8\n },\n {\n chainId: 1,\n address: \"0x3108c33b6fb38efedaefd8b5f7ca01d5f5c7372d\",\n name: \"Yield Dollar UMA 21\",\n symbol: \"yUMA21\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x0cae9e4d663793c2a2A0b211c1Cf4bBca2B9cAa7\",\n name: \"Mirrored Amazon\",\n symbol: \"MAMZN\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x31c63146a635EB7465e5853020b39713AC356991\",\n name: \"M US Oil\",\n symbol: \"MUSO\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x59A921Db27Dd6d4d974745B7FfC5c33932653442\",\n name: \"M Google\",\n symbol: \"MGOOGL\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0xf72FCd9DCF0190923Fadd44811E240Ef4533fc86\",\n name: \"Mirrored ProShares\",\n symbol: \"MVIXY\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x56aA298a19C93c6801FDde870fA63EF75Cc0aF72\",\n name: \"Mirrored Alibaba\",\n symbol: \"MBABA\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x0e99cC0535BB6251F6679Fa6E65d6d3b430e840B\",\n name: \"Mirrored Facebook\",\n symbol: \"MFB\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x13B02c8dE71680e71F0820c996E4bE43c2F57d15\",\n name: \"Mirrored Invesco QQ\",\n symbol: \"MQQQ\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x41BbEDd7286dAab5910a1f15d12CBda839852BD7\",\n name: \"Mirrored Microsoft\",\n symbol: \"MMSFT\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x9d1555d8cB3C846Bb4f7D5B1B1080872c3166676\",\n name: \"Mirrored iShares Si\",\n symbol: \"MSLV\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x21cA39943E91d704678F5D00b6616650F066fD63\",\n name: \"Mirrored Tesla\",\n symbol: \"MTSLA\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0xe82bbB62fA81d0701643d1675FB50ec52fD3Df92\",\n name: \"DYDX Token\",\n symbol: \"DYDX\",\n decimals: 18\n },\n {\n chainId: 10,\n address: \"0xE405de8F52ba7559f9df3C368500B6E6ae6Cee49\",\n name: \"sETH\",\n symbol: \"Synth Ether\",\n decimals: 18\n },\n {\n chainId: 10,\n address: \"0x298B9B95708152ff6968aafd889c6586e9169f1D\",\n name: \"sBTC\",\n symbol: \"Synth Bitcoin\",\n decimals: 18\n },\n {\n chainId: 10,\n address: \"0xc5Db22719A06418028A40A9B5E9A7c02959D0d08\",\n name: \"sLINK\",\n symbol: \"Synth Link\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x6B60eE11b73230045cF9095E6e43AE9Ea638e172\",\n name: \"Shatner\",\n symbol: \"SHAT\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x7277a44D1325D81Ac58893002a1B40a41bea43fe\",\n name: \"FAANG Index\",\n symbol: \"FAANG\",\n decimals: 18\n },\n {\n chainId: 1,\n address: \"0x76175599887730786bdA1545D0D7AcE8737fEBB1\",\n name: \"ENS DAO\",\n symbol: \"ENS\",\n decimals: 18\n }\n ]\n};\nvar V1Route = class extends RouteV1$1 {\n constructor() {\n super(...arguments);\n this.protocol = \"V1\" /* V1 */;\n }\n};\nvar V2Route = class extends RouteV2$1 {\n constructor() {\n super(...arguments);\n this.protocol = \"V2\" /* V2 */;\n }\n};\nvar MixedRoute2 = class extends MixedRouteSDK {\n constructor() {\n super(...arguments);\n this.protocol = \"MIXED\" /* MIXED */;\n }\n};\nvar SwapToRatioStatus = /* @__PURE__ */ ((SwapToRatioStatus2) => {\n SwapToRatioStatus2[SwapToRatioStatus2[\"SUCCESS\"] = 1] = \"SUCCESS\";\n SwapToRatioStatus2[SwapToRatioStatus2[\"NO_ROUTE_FOUND\"] = 2] = \"NO_ROUTE_FOUND\";\n SwapToRatioStatus2[SwapToRatioStatus2[\"NO_SWAP_NEEDED\"] = 3] = \"NO_SWAP_NEEDED\";\n return SwapToRatioStatus2;\n})(SwapToRatioStatus || {});\nvar SwapType = /* @__PURE__ */ ((SwapType2) => {\n SwapType2[SwapType2[\"UNIVERSAL_ROUTER\"] = 0] = \"UNIVERSAL_ROUTER\";\n SwapType2[SwapType2[\"SWAP_ROUTER_02\"] = 1] = \"SWAP_ROUTER_02\";\n return SwapType2;\n})(SwapType || {});\nvar IRouter = class {\n};\nvar ISwapToRatio = class {\n};\n\n// src/routers/alpha-router/config.ts\nvar DEFAULT_ROUTING_CONFIG_BY_CHAIN = (chainId) => {\n switch (chainId) {\n default:\n return {\n v1PoolSelection: {\n topN: 3,\n topNDirectSwaps: 1,\n topNTokenInOut: 5,\n topNSecondHop: 2,\n topNWithEachBaseToken: 2,\n topNWithBaseToken: 6\n },\n v2PoolSelection: {\n topN: 3,\n topNDirectSwaps: 1,\n topNTokenInOut: 5,\n topNSecondHop: 2,\n topNWithEachBaseToken: 2,\n topNWithBaseToken: 6\n },\n maxSwapsPerPath: 3,\n minSplits: 1,\n maxSplits: 7,\n distributionPercent: 5,\n forceCrossProtocol: false\n };\n }\n};\nvar usdGasTokensByChain = {\n [ChainId.PULSECHAIN]: [eDAI_PULSECHAIN, eUSDC_PULSECHAIN, eUSDT_PULSECHAIN],\n [ChainId.PULSECHAIN_TESTNET]: [tDAI_TESTNET]\n};\nvar IV1GasModelFactory = class {\n};\nvar IV2GasModelFactory = class {\n};\nvar IOnChainGasModelFactory = class {\n};\n\n// src/routers/alpha-router/functions/best-swap-route.ts\nasync function getBestSwapRoute(amount, percents, routesWithValidQuotes, routeType, chainId, routingConfig) {\n const now = Date.now();\n const { forceMixedRoutes } = routingConfig;\n if (forceMixedRoutes) {\n log.info(\n {\n forceMixedRoutes\n },\n \"Forcing mixed routes by filtering out other route types\"\n );\n routesWithValidQuotes = _16.filter(routesWithValidQuotes, (quotes) => {\n return quotes.protocol === \"MIXED\" /* MIXED */;\n });\n if (!routesWithValidQuotes) {\n return null;\n }\n }\n const percentToQuotes = {};\n for (const routeWithValidQuote of routesWithValidQuotes) {\n if (!percentToQuotes[routeWithValidQuote.percent]) {\n percentToQuotes[routeWithValidQuote.percent] = [];\n }\n percentToQuotes[routeWithValidQuote.percent].push(routeWithValidQuote);\n }\n metric.putMetric(\n \"BuildRouteWithValidQuoteObjects\",\n Date.now() - now,\n \"Milliseconds\" /* Milliseconds */\n );\n const swapRoute = await getBestSwapRouteBy(\n routeType,\n percentToQuotes,\n percents,\n chainId,\n (rq) => rq.quoteAdjustedForGas,\n routingConfig\n );\n if (!swapRoute) {\n return null;\n }\n const { routes: routeAmounts } = swapRoute;\n const totalAmount = _16.reduce(\n routeAmounts,\n (total, routeAmount) => total.add(routeAmount.amount),\n CurrencyAmount.fromRawAmount(routeAmounts[0].amount.currency, 0)\n );\n const missingAmount = amount.subtract(totalAmount);\n if (missingAmount.greaterThan(0)) {\n log.info(\n {\n missingAmount: missingAmount.quotient.toString()\n },\n `Optimal route's amounts did not equal exactIn/exactOut total. Adding missing amount to last route in array.`\n );\n routeAmounts[routeAmounts.length - 1].amount = routeAmounts[routeAmounts.length - 1].amount.add(missingAmount);\n }\n log.info(\n {\n routes: routeAmountsToString(routeAmounts),\n numSplits: routeAmounts.length,\n amount: amount.toExact(),\n quote: swapRoute.quote.toExact(),\n quoteGasAdjusted: swapRoute.quoteGasAdjusted.toFixed(\n Math.min(swapRoute.quoteGasAdjusted.currency.decimals, 2)\n ),\n estimatedGasUSD: swapRoute.estimatedGasUsedUSD.toFixed(\n Math.min(swapRoute.estimatedGasUsedUSD.currency.decimals, 2)\n ),\n estimatedGasToken: swapRoute.estimatedGasUsedQuoteToken.toFixed(\n Math.min(swapRoute.estimatedGasUsedQuoteToken.currency.decimals, 2)\n )\n },\n `Found best swap route. ${routeAmounts.length} split.`\n );\n return swapRoute;\n}\nasync function getBestSwapRouteBy(routeType, percentToQuotes, percents, chainId, by, routingConfig) {\n const percentToSortedQuotes = _16.mapValues(\n percentToQuotes,\n (routeQuotes) => {\n return routeQuotes.sort((routeQuoteA, routeQuoteB) => {\n if (routeType == TradeType.EXACT_INPUT) {\n return by(routeQuoteA).greaterThan(by(routeQuoteB)) ? -1 : 1;\n } else {\n return by(routeQuoteA).lessThan(by(routeQuoteB)) ? -1 : 1;\n }\n });\n }\n );\n const quoteCompFn = routeType == TradeType.EXACT_INPUT ? (a, b) => a.greaterThan(b) : (a, b) => a.lessThan(b);\n const sumFn = (currencyAmounts) => {\n let sum = currencyAmounts[0];\n for (let i = 1; i < currencyAmounts.length; i++) {\n sum = sum.add(currencyAmounts[i]);\n }\n return sum;\n };\n let bestQuote;\n let bestSwap;\n const bestSwapsPerSplit = new FixedReverseHeap(\n Array,\n (a, b) => {\n return quoteCompFn(a.quote, b.quote) ? -1 : 1;\n },\n 3\n );\n const { minSplits, maxSplits, forceCrossProtocol } = routingConfig;\n if (!percentToSortedQuotes[100] || minSplits > 1 || forceCrossProtocol) {\n log.info(\n {\n percentToSortedQuotes: _16.mapValues(\n percentToSortedQuotes,\n (p) => p.length\n )\n },\n \"Did not find a valid route without any splits. Continuing search anyway.\"\n );\n } else {\n bestQuote = by(percentToSortedQuotes[100][0]);\n bestSwap = [percentToSortedQuotes[100][0]];\n for (const routeWithQuote of percentToSortedQuotes[100].slice(0, 5)) {\n bestSwapsPerSplit.push({\n quote: by(routeWithQuote),\n routes: [routeWithQuote]\n });\n }\n }\n const queue = new Queue();\n for (let i = percents.length; i >= 0; i--) {\n const percent = percents[i];\n if (!percentToSortedQuotes[percent]) {\n continue;\n }\n queue.enqueue({\n curRoutes: [percentToSortedQuotes[percent][0]],\n percentIndex: i,\n remainingPercent: 100 - percent,\n special: false\n });\n if (!percentToSortedQuotes[percent] || !percentToSortedQuotes[percent][1]) {\n continue;\n }\n queue.enqueue({\n curRoutes: [percentToSortedQuotes[percent][1]],\n percentIndex: i,\n remainingPercent: 100 - percent,\n special: true\n });\n }\n let splits = 1;\n let startedSplit = Date.now();\n while (queue.size > 0) {\n metric.putMetric(\n `Split${splits}Done`,\n Date.now() - startedSplit,\n \"Milliseconds\" /* Milliseconds */\n );\n startedSplit = Date.now();\n log.info(\n {\n top5: _16.map(\n Array.from(bestSwapsPerSplit.consume()),\n (q) => `${q.quote.toExact()} (${_16(q.routes).map((r) => r.toString()).join(\", \")})`\n ),\n onQueue: queue.size\n },\n `Top 3 with ${splits} splits`\n );\n bestSwapsPerSplit.clear();\n let layer = queue.size;\n splits++;\n if (splits >= 3 && bestSwap && bestSwap.length < splits - 1) {\n break;\n }\n if (splits > maxSplits) {\n log.info(\"Max splits reached. Stopping search.\");\n metric.putMetric(`MaxSplitsHitReached`, 1, \"Count\" /* Count */);\n break;\n }\n while (layer > 0) {\n layer--;\n const { remainingPercent, curRoutes, percentIndex, special } = queue.dequeue();\n for (let i = percentIndex; i >= 0; i--) {\n const percentA = percents[i];\n if (percentA > remainingPercent) {\n continue;\n }\n if (!percentToSortedQuotes[percentA]) {\n continue;\n }\n const candidateRoutesA = percentToSortedQuotes[percentA];\n const routeWithQuoteA = findFirstRouteNotUsingUsedPools(\n curRoutes,\n candidateRoutesA,\n forceCrossProtocol\n );\n if (!routeWithQuoteA) {\n continue;\n }\n const remainingPercentNew = remainingPercent - percentA;\n const curRoutesNew = [...curRoutes, routeWithQuoteA];\n if (remainingPercentNew == 0 && splits >= minSplits) {\n const quotesNew = _16.map(curRoutesNew, (r) => by(r));\n const quoteNew = sumFn(quotesNew);\n bestSwapsPerSplit.push({\n quote: quoteNew,\n routes: curRoutesNew\n });\n if (!bestQuote || quoteCompFn(quoteNew, bestQuote)) {\n bestQuote = quoteNew;\n bestSwap = curRoutesNew;\n if (special) {\n metric.putMetric(\n `BestSwapNotPickingBestForPercent`,\n 1,\n \"Count\" /* Count */\n );\n }\n }\n } else {\n queue.enqueue({\n curRoutes: curRoutesNew,\n remainingPercent: remainingPercentNew,\n percentIndex: i,\n special\n });\n }\n }\n }\n }\n if (!bestSwap) {\n log.info(`Could not find a valid swap`);\n return void 0;\n }\n const postSplitNow = Date.now();\n let quoteGasAdjusted = sumFn(\n _16.map(\n bestSwap,\n (routeWithValidQuote) => routeWithValidQuote.quoteAdjustedForGas\n )\n );\n const estimatedGasUsed = _16(bestSwap).map((routeWithValidQuote) => routeWithValidQuote.gasEstimate).reduce(\n (sum, routeWithValidQuote) => sum + routeWithValidQuote,\n BigInt(0)\n );\n if (!usdGasTokensByChain[chainId] || !usdGasTokensByChain[chainId][0]) {\n throw new Error(\n `Could not find a USD token for computing gas costs on ${chainId}`\n );\n }\n const usdToken = usdGasTokensByChain[chainId][0];\n const usdTokenDecimals = usdToken.decimals;\n const estimatedGasUsedUSDs = _16(bestSwap).map((routeWithValidQuote) => {\n const decimalsDiff = usdTokenDecimals - routeWithValidQuote.gasCostInUSD.currency.decimals;\n if (decimalsDiff == 0) {\n return CurrencyAmount.fromRawAmount(\n usdToken,\n routeWithValidQuote.gasCostInUSD.quotient\n );\n }\n return CurrencyAmount.fromRawAmount(\n usdToken,\n routeWithValidQuote.gasCostInUSD.quotient * 10n ** BigInt(decimalsDiff)\n );\n }).value();\n let estimatedGasUsedUSD = sumFn(estimatedGasUsedUSDs);\n log.info(\n {\n estimatedGasUsedUSD: estimatedGasUsedUSD.toExact(),\n normalizedUsdToken: usdToken,\n routeUSDGasEstimates: _16.map(\n bestSwap,\n (b) => `${b.percent}% ${routeToString(b.route)} ${b.gasCostInUSD.toExact()}`\n )\n },\n \"USD gas estimates of best route\"\n );\n const estimatedGasUsedQuoteToken = sumFn(\n _16.map(bestSwap, (routeWithValidQuote) => routeWithValidQuote.gasCostInToken)\n );\n const quote = sumFn(\n _16.map(bestSwap, (routeWithValidQuote) => routeWithValidQuote.quote)\n );\n const routeWithQuotes = bestSwap.sort(\n (routeAmountA, routeAmountB) => routeAmountB.amount.greaterThan(routeAmountA.amount) ? 1 : -1\n );\n metric.putMetric(\n \"PostSplitDone\",\n Date.now() - postSplitNow,\n \"Milliseconds\" /* Milliseconds */\n );\n return {\n quote,\n quoteGasAdjusted,\n estimatedGasUsed,\n estimatedGasUsedUSD,\n estimatedGasUsedQuoteToken,\n routes: routeWithQuotes\n };\n}\nvar findFirstRouteNotUsingUsedPools = (usedRoutes, candidateRouteQuotes, forceCrossProtocol) => {\n const poolAddressSet = /* @__PURE__ */ new Set();\n const usedPoolAddresses = _16(usedRoutes).flatMap((r) => r.poolAddresses).value();\n for (const poolAddress of usedPoolAddresses) {\n poolAddressSet.add(poolAddress);\n }\n const protocolsSet = /* @__PURE__ */ new Set();\n const usedProtocols = _16(usedRoutes).flatMap((r) => r.protocol).uniq().value();\n for (const protocol of usedProtocols) {\n protocolsSet.add(protocol);\n }\n for (const routeQuote of candidateRouteQuotes) {\n const { poolAddresses, protocol } = routeQuote;\n if (poolAddresses.some((poolAddress) => poolAddressSet.has(poolAddress))) {\n continue;\n }\n const needToForce = forceCrossProtocol && protocolsSet.size == 1;\n if (needToForce && protocolsSet.has(protocol)) {\n continue;\n }\n return routeQuote;\n }\n return null;\n};\nfunction calculateRatioAmountIn(optimalRatio, inputTokenPrice, inputBalance, outputBalance) {\n const amountToSwapRaw = new Fraction(inputBalance.quotient).subtract(optimalRatio.multiply(outputBalance.quotient)).divide(optimalRatio.multiply(inputTokenPrice).add(1));\n if (amountToSwapRaw.lessThan(0)) {\n throw new Error(\"routeToRatio: insufficient input token amount\");\n }\n return CurrencyAmount.fromRawAmount(\n inputBalance.currency,\n amountToSwapRaw.quotient\n );\n}\nasync function getV1NativePool(token, poolProvider) {\n const chainId = token.chainId;\n const weth = WRAPPED_NATIVE_CURRENCY[chainId];\n const poolAccessor = await poolProvider.getPools([[weth, token]]);\n const pool = poolAccessor.getPool(weth, token);\n if (!pool || pool.reserve0.equalTo(0) || pool.reserve1.equalTo(0)) {\n log.error(\n {\n weth,\n token,\n reserve0: pool?.reserve0.toExact(),\n reserve1: pool?.reserve1.toExact()\n },\n `Could not find a valid WETH V1 pool with ${token.symbol} for computing gas costs.`\n );\n return null;\n }\n return pool;\n}\nasync function getV2NativePool(token, poolProvider) {\n const chainId = token.chainId;\n const weth = WRAPPED_NATIVE_CURRENCY[chainId];\n const poolAccessor = await poolProvider.getPools([[weth, token]]);\n const pool = poolAccessor.getPool(weth, token);\n if (!pool || pool.reserve0.equalTo(0) || pool.reserve1.equalTo(0)) {\n log.error(\n {\n weth,\n token,\n reserve0: pool?.reserve0.toExact(),\n reserve1: pool?.reserve1.toExact()\n },\n `Could not find a valid WETH V2 pool with ${token.symbol} for computing gas costs.`\n );\n return null;\n }\n return pool;\n}\nasync function getHighestLiquidityV1andV2USDPool(chainId, poolProviderV1, poolProviderV2) {\n const usdTokens = usdGasTokensByChain[chainId];\n if (!usdTokens) {\n throw new Error(\n `Could not find a USD token for computing gas costs on ${chainId}`\n );\n }\n const usdPools = _16.map(usdTokens, (usdToken) => [\n usdToken,\n WRAPPED_NATIVE_CURRENCY[chainId]\n ]);\n const poolAccessorV1 = await poolProviderV1.getPools(usdPools);\n const poolsRawV1 = poolAccessorV1.getAllPools();\n const poolsV1 = _16.filter(\n poolsRawV1,\n (pool) => pool.reserve0.greaterThan(0) && pool.reserve1.greaterThan(0)\n );\n if (poolsV1.length == 0) {\n log.error(\n { poolsV1 },\n `Could not find a USD/WETH pool for computing gas costs.`\n );\n throw new Error(`Can't find USD/WETH pool for computing gas costs.`);\n }\n const maxPoolV1 = _16.maxBy(poolsV1, (pool) => {\n if (pool.token0.equals(WRAPPED_NATIVE_CURRENCY[chainId])) {\n return parseFloat(pool.reserve0.toSignificant(2));\n } else {\n return parseFloat(pool.reserve1.toSignificant(2));\n }\n });\n const poolAccessorV2 = await poolProviderV2.getPools(usdPools);\n const poolsRawV2 = poolAccessorV2.getAllPools();\n const poolsV2 = _16.filter(\n poolsRawV2,\n (pool) => pool.reserve0.greaterThan(0) && pool.reserve1.greaterThan(0)\n );\n if (poolsV2.length == 0) {\n log.error(\n { poolsV2 },\n `Could not find a USD/WETH pool for computing gas costs.`\n );\n throw new Error(`Can't find USD/WETH pool for computing gas costs.`);\n }\n const maxPoolV2 = _16.maxBy(poolsV2, (pool) => {\n if (pool.token0.equals(WRAPPED_NATIVE_CURRENCY[chainId])) {\n return parseFloat(pool.reserve0.toSignificant(2));\n } else {\n return parseFloat(pool.reserve1.toSignificant(2));\n }\n });\n const maxPool = _16.maxBy([maxPoolV1, maxPoolV2], (pool) => {\n if (pool.token0.equals(WRAPPED_NATIVE_CURRENCY[chainId])) {\n return parseFloat(pool.reserve0.toSignificant(2));\n } else {\n return parseFloat(pool.reserve1.toSignificant(2));\n }\n });\n return maxPool;\n}\nfunction getGasCostInUSD(usdPool, costNativeCurrency) {\n const nativeCurrency = costNativeCurrency.currency;\n const nativeTokenPrice = usdPool.token0.address == nativeCurrency.address ? usdPool.token0Price : usdPool.token1Price;\n const gasCostUSD = nativeTokenPrice.quote(costNativeCurrency);\n return gasCostUSD;\n}\nfunction getGasCostInNativeCurrency(nativeCurrency, gasCostInWei) {\n const costNativeCurrency = CurrencyAmount$1.fromRawAmount(\n nativeCurrency,\n gasCostInWei.toString()\n );\n return costNativeCurrency;\n}\nasync function getGasCostInQuoteToken(quoteToken, nativePool, costNativeCurrency) {\n const nativeTokenPrice = nativePool.token0.address == quoteToken.address ? nativePool.token1Price : nativePool.token0Price;\n const gasCostQuoteToken = nativeTokenPrice.quote(costNativeCurrency);\n return gasCostQuoteToken;\n}\nasync function calculateGasUsed(chainId, route, simulatedGasUsed, v1PoolProvider, v2PoolProvider) {\n const quoteToken = route.quote.currency.wrapped;\n const gasPriceWei = route.gasPriceWei;\n const gasCostInWei = gasPriceWei * simulatedGasUsed;\n const nativeCurrency = WRAPPED_NATIVE_CURRENCY[chainId];\n const costNativeCurrency = getGasCostInNativeCurrency(\n nativeCurrency,\n gasCostInWei\n );\n const usdPool = await getHighestLiquidityV1andV2USDPool(\n chainId,\n v1PoolProvider,\n v2PoolProvider\n );\n const gasCostUSD = await getGasCostInUSD(usdPool, costNativeCurrency);\n let gasCostQuoteToken = costNativeCurrency;\n if (!quoteToken.equals(nativeCurrency)) {\n const nativePools = await Promise.all([\n getV1NativePool(quoteToken, v1PoolProvider),\n getV2NativePool(quoteToken, v2PoolProvider)\n ]);\n const nativePool = nativePools.find((pool) => pool !== null);\n if (!nativePool) {\n log.info(\n \"Could not find any V1 or V2 pools to convert the cost into the quote token\"\n );\n gasCostQuoteToken = CurrencyAmount$1.fromRawAmount(quoteToken, 0);\n } else {\n gasCostQuoteToken = await getGasCostInQuoteToken(\n quoteToken,\n nativePool,\n costNativeCurrency\n );\n }\n }\n let quoteGasAdjusted;\n if (route.trade.tradeType == TradeType.EXACT_OUTPUT) {\n quoteGasAdjusted = route.quote.add(gasCostQuoteToken);\n } else {\n quoteGasAdjusted = route.quote.subtract(gasCostQuoteToken);\n }\n return {\n estimatedGasUsedUSD: gasCostUSD,\n estimatedGasUsedQuoteToken: gasCostQuoteToken,\n quoteGasAdjusted\n };\n}\nfunction initSwapRouteFromExisting(swapRoute, v1PoolProvider, v2PoolProvider, quoteGasAdjusted, estimatedGasUsed, estimatedGasUsedQuoteToken, estimatedGasUsedUSD) {\n const currencyIn = swapRoute.trade.inputAmount.currency;\n const currencyOut = swapRoute.trade.outputAmount.currency;\n const tradeType = swapRoute.trade.tradeType.valueOf() ? TradeType.EXACT_OUTPUT : TradeType.EXACT_INPUT;\n const routesWithValidQuote = swapRoute.route.map((route) => {\n switch (route.protocol) {\n case \"V1\" /* V1 */:\n return new V1RouteWithValidQuote2({\n amount: CurrencyAmount$1.fromFractionalAmount(\n route.amount.currency,\n route.amount.numerator,\n route.amount.denominator\n ),\n rawQuote: route.rawQuote,\n percent: route.percent,\n route: route.route,\n gasModel: route.gasModel,\n quoteToken: new Token(\n currencyIn.chainId,\n route.quoteToken.address,\n route.quoteToken.decimals,\n route.quoteToken.symbol,\n route.quoteToken.name\n ),\n tradeType,\n v1PoolProvider\n });\n case \"V2\" /* V2 */:\n return new V2RouteWithValidQuote2({\n amount: CurrencyAmount$1.fromFractionalAmount(\n route.amount.currency,\n route.amount.numerator,\n route.amount.denominator\n ),\n rawQuote: route.rawQuote,\n percent: route.percent,\n route: route.route,\n gasModel: route.gasModel,\n quoteToken: new Token(\n currencyIn.chainId,\n route.quoteToken.address,\n route.quoteToken.decimals,\n route.quoteToken.symbol,\n route.quoteToken.name\n ),\n tradeType,\n v2PoolProvider\n });\n case \"MIXED\" /* MIXED */:\n return new MixedRouteWithValidQuote2({\n amount: CurrencyAmount$1.fromFractionalAmount(\n route.amount.currency,\n route.amount.numerator,\n route.amount.denominator\n ),\n rawQuote: route.rawQuote,\n percent: route.percent,\n route: route.route,\n mixedRouteGasModel: route.gasModel,\n v2PoolProvider,\n quoteToken: new Token(\n currencyIn.chainId,\n route.quoteToken.address,\n route.quoteToken.decimals,\n route.quoteToken.symbol,\n route.quoteToken.name\n ),\n tradeType,\n v1PoolProvider\n });\n }\n });\n const trade = buildTrade(\n currencyIn,\n currencyOut,\n tradeType,\n routesWithValidQuote\n );\n return {\n quote: swapRoute.quote,\n quoteGasAdjusted,\n estimatedGasUsed,\n estimatedGasUsedQuoteToken,\n estimatedGasUsedUSD,\n gasPriceWei: swapRoute.gasPriceWei,\n trade,\n route: routesWithValidQuote,\n blockNumber: swapRoute.blockNumber,\n methodParameters: swapRoute.methodParameters ? {\n calldata: swapRoute.methodParameters.calldata,\n value: swapRoute.methodParameters.value,\n to: swapRoute.methodParameters.to\n } : void 0,\n simulationStatus: swapRoute.simulationStatus\n };\n}\nvar BASE_SWAP_COST = 135000n;\nvar COST_PER_EXTRA_HOP = 50000n;\nvar V2HeuristicGasModelFactory = class extends IV2GasModelFactory {\n constructor() {\n super();\n }\n async buildGasModel({\n chainId,\n gasPriceWei,\n poolProvider,\n token\n }) {\n if (token.equals(WRAPPED_NATIVE_CURRENCY[chainId])) {\n const usdPool2 = await this.getHighestLiquidityUSDPool(\n chainId,\n poolProvider\n );\n return {\n estimateGasCost: (routeWithValidQuote) => {\n const { gasCostInEth, gasUse } = this.estimateGas(\n routeWithValidQuote,\n gasPriceWei,\n chainId\n );\n const ethToken0 = usdPool2.token0.address == WRAPPED_NATIVE_CURRENCY[chainId].address;\n const ethTokenPrice = ethToken0 ? usdPool2.token0Price : usdPool2.token1Price;\n const gasCostInTermsOfUSD = ethTokenPrice.quote(\n gasCostInEth\n );\n return {\n gasEstimate: gasUse,\n gasCostInToken: gasCostInEth,\n gasCostInUSD: gasCostInTermsOfUSD\n };\n }\n };\n }\n const ethPool = await this.getEthPool(\n chainId,\n token,\n poolProvider\n );\n if (!ethPool) {\n log.info(\n \"Unable to find ETH pool with the quote token to produce gas adjusted costs. Route will not account for gas.\"\n );\n }\n const usdPool = await this.getHighestLiquidityUSDPool(\n chainId,\n poolProvider\n );\n return {\n estimateGasCost: (routeWithValidQuote) => {\n const usdToken = usdPool.token0.address == WRAPPED_NATIVE_CURRENCY[chainId].address ? usdPool.token1 : usdPool.token0;\n const { gasCostInEth, gasUse } = this.estimateGas(\n routeWithValidQuote,\n gasPriceWei,\n chainId\n );\n if (!ethPool) {\n return {\n gasEstimate: gasUse,\n gasCostInToken: CurrencyAmount.fromRawAmount(token, 0),\n gasCostInUSD: CurrencyAmount.fromRawAmount(usdToken, 0)\n };\n }\n const ethToken0 = ethPool.token0.address == WRAPPED_NATIVE_CURRENCY[chainId].address;\n const ethTokenPrice = ethToken0 ? ethPool.token0Price : ethPool.token1Price;\n let gasCostInTermsOfQuoteToken;\n try {\n gasCostInTermsOfQuoteToken = ethTokenPrice.quote(\n gasCostInEth\n );\n } catch (err) {\n log.error(\n {\n ethTokenPriceBase: ethTokenPrice.baseCurrency,\n ethTokenPriceQuote: ethTokenPrice.quoteCurrency,\n gasCostInEth: gasCostInEth.currency\n },\n \"Debug eth price token issue\"\n );\n throw err;\n }\n const ethToken0USDPool = usdPool.token0.address == WRAPPED_NATIVE_CURRENCY[chainId].address;\n const ethTokenPriceUSDPool = ethToken0USDPool ? usdPool.token0Price : usdPool.token1Price;\n let gasCostInTermsOfUSD;\n try {\n gasCostInTermsOfUSD = ethTokenPriceUSDPool.quote(\n gasCostInEth\n );\n } catch (err) {\n log.error(\n {\n usdT1: usdPool.token0.symbol,\n usdT2: usdPool.token1.symbol,\n gasCostInEthToken: gasCostInEth.currency.symbol\n },\n \"Failed to compute USD gas price\"\n );\n throw err;\n }\n return {\n gasEstimate: gasUse,\n gasCostInToken: gasCostInTermsOfQuoteToken,\n gasCostInUSD: gasCostInTermsOfUSD\n };\n }\n };\n }\n estimateGas(routeWithValidQuote, gasPriceWei, chainId) {\n const hops = routeWithValidQuote.route.pairs.length;\n const gasUse = BASE_SWAP_COST + COST_PER_EXTRA_HOP * (BigInt(hops) - 1n);\n const totalGasCostWei = gasPriceWei * gasUse;\n const weth = WRAPPED_NATIVE_CURRENCY[chainId];\n const gasCostInEth = CurrencyAmount.fromRawAmount(\n weth,\n totalGasCostWei.toString()\n );\n return { gasCostInEth, gasUse };\n }\n async getEthPool(chainId, token, poolProvider) {\n const weth = WRAPPED_NATIVE_CURRENCY[chainId];\n const poolAccessor = await poolProvider.getPools([[weth, token]]);\n const pool = poolAccessor.getPool(weth, token);\n if (!pool || pool.reserve0.equalTo(0) || pool.reserve1.equalTo(0)) {\n log.error(\n {\n weth,\n token,\n reserve0: pool?.reserve0.toExact(),\n reserve1: pool?.reserve1.toExact()\n },\n `Could not find a valid WETH pool with ${token.symbol} for computing gas costs.`\n );\n return null;\n }\n return pool;\n }\n async getHighestLiquidityUSDPool(chainId, poolProvider) {\n const usdTokens = usdGasTokensByChain[chainId];\n if (!usdTokens) {\n throw new Error(\n `Could not find a USD token for computing gas costs on ${chainId}`\n );\n }\n const usdPools = _16.map(usdTokens, (usdToken) => [\n usdToken,\n WRAPPED_NATIVE_CURRENCY[chainId]\n ]);\n const poolAccessor = await poolProvider.getPools(usdPools);\n const poolsRaw = poolAccessor.getAllPools();\n const pools = _16.filter(\n poolsRaw,\n (pool) => pool.reserve0.greaterThan(0) && pool.reserve1.greaterThan(0)\n );\n if (pools.length == 0) {\n log.error(\n { pools },\n `Could not find a USD/WETH pool for computing gas costs.`\n );\n throw new Error(`Can't find USD/WETH pool for computing gas costs.`);\n }\n const maxPool = _16.maxBy(pools, (pool) => {\n if (pool.token0.equals(WRAPPED_NATIVE_CURRENCY[chainId])) {\n return parseFloat(pool.reserve0.toSignificant(2));\n } else {\n return parseFloat(pool.reserve1.toSignificant(2));\n }\n });\n return maxPool;\n }\n};\n\n// src/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.ts\nvar MixedRouteHeuristicGasModelFactory = class extends IOnChainGasModelFactory {\n constructor() {\n super();\n }\n async buildGasModel({\n chainId,\n gasPriceWei,\n v1poolProvider: V1poolProvider,\n quoteToken,\n v2poolProvider: V2poolProvider\n }) {\n const usdPool = await getHighestLiquidityV1andV2USDPool(\n chainId,\n V1poolProvider,\n V2poolProvider\n );\n const nativeCurrency = WNATIVE[chainId];\n if (quoteToken.equals(nativeCurrency)) {\n const estimateGasCost2 = (routeWithValidQuote) => {\n const { totalGasCostNativeCurrency, baseGasUse } = this.estimateGas(\n routeWithValidQuote,\n gasPriceWei,\n chainId\n );\n const token0 = usdPool.token0.address == nativeCurrency.address;\n const nativeTokenPrice = token0 ? usdPool.token0Price : usdPool.token1Price;\n const gasCostInTermsOfUSD = nativeTokenPrice.quote(\n totalGasCostNativeCurrency\n );\n return {\n gasEstimate: baseGasUse,\n gasCostInToken: totalGasCostNativeCurrency,\n gasCostInUSD: gasCostInTermsOfUSD\n };\n };\n return {\n estimateGasCost: estimateGasCost2\n };\n }\n const nativeV1Pool = await getV1NativePool(quoteToken, V1poolProvider);\n let nativeV2Pool;\n if (V2poolProvider) {\n nativeV2Pool = await getV2NativePool(quoteToken, V2poolProvider);\n }\n const usdToken = usdPool.token0.address == nativeCurrency.address ? usdPool.token1 : usdPool.token0;\n const estimateGasCost = (routeWithValidQuote) => {\n const { totalGasCostNativeCurrency, baseGasUse } = this.estimateGas(\n routeWithValidQuote,\n gasPriceWei,\n chainId\n );\n if (!nativeV1Pool && !nativeV2Pool) {\n log.info(\n `Unable to find ${nativeCurrency.symbol} pool with the quote token, ${quoteToken.symbol} to produce gas adjusted costs. Route will not account for gas.`\n );\n return {\n gasEstimate: baseGasUse,\n gasCostInToken: CurrencyAmount.fromRawAmount(quoteToken, 0),\n gasCostInUSD: CurrencyAmount.fromRawAmount(usdToken, 0)\n };\n }\n const nativePool = (!nativeV1Pool || nativeV1Pool.reserve0.equalTo(0) || nativeV1Pool.reserve1.equalTo(0)) && nativeV2Pool ? nativeV2Pool : nativeV1Pool;\n const token0 = nativePool.token0.address == nativeCurrency.address;\n const nativeTokenPrice = token0 ? nativePool.token0Price : nativePool.token1Price;\n let gasCostInTermsOfQuoteToken;\n try {\n gasCostInTermsOfQuoteToken = nativeTokenPrice.quote(\n totalGasCostNativeCurrency\n );\n } catch (err) {\n log.info(\n {\n nativeTokenPriceBase: nativeTokenPrice.baseCurrency,\n nativeTokenPriceQuote: nativeTokenPrice.quoteCurrency,\n gasCostInEth: totalGasCostNativeCurrency.currency\n },\n \"Debug eth price token issue\"\n );\n throw err;\n }\n const token0USDPool = usdPool.token0.address == nativeCurrency.address;\n const nativeTokenPriceUSDPool = token0USDPool ? usdPool.token0Price : usdPool.token1Price;\n let gasCostInTermsOfUSD;\n try {\n gasCostInTermsOfUSD = nativeTokenPriceUSDPool.quote(\n totalGasCostNativeCurrency\n );\n } catch (err) {\n log.info(\n {\n usdT1: usdPool.token0.symbol,\n usdT2: usdPool.token1.symbol,\n gasCostInNativeToken: totalGasCostNativeCurrency.currency.symbol\n },\n \"Failed to compute USD gas price\"\n );\n throw err;\n }\n return {\n gasEstimate: baseGasUse,\n gasCostInToken: gasCostInTermsOfQuoteToken,\n gasCostInUSD: gasCostInTermsOfUSD\n };\n };\n return {\n estimateGasCost: estimateGasCost.bind(this)\n };\n }\n estimateGas(routeWithValidQuote, gasPriceWei, chainId) {\n let baseGasUse = 0n;\n const route = routeWithValidQuote.route;\n const res = partitionMixedRouteByProtocol(route);\n res.map((section) => {\n if (section.every((pool) => pool instanceof PairV1)) {\n baseGasUse = baseGasUse + BASE_SWAP_COST;\n baseGasUse = baseGasUse + COST_PER_EXTRA_HOP * BigInt(section.length - 1);\n } else if (section.every((pool) => pool instanceof PairV2)) {\n baseGasUse = baseGasUse + BASE_SWAP_COST;\n baseGasUse = baseGasUse + /// same behavior in v2 heuristic gas model factory\n COST_PER_EXTRA_HOP * BigInt(section.length - 1);\n }\n });\n const baseGasCostWei = gasPriceWei * baseGasUse;\n const wrappedCurrency = WNATIVE[chainId];\n const totalGasCostNativeCurrency = CurrencyAmount.fromRawAmount(\n wrappedCurrency,\n baseGasCostWei.toString()\n );\n return {\n totalGasCostNativeCurrency,\n baseGasUse\n };\n }\n};\nvar BASE_SWAP_COST2 = 135000n;\nvar COST_PER_EXTRA_HOP2 = 50000n;\nvar V1HeuristicGasModelFactory = class extends IV1GasModelFactory {\n constructor() {\n super();\n }\n async buildGasModel({\n chainId,\n gasPriceWei,\n poolProvider,\n token\n }) {\n if (token.equals(WRAPPED_NATIVE_CURRENCY[chainId])) {\n const usdPool2 = await this.getHighestLiquidityUSDPool(\n chainId,\n poolProvider\n );\n return {\n estimateGasCost: (routeWithValidQuote) => {\n const { gasCostInEth, gasUse } = this.estimateGas(\n routeWithValidQuote,\n gasPriceWei,\n chainId\n );\n const ethToken0 = usdPool2.token0.address == WRAPPED_NATIVE_CURRENCY[chainId].address;\n const ethTokenPrice = ethToken0 ? usdPool2.token0Price : usdPool2.token1Price;\n const gasCostInTermsOfUSD = ethTokenPrice.quote(\n gasCostInEth\n );\n return {\n gasEstimate: gasUse,\n gasCostInToken: gasCostInEth,\n gasCostInUSD: gasCostInTermsOfUSD\n };\n }\n };\n }\n const ethPool = await this.getEthPool(\n chainId,\n token,\n poolProvider\n );\n if (!ethPool) {\n log.info(\n \"Unable to find ETH pool with the quote token to produce gas adjusted costs. Route will not account for gas.\"\n );\n }\n const usdPool = await this.getHighestLiquidityUSDPool(\n chainId,\n poolProvider\n );\n return {\n estimateGasCost: (routeWithValidQuote) => {\n const usdToken = usdPool.token0.address == WRAPPED_NATIVE_CURRENCY[chainId].address ? usdPool.token1 : usdPool.token0;\n const { gasCostInEth, gasUse } = this.estimateGas(\n routeWithValidQuote,\n gasPriceWei,\n chainId\n );\n if (!ethPool) {\n return {\n gasEstimate: gasUse,\n gasCostInToken: CurrencyAmount.fromRawAmount(token, 0),\n gasCostInUSD: CurrencyAmount.fromRawAmount(usdToken, 0)\n };\n }\n const ethToken0 = ethPool.token0.address == WRAPPED_NATIVE_CURRENCY[chainId].address;\n const ethTokenPrice = ethToken0 ? ethPool.token0Price : ethPool.token1Price;\n let gasCostInTermsOfQuoteToken;\n try {\n gasCostInTermsOfQuoteToken = ethTokenPrice.quote(\n gasCostInEth\n );\n } catch (err) {\n log.error(\n {\n ethTokenPriceBase: ethTokenPrice.baseCurrency,\n ethTokenPriceQuote: ethTokenPrice.quoteCurrency,\n gasCostInEth: gasCostInEth.currency\n },\n \"Debug eth price token issue\"\n );\n throw err;\n }\n const ethToken0USDPool = usdPool.token0.address == WRAPPED_NATIVE_CURRENCY[chainId].address;\n const ethTokenPriceUSDPool = ethToken0USDPool ? usdPool.token0Price : usdPool.token1Price;\n let gasCostInTermsOfUSD;\n try {\n gasCostInTermsOfUSD = ethTokenPriceUSDPool.quote(\n gasCostInEth\n );\n } catch (err) {\n log.error(\n {\n usdT1: usdPool.token0.symbol,\n usdT2: usdPool.token1.symbol,\n gasCostInEthToken: gasCostInEth.currency.symbol\n },\n \"Failed to compute USD gas price\"\n );\n throw err;\n }\n return {\n gasEstimate: gasUse,\n gasCostInToken: gasCostInTermsOfQuoteToken,\n gasCostInUSD: gasCostInTermsOfUSD\n };\n }\n };\n }\n estimateGas(routeWithValidQuote, gasPriceWei, chainId) {\n const hops = routeWithValidQuote.route.pairs.length;\n const gasUse = BASE_SWAP_COST2 + COST_PER_EXTRA_HOP2 * BigInt(hops - 1);\n const totalGasCostWei = gasPriceWei * gasUse;\n const weth = WRAPPED_NATIVE_CURRENCY[chainId];\n const gasCostInEth = CurrencyAmount.fromRawAmount(\n weth,\n totalGasCostWei.toString()\n );\n return { gasCostInEth, gasUse };\n }\n async getEthPool(chainId, token, poolProvider) {\n const weth = WRAPPED_NATIVE_CURRENCY[chainId];\n const poolAccessor = await poolProvider.getPools([[weth, token]]);\n const pool = poolAccessor.getPool(weth, token);\n if (!pool || pool.reserve0.equalTo(0) || pool.reserve1.equalTo(0)) {\n log.error(\n {\n weth,\n token,\n reserve0: pool?.reserve0.toExact(),\n reserve1: pool?.reserve1.toExact()\n },\n `Could not find a valid WETH pool with ${token.symbol} for computing gas costs.`\n );\n return null;\n }\n return pool;\n }\n async getHighestLiquidityUSDPool(chainId, poolProvider) {\n const usdTokens = usdGasTokensByChain[chainId];\n if (!usdTokens) {\n throw new Error(\n `Could not find a USD token for computing gas costs on ${chainId}`\n );\n }\n const usdPools = _16.map(usdTokens, (usdToken) => [\n usdToken,\n WRAPPED_NATIVE_CURRENCY[chainId]\n ]);\n const poolAccessor = await poolProvider.getPools(usdPools);\n const poolsRaw = poolAccessor.getAllPools();\n const pools = _16.filter(\n poolsRaw,\n (pool) => pool.reserve0.greaterThan(0) && pool.reserve1.greaterThan(0)\n );\n if (pools.length == 0) {\n log.error(\n { pools },\n `Could not find a USD/WETH pool for computing gas costs.`\n );\n throw new Error(`Can't find USD/WETH pool for computing gas costs.`);\n }\n const maxPool = _16.maxBy(pools, (pool) => {\n if (pool.token0.equals(WRAPPED_NATIVE_CURRENCY[chainId])) {\n return parseFloat(pool.reserve0.toSignificant(2));\n } else {\n return parseFloat(pool.reserve1.toSignificant(2));\n }\n });\n return maxPool;\n }\n};\nvar BaseQuoter = class {\n constructor(tokenProvider, chainId, blockedTokenListProvider, tokenValidatorProvider) {\n this.tokenProvider = tokenProvider;\n this.chainId = chainId;\n this.blockedTokenListProvider = blockedTokenListProvider;\n this.tokenValidatorProvider = tokenValidatorProvider;\n }\n /**\n * Public method which would first get the routes and then get the quotes.\n *\n * @param tokenIn The token that the user wants to provide\n * @param tokenOut The token that the user wants to receive\n * @param amounts the list of amounts to query for EACH route.\n * @param percents the percentage of each amount.\n * @param quoteToken\n * @param tradeType\n * @param routingConfig\n * @param gasModel the gasModel to be used for estimating gas cost\n * @param gasPriceWei instead of passing gasModel, gasPriceWei is used to generate a gasModel\n */\n getRoutesThenQuotes(tokenIn, tokenOut, amounts, percents, quoteToken, tradeType, routingConfig, gasModel, gasPriceWei) {\n return this.getRoutes(tokenIn, tokenOut, tradeType, routingConfig).then(\n (routesResult) => this.getQuotes(\n routesResult.routes,\n amounts,\n percents,\n quoteToken,\n tradeType,\n routingConfig,\n routesResult.candidatePools,\n gasModel,\n gasPriceWei\n )\n );\n }\n async applyTokenValidatorToPools(pools, isInvalidFn) {\n if (!this.tokenValidatorProvider) {\n return pools;\n }\n log.info(`Running token validator on ${pools.length} pools`);\n const tokens = _16.flatMap(pools, (pool) => [pool.token0, pool.token1]);\n const tokenValidationResults = await this.tokenValidatorProvider.validateTokens(tokens);\n const poolsFiltered = _16.filter(pools, (pool) => {\n const token0Validation = tokenValidationResults.getValidationByToken(\n pool.token0\n );\n const token1Validation = tokenValidationResults.getValidationByToken(\n pool.token1\n );\n const token0Invalid = isInvalidFn(pool.token0, token0Validation);\n const token1Invalid = isInvalidFn(pool.token1, token1Validation);\n if (token0Invalid || token1Invalid) {\n log.info(\n `Dropping pool ${poolToString(pool)} because token is invalid. ${pool.token0.symbol}: ${token0Validation}, ${pool.token1.symbol}: ${token1Validation}`\n );\n }\n return !token0Invalid && !token1Invalid;\n });\n return poolsFiltered;\n }\n};\nvar V1RouteWithValidQuote2 = class {\n constructor({\n amount,\n rawQuote,\n percent,\n route,\n gasModel,\n quoteToken,\n tradeType,\n v1PoolProvider\n }) {\n this.protocol = \"V1\" /* V1 */;\n this.amount = amount;\n this.rawQuote = rawQuote;\n this.quote = CurrencyAmount.fromRawAmount(quoteToken, rawQuote.toString());\n this.percent = percent;\n this.route = route;\n this.gasModel = gasModel;\n this.quoteToken = quoteToken;\n this.tradeType = tradeType;\n const { gasEstimate, gasCostInToken, gasCostInUSD } = this.gasModel.estimateGasCost(this);\n this.gasCostInToken = gasCostInToken;\n this.gasCostInUSD = gasCostInUSD;\n this.gasEstimate = gasEstimate;\n if (this.tradeType == TradeType.EXACT_INPUT) {\n const quoteGasAdjusted = this.quote.subtract(gasCostInToken);\n this.quoteAdjustedForGas = quoteGasAdjusted;\n } else {\n const quoteGasAdjusted = this.quote.add(gasCostInToken);\n this.quoteAdjustedForGas = quoteGasAdjusted;\n }\n this.poolAddresses = _16.map(\n route.pairs,\n (p) => v1PoolProvider.getPoolAddress(p.token0, p.token1).poolAddress\n );\n this.tokenPath = this.route.path;\n }\n toString() {\n return `${this.percent.toFixed(\n 2\n )}% QuoteGasAdj[${this.quoteAdjustedForGas.toExact()}] Quote[${this.quote.toExact()}] Gas[${this.gasEstimate.toString()}] = ${routeToString(\n this.route\n )}`;\n }\n};\nvar V2RouteWithValidQuote2 = class {\n constructor({\n amount,\n rawQuote,\n percent,\n route,\n gasModel,\n quoteToken,\n tradeType,\n v2PoolProvider\n }) {\n this.protocol = \"V2\" /* V2 */;\n this.amount = amount;\n this.rawQuote = rawQuote;\n this.quote = CurrencyAmount.fromRawAmount(quoteToken, rawQuote.toString());\n this.percent = percent;\n this.route = route;\n this.gasModel = gasModel;\n this.quoteToken = quoteToken;\n this.tradeType = tradeType;\n const { gasEstimate, gasCostInToken, gasCostInUSD } = this.gasModel.estimateGasCost(this);\n this.gasCostInToken = gasCostInToken;\n this.gasCostInUSD = gasCostInUSD;\n this.gasEstimate = gasEstimate;\n if (this.tradeType == TradeType.EXACT_INPUT) {\n const quoteGasAdjusted = this.quote.subtract(gasCostInToken);\n this.quoteAdjustedForGas = quoteGasAdjusted;\n } else {\n const quoteGasAdjusted = this.quote.add(gasCostInToken);\n this.quoteAdjustedForGas = quoteGasAdjusted;\n }\n this.poolAddresses = _16.map(\n route.pairs,\n (p) => v2PoolProvider.getPoolAddress(p.token0, p.token1).poolAddress\n );\n this.tokenPath = this.route.path;\n }\n toString() {\n return `${this.percent.toFixed(\n 2\n )}% QuoteGasAdj[${this.quoteAdjustedForGas.toExact()}] Quote[${this.quote.toExact()}] Gas[${this.gasEstimate.toString()}] = ${routeToString(\n this.route\n )}`;\n }\n};\nvar MixedRouteWithValidQuote2 = class {\n constructor({\n amount,\n rawQuote,\n percent,\n route,\n mixedRouteGasModel,\n quoteToken,\n tradeType,\n v1PoolProvider,\n v2PoolProvider\n }) {\n this.protocol = \"MIXED\" /* MIXED */;\n this.amount = amount;\n this.rawQuote = rawQuote;\n this.quote = CurrencyAmount.fromRawAmount(quoteToken, rawQuote.toString());\n this.percent = percent;\n this.route = route;\n this.gasModel = mixedRouteGasModel;\n this.quoteToken = quoteToken;\n this.tradeType = tradeType;\n const { gasEstimate, gasCostInToken, gasCostInUSD } = this.gasModel.estimateGasCost(this);\n this.gasCostInToken = gasCostInToken;\n this.gasCostInUSD = gasCostInUSD;\n this.gasEstimate = gasEstimate;\n if (this.tradeType == TradeType.EXACT_INPUT) {\n const quoteGasAdjusted = this.quote.subtract(gasCostInToken);\n this.quoteAdjustedForGas = quoteGasAdjusted;\n } else {\n const quoteGasAdjusted = this.quote.add(gasCostInToken);\n this.quoteAdjustedForGas = quoteGasAdjusted;\n }\n this.poolAddresses = _16.map(route.pools, (p) => {\n return p instanceof PairV1 ? v1PoolProvider.getPoolAddress(p.token0, p.token1).poolAddress : v2PoolProvider.getPoolAddress(p.token0, p.token1).poolAddress;\n });\n this.tokenPath = this.route.path;\n }\n toString() {\n return `${this.percent.toFixed(\n 2\n )}% QuoteGasAdj[${this.quoteAdjustedForGas.toExact()}] Quote[${this.quote.toExact()}] Gas[${this.gasEstimate.toString()}] = ${routeToString(\n this.route\n )}`;\n }\n};\nfunction computeAllV1Routes(tokenIn, tokenOut, pools, maxHops) {\n const rawRoutes = computeAllRoutes(\n tokenIn,\n tokenOut,\n (route, tokenIn2, tokenOut2) => {\n return new V1Route(route, tokenIn2, tokenOut2);\n },\n pools,\n maxHops\n );\n return rawRoutes;\n}\nfunction computeAllV2Routes(tokenIn, tokenOut, pools, maxHops) {\n const rawRoutes = computeAllRoutes(\n tokenIn,\n tokenOut,\n (route, tokenIn2, tokenOut2) => {\n return new V2Route(route, tokenIn2, tokenOut2);\n },\n pools,\n maxHops\n );\n return rawRoutes;\n}\nfunction computeAllMixedRoutes(tokenIn, tokenOut, parts, maxHops) {\n const routesRaw = computeAllRoutes(\n tokenIn,\n tokenOut,\n (route, tokenIn2, tokenOut2) => {\n return new MixedRoute2(route, tokenIn2, tokenOut2);\n },\n parts,\n maxHops\n );\n return routesRaw.filter((route) => {\n return !route.pools.every((pool) => pool instanceof PairV1) && !route.pools.every((pool) => pool instanceof PairV2);\n });\n}\nfunction computeAllRoutes(tokenIn, tokenOut, buildRoute, pools, maxHops) {\n const poolsUsed = Array(pools.length).fill(false);\n const routes = [];\n const computeRoutes = (tokenIn2, tokenOut2, currentRoute, poolsUsed2, _previousTokenOut) => {\n if (currentRoute.length > maxHops) {\n return;\n }\n if (currentRoute.length > 0 && currentRoute[currentRoute.length - 1].involvesToken(tokenOut2)) {\n routes.push(buildRoute([...currentRoute], tokenIn2, tokenOut2));\n return;\n }\n for (let i = 0; i < pools.length; i++) {\n if (poolsUsed2[i]) {\n continue;\n }\n const curPool = pools[i];\n const previousTokenOut = _previousTokenOut ? _previousTokenOut : tokenIn2;\n if (!curPool.involvesToken(previousTokenOut)) {\n continue;\n }\n const currentTokenOut = curPool.token0.equals(previousTokenOut) ? curPool.token1 : curPool.token0;\n currentRoute.push(curPool);\n poolsUsed2[i] = true;\n computeRoutes(\n tokenIn2,\n tokenOut2,\n currentRoute,\n poolsUsed2,\n currentTokenOut\n );\n poolsUsed2[i] = false;\n currentRoute.pop();\n }\n };\n computeRoutes(tokenIn, tokenOut, [], poolsUsed);\n log.info(\n {\n routes: routes.map(routeToString),\n pools: pools.map(poolToString)\n },\n `Computed ${routes.length} possible routes for type ${routes[0]?.protocol}.`\n );\n return routes;\n}\nvar baseTokensByChain = {\n [ChainId.PULSECHAIN]: [\n eUSDC_PULSECHAIN,\n eUSDT_PULSECHAIN,\n eWBTC_PULSECHAIN,\n eDAI_PULSECHAIN,\n PLSX_PULSECHAIN,\n eHEX_PULSECHAIN,\n HEX_PULSECHAIN,\n INC_PULSECHAIN,\n WETH_PULSECHAIN,\n WRAPPED_NATIVE_CURRENCY[ChainId.PULSECHAIN]\n ],\n [ChainId.PULSECHAIN_TESTNET]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.PULSECHAIN_TESTNET],\n PLSX_TESTNET,\n INC_TESTNET,\n HEX_TESTNET,\n tDAI_TESTNET\n ]\n};\nasync function getV1CandidatePools({\n tokenIn,\n tokenOut,\n routeType,\n routingConfig,\n subgraphProvider,\n tokenProvider,\n poolProvider,\n blockedTokenListProvider,\n chainId\n}) {\n const {\n blockNumber,\n v1PoolSelection: {\n topN,\n topNDirectSwaps,\n topNTokenInOut,\n topNSecondHop,\n topNWithEachBaseToken,\n topNWithBaseToken\n }\n } = routingConfig;\n const tokenInAddress = tokenIn.address.toLowerCase();\n const tokenOutAddress = tokenOut.address.toLowerCase();\n const beforeSubgraphPools = Date.now();\n const allPoolsRaw = await subgraphProvider.getPools(tokenIn, tokenOut, {\n blockNumber\n });\n const allPools = _16.map(allPoolsRaw, (pool) => {\n return {\n ...pool,\n token0: {\n ...pool.token0,\n id: pool.token0.id.toLowerCase()\n },\n token1: {\n ...pool.token1,\n id: pool.token1.id.toLowerCase()\n }\n };\n });\n metric.putMetric(\n \"V1SubgraphPoolsLoad\",\n Date.now() - beforeSubgraphPools,\n \"Milliseconds\" /* Milliseconds */\n );\n let filteredPools = allPools;\n if (blockedTokenListProvider) {\n filteredPools = [];\n for (const pool of allPools) {\n const token0InBlocklist = await blockedTokenListProvider.getTokenByAddress(pool.token0.id);\n const token1InBlocklist = await blockedTokenListProvider.getTokenByAddress(pool.token1.id);\n if (token0InBlocklist || token1InBlocklist) {\n continue;\n }\n filteredPools.push(pool);\n }\n }\n const subgraphPoolsSorted = _16(filteredPools).sortBy((tokenListPool) => -tokenListPool.reserve).value();\n log.info(\n `After filtering blocked tokens went from ${allPools.length} to ${subgraphPoolsSorted.length}.`\n );\n const poolAddressesSoFar = /* @__PURE__ */ new Set();\n const addToAddressSet = (pools) => {\n _16(pools).map((pool) => pool.id).forEach((poolAddress) => poolAddressesSoFar.add(poolAddress));\n };\n const baseTokens = baseTokensByChain[chainId] ?? [];\n const topByBaseWithTokenIn = _16(baseTokens).flatMap((token) => {\n return _16(subgraphPoolsSorted).filter((subgraphPool) => {\n const tokenAddress = token.address.toLowerCase();\n return subgraphPool.token0.id == tokenAddress && subgraphPool.token1.id == tokenInAddress || subgraphPool.token1.id == tokenAddress && subgraphPool.token0.id == tokenInAddress;\n }).sortBy((tokenListPool) => -tokenListPool.reserve).slice(0, topNWithEachBaseToken).value();\n }).sortBy((tokenListPool) => -tokenListPool.reserve).slice(0, topNWithBaseToken).value();\n const topByBaseWithTokenOut = _16(baseTokens).flatMap((token) => {\n return _16(subgraphPoolsSorted).filter((subgraphPool) => {\n const tokenAddress = token.address.toLowerCase();\n return subgraphPool.token0.id == tokenAddress && subgraphPool.token1.id == tokenOutAddress || subgraphPool.token1.id == tokenAddress && subgraphPool.token0.id == tokenOutAddress;\n }).sortBy((tokenListPool) => -tokenListPool.reserve).slice(0, topNWithEachBaseToken).value();\n }).sortBy((tokenListPool) => -tokenListPool.reserve).slice(0, topNWithBaseToken).value();\n let topByDirectSwapPool = [];\n if (topNDirectSwaps != 0) {\n const { token0, token1, poolAddress } = poolProvider.getPoolAddress(\n tokenIn,\n tokenOut\n );\n topByDirectSwapPool = [\n {\n id: poolAddress,\n token0: {\n id: token0.address\n },\n token1: {\n id: token1.address\n },\n supply: 1e4,\n // Not used. Set to arbitrary number.\n reserve: 1e4,\n // Not used. Set to arbitrary number.\n reserveUSD: 1e4\n // Not used. Set to arbitrary number.\n }\n ];\n }\n addToAddressSet(topByDirectSwapPool);\n const wethAddress = WRAPPED_NATIVE_CURRENCY[chainId].address;\n let topByEthQuoteTokenPool = [];\n if (tokenOut.symbol != \"WPLS\" && tokenOut.symbol != \"PLS\" && tokenOut.symbol != \"tPLS\") {\n topByEthQuoteTokenPool = _16(subgraphPoolsSorted).filter((subgraphPool) => {\n if (routeType == TradeType.EXACT_INPUT) {\n return subgraphPool.token0.id == wethAddress && subgraphPool.token1.id == tokenOutAddress || subgraphPool.token1.id == wethAddress && subgraphPool.token0.id == tokenOutAddress;\n } else {\n return subgraphPool.token0.id == wethAddress && subgraphPool.token1.id == tokenInAddress || subgraphPool.token1.id == wethAddress && subgraphPool.token0.id == tokenInAddress;\n }\n }).slice(0, 1).value();\n }\n addToAddressSet(topByEthQuoteTokenPool);\n const topByTVL = _16(subgraphPoolsSorted).filter((subgraphPool) => {\n return !poolAddressesSoFar.has(subgraphPool.id);\n }).slice(0, topN).value();\n addToAddressSet(topByTVL);\n const topByTVLUsingTokenIn = _16(subgraphPoolsSorted).filter((subgraphPool) => {\n return !poolAddressesSoFar.has(subgraphPool.id) && (subgraphPool.token0.id == tokenInAddress || subgraphPool.token1.id == tokenInAddress);\n }).slice(0, topNTokenInOut).value();\n addToAddressSet(topByTVLUsingTokenIn);\n const topByTVLUsingTokenOut = _16(subgraphPoolsSorted).filter((subgraphPool) => {\n return !poolAddressesSoFar.has(subgraphPool.id) && (subgraphPool.token0.id == tokenOutAddress || subgraphPool.token1.id == tokenOutAddress);\n }).slice(0, topNTokenInOut).value();\n addToAddressSet(topByTVLUsingTokenOut);\n const topByTVLUsingTokenInSecondHops = _16(topByTVLUsingTokenIn).map((subgraphPool) => {\n return tokenInAddress == subgraphPool.token0.id ? subgraphPool.token1.id : subgraphPool.token0.id;\n }).flatMap((secondHopId) => {\n return _16(subgraphPoolsSorted).filter((subgraphPool) => {\n return !poolAddressesSoFar.has(subgraphPool.id) && (subgraphPool.token0.id == secondHopId || subgraphPool.token1.id == secondHopId);\n }).slice(0, topNSecondHop).value();\n }).uniqBy((pool) => pool.id).value();\n addToAddressSet(topByTVLUsingTokenInSecondHops);\n const topByTVLUsingTokenOutSecondHops = _16(topByTVLUsingTokenOut).map((subgraphPool) => {\n return tokenOutAddress == subgraphPool.token0.id ? subgraphPool.token1.id : subgraphPool.token0.id;\n }).flatMap((secondHopId) => {\n return _16(subgraphPoolsSorted).filter((subgraphPool) => {\n return !poolAddressesSoFar.has(subgraphPool.id) && (subgraphPool.token0.id == secondHopId || subgraphPool.token1.id == secondHopId);\n }).slice(0, topNSecondHop).value();\n }).uniqBy((pool) => pool.id).value();\n addToAddressSet(topByTVLUsingTokenOutSecondHops);\n const subgraphPools = _16([\n ...topByBaseWithTokenIn,\n ...topByBaseWithTokenOut,\n ...topByDirectSwapPool,\n ...topByEthQuoteTokenPool,\n ...topByTVL,\n ...topByTVLUsingTokenIn,\n ...topByTVLUsingTokenOut,\n ...topByTVLUsingTokenInSecondHops,\n ...topByTVLUsingTokenOutSecondHops\n ]).compact().uniqBy((pool) => pool.id).value();\n const tokenAddresses = _16(subgraphPools).flatMap((subgraphPool) => [subgraphPool.token0.id, subgraphPool.token1.id]).compact().uniq().value();\n log.info(\n `Getting the ${tokenAddresses.length} tokens within the ${subgraphPools.length} V1 pools we are considering`\n );\n const tokenAccessor = await tokenProvider.getTokens(tokenAddresses, {\n blockNumber\n });\n const printV1SubgraphPool = (s) => `${tokenAccessor.getTokenByAddress(s.token0.id)?.symbol ?? s.token0.id}/${tokenAccessor.getTokenByAddress(s.token1.id)?.symbol ?? s.token1.id}`;\n log.info(\n {\n topByBaseWithTokenIn: topByBaseWithTokenIn.map(printV1SubgraphPool),\n topByBaseWithTokenOut: topByBaseWithTokenOut.map(printV1SubgraphPool),\n topByTVL: topByTVL.map(printV1SubgraphPool),\n topByTVLUsingTokenIn: topByTVLUsingTokenIn.map(printV1SubgraphPool),\n topByTVLUsingTokenOut: topByTVLUsingTokenOut.map(printV1SubgraphPool),\n topByTVLUsingTokenInSecondHops: topByTVLUsingTokenInSecondHops.map(printV1SubgraphPool),\n topByTVLUsingTokenOutSecondHops: topByTVLUsingTokenOutSecondHops.map(printV1SubgraphPool),\n top2DirectSwap: topByDirectSwapPool.map(printV1SubgraphPool),\n top2EthQuotePool: topByEthQuoteTokenPool.map(printV1SubgraphPool)\n },\n `V1 Candidate pools`\n );\n const tokenPairsRaw = _16.map(\n subgraphPools,\n (subgraphPool) => {\n const tokenA = tokenAccessor.getTokenByAddress(subgraphPool.token0.id);\n const tokenB = tokenAccessor.getTokenByAddress(subgraphPool.token1.id);\n if (!tokenA || !tokenB) {\n log.info(\n `Dropping candidate pool for ${subgraphPool.token0.id}/${subgraphPool.token1.id}`\n );\n return void 0;\n }\n return [tokenA, tokenB];\n }\n );\n const tokenPairs = _16.compact(tokenPairsRaw);\n const beforePoolsLoad = Date.now();\n const poolAccessor = await poolProvider.getPools(tokenPairs, { blockNumber });\n metric.putMetric(\n \"V1PoolsLoad\",\n Date.now() - beforePoolsLoad,\n \"Milliseconds\" /* Milliseconds */\n );\n const poolsBySelection = {\n protocol: \"V1\" /* V1 */,\n selections: {\n topByBaseWithTokenIn,\n topByBaseWithTokenOut,\n topByDirectSwapPool,\n topByEthQuoteTokenPool,\n topByTVL,\n topByTVLUsingTokenIn,\n topByTVLUsingTokenOut,\n topByTVLUsingTokenInSecondHops,\n topByTVLUsingTokenOutSecondHops\n }\n };\n return { poolAccessor, candidatePools: poolsBySelection, subgraphPools };\n}\nasync function getV2CandidatePools({\n tokenIn,\n tokenOut,\n routeType,\n routingConfig,\n subgraphProvider,\n tokenProvider,\n poolProvider,\n blockedTokenListProvider,\n chainId\n}) {\n const {\n blockNumber,\n v2PoolSelection: {\n topN,\n topNDirectSwaps,\n topNTokenInOut,\n topNSecondHop,\n topNWithEachBaseToken,\n topNWithBaseToken\n }\n } = routingConfig;\n const tokenInAddress = tokenIn.address.toLowerCase();\n const tokenOutAddress = tokenOut.address.toLowerCase();\n const beforeSubgraphPools = Date.now();\n const allPoolsRaw = await subgraphProvider.getPools(tokenIn, tokenOut, {\n blockNumber\n });\n const allPools = _16.map(allPoolsRaw, (pool) => {\n return {\n ...pool,\n token0: {\n ...pool.token0,\n id: pool.token0.id.toLowerCase()\n },\n token1: {\n ...pool.token1,\n id: pool.token1.id.toLowerCase()\n }\n };\n });\n metric.putMetric(\n \"V2SubgraphPoolsLoad\",\n Date.now() - beforeSubgraphPools,\n \"Milliseconds\" /* Milliseconds */\n );\n let filteredPools = allPools;\n if (blockedTokenListProvider) {\n filteredPools = [];\n for (const pool of allPools) {\n const token0InBlocklist = await blockedTokenListProvider.getTokenByAddress(pool.token0.id);\n const token1InBlocklist = await blockedTokenListProvider.getTokenByAddress(pool.token1.id);\n if (token0InBlocklist || token1InBlocklist) {\n continue;\n }\n filteredPools.push(pool);\n }\n }\n const subgraphPoolsSorted = _16(filteredPools).sortBy((tokenListPool) => -tokenListPool.reserve).value();\n log.info(\n `After filtering blocked tokens went from ${allPools.length} to ${subgraphPoolsSorted.length}.`\n );\n const poolAddressesSoFar = /* @__PURE__ */ new Set();\n const addToAddressSet = (pools) => {\n _16(pools).map((pool) => pool.id).forEach((poolAddress) => poolAddressesSoFar.add(poolAddress));\n };\n const baseTokens = baseTokensByChain[chainId] ?? [];\n const topByBaseWithTokenIn = _16(baseTokens).flatMap((token) => {\n return _16(subgraphPoolsSorted).filter((subgraphPool) => {\n const tokenAddress = token.address.toLowerCase();\n return subgraphPool.token0.id == tokenAddress && subgraphPool.token1.id == tokenInAddress || subgraphPool.token1.id == tokenAddress && subgraphPool.token0.id == tokenInAddress;\n }).sortBy((tokenListPool) => -tokenListPool.reserve).slice(0, topNWithEachBaseToken).value();\n }).sortBy((tokenListPool) => -tokenListPool.reserve).slice(0, topNWithBaseToken).value();\n const topByBaseWithTokenOut = _16(baseTokens).flatMap((token) => {\n return _16(subgraphPoolsSorted).filter((subgraphPool) => {\n const tokenAddress = token.address.toLowerCase();\n return subgraphPool.token0.id == tokenAddress && subgraphPool.token1.id == tokenOutAddress || subgraphPool.token1.id == tokenAddress && subgraphPool.token0.id == tokenOutAddress;\n }).sortBy((tokenListPool) => -tokenListPool.reserve).slice(0, topNWithEachBaseToken).value();\n }).sortBy((tokenListPool) => -tokenListPool.reserve).slice(0, topNWithBaseToken).value();\n let topByDirectSwapPool = [];\n if (topNDirectSwaps != 0) {\n const { token0, token1, poolAddress } = poolProvider.getPoolAddress(\n tokenIn,\n tokenOut\n );\n topByDirectSwapPool = [\n {\n id: poolAddress,\n token0: {\n id: token0.address\n },\n token1: {\n id: token1.address\n },\n supply: 1e4,\n // Not used. Set to arbitrary number.\n reserve: 1e4,\n // Not used. Set to arbitrary number.\n reserveUSD: 1e4\n // Not used. Set to arbitrary number.\n }\n ];\n }\n addToAddressSet(topByDirectSwapPool);\n const wethAddress = WRAPPED_NATIVE_CURRENCY[chainId].address;\n let topByEthQuoteTokenPool = [];\n if (tokenOut.symbol != \"WPLS\" && tokenOut.symbol != \"PLS\" && tokenOut.symbol != \"tPLS\") {\n topByEthQuoteTokenPool = _16(subgraphPoolsSorted).filter((subgraphPool) => {\n if (routeType == TradeType.EXACT_INPUT) {\n return subgraphPool.token0.id == wethAddress && subgraphPool.token1.id == tokenOutAddress || subgraphPool.token1.id == wethAddress && subgraphPool.token0.id == tokenOutAddress;\n } else {\n return subgraphPool.token0.id == wethAddress && subgraphPool.token1.id == tokenInAddress || subgraphPool.token1.id == wethAddress && subgraphPool.token0.id == tokenInAddress;\n }\n }).slice(0, 1).value();\n }\n addToAddressSet(topByEthQuoteTokenPool);\n const topByTVL = _16(subgraphPoolsSorted).filter((subgraphPool) => {\n return !poolAddressesSoFar.has(subgraphPool.id);\n }).slice(0, topN).value();\n addToAddressSet(topByTVL);\n const topByTVLUsingTokenIn = _16(subgraphPoolsSorted).filter((subgraphPool) => {\n return !poolAddressesSoFar.has(subgraphPool.id) && (subgraphPool.token0.id == tokenInAddress || subgraphPool.token1.id == tokenInAddress);\n }).slice(0, topNTokenInOut).value();\n addToAddressSet(topByTVLUsingTokenIn);\n const topByTVLUsingTokenOut = _16(subgraphPoolsSorted).filter((subgraphPool) => {\n return !poolAddressesSoFar.has(subgraphPool.id) && (subgraphPool.token0.id == tokenOutAddress || subgraphPool.token1.id == tokenOutAddress);\n }).slice(0, topNTokenInOut).value();\n addToAddressSet(topByTVLUsingTokenOut);\n const topByTVLUsingTokenInSecondHops = _16(topByTVLUsingTokenIn).map((subgraphPool) => {\n return tokenInAddress == subgraphPool.token0.id ? subgraphPool.token1.id : subgraphPool.token0.id;\n }).flatMap((secondHopId) => {\n return _16(subgraphPoolsSorted).filter((subgraphPool) => {\n return !poolAddressesSoFar.has(subgraphPool.id) && (subgraphPool.token0.id == secondHopId || subgraphPool.token1.id == secondHopId);\n }).slice(0, topNSecondHop).value();\n }).uniqBy((pool) => pool.id).value();\n addToAddressSet(topByTVLUsingTokenInSecondHops);\n const topByTVLUsingTokenOutSecondHops = _16(topByTVLUsingTokenOut).map((subgraphPool) => {\n return tokenOutAddress == subgraphPool.token0.id ? subgraphPool.token1.id : subgraphPool.token0.id;\n }).flatMap((secondHopId) => {\n return _16(subgraphPoolsSorted).filter((subgraphPool) => {\n return !poolAddressesSoFar.has(subgraphPool.id) && (subgraphPool.token0.id == secondHopId || subgraphPool.token1.id == secondHopId);\n }).slice(0, topNSecondHop).value();\n }).uniqBy((pool) => pool.id).value();\n addToAddressSet(topByTVLUsingTokenOutSecondHops);\n const subgraphPools = _16([\n ...topByBaseWithTokenIn,\n ...topByBaseWithTokenOut,\n ...topByDirectSwapPool,\n ...topByEthQuoteTokenPool,\n ...topByTVL,\n ...topByTVLUsingTokenIn,\n ...topByTVLUsingTokenOut,\n ...topByTVLUsingTokenInSecondHops,\n ...topByTVLUsingTokenOutSecondHops\n ]).compact().uniqBy((pool) => pool.id).value();\n const tokenAddresses = _16(subgraphPools).flatMap((subgraphPool) => [subgraphPool.token0.id, subgraphPool.token1.id]).compact().uniq().value();\n log.info(\n `Getting the ${tokenAddresses.length} tokens within the ${subgraphPools.length} V2 pools we are considering`\n );\n const tokenAccessor = await tokenProvider.getTokens(tokenAddresses, {\n blockNumber\n });\n const printV2SubgraphPool = (s) => `${tokenAccessor.getTokenByAddress(s.token0.id)?.symbol ?? s.token0.id}/${tokenAccessor.getTokenByAddress(s.token1.id)?.symbol ?? s.token1.id}`;\n log.info(\n {\n topByBaseWithTokenIn: topByBaseWithTokenIn.map(printV2SubgraphPool),\n topByBaseWithTokenOut: topByBaseWithTokenOut.map(printV2SubgraphPool),\n topByTVL: topByTVL.map(printV2SubgraphPool),\n topByTVLUsingTokenIn: topByTVLUsingTokenIn.map(printV2SubgraphPool),\n topByTVLUsingTokenOut: topByTVLUsingTokenOut.map(printV2SubgraphPool),\n topByTVLUsingTokenInSecondHops: topByTVLUsingTokenInSecondHops.map(printV2SubgraphPool),\n topByTVLUsingTokenOutSecondHops: topByTVLUsingTokenOutSecondHops.map(printV2SubgraphPool),\n top2DirectSwap: topByDirectSwapPool.map(printV2SubgraphPool),\n top2EthQuotePool: topByEthQuoteTokenPool.map(printV2SubgraphPool)\n },\n `V2 Candidate pools`\n );\n const tokenPairsRaw = _16.map(\n subgraphPools,\n (subgraphPool) => {\n const tokenA = tokenAccessor.getTokenByAddress(subgraphPool.token0.id);\n const tokenB = tokenAccessor.getTokenByAddress(subgraphPool.token1.id);\n if (!tokenA || !tokenB) {\n log.info(\n `Dropping candidate pool for ${subgraphPool.token0.id}/${subgraphPool.token1.id}`\n );\n return void 0;\n }\n return [tokenA, tokenB];\n }\n );\n const tokenPairs = _16.compact(tokenPairsRaw);\n const beforePoolsLoad = Date.now();\n const poolAccessor = await poolProvider.getPools(tokenPairs, { blockNumber });\n metric.putMetric(\n \"V2PoolsLoad\",\n Date.now() - beforePoolsLoad,\n \"Milliseconds\" /* Milliseconds */\n );\n const poolsBySelection = {\n protocol: \"V2\" /* V2 */,\n selections: {\n topByBaseWithTokenIn,\n topByBaseWithTokenOut,\n topByDirectSwapPool,\n topByEthQuoteTokenPool,\n topByTVL,\n topByTVLUsingTokenIn,\n topByTVLUsingTokenOut,\n topByTVLUsingTokenInSecondHops,\n topByTVLUsingTokenOutSecondHops\n }\n };\n return { poolAccessor, candidatePools: poolsBySelection, subgraphPools };\n}\nasync function getMixedRouteCandidatePools({\n tokenIn,\n tokenOut,\n routeType,\n routingConfig,\n v1subgraphProvider,\n v2subgraphProvider,\n tokenProvider,\n v1poolProvider,\n v2poolProvider,\n blockedTokenListProvider,\n chainId\n}) {\n const { blockNumber } = routingConfig;\n const { subgraphPools: V1subgraphPools, candidatePools: V1candidatePools } = await getV1CandidatePools({\n tokenIn,\n tokenOut,\n tokenProvider,\n blockedTokenListProvider,\n poolProvider: v1poolProvider,\n routeType,\n subgraphProvider: v1subgraphProvider,\n routingConfig,\n chainId\n });\n const { subgraphPools: V2subgraphPools, candidatePools: V2candidatePools } = await getV2CandidatePools({\n tokenIn,\n tokenOut,\n tokenProvider,\n blockedTokenListProvider,\n poolProvider: v2poolProvider,\n routeType,\n subgraphProvider: v2subgraphProvider,\n routingConfig,\n chainId\n });\n const V2topByTVLPoolIds = new Set(\n [\n ...V2candidatePools.selections.topByTVLUsingTokenIn,\n ...V2candidatePools.selections.topByBaseWithTokenIn,\n /// tokenOut:\n ...V2candidatePools.selections.topByTVLUsingTokenOut,\n ...V2candidatePools.selections.topByBaseWithTokenOut,\n /// Direct swap:\n ...V2candidatePools.selections.topByDirectSwapPool\n ].map((poolId) => poolId.id)\n );\n const V2topByTVLSortedPools = _16(V2subgraphPools).filter((pool) => V2topByTVLPoolIds.has(pool.id)).sortBy((pool) => -pool.reserveUSD).value();\n const V1sortedPools = _16(V1subgraphPools).sortBy((pool) => -pool.reserveUSD).value();\n const buildV2Pools = [];\n V2topByTVLSortedPools.forEach((V2subgraphPool) => {\n const V1subgraphPool = V1sortedPools.find(\n (pool) => pool.token0.id == V2subgraphPool.token0.id && pool.token1.id == V2subgraphPool.token1.id || pool.token0.id == V2subgraphPool.token1.id && pool.token1.id == V2subgraphPool.token0.id\n );\n if (V1subgraphPool) {\n if (V2subgraphPool.reserveUSD > V1subgraphPool.reserveUSD) {\n log.info(\n {\n token0: V2subgraphPool.token0.id,\n token1: V2subgraphPool.token1.id,\n v2reserveUSD: V2subgraphPool.reserveUSD,\n v1reserveUSD: V1subgraphPool.reserveUSD\n },\n `MixedRoute heuristic, found a V2 pool with higher liquidity than its V1 counterpart`\n );\n buildV2Pools.push(V2subgraphPool);\n }\n } else {\n log.info(\n {\n token0: V2subgraphPool.token0.id,\n token1: V2subgraphPool.token1.id,\n v2reserveUSD: V2subgraphPool.reserveUSD\n },\n `MixedRoute heuristic, found a V2 pool with no V1 counterpart`\n );\n buildV2Pools.push(V2subgraphPool);\n }\n });\n log.info(\n buildV2Pools.length,\n `Number of V2 candidate pools that fit first heuristic`\n );\n const subgraphPools = [...buildV2Pools, ...V1sortedPools];\n const tokenAddresses = _16(subgraphPools).flatMap((subgraphPool) => [subgraphPool.token0.id, subgraphPool.token1.id]).compact().uniq().value();\n log.info(\n `Getting the ${tokenAddresses.length} tokens within the ${subgraphPools.length} pools we are considering`\n );\n const tokenAccessor = await tokenProvider.getTokens(tokenAddresses, {\n blockNumber\n });\n const V1tokenPairsRaw = _16.map(\n V1sortedPools,\n (subgraphPool) => {\n const tokenA = tokenAccessor.getTokenByAddress(subgraphPool.token0.id);\n const tokenB = tokenAccessor.getTokenByAddress(subgraphPool.token1.id);\n if (!tokenA || !tokenB) {\n log.info(\n `Dropping candidate pool for ${subgraphPool.token0.id}/${subgraphPool.token1.id}`\n );\n return void 0;\n }\n return [tokenA, tokenB];\n }\n );\n const V1tokenPairs = _16.compact(V1tokenPairsRaw);\n const V2tokenPairsRaw = _16.map(\n buildV2Pools,\n (subgraphPool) => {\n const tokenA = tokenAccessor.getTokenByAddress(subgraphPool.token0.id);\n const tokenB = tokenAccessor.getTokenByAddress(subgraphPool.token1.id);\n if (!tokenA || !tokenB) {\n log.info(\n `Dropping candidate pool for ${subgraphPool.token0.id}/${subgraphPool.token1.id}`\n );\n return void 0;\n }\n return [tokenA, tokenB];\n }\n );\n const V2tokenPairs = _16.compact(V2tokenPairsRaw);\n const [V1poolAccessor, V2poolAccessor] = await Promise.all([\n v1poolProvider.getPools(V1tokenPairs, {\n blockNumber\n }),\n v2poolProvider.getPools(V2tokenPairs, {\n blockNumber\n })\n ]);\n const buildPoolsBySelection = (key) => {\n return [\n ...buildV2Pools.filter(\n (pool) => V2candidatePools.selections[key].map((p) => p.id).includes(pool.id)\n ),\n ...V1candidatePools.selections[key]\n ];\n };\n const poolsBySelection = {\n protocol: \"MIXED\" /* MIXED */,\n selections: {\n topByBaseWithTokenIn: buildPoolsBySelection(\"topByBaseWithTokenIn\"),\n topByBaseWithTokenOut: buildPoolsBySelection(\"topByBaseWithTokenOut\"),\n topByDirectSwapPool: buildPoolsBySelection(\"topByDirectSwapPool\"),\n topByEthQuoteTokenPool: buildPoolsBySelection(\"topByEthQuoteTokenPool\"),\n topByTVL: buildPoolsBySelection(\"topByTVL\"),\n topByTVLUsingTokenIn: buildPoolsBySelection(\"topByTVLUsingTokenIn\"),\n topByTVLUsingTokenOut: buildPoolsBySelection(\"topByTVLUsingTokenOut\"),\n topByTVLUsingTokenInSecondHops: buildPoolsBySelection(\n \"topByTVLUsingTokenInSecondHops\"\n ),\n topByTVLUsingTokenOutSecondHops: buildPoolsBySelection(\n \"topByTVLUsingTokenOutSecondHops\"\n )\n }\n };\n return {\n V1poolAccessor,\n V2poolAccessor,\n candidatePools: poolsBySelection,\n subgraphPools\n };\n}\n\n// src/routers/alpha-router/quoters/v1-quoter.ts\nvar V1Quoter = class extends BaseQuoter {\n constructor(v1SubgraphProvider, v1PoolProvider, v1QuoteProvider, v1GasModelFactory, tokenProvider, chainId, blockedTokenListProvider, tokenValidatorProvider) {\n super(tokenProvider, chainId, blockedTokenListProvider, tokenValidatorProvider);\n this.v1SubgraphProvider = v1SubgraphProvider;\n this.v1PoolProvider = v1PoolProvider;\n this.v1QuoteProvider = v1QuoteProvider;\n this.v1GasModelFactory = v1GasModelFactory;\n }\n async getRoutes(tokenIn, tokenOut, tradeType, routingConfig) {\n const { poolAccessor, candidatePools } = await getV1CandidatePools({\n tokenIn,\n tokenOut,\n tokenProvider: this.tokenProvider,\n blockedTokenListProvider: this.blockedTokenListProvider,\n poolProvider: this.v1PoolProvider,\n routeType: tradeType,\n subgraphProvider: this.v1SubgraphProvider,\n routingConfig,\n chainId: this.chainId\n });\n const poolsRaw = poolAccessor.getAllPools();\n const pools = await this.applyTokenValidatorToPools(\n poolsRaw,\n (token, tokenValidation) => {\n if (!tokenValidation) {\n return false;\n }\n if (tokenValidation == 2 /* STF */ && (token.equals(tokenIn) || token.equals(tokenOut))) {\n return false;\n }\n return tokenValidation == 2 /* STF */;\n }\n );\n const { maxSwapsPerPath } = routingConfig;\n const routes = computeAllV1Routes(\n tokenIn,\n tokenOut,\n pools,\n maxSwapsPerPath\n );\n return {\n routes,\n candidatePools\n };\n }\n async getQuotes(routes, amounts, percents, quoteToken, tradeType, _routingConfig, candidatePools, _gasModel, gasPriceWei) {\n log.info(\"Starting to get V1 quotes\");\n if (gasPriceWei === void 0) {\n throw new Error(\"GasPriceWei for V1Routes is required to getQuotes\");\n }\n if (routes.length == 0) {\n return { routesWithValidQuotes: [], candidatePools };\n }\n const quoteFn = tradeType == TradeType.EXACT_INPUT ? this.v1QuoteProvider.getQuotesManyExactIn.bind(this.v1QuoteProvider) : this.v1QuoteProvider.getQuotesManyExactOut.bind(this.v1QuoteProvider);\n const beforeQuotes = Date.now();\n log.info(\n `Getting quotes for V1 for ${routes.length} routes with ${amounts.length} amounts per route.`\n );\n const { routesWithQuotes } = await quoteFn(amounts, routes);\n const v1GasModel = await this.v1GasModelFactory.buildGasModel({\n chainId: this.chainId,\n gasPriceWei,\n poolProvider: this.v1PoolProvider,\n token: quoteToken\n });\n metric.putMetric(\n \"V1QuotesLoad\",\n Date.now() - beforeQuotes,\n \"Milliseconds\" /* Milliseconds */\n );\n metric.putMetric(\n \"V1QuotesFetched\",\n _16(routesWithQuotes).map(([, quotes]) => quotes.length).sum(),\n \"Count\" /* Count */\n );\n const routesWithValidQuotes = [];\n for (const routeWithQuote of routesWithQuotes) {\n const [route, quotes] = routeWithQuote;\n for (let i = 0; i < quotes.length; i++) {\n const percent = percents[i];\n const amountQuote = quotes[i];\n const { quote, amount } = amountQuote;\n if (!quote) {\n log.debug(\n {\n route: routeToString(route),\n amountQuote\n },\n \"Dropping a null V1 quote for route.\"\n );\n continue;\n }\n const routeWithValidQuote = new V1RouteWithValidQuote2({\n route,\n rawQuote: quote,\n amount,\n percent,\n gasModel: v1GasModel,\n quoteToken,\n tradeType,\n v1PoolProvider: this.v1PoolProvider\n });\n routesWithValidQuotes.push(routeWithValidQuote);\n }\n }\n return {\n routesWithValidQuotes,\n candidatePools\n };\n }\n};\nvar V2Quoter = class extends BaseQuoter {\n constructor(v2SubgraphProvider, v2PoolProvider, v2QuoteProvider, v2GasModelFactory, tokenProvider, chainId, blockedTokenListProvider, tokenValidatorProvider) {\n super(tokenProvider, chainId, blockedTokenListProvider, tokenValidatorProvider);\n this.v2SubgraphProvider = v2SubgraphProvider;\n this.v2PoolProvider = v2PoolProvider;\n this.v2QuoteProvider = v2QuoteProvider;\n this.v2GasModelFactory = v2GasModelFactory;\n }\n async getRoutes(tokenIn, tokenOut, tradeType, routingConfig) {\n const { poolAccessor, candidatePools } = await getV2CandidatePools({\n tokenIn,\n tokenOut,\n tokenProvider: this.tokenProvider,\n blockedTokenListProvider: this.blockedTokenListProvider,\n poolProvider: this.v2PoolProvider,\n routeType: tradeType,\n subgraphProvider: this.v2SubgraphProvider,\n routingConfig,\n chainId: this.chainId\n });\n const poolsRaw = poolAccessor.getAllPools();\n const pools = await this.applyTokenValidatorToPools(\n poolsRaw,\n (token, tokenValidation) => {\n if (!tokenValidation) {\n return false;\n }\n if (tokenValidation == 2 /* STF */ && (token.equals(tokenIn) || token.equals(tokenOut))) {\n return false;\n }\n return tokenValidation == 2 /* STF */;\n }\n );\n const { maxSwapsPerPath } = routingConfig;\n const routes = computeAllV2Routes(\n tokenIn,\n tokenOut,\n pools,\n maxSwapsPerPath\n );\n return {\n routes,\n candidatePools\n };\n }\n async getQuotes(routes, amounts, percents, quoteToken, tradeType, _routingConfig, candidatePools, _gasModel, gasPriceWei) {\n log.info(\"Starting to get V2 quotes\");\n if (gasPriceWei === void 0) {\n throw new Error(\"GasPriceWei for V2Routes is required to getQuotes\");\n }\n if (routes.length == 0) {\n return { routesWithValidQuotes: [], candidatePools };\n }\n const quoteFn = tradeType == TradeType.EXACT_INPUT ? this.v2QuoteProvider.getQuotesManyExactIn.bind(this.v2QuoteProvider) : this.v2QuoteProvider.getQuotesManyExactOut.bind(this.v2QuoteProvider);\n const beforeQuotes = Date.now();\n log.info(\n `Getting quotes for V2 for ${routes.length} routes with ${amounts.length} amounts per route.`\n );\n const { routesWithQuotes } = await quoteFn(amounts, routes);\n const v2GasModel = await this.v2GasModelFactory.buildGasModel({\n chainId: this.chainId,\n gasPriceWei,\n poolProvider: this.v2PoolProvider,\n token: quoteToken\n });\n metric.putMetric(\n \"V2QuotesLoad\",\n Date.now() - beforeQuotes,\n \"Milliseconds\" /* Milliseconds */\n );\n metric.putMetric(\n \"V2QuotesFetched\",\n _16(routesWithQuotes).map(([, quotes]) => quotes.length).sum(),\n \"Count\" /* Count */\n );\n const routesWithValidQuotes = [];\n for (const routeWithQuote of routesWithQuotes) {\n const [route, quotes] = routeWithQuote;\n for (let i = 0; i < quotes.length; i++) {\n const percent = percents[i];\n const amountQuote = quotes[i];\n const { quote, amount } = amountQuote;\n if (!quote) {\n log.debug(\n {\n route: routeToString(route),\n amountQuote\n },\n \"Dropping a null V2 quote for route.\"\n );\n continue;\n }\n const routeWithValidQuote = new V2RouteWithValidQuote2({\n route,\n rawQuote: quote,\n amount,\n percent,\n gasModel: v2GasModel,\n quoteToken,\n tradeType,\n v2PoolProvider: this.v2PoolProvider\n });\n routesWithValidQuotes.push(routeWithValidQuote);\n }\n }\n return {\n routesWithValidQuotes,\n candidatePools\n };\n }\n};\nvar MixedQuoter = class extends BaseQuoter {\n constructor(v1SubgraphProvider, v1PoolProvider, v2SubgraphProvider, v2PoolProvider, onChainQuoteProvider, tokenProvider, chainId, blockedTokenListProvider, tokenValidatorProvider) {\n super(tokenProvider, chainId, blockedTokenListProvider, tokenValidatorProvider);\n this.v1SubgraphProvider = v1SubgraphProvider;\n this.v1PoolProvider = v1PoolProvider;\n this.v2SubgraphProvider = v2SubgraphProvider;\n this.v2PoolProvider = v2PoolProvider;\n this.onChainQuoteProvider = onChainQuoteProvider;\n }\n async getRoutes(tokenIn, tokenOut, tradeType, routingConfig) {\n if (tradeType != TradeType.EXACT_INPUT) {\n throw new Error(\"Mixed route quotes are not supported for EXACT_OUTPUT\");\n }\n const {\n V1poolAccessor,\n V2poolAccessor,\n candidatePools: mixedRouteCandidatePools\n } = await getMixedRouteCandidatePools({\n tokenIn,\n tokenOut,\n tokenProvider: this.tokenProvider,\n blockedTokenListProvider: this.blockedTokenListProvider,\n v1poolProvider: this.v1PoolProvider,\n v2poolProvider: this.v2PoolProvider,\n routeType: tradeType,\n v1subgraphProvider: this.v1SubgraphProvider,\n v2subgraphProvider: this.v2SubgraphProvider,\n routingConfig,\n chainId: this.chainId\n });\n const V1poolsRaw = V1poolAccessor.getAllPools();\n const V2poolsRaw = V2poolAccessor.getAllPools();\n const poolsRaw = [...V1poolsRaw, ...V2poolsRaw];\n const candidatePools = mixedRouteCandidatePools;\n const pools = await this.applyTokenValidatorToPools(\n poolsRaw,\n (token, tokenValidation) => {\n if (!tokenValidation) {\n return false;\n }\n if (tokenValidation == 2 /* STF */ && (token.equals(tokenIn) || token.equals(tokenOut))) {\n return false;\n }\n return tokenValidation == 1 /* FOT */ || tokenValidation == 2 /* STF */;\n }\n );\n const { maxSwapsPerPath } = routingConfig;\n const routes = computeAllMixedRoutes(\n tokenIn,\n tokenOut,\n pools,\n maxSwapsPerPath\n );\n return {\n routes,\n candidatePools\n };\n }\n async getQuotes(routes, amounts, percents, quoteToken, tradeType, routingConfig, candidatePools, gasModel) {\n log.info(\"Starting to get mixed quotes\");\n if (gasModel === void 0) {\n throw new Error(\"GasModel for MixedRouteWithValidQuote is required to getQuotes\");\n }\n if (routes.length == 0) {\n return { routesWithValidQuotes: [], candidatePools };\n }\n const quoteFn = this.onChainQuoteProvider.getQuotesManyExactIn.bind(\n this.onChainQuoteProvider\n );\n const beforeQuotes = Date.now();\n log.info(\n `Getting quotes for mixed for ${routes.length} routes with ${amounts.length} amounts per route.`\n );\n const { routesWithQuotes } = await quoteFn(amounts, routes, {\n blockNumber: routingConfig.blockNumber\n });\n metric.putMetric(\n \"MixedQuotesLoad\",\n Date.now() - beforeQuotes,\n \"Milliseconds\" /* Milliseconds */\n );\n metric.putMetric(\n \"MixedQuotesFetched\",\n _16(routesWithQuotes).map(([, quotes]) => quotes.length).sum(),\n \"Count\" /* Count */\n );\n const routesWithValidQuotes = [];\n for (const routeWithQuote of routesWithQuotes) {\n const [route, quotes] = routeWithQuote;\n for (let i = 0; i < quotes.length; i++) {\n const percent = percents[i];\n const amountQuote = quotes[i];\n const {\n quote,\n amount\n } = amountQuote;\n if (!quote) {\n log.debug(\n {\n route: routeToString(route),\n amountQuote\n },\n \"Dropping a null mixed quote for route.\"\n );\n continue;\n }\n const routeWithValidQuote = new MixedRouteWithValidQuote2({\n route,\n rawQuote: quote,\n amount,\n percent,\n mixedRouteGasModel: gasModel,\n quoteToken,\n tradeType,\n v1PoolProvider: this.v1PoolProvider,\n v2PoolProvider: this.v2PoolProvider\n });\n routesWithValidQuotes.push(routeWithValidQuote);\n }\n }\n return {\n routesWithValidQuotes,\n candidatePools\n };\n }\n};\n\n// src/routers/alpha-router/alpha-router.ts\nvar MapWithLowerCaseKey = class extends Map {\n set(key, value) {\n return super.set(key.toLowerCase(), value);\n }\n};\nvar AlphaRouter = class {\n constructor({\n chainId,\n provider,\n multicall2Provider,\n v1PoolProvider,\n v1QuoteProvider,\n v1SubgraphProvider,\n v2PoolProvider,\n v2QuoteProvider,\n v2SubgraphProvider,\n onChainQuoteProvider,\n tokenProvider,\n blockedTokenListProvider,\n gasPriceProvider,\n v1GasModelFactory,\n v2GasModelFactory,\n mixedRouteGasModelFactory,\n swapRouterProvider,\n tokenValidatorProvider,\n simulator,\n routeCachingProvider\n }) {\n this.chainId = chainId;\n this.provider = provider;\n this.multicall2Provider = multicall2Provider ?? new UniswapMulticallProvider(chainId, provider, 375e3);\n this.v1PoolProvider = v1PoolProvider ?? new CachingV1PoolProvider(\n this.chainId,\n new V1PoolProvider(ID_TO_CHAIN_ID(chainId), this.multicall2Provider),\n new NodeJSCache(new NodeCache({ stdTTL: 360, useClones: false }))\n );\n this.v1QuoteProvider = v1QuoteProvider ?? new V1QuoteProvider();\n this.simulator = simulator;\n this.routeCachingProvider = routeCachingProvider;\n if (onChainQuoteProvider) {\n this.onChainQuoteProvider = onChainQuoteProvider;\n } else {\n switch (chainId) {\n default:\n this.onChainQuoteProvider = new OnChainQuoteProvider(\n chainId,\n provider,\n this.multicall2Provider,\n {\n retries: 2,\n minTimeout: 100,\n maxTimeout: 1e3\n },\n {\n multicallChunk: 210,\n gasLimitPerCall: 705e3,\n quoteMinSuccessRate: 0.15\n },\n {\n gasLimitOverride: 2e6,\n multicallChunk: 70\n }\n );\n break;\n }\n }\n this.v2PoolProvider = v2PoolProvider ?? new CachingV2PoolProvider(\n chainId,\n new V2PoolProvider(chainId, this.multicall2Provider),\n new NodeJSCache(new NodeCache({ stdTTL: 60, useClones: false }))\n );\n this.v2QuoteProvider = v2QuoteProvider ?? new V2QuoteProvider();\n this.blockedTokenListProvider = blockedTokenListProvider ?? new CachingTokenListProvider(\n chainId,\n UNSUPPORTED_TOKENS,\n new NodeJSCache(new NodeCache({ stdTTL: 3600, useClones: false }))\n );\n this.tokenProvider = tokenProvider ?? new CachingTokenProviderWithFallback(\n chainId,\n new NodeJSCache(new NodeCache({ stdTTL: 3600, useClones: false })),\n // new CachingTokenListProvider(\n // chainId,\n // DEFAULT_TOKEN_LIST,\n // new NodeJSCache(new NodeCache({ stdTTL: 3600, useClones: false }))\n // ),\n new TokenProvider(chainId, this.multicall2Provider)\n );\n if (v1SubgraphProvider) {\n this.v1SubgraphProvider = v1SubgraphProvider;\n } else {\n this.v1SubgraphProvider = new V1SubgraphProviderWithFallBacks([\n // TODO: implement api endpoint for retrieving subgraph data in json format\n // this will greatly improve performance and reliability of these queries\n // new CachingV1SubgraphProvider(\n // chainId,\n // new URISubgraphProvider(\n // chainId,\n // `https://cloudflare-ipfs.com/ipns/api.uniswap.org/v1/pools/v2/${chainName}.json`,\n // undefined,\n // 0\n // ),\n // new NodeJSCache(new NodeCache({ stdTTL: 300, useClones: false }))\n // ),\n // new CachingV1SubgraphProvider(\n // chainId,\n // new V1SubgraphProvider(chainId),\n // new NodeJSCache(new NodeCache({ stdTTL: 300, useClones: false }))\n // ),\n new StaticV1SubgraphProvider(chainId)\n ]);\n }\n if (v2SubgraphProvider) {\n this.v2SubgraphProvider = v2SubgraphProvider;\n } else {\n this.v2SubgraphProvider = new V2SubgraphProviderWithFallBacks([\n // TODO: implement api endpoint for retrieving subgraph data in json format\n // this will greatly improve performance and reliability of these queries\n // new CachingV2SubgraphProvider(\n // chainId,\n // new URISubgraphProvider(\n // chainId,\n // `https://cloudflare-ipfs.com/ipns/api.uniswap.org/v1/pools/v2/${chainName}.json`,\n // undefined,\n // 0\n // ),\n // new NodeJSCache(new NodeCache({ stdTTL: 300, useClones: false }))\n // ),\n // new CachingV2SubgraphProvider(\n // chainId,\n // new V2SubgraphProvider(chainId),\n // new NodeJSCache(new NodeCache({ stdTTL: 300, useClones: false }))\n // ),\n new StaticV2SubgraphProvider(chainId)\n ]);\n }\n let gasPriceProviderInstance = new OnChainGasPriceProvider(\n chainId,\n new EIP1559GasPriceProvider(this.provider),\n new LegacyGasPriceProvider(this.provider)\n );\n this.gasPriceProvider = gasPriceProvider ?? new CachingGasStationProvider(\n chainId,\n gasPriceProviderInstance,\n new NodeJSCache(\n new NodeCache({ stdTTL: 15, useClones: false })\n )\n );\n this.v1GasModelFactory = v1GasModelFactory ?? new V1HeuristicGasModelFactory();\n this.v2GasModelFactory = v2GasModelFactory ?? new V2HeuristicGasModelFactory();\n this.mixedRouteGasModelFactory = mixedRouteGasModelFactory ?? new MixedRouteHeuristicGasModelFactory();\n this.swapRouterProvider = swapRouterProvider ?? new SwapRouterProvider(this.multicall2Provider, this.chainId);\n if (tokenValidatorProvider) {\n this.tokenValidatorProvider = tokenValidatorProvider;\n } else if (this.chainId === ChainId.PULSECHAIN || this.chainId === ChainId.PULSECHAIN_TESTNET) {\n this.tokenValidatorProvider = new TokenValidatorProvider(\n this.chainId,\n this.multicall2Provider,\n new NodeJSCache(new NodeCache({ stdTTL: 3e4, useClones: false }))\n );\n }\n this.v1Quoter = new V1Quoter(\n this.v1SubgraphProvider,\n this.v1PoolProvider,\n this.v1QuoteProvider,\n this.v1GasModelFactory,\n this.tokenProvider,\n this.chainId,\n this.blockedTokenListProvider,\n this.tokenValidatorProvider\n );\n this.v2Quoter = new V2Quoter(\n this.v2SubgraphProvider,\n this.v2PoolProvider,\n this.v2QuoteProvider,\n this.v2GasModelFactory,\n this.tokenProvider,\n this.chainId,\n this.blockedTokenListProvider,\n this.tokenValidatorProvider\n );\n this.mixedQuoter = new MixedQuoter(\n this.v1SubgraphProvider,\n this.v1PoolProvider,\n this.v2SubgraphProvider,\n this.v2PoolProvider,\n this.onChainQuoteProvider,\n this.tokenProvider,\n this.chainId,\n this.blockedTokenListProvider,\n this.tokenValidatorProvider\n );\n }\n async routeToRatio(token0Balance, token1Balance, position, swapAndAddConfig, swapAndAddOptions, routingConfig = DEFAULT_ROUTING_CONFIG_BY_CHAIN(\n this.chainId\n )) {\n if (token1Balance.currency.wrapped.sortsBefore(token0Balance.currency.wrapped)) {\n [token0Balance, token1Balance] = [token1Balance, token0Balance];\n }\n let preSwapOptimalRatio = this.calculateOptimalRatio(\n position,\n position.pool.sqrtRatioX96,\n true\n );\n let zeroForOne;\n if (position.pool.tickCurrent > position.tickUpper) {\n zeroForOne = true;\n } else if (position.pool.tickCurrent < position.tickLower) {\n zeroForOne = false;\n } else {\n zeroForOne = new Fraction(\n token0Balance.quotient,\n token1Balance.quotient\n ).greaterThan(preSwapOptimalRatio);\n if (!zeroForOne)\n preSwapOptimalRatio = preSwapOptimalRatio.invert();\n }\n const [inputBalance, outputBalance] = zeroForOne ? [token0Balance, token1Balance] : [token1Balance, token0Balance];\n let optimalRatio = preSwapOptimalRatio;\n let postSwapTargetPool = position.pool;\n let exchangeRate = zeroForOne ? position.pool.token0Price : position.pool.token1Price;\n let swap = null;\n let ratioAchieved = false;\n let n = 0;\n while (!ratioAchieved) {\n n++;\n if (n > swapAndAddConfig.maxIterations) {\n log.info(\"max iterations exceeded\");\n return {\n status: 2 /* NO_ROUTE_FOUND */,\n error: \"max iterations exceeded\"\n };\n }\n const amountToSwap = calculateRatioAmountIn(\n optimalRatio,\n exchangeRate,\n inputBalance,\n outputBalance\n );\n if (amountToSwap.equalTo(0)) {\n log.info(`no swap needed: amountToSwap = 0`);\n return {\n status: 3 /* NO_SWAP_NEEDED */\n };\n }\n swap = await this.route(\n amountToSwap,\n outputBalance.currency,\n TradeType.EXACT_INPUT,\n void 0,\n {\n ...DEFAULT_ROUTING_CONFIG_BY_CHAIN(this.chainId),\n ...routingConfig,\n /// @dev We do not want to query for mixedRoutes for routeToRatio as they are not supported\n /// [Protocol.V1, Protocol.V2] will make sure we only query for V1 and V2\n protocols: [\"V1\" /* V1 */, \"V2\" /* V2 */]\n }\n );\n if (!swap) {\n log.info(\"no route found from this.route()\");\n return {\n status: 2 /* NO_ROUTE_FOUND */,\n error: \"no route found\"\n };\n }\n const inputBalanceUpdated = inputBalance.subtract(\n swap.trade.inputAmount\n );\n const outputBalanceUpdated = outputBalance.add(swap.trade.outputAmount);\n const newRatio = inputBalanceUpdated.divide(outputBalanceUpdated);\n {\n optimalRatio = preSwapOptimalRatio;\n }\n ratioAchieved = newRatio.equalTo(optimalRatio) || this.absoluteValue(\n newRatio.asFraction.divide(optimalRatio).subtract(1)\n ).lessThan(swapAndAddConfig.ratioErrorTolerance);\n exchangeRate = swap.trade.outputAmount.divide(swap.trade.inputAmount);\n log.info(\n {\n exchangeRate: exchangeRate.asFraction.toFixed(18),\n optimalRatio: optimalRatio.asFraction.toFixed(18),\n newRatio: newRatio.asFraction.toFixed(18),\n inputBalanceUpdated: inputBalanceUpdated.asFraction.toFixed(18),\n outputBalanceUpdated: outputBalanceUpdated.asFraction.toFixed(18),\n ratioErrorTolerance: swapAndAddConfig.ratioErrorTolerance.toFixed(18),\n iterationN: n.toString()\n },\n \"QuoteToRatio Iteration Parameters\"\n );\n if (exchangeRate.equalTo(0)) {\n log.info(\"exchangeRate to 0\");\n return {\n status: 2 /* NO_ROUTE_FOUND */,\n error: \"insufficient liquidity to swap to optimal ratio\"\n };\n }\n }\n if (!swap) {\n return {\n status: 2 /* NO_ROUTE_FOUND */,\n error: \"no route found\"\n };\n }\n let methodParameters;\n if (swapAndAddOptions) {\n methodParameters = await this.buildSwapAndAddMethodParameters(\n swap.trade,\n swapAndAddOptions,\n {\n initialBalanceTokenIn: inputBalance,\n initialBalanceTokenOut: outputBalance,\n preLiquidityPosition: position\n }\n );\n }\n return {\n status: 1 /* SUCCESS */,\n result: { ...swap, methodParameters, optimalRatio, postSwapTargetPool }\n };\n }\n /**\n * @inheritdoc IRouter\n */\n async route(amount, quoteCurrency, tradeType, swapConfig, partialRoutingConfig = {}) {\n const { currencyIn, currencyOut } = this.determineCurrencyInOutFromTradeType(tradeType, amount, quoteCurrency);\n const tokenIn = currencyIn.wrapped;\n const tokenOut = currencyOut.wrapped;\n metric.setProperty(\"chainId\", this.chainId);\n metric.setProperty(\"pair\", `${tokenIn.symbol}/${tokenOut.symbol}`);\n metric.setProperty(\"tokenIn\", tokenIn.address);\n metric.setProperty(\"tokenOut\", tokenOut.address);\n metric.setProperty(\"tradeType\", tradeType === TradeType.EXACT_INPUT ? \"ExactIn\" : \"ExactOut\");\n metric.putMetric(\n `QuoteRequestedForChain${this.chainId}`,\n 1,\n \"Count\" /* Count */\n );\n const blockNumber = partialRoutingConfig.blockNumber ?? this.getBlockNumberPromise();\n const routingConfig = _16.merge(\n {},\n DEFAULT_ROUTING_CONFIG_BY_CHAIN(this.chainId),\n partialRoutingConfig,\n { blockNumber }\n );\n const gasPriceWei = await this.getGasPriceWei();\n const quoteToken = quoteCurrency.wrapped;\n const mixedRouteGasModel = await this.getGasModels(\n gasPriceWei,\n amount.currency.wrapped,\n quoteToken\n );\n const protocols = Array.from(new Set(routingConfig.protocols).values());\n const cacheMode = await this.routeCachingProvider?.getCacheMode(\n this.chainId,\n amount,\n quoteToken,\n tradeType,\n protocols\n );\n let cachedRoutes;\n if (cacheMode !== \"darkmode\" /* Darkmode */) {\n cachedRoutes = await this.routeCachingProvider?.getCachedRoute(\n this.chainId,\n amount,\n quoteToken,\n tradeType,\n protocols,\n await blockNumber\n );\n }\n if (cacheMode && cacheMode !== \"darkmode\" /* Darkmode */ && !cachedRoutes) {\n metric.putMetric(\n `GetCachedRoute_miss_${cacheMode}`,\n 1,\n \"Count\" /* Count */\n );\n log.info(\n {\n tokenIn: tokenIn.symbol,\n tokenInAddress: tokenIn.address,\n tokenOut: tokenOut.symbol,\n tokenOutAddress: tokenOut.address,\n cacheMode,\n amount: amount.toExact(),\n chainId: this.chainId,\n tradeType: this.tradeTypeStr(tradeType)\n },\n `GetCachedRoute miss ${cacheMode} for ${this.tokenPairSymbolTradeTypeChainId(tokenIn, tokenOut, tradeType)}`\n );\n } else if (cachedRoutes) {\n metric.putMetric(\n `GetCachedRoute_hit_${cacheMode}`,\n 1,\n \"Count\" /* Count */\n );\n log.info(\n {\n tokenIn: tokenIn.symbol,\n tokenInAddress: tokenIn.address,\n tokenOut: tokenOut.symbol,\n tokenOutAddress: tokenOut.address,\n cacheMode,\n amount: amount.toExact(),\n chainId: this.chainId,\n tradeType: this.tradeTypeStr(tradeType)\n },\n `GetCachedRoute hit ${cacheMode} for ${this.tokenPairSymbolTradeTypeChainId(tokenIn, tokenOut, tradeType)}`\n );\n }\n let swapRouteFromCachePromise = Promise.resolve(null);\n if (cachedRoutes) {\n swapRouteFromCachePromise = this.getSwapRouteFromCache(\n cachedRoutes,\n await blockNumber,\n amount,\n quoteToken,\n tradeType,\n routingConfig,\n mixedRouteGasModel,\n gasPriceWei\n );\n }\n let swapRouteFromChainPromise = Promise.resolve(null);\n if (!cachedRoutes || cacheMode !== \"livemode\" /* Livemode */) {\n swapRouteFromChainPromise = this.getSwapRouteFromChain(\n amount,\n tokenIn,\n tokenOut,\n protocols,\n quoteToken,\n tradeType,\n routingConfig,\n mixedRouteGasModel,\n gasPriceWei\n );\n }\n const [swapRouteFromCache, swapRouteFromChain] = await Promise.all([\n swapRouteFromCachePromise,\n swapRouteFromChainPromise\n ]);\n let swapRouteRaw;\n if (cacheMode === \"livemode\" /* Livemode */ && swapRouteFromCache) {\n log.info(`CacheMode is ${cacheMode}, and we are using swapRoute from cache`);\n swapRouteRaw = swapRouteFromCache;\n } else {\n log.info(`CacheMode is ${cacheMode}, and we are using materialized swapRoute`);\n swapRouteRaw = swapRouteFromChain;\n }\n if (cacheMode === \"tapcompare\" /* Tapcompare */ && swapRouteFromCache && swapRouteFromChain) {\n const quoteDiff = swapRouteFromChain.quote.subtract(swapRouteFromCache.quote);\n const quoteGasAdjustedDiff = swapRouteFromChain.quoteGasAdjusted.subtract(swapRouteFromCache.quoteGasAdjusted);\n const gasUsedDiff = swapRouteFromChain.estimatedGasUsed - swapRouteFromCache.estimatedGasUsed;\n if (!quoteDiff.equalTo(0)) {\n log.warn(\n {\n quoteFromChain: swapRouteFromChain.quote.toExact(),\n quoteFromCache: swapRouteFromCache.quote.toExact(),\n quoteDiff: quoteDiff.toExact(),\n quoteGasAdjustedFromChain: swapRouteFromChain.quoteGasAdjusted.toExact(),\n quoteGasAdjustedFromCache: swapRouteFromCache.quoteGasAdjusted.toExact(),\n quoteGasAdjustedDiff: quoteGasAdjustedDiff.toExact(),\n gasUsedFromChain: swapRouteFromChain.estimatedGasUsed.toString(),\n gasUsedFromCache: swapRouteFromCache.estimatedGasUsed.toString(),\n gasUsedDiff: gasUsedDiff.toString(),\n routesFromChain: swapRouteFromChain.routes.toString(),\n routesFromCache: swapRouteFromCache.routes.toString(),\n amount: amount.toExact(),\n originalAmount: cachedRoutes?.originalAmount,\n pair: this.tokenPairSymbolTradeTypeChainId(tokenIn, tokenOut, tradeType)\n },\n `Comparing quotes between Chain and Cache for ${this.tokenPairSymbolTradeTypeChainId(\n tokenIn,\n tokenOut,\n tradeType\n )}`\n );\n }\n }\n if (!swapRouteRaw) {\n return null;\n }\n const {\n quote,\n quoteGasAdjusted,\n estimatedGasUsed,\n routes: routeAmounts,\n estimatedGasUsedQuoteToken,\n estimatedGasUsedUSD\n } = swapRouteRaw;\n if (this.routeCachingProvider && cacheMode !== \"darkmode\" /* Darkmode */ && swapRouteFromChain) {\n const routesToCache = CachedRoutes.fromRoutesWithValidQuotes(\n swapRouteFromChain.routes,\n this.chainId,\n tokenIn,\n tokenOut,\n protocols.sort(),\n // sort it for consistency in the order of the protocols.\n await blockNumber,\n tradeType,\n amount.toExact()\n );\n if (routesToCache) {\n const tokenPairSymbolTradeTypeChainId = this.tokenPairSymbolTradeTypeChainId(tokenIn, tokenOut, tradeType);\n this.routeCachingProvider.setCachedRoute(routesToCache, amount).then((success) => {\n const status = success ? \"success\" : \"rejected\";\n metric.putMetric(\n `SetCachedRoute_${tokenPairSymbolTradeTypeChainId}_${status}`,\n 1,\n \"Count\" /* Count */\n );\n }).catch((reason) => {\n log.info(\n {\n reason,\n tokenPair: tokenPairSymbolTradeTypeChainId\n },\n `SetCachedRoute failure`\n );\n metric.putMetric(\n `SetCachedRoute_${tokenPairSymbolTradeTypeChainId}_failure`,\n 1,\n \"Count\" /* Count */\n );\n });\n }\n }\n metric.putMetric(\n `QuoteFoundForChain${this.chainId}`,\n 1,\n \"Count\" /* Count */\n );\n const trade = buildTrade(\n currencyIn,\n currencyOut,\n tradeType,\n routeAmounts\n );\n let methodParameters;\n if (swapConfig) {\n methodParameters = buildSwapMethodParameters(\n trade,\n swapConfig,\n this.chainId\n );\n }\n const swapRoute = {\n quote,\n quoteGasAdjusted,\n estimatedGasUsed,\n estimatedGasUsedQuoteToken,\n estimatedGasUsedUSD,\n gasPriceWei,\n route: routeAmounts,\n trade,\n methodParameters,\n blockNumber: BigInt(await blockNumber)\n };\n if (swapConfig && swapConfig.simulate && methodParameters && methodParameters.calldata) {\n if (!this.simulator) {\n throw new Error(\"Simulator not initialized!\");\n }\n log.info({ swapConfig, methodParameters }, \"Starting simulation\");\n const fromAddress = swapConfig.simulate.fromAddress;\n const beforeSimulate = Date.now();\n const swapRouteWithSimulation = await this.simulator.simulate(\n fromAddress,\n swapConfig,\n swapRoute,\n amount,\n // Quote will be in WETH even if quoteCurrency is ETH\n // So we init a new CurrencyAmount object here\n CurrencyAmount.fromRawAmount(quoteCurrency, quote.quotient.toString())\n );\n metric.putMetric(\n \"SimulateTransaction\",\n Date.now() - beforeSimulate,\n \"Milliseconds\" /* Milliseconds */\n );\n return swapRouteWithSimulation;\n }\n return swapRoute;\n }\n async getSwapRouteFromCache(cachedRoutes, blockNumber, amount, quoteToken, tradeType, routingConfig, mixedRouteGasModel, gasPriceWei) {\n log.info(\n {\n protocols: cachedRoutes.protocolsCovered,\n tradeType: cachedRoutes.tradeType,\n cachedBlockNumber: cachedRoutes.blockNumber,\n quoteBlockNumber: blockNumber\n },\n \"Routing across CachedRoute\"\n );\n const quotePromises = [];\n const v1Routes = cachedRoutes.routes.filter((route) => route.protocol === \"V1\" /* V1 */);\n const v2Routes = cachedRoutes.routes.filter((route) => route.protocol === \"V2\" /* V2 */);\n const mixedRoutes = cachedRoutes.routes.filter((route) => route.protocol === \"MIXED\" /* MIXED */);\n const percentsSet = new Set(cachedRoutes.routes.map((route) => route.percent));\n percentsSet.add(100);\n percentsSet.add(50);\n const percents = Array.from(percentsSet.values());\n const amounts = percents.map((percent) => amount.multiply(new Fraction(percent, 100)));\n if (v1Routes.length > 0) {\n quotePromises.push(\n // When we fetch the quotes in V1, we are not calling the `onChainProvider` like on mixedRoutes\n // Instead we are using the reserves in the Pool object, so we need to re-load the current reserves.\n this.v1Quoter.getRoutesThenQuotes(\n v1Routes[0].tokenIn,\n v1Routes[0].tokenOut,\n amounts,\n percents,\n quoteToken,\n tradeType,\n routingConfig,\n void 0,\n gasPriceWei\n )\n );\n }\n if (v2Routes.length > 0) {\n quotePromises.push(\n // When we fetch the quotes in V2, we are not calling the `onChainProvider` like on mixedRoutes\n // Instead we are using the reserves in the Pool object, so we need to re-load the current reserves.\n this.v2Quoter.getRoutesThenQuotes(\n v2Routes[0].tokenIn,\n v2Routes[0].tokenOut,\n amounts,\n percents,\n quoteToken,\n tradeType,\n routingConfig,\n void 0,\n gasPriceWei\n )\n );\n }\n if (mixedRoutes.length > 0) {\n const mixedRoutesFromCache = mixedRoutes.map((cachedRoute) => cachedRoute.route);\n quotePromises.push(\n this.mixedQuoter.getQuotes(\n mixedRoutesFromCache,\n amounts,\n percents,\n quoteToken,\n tradeType,\n routingConfig,\n void 0,\n mixedRouteGasModel\n )\n );\n }\n const getQuotesResults = await Promise.all(quotePromises);\n const allRoutesWithValidQuotes = _16.flatMap(getQuotesResults, (quoteResult) => quoteResult.routesWithValidQuotes);\n return getBestSwapRoute(\n amount,\n percents,\n allRoutesWithValidQuotes,\n tradeType,\n this.chainId,\n routingConfig\n );\n }\n async getSwapRouteFromChain(amount, tokenIn, tokenOut, protocols, quoteToken, tradeType, routingConfig, mixedRouteGasModel, gasPriceWei) {\n const [percents, amounts] = this.getAmountDistribution(\n amount,\n routingConfig\n );\n const noProtocolsSpecified = protocols.length === 0;\n const v1ProtocolSpecified = protocols.includes(\"V1\" /* V1 */);\n const v2ProtocolSpecified = protocols.includes(\"V2\" /* V2 */);\n const v1SupportedInChain = V1_SUPPORTED.includes(this.chainId);\n const v2SupportedInChain = V2_SUPPORTED.includes(this.chainId);\n const shouldQueryMixedProtocol = protocols.includes(\"MIXED\" /* MIXED */) || noProtocolsSpecified && v1SupportedInChain && v2SupportedInChain;\n const mixedProtocolAllowed = ([ChainId.PULSECHAIN].includes(this.chainId) || [ChainId.PULSECHAIN_TESTNET].includes(this.chainId)) && tradeType === TradeType.EXACT_INPUT;\n const quotePromises = [];\n if (v1SupportedInChain && (v1ProtocolSpecified || noProtocolsSpecified)) {\n log.info({ protocols, tradeType }, \"Routing across V1\");\n quotePromises.push(\n this.v1Quoter.getRoutesThenQuotes(\n tokenIn,\n tokenOut,\n amounts,\n percents,\n quoteToken,\n tradeType,\n routingConfig,\n void 0,\n gasPriceWei\n )\n );\n }\n if (v2SupportedInChain && (v2ProtocolSpecified || noProtocolsSpecified)) {\n log.info({ protocols, tradeType }, \"Routing across V2\");\n quotePromises.push(\n this.v2Quoter.getRoutesThenQuotes(\n tokenIn,\n tokenOut,\n amounts,\n percents,\n quoteToken,\n tradeType,\n routingConfig,\n void 0,\n gasPriceWei\n )\n );\n }\n if (shouldQueryMixedProtocol && mixedProtocolAllowed) {\n log.info({ protocols, tradeType }, \"Routing across MixedRoutes\");\n quotePromises.push(\n this.mixedQuoter.getRoutesThenQuotes(\n tokenIn,\n tokenOut,\n amounts,\n percents,\n quoteToken,\n tradeType,\n routingConfig,\n mixedRouteGasModel\n )\n );\n }\n const getQuotesResults = await Promise.all(quotePromises);\n const allRoutesWithValidQuotes = [];\n const allCandidatePools = [];\n getQuotesResults.forEach((getQuoteResult) => {\n allRoutesWithValidQuotes.push(...getQuoteResult.routesWithValidQuotes);\n if (getQuoteResult.candidatePools) {\n allCandidatePools.push(getQuoteResult.candidatePools);\n }\n });\n if (allRoutesWithValidQuotes.length === 0) {\n log.info({ allRoutesWithValidQuotes }, \"Received no valid quotes\");\n return null;\n }\n const bestSwapRoute = await getBestSwapRoute(\n amount,\n percents,\n allRoutesWithValidQuotes,\n tradeType,\n this.chainId,\n routingConfig\n );\n if (bestSwapRoute) {\n this.emitPoolSelectionMetrics(bestSwapRoute, allCandidatePools);\n }\n return bestSwapRoute;\n }\n tradeTypeStr(tradeType) {\n return tradeType === TradeType.EXACT_INPUT ? \"ExactIn\" : \"ExactOut\";\n }\n tokenPairSymbolTradeTypeChainId(tokenIn, tokenOut, tradeType) {\n return `${tokenIn.symbol}/${tokenOut.symbol}/${this.tradeTypeStr(tradeType)}/${this.chainId}`;\n }\n determineCurrencyInOutFromTradeType(tradeType, amount, quoteCurrency) {\n if (tradeType === TradeType.EXACT_INPUT) {\n return {\n currencyIn: amount.currency,\n currencyOut: quoteCurrency\n };\n } else {\n return {\n currencyIn: quoteCurrency,\n currencyOut: amount.currency\n };\n }\n }\n async getGasPriceWei() {\n const beforeGasTimestamp = Date.now();\n const { gasPriceWei } = await this.gasPriceProvider.getGasPrice();\n metric.putMetric(\n \"GasPriceLoad\",\n Date.now() - beforeGasTimestamp,\n \"Milliseconds\" /* Milliseconds */\n );\n return gasPriceWei;\n }\n async getGasModels(gasPriceWei, amountToken, quoteToken) {\n const beforeGasModel = Date.now();\n const mixedRouteGasModelPromise = this.mixedRouteGasModelFactory.buildGasModel({\n chainId: this.chainId,\n gasPriceWei,\n v1poolProvider: this.v1PoolProvider,\n amountToken,\n quoteToken,\n v2poolProvider: this.v2PoolProvider\n });\n const mixedRouteGasModel = await mixedRouteGasModelPromise;\n metric.putMetric(\n \"GasModelCreation\",\n Date.now() - beforeGasModel,\n \"Milliseconds\" /* Milliseconds */\n );\n return mixedRouteGasModel;\n }\n // Note multiplications here can result in a loss of precision in the amounts (e.g. taking 50% of 101)\n // This is reconcilled at the end of the algorithm by adding any lost precision to one of\n // the splits in the route.\n getAmountDistribution(amount, routingConfig) {\n const { distributionPercent } = routingConfig;\n const percents = [];\n const amounts = [];\n for (let i = 1; i <= 100 / distributionPercent; i++) {\n percents.push(i * distributionPercent);\n amounts.push(amount.multiply(new Fraction(i * distributionPercent, 100)));\n }\n return [percents, amounts];\n }\n async buildSwapAndAddMethodParameters(trade, swapAndAddOptions, swapAndAddParameters) {\n const {\n swapOptions: { recipient, slippageTolerance, deadline, inputTokenPermit },\n addLiquidityOptions: addLiquidityConfig\n } = swapAndAddOptions;\n const preLiquidityPosition = swapAndAddParameters.preLiquidityPosition;\n const finalBalanceTokenIn = swapAndAddParameters.initialBalanceTokenIn.subtract(trade.inputAmount);\n const finalBalanceTokenOut = swapAndAddParameters.initialBalanceTokenOut.add(trade.outputAmount);\n const approvalTypes = await this.swapRouterProvider.getApprovalType(\n finalBalanceTokenIn,\n finalBalanceTokenOut\n );\n const zeroForOne = finalBalanceTokenIn.currency.wrapped.sortsBefore(\n finalBalanceTokenOut.currency.wrapped\n );\n return {\n ...SwapRouter.swapAndAddCallParameters(\n trade,\n {\n recipient,\n slippageTolerance,\n deadlineOrPreviousBlockhash: deadline,\n inputTokenPermit\n },\n Position.fromAmounts({\n pool: preLiquidityPosition.pool,\n tickLower: preLiquidityPosition.tickLower,\n tickUpper: preLiquidityPosition.tickUpper,\n amount0: zeroForOne ? finalBalanceTokenIn.quotient.toString() : finalBalanceTokenOut.quotient.toString(),\n amount1: zeroForOne ? finalBalanceTokenOut.quotient.toString() : finalBalanceTokenIn.quotient.toString(),\n useFullPrecision: false\n }),\n addLiquidityConfig,\n approvalTypes.approvalTokenIn,\n approvalTypes.approvalTokenOut\n ),\n to: PULSEX_SWAP_ROUTER_ADDRESSES[this.chainId]\n };\n }\n emitPoolSelectionMetrics(swapRouteRaw, allPoolsBySelection) {\n const poolAddressesUsed = /* @__PURE__ */ new Set();\n const { routes: routeAmounts } = swapRouteRaw;\n _16(routeAmounts).flatMap((routeAmount) => {\n const { poolAddresses } = routeAmount;\n return poolAddresses;\n }).forEach((address) => {\n poolAddressesUsed.add(address.toLowerCase());\n });\n for (const poolsBySelection of allPoolsBySelection) {\n const { protocol } = poolsBySelection;\n _16.forIn(\n poolsBySelection.selections,\n (pools, topNSelection) => {\n const topNUsed = _16.findLastIndex(\n pools,\n (pool) => poolAddressesUsed.has(pool.id.toLowerCase())\n ) + 1;\n metric.putMetric(\n _16.capitalize(`${protocol}${topNSelection}`),\n topNUsed,\n \"Count\" /* Count */\n );\n }\n );\n }\n let hasV1Route = false;\n let hasV2Route = false;\n let hasMixedRoute = false;\n for (const routeAmount of routeAmounts) {\n if (routeAmount.protocol === \"V1\" /* V1 */) {\n hasV1Route = true;\n }\n if (routeAmount.protocol === \"V2\" /* V2 */) {\n hasV2Route = true;\n }\n if (routeAmount.protocol === \"MIXED\" /* MIXED */) {\n hasMixedRoute = true;\n }\n }\n if (hasMixedRoute && (hasV1Route || hasV2Route)) {\n if (hasV1Route && hasV2Route) {\n metric.putMetric(\n `MixedAndV3AndV2SplitRoute`,\n 1,\n \"Count\" /* Count */\n );\n metric.putMetric(\n `MixedAndV3AndV2SplitRouteForChain${this.chainId}`,\n 1,\n \"Count\" /* Count */\n );\n } else if (hasV1Route) {\n metric.putMetric(`MixedAndV1SplitRoute`, 1, \"Count\" /* Count */);\n metric.putMetric(\n `MixedAndV1SplitRouteForChain${this.chainId}`,\n 1,\n \"Count\" /* Count */\n );\n } else if (hasV2Route) {\n metric.putMetric(`MixedAndV2SplitRoute`, 1, \"Count\" /* Count */);\n metric.putMetric(\n `MixedAndV2SplitRouteForChain${this.chainId}`,\n 1,\n \"Count\" /* Count */\n );\n }\n } else if (hasV1Route && hasV2Route) {\n metric.putMetric(`V1AndV2SplitRoute`, 1, \"Count\" /* Count */);\n metric.putMetric(\n `V1AndV2SplitRouteForChain${this.chainId}`,\n 1,\n \"Count\" /* Count */\n );\n } else if (hasMixedRoute) {\n if (routeAmounts.length > 1) {\n metric.putMetric(`MixedSplitRoute`, 1, \"Count\" /* Count */);\n metric.putMetric(\n `MixedSplitRouteForChain${this.chainId}`,\n 1,\n \"Count\" /* Count */\n );\n } else {\n metric.putMetric(`MixedRoute`, 1, \"Count\" /* Count */);\n metric.putMetric(\n `MixedRouteForChain${this.chainId}`,\n 1,\n \"Count\" /* Count */\n );\n }\n } else if (hasV1Route) {\n if (routeAmounts.length > 1) {\n metric.putMetric(`V1SplitRoute`, 1, \"Count\" /* Count */);\n metric.putMetric(\n `V1SplitRouteForChain${this.chainId}`,\n 1,\n \"Count\" /* Count */\n );\n } else {\n metric.putMetric(`V1Route`, 1, \"Count\" /* Count */);\n metric.putMetric(\n `V1RouteForChain${this.chainId}`,\n 1,\n \"Count\" /* Count */\n );\n }\n } else if (hasV2Route) {\n if (routeAmounts.length > 1) {\n metric.putMetric(`V2SplitRoute`, 1, \"Count\" /* Count */);\n metric.putMetric(\n `V2SplitRouteForChain${this.chainId}`,\n 1,\n \"Count\" /* Count */\n );\n } else {\n metric.putMetric(`V2Route`, 1, \"Count\" /* Count */);\n metric.putMetric(\n `V2RouteForChain${this.chainId}`,\n 1,\n \"Count\" /* Count */\n );\n }\n }\n }\n calculateOptimalRatio(position, sqrtRatioX96, zeroForOne) {\n const upperSqrtRatioX96 = TickMath.getSqrtRatioAtTick(position.tickUpper);\n const lowerSqrtRatioX96 = TickMath.getSqrtRatioAtTick(position.tickLower);\n if (sqrtRatioX96 > upperSqrtRatioX96 || sqrtRatioX96 < lowerSqrtRatioX96) {\n return new Fraction(0, 1);\n }\n const precision = BigInt(\"1\" + \"0\".repeat(18));\n let optimalRatio = new Fraction(\n SqrtPriceMath.getAmount0Delta(\n sqrtRatioX96,\n upperSqrtRatioX96,\n precision,\n true\n ),\n SqrtPriceMath.getAmount1Delta(\n sqrtRatioX96,\n lowerSqrtRatioX96,\n precision,\n true\n )\n );\n if (!zeroForOne)\n optimalRatio = optimalRatio.invert();\n return optimalRatio;\n }\n async userHasSufficientBalance(fromAddress, tradeType, amount, quote) {\n try {\n const neededBalance = tradeType === TradeType.EXACT_INPUT ? amount : quote;\n let balance;\n if (neededBalance.currency.isNative) {\n balance = await this.provider.getBalance({ address: fromAddress });\n } else {\n const tokenContract = getContract({\n address: neededBalance.currency.address,\n abi: erc20Abi,\n publicClient: this.provider\n });\n balance = await tokenContract.read.balanceOf([fromAddress]);\n }\n return balance >= neededBalance.quotient;\n } catch (e) {\n log.error(e, \"Error while checking user balance\");\n return false;\n }\n }\n absoluteValue(fraction) {\n const numeratorAbs = fraction.numerator < 0n ? -fraction.numerator : fraction.numerator;\n const denominatorAbs = fraction.denominator < 0n ? -fraction.denominator : fraction.denominator;\n return new Fraction(numeratorAbs, denominatorAbs);\n }\n getBlockNumberPromise() {\n return retry7(\n async (_b, attempt) => {\n if (attempt > 1) {\n log.info(`Get block number attempt ${attempt}`);\n }\n return this.provider.getBlockNumber();\n },\n {\n retries: 2,\n minTimeout: 100,\n maxTimeout: 1e3\n }\n );\n }\n};\nvar SimulationStatus = /* @__PURE__ */ ((SimulationStatus2) => {\n SimulationStatus2[SimulationStatus2[\"NotSupported\"] = 0] = \"NotSupported\";\n SimulationStatus2[SimulationStatus2[\"Failed\"] = 1] = \"Failed\";\n SimulationStatus2[SimulationStatus2[\"Succeeded\"] = 2] = \"Succeeded\";\n SimulationStatus2[SimulationStatus2[\"InsufficientBalance\"] = 3] = \"InsufficientBalance\";\n SimulationStatus2[SimulationStatus2[\"NotApproved\"] = 4] = \"NotApproved\";\n return SimulationStatus2;\n})(SimulationStatus || {});\nvar Simulator2 = class {\n /**\n * Returns a new SwapRoute with simulated gas estimates\n * @returns SwapRoute\n */\n constructor(provider, chainId) {\n this.chainId = chainId;\n this.provider = provider;\n }\n async simulate(fromAddress, swapOptions, swapRoute, amount, quote, providerConfig) {\n if (await this.userHasSufficientBalance(\n fromAddress,\n swapRoute.trade.tradeType,\n amount,\n quote\n )) {\n log.info(\n \"User has sufficient balance to simulate. Simulating transaction.\"\n );\n try {\n return this.simulateTransaction(\n fromAddress,\n swapOptions,\n swapRoute,\n providerConfig\n );\n } catch (e) {\n log.error({ e }, \"Error simulating transaction\");\n return {\n ...swapRoute,\n simulationStatus: 1 /* Failed */\n };\n }\n } else {\n log.error(\"User does not have sufficient balance to simulate.\");\n return {\n ...swapRoute,\n simulationStatus: 3 /* InsufficientBalance */\n };\n }\n }\n async userHasSufficientBalance(fromAddress, tradeType, amount, quote) {\n try {\n const neededBalance = tradeType == TradeType.EXACT_INPUT ? amount : quote;\n let balance;\n if (neededBalance.currency.isNative) {\n balance = await this.provider.getBalance({ address: fromAddress });\n } else {\n const tokenContract = getContract({\n address: neededBalance.currency.address,\n abi: erc20Abi,\n publicClient: this.provider\n });\n balance = await tokenContract.read.balanceOf([fromAddress]);\n }\n const hasBalance = balance >= neededBalance.quotient;\n log.info(\n {\n fromAddress,\n balance: balance.toString(),\n neededBalance: neededBalance.quotient.toString(),\n neededAddress: neededBalance.wrapped.currency.address,\n hasBalance\n },\n \"Result of balance check for simulation\"\n );\n return hasBalance;\n } catch (e) {\n log.error(e, \"Error while checking user balance\");\n return false;\n }\n }\n async checkTokenApproved(fromAddress, inputAmount, swapOptions, provider) {\n const tokenContract = getContract({\n address: inputAmount.currency.wrapped.address,\n abi: erc20Abi,\n publicClient: provider\n });\n if (swapOptions.type == 0 /* UNIVERSAL_ROUTER */) ; else if (swapOptions.type == 1 /* SWAP_ROUTER_02 */) {\n if (swapOptions.inputTokenPermit) {\n log.info(\n {\n inputAmount: inputAmount.quotient.toString()\n },\n \"Simulating on SwapRouter02 info - Permit was provided for simulation. Not checking allowances.\"\n );\n return true;\n }\n const allowance = await tokenContract.read.allowance([\n fromAddress,\n PULSEX_SWAP_ROUTER_ADDRESSES[this.chainId]\n ]);\n const hasAllowance = allowance >= inputAmount.quotient;\n log.info(\n {\n hasAllowance,\n allowance: allowance.toString(),\n inputAmount: inputAmount.quotient.toString()\n },\n `Simulating on SwapRouter02 - Has allowance: ${hasAllowance}`\n );\n return hasAllowance;\n }\n throw new Error(`Unsupported swap type ${swapOptions}`);\n }\n};\n\n// src/providers/eth-estimate-gas-provider.ts\nvar EthEstimateGasSimulator = class extends Simulator2 {\n constructor(chainId, provider, v1PoolProvider, v2PoolProvider) {\n super(provider, chainId);\n this.v1PoolProvider = v1PoolProvider;\n this.v2PoolProvider = v2PoolProvider;\n }\n async ethEstimateGas(fromAddress, swapOptions, route) {\n const currencyIn = route.trade.inputAmount.currency;\n let estimatedGasUsed;\n if (swapOptions.type == 0 /* UNIVERSAL_ROUTER */) {\n log.info(\n { methodParameters: route.methodParameters },\n \"Simulating using eth_estimateGas on Universal Router\"\n );\n try {\n estimatedGasUsed = await this.provider.estimateGas({\n data: route.methodParameters.calldata,\n to: route.methodParameters.to,\n account: fromAddress,\n value: BigInt(\n currencyIn.isNative ? route.methodParameters.value : \"0\"\n )\n });\n } catch (e) {\n log.error({ e }, \"Error estimating gas\");\n return {\n ...route,\n simulationStatus: 1 /* Failed */\n };\n }\n } else if (swapOptions.type == 1 /* SWAP_ROUTER_02 */) {\n log.info(\n { methodParameters: route.methodParameters },\n \"Simulating using eth_estimateGas on SwapRouter02\"\n );\n try {\n estimatedGasUsed = await this.provider.estimateGas({\n data: route.methodParameters.calldata,\n to: route.methodParameters.to,\n account: fromAddress,\n value: BigInt(\n currencyIn.isNative ? route.methodParameters.value : \"0\"\n )\n });\n } catch (e) {\n log.error({ e }, \"Error estimating gas\");\n return {\n ...route,\n simulationStatus: 1 /* Failed */\n };\n }\n } else {\n throw new Error(`Unsupported swap type ${swapOptions}`);\n }\n estimatedGasUsed = this.inflateGasLimit(estimatedGasUsed);\n const {\n estimatedGasUsedUSD,\n estimatedGasUsedQuoteToken,\n quoteGasAdjusted\n } = await calculateGasUsed(\n route.quote.currency.chainId,\n route,\n estimatedGasUsed,\n this.v1PoolProvider,\n this.v2PoolProvider\n );\n return {\n ...initSwapRouteFromExisting(\n route,\n this.v1PoolProvider,\n this.v2PoolProvider,\n quoteGasAdjusted,\n estimatedGasUsed,\n estimatedGasUsedQuoteToken,\n estimatedGasUsedUSD\n ),\n simulationStatus: 2 /* Succeeded */\n };\n }\n inflateGasLimit(gasLimit) {\n return gasLimit + gasLimit / BigInt(5);\n }\n async simulateTransaction(fromAddress, swapOptions, swapRoute, _providerConfig) {\n const inputAmount = swapRoute.trade.inputAmount;\n if (inputAmount.currency.isNative || await this.checkTokenApproved(\n fromAddress,\n inputAmount,\n swapOptions,\n this.provider\n )) {\n return await this.ethEstimateGas(\n fromAddress,\n swapOptions,\n swapRoute\n );\n } else {\n log.info(\"Token not approved, skipping simulation\");\n return {\n ...swapRoute,\n simulationStatus: 4 /* NotApproved */\n };\n }\n }\n};\nvar ETHGasStationInfoProvider2 = class extends IGasPriceProvider {\n constructor(url) {\n super();\n this.url = url;\n }\n async getGasPrice() {\n log.info(`About to get gas prices from gas station ${this.url}`);\n const response = await retry7(\n async () => {\n return axios3.get(this.url);\n },\n { retries: 1 }\n );\n const { data: gasPriceResponse, status } = response;\n if (status != 200) {\n log.error({ response }, `Unabled to get gas price from ${this.url}.`);\n throw new Error(`Unable to get gas price from ${this.url}`);\n }\n log.info(\n { gasPriceResponse },\n 'Gas price response from API. About to parse \"fast\" to big number'\n );\n const gasPriceWei = BigInt(gasPriceResponse.fast) / BigInt(10) * BigInt(10) ** BigInt(9);\n log.info(\n `Gas price in wei: ${gasPriceWei} as of block ${gasPriceResponse.blockNum}`\n );\n return { gasPriceWei };\n }\n};\n\n// src/providers/legacy-gas-price-provider.ts\nvar LegacyGasPriceProvider = class extends IGasPriceProvider {\n constructor(provider) {\n super();\n this.provider = provider;\n }\n async getGasPrice() {\n const gasPriceWei = await this.provider.getGasPrice();\n log.info(\n { gasPriceWei },\n `Got gas price ${gasPriceWei} using eth_gasPrice RPC`\n );\n return {\n gasPriceWei\n };\n }\n};\n\n// src/providers/multicall-provider.ts\nvar IMulticallProvider = class {\n};\n\n// src/abis/UniswapInterfaceMulticall.ts\nvar uniswapInterfaceMulticallAbi = [\n {\n \"inputs\": [],\n \"name\": \"getCurrentBlockTimestamp\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"timestamp\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"addr\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"getEthBalance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"balance\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"target\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"gasLimit\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"callData\",\n \"type\": \"bytes\"\n }\n ],\n \"internalType\": \"struct UniswapInterfaceMulticall.Call[]\",\n \"name\": \"calls\",\n \"type\": \"tuple[]\"\n }\n ],\n \"name\": \"multicall\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"blockNumber\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"success\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"gasUsed\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"returnData\",\n \"type\": \"bytes\"\n }\n ],\n \"internalType\": \"struct UniswapInterfaceMulticall.Result[]\",\n \"name\": \"returnData\",\n \"type\": \"tuple[]\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n];\n\n// src/providers/multicall-uniswap-provider.ts\nvar UniswapMulticallProvider = class extends IMulticallProvider {\n constructor(chainId, provider, gasLimitPerCall = 1e6) {\n super();\n this.chainId = chainId;\n this.provider = provider;\n this.gasLimitPerCall = gasLimitPerCall;\n this.provider = provider;\n }\n async callSameFunctionOnMultipleContracts(params) {\n const {\n abi,\n addresses,\n functionName,\n functionParams,\n bytes32SymbolCall,\n additionalConfig\n } = params;\n const callData = encodeFunctionData({\n abi,\n functionName,\n args: functionParams\n });\n const calls = _16.map(addresses, (address) => {\n return {\n target: address,\n callData,\n gasLimit: BigInt(this.gasLimitPerCall)\n };\n });\n const { results: result, blockNumber } = await multicallByGasLimit(calls, {\n gasLimit: additionalConfig?.gasLimit,\n gasBuffer: additionalConfig?.gasBuffer,\n dropUnexecutedCalls: additionalConfig?.dropUnexecutedCalls,\n chainId: this.chainId,\n client: this.provider\n });\n if (bytes32SymbolCall) {\n const erc20Abi2 = [\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\"\n }\n ],\n stateMutability: \"view\",\n type: \"function\"\n }\n ];\n const results2 = [];\n for (const { result: callResult, success } of result) {\n if (!success || callResult.length <= 2) {\n results2.push({\n success: false,\n returnData: callResult\n });\n continue;\n }\n const result2 = decodeFunctionResult({\n abi,\n functionName,\n data: callResult\n });\n const data = toBytes(result2[0]);\n if (data[31] !== 0) {\n results2.push({\n success: true,\n result: decodeFunctionResult({\n abi: erc20Abi2,\n functionName: \"symbol\",\n data: callResult\n })\n });\n } else {\n results2.push({\n success: true,\n result: [hexToString(result2[0], { size: 32 })]\n });\n }\n }\n return { blockNumber, results: results2 };\n }\n const results = [];\n for (const { result: callResult, success } of result) {\n if (!success || callResult.length <= 2) {\n results.push({\n success: false,\n returnData: callResult\n });\n continue;\n }\n results.push({\n success: true,\n result: decodeFunctionResult({\n abi,\n functionName,\n data: callResult\n })\n });\n }\n return { blockNumber, results };\n }\n async callSameFunctionOnContractWithMultipleParams(params) {\n const {\n address,\n abi,\n functionName,\n functionParams,\n additionalConfig,\n providerConfig\n } = params;\n const gasLimitPerCall = additionalConfig?.gasLimitPerCallOverride ?? this.gasLimitPerCall;\n providerConfig?.blockNumber ?? void 0;\n const calls = functionParams.map((functionParam) => {\n const callData = encodeFunctionData({\n abi,\n functionName,\n args: functionParam\n });\n return {\n target: address,\n callData,\n gasLimit: BigInt(gasLimitPerCall)\n };\n });\n const { results: result, blockNumber } = await multicallByGasLimit(calls, {\n gasLimit: additionalConfig?.gasLimit,\n gasBuffer: additionalConfig?.gasBuffer,\n dropUnexecutedCalls: additionalConfig?.dropUnexecutedCalls,\n chainId: this.chainId,\n client: this.provider\n });\n const results = [];\n const gasUsedForSuccess = [];\n for (const { result: callResult, success, gasUsed } of result) {\n if (!success || callResult.length <= 2) {\n results.push({\n success: false,\n returnData: callResult\n });\n continue;\n }\n gasUsedForSuccess.push(Number(gasUsed));\n results.push({\n success: true,\n result: decodeFunctionResult({\n abi,\n functionName,\n data: callResult\n })\n });\n }\n return {\n blockNumber,\n results,\n approxGasUsedPerSuccessCall: stats.percentile(gasUsedForSuccess, 99)\n };\n }\n async callMultipleFunctionsOnSameContract(params) {\n const {\n address,\n abi,\n functionNames,\n functionParams,\n additionalConfig,\n providerConfig\n } = params;\n const gasLimitPerCall = additionalConfig?.gasLimitPerCallOverride ?? this.gasLimitPerCall;\n providerConfig?.blockNumber ?? void 0;\n const calls = functionNames.map((functionName, i) => {\n const callData = encodeFunctionData({\n abi,\n functionName,\n args: functionParams ? functionParams[i] : []\n });\n return {\n target: address,\n callData,\n gasLimit: BigInt(gasLimitPerCall)\n };\n });\n const { results: result, blockNumber } = await multicallByGasLimit(calls, {\n gasLimit: additionalConfig?.gasLimit,\n gasBuffer: additionalConfig?.gasBuffer,\n dropUnexecutedCalls: additionalConfig?.dropUnexecutedCalls,\n chainId: this.chainId,\n client: this.provider\n });\n const results = [];\n const gasUsedForSuccess = [];\n for (const [i, { result: callResult, success, gasUsed }] of result.entries()) {\n if (!success || callResult.length <= 2) {\n results.push({\n success: false,\n returnData: callResult\n });\n continue;\n }\n gasUsedForSuccess.push(Number(gasUsed));\n results.push({\n success: true,\n result: decodeFunctionResult({\n abi,\n functionName: functionNames[i],\n data: callResult\n })\n });\n }\n return {\n blockNumber,\n results,\n approxGasUsedPerSuccessCall: stats.percentile(gasUsedForSuccess, 99)\n };\n }\n};\nUniswapMulticallProvider.abi = uniswapInterfaceMulticallAbi;\nvar DEFAULT_EIP_1559_SUPPORTED_CHAINS = [\n ChainId.PULSECHAIN,\n ChainId.PULSECHAIN_TESTNET\n];\nvar OnChainGasPriceProvider = class extends IGasPriceProvider {\n constructor(chainId, eip1559GasPriceProvider, legacyGasPriceProvider, eipChains = DEFAULT_EIP_1559_SUPPORTED_CHAINS) {\n super();\n this.chainId = chainId;\n this.eip1559GasPriceProvider = eip1559GasPriceProvider;\n this.legacyGasPriceProvider = legacyGasPriceProvider;\n this.eipChains = eipChains;\n }\n async getGasPrice() {\n if (this.eipChains.includes(this.chainId)) {\n return this.eip1559GasPriceProvider.getGasPrice();\n }\n return this.legacyGasPriceProvider.getGasPrice();\n }\n};\n\n// src/abis/PulseXQuoter.ts\nvar pulsexQuoterAbi = [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_factoryV1\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_factoryV2\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_WETH9\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"WETH9\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"factoryV1\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"factoryV2\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"quoteExactInput\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenIn\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenOut\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct IPulseXQuoter.QuoteExactInputSingleParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"quoteExactInputSingleV1\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenIn\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenOut\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct IPulseXQuoter.QuoteExactInputSingleParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"quoteExactInputSingleV2\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n];\n\n// src/abis/IQuoterV2.ts\nvar quoterV2Abi = [\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"quoteExactInput\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint160[]\",\n \"name\": \"sqrtPriceX96AfterList\",\n \"type\": \"uint160[]\"\n },\n {\n \"internalType\": \"uint32[]\",\n \"name\": \"initializedTicksCrossedList\",\n \"type\": \"uint32[]\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenIn\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenOut\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"fee\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceLimitX96\",\n \"type\": \"uint160\"\n }\n ],\n \"internalType\": \"struct IQuoterV2.QuoteExactInputSingleParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"quoteExactInputSingle\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceX96After\",\n \"type\": \"uint160\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"initializedTicksCrossed\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"path\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"quoteExactOutput\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint160[]\",\n \"name\": \"sqrtPriceX96AfterList\",\n \"type\": \"uint160[]\"\n },\n {\n \"internalType\": \"uint32[]\",\n \"name\": \"initializedTicksCrossedList\",\n \"type\": \"uint32[]\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenIn\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenOut\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"fee\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceLimitX96\",\n \"type\": \"uint160\"\n }\n ],\n \"internalType\": \"struct IQuoterV2.QuoteExactOutputSingleParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"quoteExactOutputSingle\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPriceX96After\",\n \"type\": \"uint160\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"initializedTicksCrossed\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n];\n\n// src/providers/on-chain-quote-provider.ts\nvar BlockConflictError = class extends Error {\n constructor() {\n super(...arguments);\n this.name = \"BlockConflictError\";\n }\n};\nvar SuccessRateError = class extends Error {\n constructor() {\n super(...arguments);\n this.name = \"SuccessRateError\";\n }\n};\nvar ProviderBlockHeaderError = class extends Error {\n constructor() {\n super(...arguments);\n this.name = \"ProviderBlockHeaderError\";\n }\n};\nvar ProviderTimeoutError = class extends Error {\n constructor() {\n super(...arguments);\n this.name = \"ProviderTimeoutError\";\n }\n};\nvar ProviderGasError = class extends Error {\n constructor() {\n super(...arguments);\n this.name = \"ProviderGasError\";\n }\n};\nvar DEFAULT_BATCH_RETRIES = 2;\nvar OnChainQuoteProvider = class {\n /**\n * Creates an instance of OnChainQuoteProvider.\n *\n * @param chainId The chain to get quotes for.\n * @param provider The web 3 provider.\n * @param multicall2Provider The multicall provider to use to get the quotes on-chain.\n * Only supports the Uniswap Multicall contract as it needs the gas limitting functionality.\n * @param retryOptions The retry options for each call to the multicall.\n * @param batchParams The parameters for each batched call to the multicall.\n * @param gasErrorFailureOverride The gas and chunk parameters to use when retrying a batch that failed due to out of gas.\n * @param successRateFailureOverrides The parameters for retries when we fail to get quotes.\n * @param blockNumberConfig Parameters for adjusting which block we get quotes from, and how to handle block header not found errors.\n * @param [quoterAddressOverride] Overrides the address of the quoter contract to use.\n */\n constructor(chainId, provider, multicall2Provider, retryOptions = {\n retries: DEFAULT_BATCH_RETRIES,\n minTimeout: 25,\n maxTimeout: 250\n }, batchParams = {\n multicallChunk: 150,\n gasLimitPerCall: 1e6,\n quoteMinSuccessRate: 0.2\n }, gasErrorFailureOverride = {\n gasLimitOverride: 15e5,\n multicallChunk: 100\n }, successRateFailureOverrides = {\n gasLimitOverride: 13e5,\n multicallChunk: 110\n }, blockNumberConfig = {\n baseBlockOffset: 0,\n rollback: { enabled: false }\n }, quoterAddressOverride) {\n this.chainId = chainId;\n this.provider = provider;\n this.multicall2Provider = multicall2Provider;\n this.retryOptions = retryOptions;\n this.batchParams = batchParams;\n this.gasErrorFailureOverride = gasErrorFailureOverride;\n this.successRateFailureOverrides = successRateFailureOverrides;\n this.blockNumberConfig = blockNumberConfig;\n this.quoterAddressOverride = quoterAddressOverride;\n }\n getQuoterAddress(useMixedRouteQuoter) {\n if (this.quoterAddressOverride) {\n return this.quoterAddressOverride;\n }\n const quoterAddress = useMixedRouteQuoter ? PULSEX_QUOTER_ADDRESSES[this.chainId] : QUOTER_V2_ADDRESSES[this.chainId];\n if (!quoterAddress) {\n throw new Error(\n `No address for the quoter contract on chain id: ${this.chainId}`\n );\n }\n return quoterAddress;\n }\n async getQuotesManyExactIn(amountIns, routes, providerConfig) {\n return this.getQuotesManyData(\n amountIns,\n routes,\n \"quoteExactInput\",\n providerConfig\n );\n }\n async getQuotesManyData(amounts, routes, functionName, _providerConfig) {\n const useMixedRouteQuoter = routes.some((route) => route.protocol === \"V1\" /* V1 */) || routes.some((route) => route.protocol === \"V2\" /* V2 */) || routes.some((route) => route.protocol === \"MIXED\" /* MIXED */);\n this.validateRoutes(routes, functionName, useMixedRouteQuoter);\n let multicallChunk = this.batchParams.multicallChunk;\n let gasLimitOverride = this.batchParams.gasLimitPerCall;\n const { baseBlockOffset, rollback } = this.blockNumberConfig;\n const originalBlockNumber = await this.provider.getBlockNumber();\n const providerConfig = {\n ..._providerConfig,\n blockNumber: _providerConfig?.blockNumber ?? originalBlockNumber + BigInt(baseBlockOffset)\n };\n const inputs = _16(routes).flatMap((route) => {\n const encodedRoute = encodeMixedRouteToPath(\n route instanceof V1Route || route instanceof V2Route ? new MixedRouteSDK(route.pairs, route.input, route.output) : route\n );\n const routeInputs = amounts.map((amount) => [\n encodedRoute,\n `0x${amount.quotient.toString(16)}`\n ]);\n return routeInputs;\n }).value();\n const normalizedChunk = Math.ceil(\n inputs.length / Math.ceil(inputs.length / multicallChunk)\n );\n const inputsChunked = _16.chunk(inputs, normalizedChunk);\n let quoteStates = _16.map(inputsChunked, (inputChunk) => {\n return {\n status: \"pending\",\n inputs: inputChunk\n };\n });\n log.info(\n `About to get ${inputs.length} quotes in chunks of ${normalizedChunk} [${_16.map(\n inputsChunked,\n (i) => i.length\n ).join(\",\")}] ${gasLimitOverride ? `with a gas limit override of ${gasLimitOverride}` : \"\"} and block number: ${await providerConfig.blockNumber} [Original before offset: ${originalBlockNumber}].`\n );\n let haveRetriedForSuccessRate = false;\n let haveRetriedForBlockHeader = false;\n let blockHeaderRetryAttemptNumber = 0;\n let haveIncrementedBlockHeaderFailureCounter = false;\n let blockHeaderRolledBack = false;\n let haveRetriedForBlockConflictError = false;\n let haveRetriedForOutOfGas = false;\n let haveRetriedForTimeout = false;\n let haveRetriedForUnknownReason = false;\n let finalAttemptNumber = 1;\n const expectedCallsMade = quoteStates.length;\n let totalCallsMade = 0;\n const {\n results: quoteResults,\n blockNumber,\n approxGasUsedPerSuccessCall\n } = await retry7(\n async (_bail, attemptNumber) => {\n haveIncrementedBlockHeaderFailureCounter = false;\n finalAttemptNumber = attemptNumber;\n const [success, failed, pending] = this.partitionQuotes(quoteStates);\n log.info(\n `Starting attempt: ${attemptNumber}.\n Currently ${success.length} success, ${failed.length} failed, ${pending.length} pending.\n Gas limit override: ${gasLimitOverride} Block number override: ${providerConfig.blockNumber}.`\n );\n quoteStates = await Promise.all(\n _16.map(\n quoteStates,\n async (quoteState, idx) => {\n if (quoteState.status == \"success\") {\n return quoteState;\n }\n const { inputs: inputs2 } = quoteState;\n try {\n totalCallsMade = totalCallsMade + 1;\n const results = await this.multicall2Provider.callSameFunctionOnContractWithMultipleParams({\n address: this.getQuoterAddress(useMixedRouteQuoter),\n abi: useMixedRouteQuoter ? pulsexQuoterAbi : quoterV2Abi,\n functionName,\n functionParams: inputs2,\n providerConfig,\n additionalConfig: {\n gasLimitPerCallOverride: gasLimitOverride\n }\n });\n const successRateError = this.validateSuccessRate(\n results.results,\n haveRetriedForSuccessRate\n );\n if (successRateError) {\n return {\n status: \"failed\",\n inputs: inputs2,\n reason: successRateError,\n results\n };\n }\n return {\n status: \"success\",\n inputs: inputs2,\n results\n };\n } catch (err) {\n console.log(`Error ${err}`);\n if (err.message.includes(\"header not found\")) {\n return {\n status: \"failed\",\n inputs: inputs2,\n reason: new ProviderBlockHeaderError(\n err.message.slice(0, 500)\n )\n };\n }\n if (err.message.includes(\"timeout\")) {\n return {\n status: \"failed\",\n inputs: inputs2,\n reason: new ProviderTimeoutError(\n `Req ${idx}/${quoteStates.length}. Request had ${inputs2.length} inputs. ${err.message.slice(0, 500)}`\n )\n };\n }\n if (err.message.includes(\"out of gas\")) {\n return {\n status: \"failed\",\n inputs: inputs2,\n reason: new ProviderGasError(err.message.slice(0, 500))\n };\n }\n return {\n status: \"failed\",\n inputs: inputs2,\n reason: new Error(\n `Unknown error from provider: ${err.message.slice(0, 500)}`\n )\n };\n }\n }\n )\n );\n const [successfulQuoteStates, failedQuoteStates, pendingQuoteStates] = this.partitionQuotes(quoteStates);\n if (pendingQuoteStates.length > 0) {\n throw new Error(\"Pending quote after waiting for all promises.\");\n }\n let retryAll = false;\n const blockNumberError = this.validateBlockNumbers(\n successfulQuoteStates,\n inputsChunked.length,\n gasLimitOverride\n );\n if (blockNumberError) {\n retryAll = true;\n }\n const reasonForFailureStr = _16.map(\n failedQuoteStates,\n (failedQuoteState) => failedQuoteState.reason.name\n ).join(\", \");\n if (failedQuoteStates.length > 0) {\n log.info(\n `On attempt ${attemptNumber}: ${failedQuoteStates.length}/${quoteStates.length} quotes failed. Reasons: ${reasonForFailureStr}`\n );\n for (const failedQuoteState of failedQuoteStates) {\n const { reason: error } = failedQuoteState;\n log.info(\n { error },\n `[QuoteFetchError] Attempt ${attemptNumber}. ${error.message}`\n );\n if (error instanceof BlockConflictError) {\n if (!haveRetriedForBlockConflictError) {\n metric.putMetric(\n \"QuoteBlockConflictErrorRetry\",\n 1,\n \"Count\" /* Count */\n );\n haveRetriedForBlockConflictError = true;\n }\n retryAll = true;\n } else if (error instanceof ProviderBlockHeaderError) {\n if (!haveRetriedForBlockHeader) {\n metric.putMetric(\n \"QuoteBlockHeaderNotFoundRetry\",\n 1,\n \"Count\" /* Count */\n );\n haveRetriedForBlockHeader = true;\n }\n if (!haveIncrementedBlockHeaderFailureCounter) {\n blockHeaderRetryAttemptNumber = blockHeaderRetryAttemptNumber + 1;\n haveIncrementedBlockHeaderFailureCounter = true;\n }\n if (rollback.enabled) {\n const { rollbackBlockOffset, attemptsBeforeRollback } = rollback;\n if (blockHeaderRetryAttemptNumber >= attemptsBeforeRollback && !blockHeaderRolledBack) {\n log.info(\n `Attempt ${attemptNumber}. Have failed due to block header ${blockHeaderRetryAttemptNumber - 1} times. Rolling back block number by ${rollbackBlockOffset} for next retry`\n );\n providerConfig.blockNumber = providerConfig.blockNumber ? BigInt(await providerConfig.blockNumber) + BigInt(rollbackBlockOffset) : await this.provider.getBlockNumber() + BigInt(rollbackBlockOffset);\n retryAll = true;\n blockHeaderRolledBack = true;\n }\n }\n } else if (error instanceof ProviderTimeoutError) {\n if (!haveRetriedForTimeout) {\n metric.putMetric(\n \"QuoteTimeoutRetry\",\n 1,\n \"Count\" /* Count */\n );\n haveRetriedForTimeout = true;\n }\n } else if (error instanceof ProviderGasError) {\n if (!haveRetriedForOutOfGas) {\n metric.putMetric(\n \"QuoteOutOfGasExceptionRetry\",\n 1,\n \"Count\" /* Count */\n );\n haveRetriedForOutOfGas = true;\n }\n gasLimitOverride = this.gasErrorFailureOverride.gasLimitOverride;\n multicallChunk = this.gasErrorFailureOverride.multicallChunk;\n retryAll = true;\n } else if (error instanceof SuccessRateError) {\n if (!haveRetriedForSuccessRate) {\n metric.putMetric(\n \"QuoteSuccessRateRetry\",\n 1,\n \"Count\" /* Count */\n );\n haveRetriedForSuccessRate = true;\n gasLimitOverride = this.successRateFailureOverrides.gasLimitOverride;\n multicallChunk = this.successRateFailureOverrides.multicallChunk;\n retryAll = true;\n }\n } else {\n if (!haveRetriedForUnknownReason) {\n metric.putMetric(\n \"QuoteUnknownReasonRetry\",\n 1,\n \"Count\" /* Count */\n );\n haveRetriedForUnknownReason = true;\n }\n }\n }\n }\n if (retryAll) {\n log.info(\n `Attempt ${attemptNumber}. Resetting all requests to pending for next attempt.`\n );\n const normalizedChunk2 = Math.ceil(\n inputs.length / Math.ceil(inputs.length / multicallChunk)\n );\n const inputsChunked2 = _16.chunk(inputs, normalizedChunk2);\n quoteStates = _16.map(inputsChunked2, (inputChunk) => {\n return {\n status: \"pending\",\n inputs: inputChunk\n };\n });\n }\n const callResults = _16.map(\n successfulQuoteStates,\n (quoteState) => quoteState.results\n );\n return {\n results: _16.flatMap(callResults, (result) => result.results),\n blockNumber: BigInt(callResults[0].blockNumber),\n approxGasUsedPerSuccessCall: stats.percentile(\n _16.map(callResults, (result) => result.approxGasUsedPerSuccessCall),\n 100\n )\n };\n },\n {\n retries: DEFAULT_BATCH_RETRIES,\n ...this.retryOptions\n }\n );\n const routesQuotes = this.processQuoteResults(\n quoteResults,\n routes,\n amounts\n );\n metric.putMetric(\n \"QuoteApproxGasUsedPerSuccessfulCall\",\n approxGasUsedPerSuccessCall,\n \"Count\" /* Count */\n );\n metric.putMetric(\n \"QuoteNumRetryLoops\",\n finalAttemptNumber - 1,\n \"Count\" /* Count */\n );\n metric.putMetric(\n \"QuoteTotalCallsToProvider\",\n totalCallsMade,\n \"Count\" /* Count */\n );\n metric.putMetric(\n \"QuoteExpectedCallsToProvider\",\n expectedCallsMade,\n \"Count\" /* Count */\n );\n metric.putMetric(\n \"QuoteNumRetriedCalls\",\n totalCallsMade - expectedCallsMade,\n \"Count\" /* Count */\n );\n const [successfulQuotes, failedQuotes] = _16(routesQuotes).flatMap((routeWithQuotes) => routeWithQuotes[1]).partition((quote) => quote.quote != null).value();\n log.info(\n `Got ${successfulQuotes.length} successful quotes, ${failedQuotes.length} failed quotes. Took ${finalAttemptNumber - 1} attempt loops. Total calls made to provider: ${totalCallsMade}. Have retried for timeout: ${haveRetriedForTimeout}`\n );\n return { routesWithQuotes: routesQuotes, blockNumber };\n }\n partitionQuotes(quoteStates) {\n const successfulQuoteStates = _16.filter(\n quoteStates,\n (quoteState) => quoteState.status == \"success\"\n );\n const failedQuoteStates = _16.filter(\n quoteStates,\n (quoteState) => quoteState.status == \"failed\"\n );\n const pendingQuoteStates = _16.filter(\n quoteStates,\n (quoteState) => quoteState.status == \"pending\"\n );\n return [successfulQuoteStates, failedQuoteStates, pendingQuoteStates];\n }\n processQuoteResults(quoteResults, routes, amounts) {\n const routesQuotes = [];\n const quotesResultsByRoute = _16.chunk(quoteResults, amounts.length);\n const debugFailedQuotes = [];\n for (let i = 0; i < quotesResultsByRoute.length; i++) {\n const route = routes[i];\n const quoteResults2 = quotesResultsByRoute[i];\n const quotes = _16.map(\n quoteResults2,\n (quoteResult, index) => {\n const amount = amounts[index];\n if (!quoteResult.success) {\n const percent = 100 / amounts.length * (index + 1);\n const amountStr = amount.toFixed(\n Math.min(amount.currency.decimals, 2)\n );\n const routeStr = routeToString(route);\n debugFailedQuotes.push({\n route: routeStr,\n percent,\n amount: amountStr\n });\n return {\n amount,\n quote: null\n };\n }\n return {\n amount,\n quote: quoteResult.result\n };\n }\n );\n routesQuotes.push([route, quotes]);\n }\n const debugChunk = 80;\n _16.forEach(_16.chunk(debugFailedQuotes, debugChunk), (quotes, idx) => {\n const failedQuotesByRoute = _16.groupBy(quotes, (q) => q.route);\n const failedFlat = _16.mapValues(\n failedQuotesByRoute,\n (f) => _16(f).map((f2) => `${f2.percent}%[${f2.amount}]`).join(\",\")\n );\n log.info(\n {\n failedQuotes: _16.map(\n failedFlat,\n (amounts2, routeStr) => `${routeStr} : ${amounts2}`\n )\n },\n `Failed on chain quotes for routes Part ${idx}/${Math.ceil(\n debugFailedQuotes.length / debugChunk\n )}`\n );\n });\n return routesQuotes;\n }\n validateBlockNumbers(successfulQuoteStates, totalCalls, gasLimitOverride) {\n if (successfulQuoteStates.length <= 1) {\n return null;\n }\n const results = _16.map(\n successfulQuoteStates,\n (quoteState) => quoteState.results\n );\n const blockNumbers = _16.map(results, (result) => result.blockNumber);\n const uniqBlocks = _16(blockNumbers).map((blockNumber) => Number(blockNumber)).uniq().value();\n if (uniqBlocks.length == 1) {\n return null;\n }\n return new BlockConflictError(\n `Quotes returned from different blocks. ${uniqBlocks}. ${totalCalls} calls were made with gas limit ${gasLimitOverride}`\n );\n }\n validateSuccessRate(allResults, haveRetriedForSuccessRate) {\n const numResults = allResults.length;\n const numSuccessResults = allResults.filter(\n (result) => result.success\n ).length;\n const successRate = 1 * numSuccessResults / numResults;\n const { quoteMinSuccessRate } = this.batchParams;\n if (successRate < quoteMinSuccessRate) {\n if (haveRetriedForSuccessRate) {\n log.info(\n `Quote success rate still below threshold despite retry. Continuing. ${quoteMinSuccessRate}: ${successRate}`\n );\n return;\n }\n return new SuccessRateError(\n `Quote success rate below threshold of ${quoteMinSuccessRate}: ${successRate}`\n );\n }\n }\n /**\n * Throw an error for incorrect routes / function combinations\n * @param routes Any combination of V1, V2, and Mixed routes.\n * @param functionName\n * @param useMixedRouteQuoter true if there are ANY V2Routes or MixedRoutes in the routes parameter\n */\n validateRoutes(routes, functionName, useMixedRouteQuoter) {\n if (functionName === \"quoteExactOutput\" && useMixedRouteQuoter) {\n throw new Error(\"Cannot call quoteExactOutput with V1/V2 or Mixed routes\");\n }\n }\n};\n\n// src/providers/static-gas-price-provider.ts\nvar StaticGasPriceProvider = class {\n constructor(gasPriceWei) {\n this.gasPriceWei = gasPriceWei;\n }\n async getGasPrice() {\n return { gasPriceWei: this.gasPriceWei };\n }\n};\n\n// src/abis/PulseXSwapRouter.ts\nvar pulsexSwapRouterAbi = [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_factoryV1\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"factoryV2\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_WETH9\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"WETH9\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"factoryV1\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"factoryV2\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"previousBlockhash\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"data\",\n \"type\": \"bytes[]\"\n }\n ],\n \"name\": \"multicall\",\n \"outputs\": [\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"\",\n \"type\": \"bytes[]\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"data\",\n \"type\": \"bytes[]\"\n }\n ],\n \"name\": \"multicall\",\n \"outputs\": [\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"\",\n \"type\": \"bytes[]\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"data\",\n \"type\": \"bytes[]\"\n }\n ],\n \"name\": \"multicall\",\n \"outputs\": [\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"results\",\n \"type\": \"bytes[]\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"pull\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"refundETH\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"selfPermit\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"expiry\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"selfPermitAllowed\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"expiry\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"selfPermitAllowedIfNecessary\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"selfPermitIfNecessary\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOutMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"path\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"swapExactTokensForTokensV1\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOutMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"path\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"swapExactTokensForTokensV2\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountInMax\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"path\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"swapTokensForExactTokensV1\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountInMax\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"path\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"swapTokensForExactTokensV2\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountMinimum\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"sweepToken\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountMinimum\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"sweepToken\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountMinimum\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"feeBips\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"feeRecipient\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"sweepTokenWithFee\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountMinimum\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"feeBips\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"feeRecipient\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"sweepTokenWithFee\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountMinimum\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"unwrapWETH9\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountMinimum\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"unwrapWETH9\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountMinimum\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"feeBips\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"feeRecipient\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"unwrapWETH9WithFee\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountMinimum\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"feeBips\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"feeRecipient\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"unwrapWETH9WithFee\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"wrapETH\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"receive\"\n }\n];\n\n// src/providers/swap-router-provider.ts\nvar SwapRouterProvider = class {\n constructor(multicall2Provider, chainId) {\n this.multicall2Provider = multicall2Provider;\n this.chainId = chainId;\n }\n async getApprovalType(tokenInAmount, tokenOutAmount) {\n const functionParams = [\n [\n tokenInAmount.currency.wrapped.address,\n tokenInAmount.quotient.toString()\n ],\n [\n tokenOutAmount.currency.wrapped.address,\n tokenOutAmount.quotient.toString()\n ]\n ];\n const tx = await this.multicall2Provider.callSameFunctionOnContractWithMultipleParams({\n address: PULSEX_SWAP_ROUTER_ADDRESSES[this.chainId],\n abi: pulsexSwapRouterAbi,\n functionName: \"getApprovalType\",\n functionParams\n });\n if (!tx.results[0]?.success || !tx.results[1]?.success) {\n log.info(\n { results: tx.results },\n \"Failed to get approval type from swap router for token in or token out\"\n );\n throw new Error(\n \"Failed to get approval type from swap router for token in or token out\"\n );\n }\n const { result: approvalTokenIn } = tx.results[0];\n const { result: approvalTokenOut } = tx.results[1];\n return {\n approvalTokenIn: approvalTokenIn[0],\n approvalTokenOut: approvalTokenOut[0]\n };\n }\n};\n\n// src/abis/Permit2.ts\nvar permitAbi = [\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"AllowanceExpired\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ExcessiveInvalidation\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"InsufficientAllowance\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"maxAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"InvalidAmount\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidContractSignature\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidNonce\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidSignature\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidSignatureLength\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidSigner\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"LengthMismatch\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"signatureDeadline\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"SignatureExpired\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint160\",\n \"name\": \"amount\",\n \"type\": \"uint160\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint48\",\n \"name\": \"expiration\",\n \"type\": \"uint48\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Lockdown\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint48\",\n \"name\": \"newNonce\",\n \"type\": \"uint48\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint48\",\n \"name\": \"oldNonce\",\n \"type\": \"uint48\"\n }\n ],\n \"name\": \"NonceInvalidation\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint160\",\n \"name\": \"amount\",\n \"type\": \"uint160\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint48\",\n \"name\": \"expiration\",\n \"type\": \"uint48\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint48\",\n \"name\": \"nonce\",\n \"type\": \"uint48\"\n }\n ],\n \"name\": \"Permit\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"word\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"mask\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"UnorderedNonceInvalidation\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"DOMAIN_SEPARATOR\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint160\",\n \"name\": \"amount\",\n \"type\": \"uint160\"\n },\n {\n \"internalType\": \"uint48\",\n \"name\": \"expiration\",\n \"type\": \"uint48\"\n },\n {\n \"internalType\": \"uint48\",\n \"name\": \"nonce\",\n \"type\": \"uint48\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint160\",\n \"name\": \"amount\",\n \"type\": \"uint160\"\n },\n {\n \"internalType\": \"uint48\",\n \"name\": \"expiration\",\n \"type\": \"uint48\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint48\",\n \"name\": \"newNonce\",\n \"type\": \"uint48\"\n }\n ],\n \"name\": \"invalidateNonces\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"wordPos\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"mask\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"invalidateUnorderedNonces\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"internalType\": \"struct IAllowanceTransfer.TokenSpenderPair[]\",\n \"name\": \"approvals\",\n \"type\": \"tuple[]\"\n }\n ],\n \"name\": \"lockdown\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"nonceBitmap\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"components\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint160\",\n \"name\": \"amount\",\n \"type\": \"uint160\"\n },\n {\n \"internalType\": \"uint48\",\n \"name\": \"expiration\",\n \"type\": \"uint48\"\n },\n {\n \"internalType\": \"uint48\",\n \"name\": \"nonce\",\n \"type\": \"uint48\"\n }\n ],\n \"internalType\": \"struct IAllowanceTransfer.PermitDetails[]\",\n \"name\": \"details\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"sigDeadline\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct IAllowanceTransfer.PermitBatch\",\n \"name\": \"permitBatch\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"signature\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"permit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"components\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint160\",\n \"name\": \"amount\",\n \"type\": \"uint160\"\n },\n {\n \"internalType\": \"uint48\",\n \"name\": \"expiration\",\n \"type\": \"uint48\"\n },\n {\n \"internalType\": \"uint48\",\n \"name\": \"nonce\",\n \"type\": \"uint48\"\n }\n ],\n \"internalType\": \"struct IAllowanceTransfer.PermitDetails\",\n \"name\": \"details\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"sigDeadline\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct IAllowanceTransfer.PermitSingle\",\n \"name\": \"permitSingle\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"signature\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"permit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct ISignatureTransfer.TokenPermissions\",\n \"name\": \"permitted\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct ISignatureTransfer.PermitTransferFrom\",\n \"name\": \"permit\",\n \"type\": \"tuple\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"requestedAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct ISignatureTransfer.SignatureTransferDetails\",\n \"name\": \"transferDetails\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"signature\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"permitTransferFrom\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct ISignatureTransfer.TokenPermissions[]\",\n \"name\": \"permitted\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct ISignatureTransfer.PermitBatchTransferFrom\",\n \"name\": \"permit\",\n \"type\": \"tuple\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"requestedAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct ISignatureTransfer.SignatureTransferDetails[]\",\n \"name\": \"transferDetails\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"signature\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"permitTransferFrom\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct ISignatureTransfer.TokenPermissions\",\n \"name\": \"permitted\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct ISignatureTransfer.PermitTransferFrom\",\n \"name\": \"permit\",\n \"type\": \"tuple\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"requestedAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct ISignatureTransfer.SignatureTransferDetails\",\n \"name\": \"transferDetails\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"witness\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"witnessTypeString\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"signature\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"permitWitnessTransferFrom\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct ISignatureTransfer.TokenPermissions[]\",\n \"name\": \"permitted\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct ISignatureTransfer.PermitBatchTransferFrom\",\n \"name\": \"permit\",\n \"type\": \"tuple\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"requestedAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct ISignatureTransfer.SignatureTransferDetails[]\",\n \"name\": \"transferDetails\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"witness\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"witnessTypeString\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"signature\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"permitWitnessTransferFrom\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint160\",\n \"name\": \"amount\",\n \"type\": \"uint160\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n }\n ],\n \"internalType\": \"struct IAllowanceTransfer.AllowanceTransferDetails[]\",\n \"name\": \"transferDetails\",\n \"type\": \"tuple[]\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint160\",\n \"name\": \"amount\",\n \"type\": \"uint160\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n];\n\n// src/util/callData.ts\nvar APPROVE_TOKEN_FOR_TRANSFER = \"0x095ea7b300000000000000000000000068b3465833fb72a70ecdf485e0e4c7bd8665fc45ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\";\n\n// src/providers/tenderly-simulation-provider.ts\nvar TENDERLY_BATCH_SIMULATE_API = (tenderlyBaseUrl, tenderlyUser, tenderlyProject) => `${tenderlyBaseUrl}/api/v1/account/${tenderlyUser}/project/${tenderlyProject}/simulate-batch`;\nvar DEFAULT_ESTIMATE_MULTIPLIER = 1.25;\nvar FallbackTenderlySimulator = class extends Simulator2 {\n constructor(chainId, provider, tenderlySimulator, ethEstimateGasSimulator) {\n super(provider, chainId);\n this.tenderlySimulator = tenderlySimulator;\n this.ethEstimateGasSimulator = ethEstimateGasSimulator;\n }\n async simulateTransaction(fromAddress, swapOptions, swapRoute, providerConfig) {\n const inputAmount = swapRoute.trade.inputAmount;\n if (inputAmount.currency.isNative || await this.checkTokenApproved(\n fromAddress,\n inputAmount,\n swapOptions,\n this.provider\n )) {\n log.info(\n \"Simulating with eth_estimateGas since token is native or approved.\"\n );\n try {\n const swapRouteWithGasEstimate = await this.ethEstimateGasSimulator.ethEstimateGas(\n fromAddress,\n swapOptions,\n swapRoute\n );\n return swapRouteWithGasEstimate;\n } catch (err) {\n log.info({ err }, \"Error simulating using eth_estimateGas\");\n return { ...swapRoute, simulationStatus: 1 /* Failed */ };\n }\n }\n try {\n return await this.tenderlySimulator.simulateTransaction(\n fromAddress,\n swapOptions,\n swapRoute,\n providerConfig\n );\n } catch (err) {\n log.info({ err }, \"Failed to simulate via Tenderly\");\n return { ...swapRoute, simulationStatus: 1 /* Failed */ };\n }\n }\n};\nvar TenderlySimulator = class extends Simulator2 {\n constructor(chainId, tenderlyBaseUrl, tenderlyUser, tenderlyProject, tenderlyAccessKey, v1PoolProvider, v2PoolProvider, provider, overrideEstimateMultiplier) {\n super(provider, chainId);\n this.tenderlyBaseUrl = tenderlyBaseUrl;\n this.tenderlyUser = tenderlyUser;\n this.tenderlyProject = tenderlyProject;\n this.tenderlyAccessKey = tenderlyAccessKey;\n this.v1PoolProvider = v1PoolProvider;\n this.v2PoolProvider = v2PoolProvider;\n this.overrideEstimateMultiplier = overrideEstimateMultiplier ?? {};\n }\n async simulateTransaction(fromAddress, swapOptions, swapRoute, providerConfig) {\n const currencyIn = swapRoute.trade.inputAmount.currency;\n const tokenIn = currencyIn.wrapped;\n const chainId = this.chainId;\n if (!swapRoute.methodParameters) {\n const msg = \"No calldata provided to simulate transaction\";\n log.info(msg);\n throw new Error(msg);\n }\n const { calldata } = swapRoute.methodParameters;\n log.info(\n {\n calldata: swapRoute.methodParameters.calldata,\n fromAddress,\n chainId,\n tokenInAddress: tokenIn.address,\n router: swapOptions.type\n },\n \"Simulating transaction on Tenderly\"\n );\n await providerConfig?.blockNumber;\n let estimatedGasUsed;\n const estimateMultiplier = this.overrideEstimateMultiplier[chainId] ?? DEFAULT_ESTIMATE_MULTIPLIER;\n if (swapOptions.type == 0 /* UNIVERSAL_ROUTER */) {\n const approvePermit2Calldata = encodeFunctionData({\n abi: erc20Abi,\n functionName: \"approve\",\n args: [PERMIT2_ADDRESS, MaxUint256]\n });\n const approveUniversalRouterCallData = encodeFunctionData({\n abi: permitAbi,\n functionName: \"approve\",\n args: [\n tokenIn.address,\n UNIVERSAL_ROUTER_ADDRESS,\n MAX_UINT160,\n Math.floor((/* @__PURE__ */ new Date()).getTime() / 1e3) + 1e7\n ]\n });\n const approvePermit2 = {\n network_id: chainId,\n gas_estimate: true,\n input: approvePermit2Calldata,\n to: tokenIn.address,\n value: \"0\",\n from: fromAddress\n };\n const approveUniversalRouter = {\n network_id: chainId,\n gas_estimate: true,\n input: approveUniversalRouterCallData,\n to: PERMIT2_ADDRESS,\n value: \"0\",\n from: fromAddress\n };\n const swap = {\n network_id: chainId,\n input: calldata,\n gas_estimate: true,\n to: UNIVERSAL_ROUTER_ADDRESS,\n value: currencyIn.isNative ? swapRoute.methodParameters.value : \"0\",\n from: fromAddress,\n // TODO: This is a Temporary fix given by Tenderly team, remove once resolved on their end.\n block_number: void 0\n };\n const body = {\n simulations: [approvePermit2, approveUniversalRouter, swap],\n gas_estimate: true\n };\n const opts = {\n headers: {\n \"X-Access-Key\": this.tenderlyAccessKey\n }\n };\n const url = TENDERLY_BATCH_SIMULATE_API(\n this.tenderlyBaseUrl,\n this.tenderlyUser,\n this.tenderlyProject\n );\n const resp = (await axios3.post(url, body, opts)).data;\n if (!resp || resp.simulation_results.length < 3 || !resp.simulation_results[2].transaction || resp.simulation_results[2].transaction.error_message) {\n this.logTenderlyErrorResponse(resp);\n return { ...swapRoute, simulationStatus: 1 /* Failed */ };\n }\n estimatedGasUsed = BigInt(\n (resp.simulation_results[2].transaction.gas_used * estimateMultiplier).toFixed(0)\n );\n log.info(\n {\n body,\n approvePermit2GasUsed: resp.simulation_results[0].transaction.gas_used,\n approveUniversalRouterGasUsed: resp.simulation_results[1].transaction.gas_used,\n swapGasUsed: resp.simulation_results[2].transaction.gas_used,\n swapWithMultiplier: estimatedGasUsed.toString()\n },\n \"Successfully Simulated Approvals + Swap via Tenderly for Universal Router. Gas used.\"\n );\n log.info(\n { swapTransaction: resp.simulation_results[2].transaction },\n \"Successful Tenderly Swap Transaction for Universal Router\"\n );\n log.info(\n { swapSimulation: resp.simulation_results[2].simulation },\n \"Successful Tenderly Swap Simulation for Universal Router\"\n );\n } else if (swapOptions.type == 1 /* SWAP_ROUTER_02 */) {\n const approve = {\n network_id: chainId,\n input: APPROVE_TOKEN_FOR_TRANSFER,\n gas_estimate: true,\n to: tokenIn.address,\n value: \"0\",\n from: fromAddress\n };\n const swap = {\n network_id: chainId,\n input: calldata,\n to: PULSEX_SWAP_ROUTER_ADDRESSES[chainId],\n gas_estimate: true,\n value: currencyIn.isNative ? swapRoute.methodParameters.value : \"0\",\n from: fromAddress,\n // TODO: This is a Temporary fix given by Tenderly team, remove once resolved on their end.\n block_number: void 0\n };\n const body = { simulations: [approve, swap] };\n const opts = {\n headers: {\n \"X-Access-Key\": this.tenderlyAccessKey\n }\n };\n const url = TENDERLY_BATCH_SIMULATE_API(\n this.tenderlyBaseUrl,\n this.tenderlyUser,\n this.tenderlyProject\n );\n const resp = (await axios3.post(url, body, opts)).data;\n if (!resp || resp.simulation_results.length < 2 || !resp.simulation_results[1].transaction || resp.simulation_results[1].transaction.error_message) {\n const msg = `Failed to Simulate Via Tenderly!: ${resp.simulation_results[1].transaction.error_message}`;\n log.info(\n { err: resp.simulation_results[1].transaction.error_message },\n msg\n );\n return { ...swapRoute, simulationStatus: 1 /* Failed */ };\n }\n estimatedGasUsed = BigInt(\n (resp.simulation_results[1].transaction.gas_used * estimateMultiplier).toFixed(0)\n );\n log.info(\n {\n body,\n approveGasUsed: resp.simulation_results[0].transaction.gas_used,\n swapGasUsed: resp.simulation_results[1].transaction.gas_used,\n swapWithMultiplier: estimatedGasUsed.toString()\n },\n \"Successfully Simulated Approval + Swap via Tenderly for SwapRouter02. Gas used.\"\n );\n log.info(\n { swapTransaction: resp.simulation_results[1].transaction },\n \"Successful Tenderly Swap Transaction for SwapRouter02\"\n );\n log.info(\n { swapSimulation: resp.simulation_results[1].simulation },\n \"Successful Tenderly Swap Simulation for SwapRouter02\"\n );\n } else {\n throw new Error(`Unsupported swap type: ${swapOptions}`);\n }\n const {\n estimatedGasUsedUSD,\n estimatedGasUsedQuoteToken,\n quoteGasAdjusted\n } = await calculateGasUsed(\n chainId,\n swapRoute,\n estimatedGasUsed,\n this.v1PoolProvider,\n this.v2PoolProvider\n );\n return {\n ...initSwapRouteFromExisting(\n swapRoute,\n this.v1PoolProvider,\n this.v2PoolProvider,\n quoteGasAdjusted,\n estimatedGasUsed,\n estimatedGasUsedQuoteToken,\n estimatedGasUsedUSD\n ),\n simulationStatus: 2 /* Succeeded */\n };\n }\n logTenderlyErrorResponse(resp) {\n log.info(\n {\n resp\n },\n \"Failed to Simulate on Tenderly\"\n );\n log.info(\n {\n err: resp.simulation_results.length >= 1 ? resp.simulation_results[0].transaction : {}\n },\n \"Failed to Simulate on Tenderly #1 Transaction\"\n );\n log.info(\n {\n err: resp.simulation_results.length >= 1 ? resp.simulation_results[0].simulation : {}\n },\n \"Failed to Simulate on Tenderly #1 Simulation\"\n );\n log.info(\n {\n err: resp.simulation_results.length >= 2 ? resp.simulation_results[1].transaction : {}\n },\n \"Failed to Simulate on Tenderly #2 Transaction\"\n );\n log.info(\n {\n err: resp.simulation_results.length >= 2 ? resp.simulation_results[1].simulation : {}\n },\n \"Failed to Simulate on Tenderly #2 Simulation\"\n );\n log.info(\n {\n err: resp.simulation_results.length >= 3 ? resp.simulation_results[2].transaction : {}\n },\n \"Failed to Simulate on Tenderly #3 Transaction\"\n );\n log.info(\n {\n err: resp.simulation_results.length >= 3 ? resp.simulation_results[2].simulation : {}\n },\n \"Failed to Simulate on Tenderly #3 Simulation\"\n );\n }\n};\nvar URISubgraphProvider = class {\n constructor(chainId, uri, timeout = 6e3, retries = 2) {\n this.chainId = chainId;\n this.uri = uri;\n this.timeout = timeout;\n this.retries = retries;\n }\n async getPools() {\n log.info(\n { uri: this.uri },\n `About to get subgraph pools from URI ${this.uri}`\n );\n let allPools = [];\n await retry7(\n async () => {\n const timeout = new Timeout();\n const timerPromise = timeout.set(this.timeout).then(() => {\n throw new Error(\n `Timed out getting pools from subgraph: ${this.timeout}`\n );\n });\n let response;\n try {\n response = await Promise.race([axios3.get(this.uri), timerPromise]);\n } catch (err) {\n throw err;\n } finally {\n timeout.clear();\n }\n const { data: poolsBuffer, status } = response;\n if (status != 200) {\n log.error({ response }, `Unabled to get pools from ${this.uri}.`);\n throw new Error(`Unable to get pools from ${this.uri}`);\n }\n const pools = poolsBuffer;\n log.info(\n { uri: this.uri, chain: this.chainId },\n `Got subgraph pools from uri. Num: ${pools.length}`\n );\n allPools = pools;\n },\n {\n retries: this.retries,\n onRetry: (err, retry9) => {\n log.info(\n { err },\n `Failed to get pools from uri ${this.uri}. Retry attempt: ${retry9}`\n );\n }\n }\n );\n return allPools;\n }\n};\n\n// src/providers/caching/route/model/cached-route.ts\nvar CachedRoute = class {\n /**\n * @param route\n * @param percent\n */\n constructor({ route, percent }) {\n this.route = route;\n this.percent = percent;\n }\n get protocol() {\n return this.route.protocol;\n }\n get tokenIn() {\n return this.route.input;\n }\n get tokenOut() {\n return this.route.output;\n }\n};\nvar CachedRoutes = class {\n /**\n * @param routes\n * @param chainId\n * @param tokenIn\n * @param tokenOut\n * @param protocolsCovered\n * @param blockNumber\n * @param tradeType\n * @param originalAmount\n * @param blocksToLive\n */\n constructor({\n routes,\n chainId,\n tokenIn,\n tokenOut,\n protocolsCovered,\n blockNumber,\n tradeType,\n originalAmount,\n blocksToLive = 0\n }) {\n this.routes = routes;\n this.chainId = chainId;\n this.tokenIn = tokenIn;\n this.tokenOut = tokenOut;\n this.protocolsCovered = protocolsCovered;\n this.blockNumber = blockNumber;\n this.tradeType = tradeType;\n this.originalAmount = originalAmount;\n this.blocksToLive = blocksToLive;\n }\n /**\n * Factory method that creates a `CachedRoutes` object from an array of RouteWithValidQuote.\n *\n * @public\n * @static\n * @param routes\n * @param chainId\n * @param tokenIn\n * @param tokenOut\n * @param protocolsCovered\n * @param blockNumber\n * @param tradeType\n * @param originalAmount\n */\n static fromRoutesWithValidQuotes(routes, chainId, tokenIn, tokenOut, protocolsCovered, blockNumber, tradeType, originalAmount) {\n if (routes.length == 0)\n return void 0;\n const cachedRoutes = _16.map(\n routes,\n (route) => new CachedRoute({ route: route.route, percent: route.percent })\n );\n return new CachedRoutes({\n routes: cachedRoutes,\n chainId,\n tokenIn,\n tokenOut,\n protocolsCovered,\n blockNumber,\n tradeType,\n originalAmount\n });\n }\n /**\n * Function to determine if, given a block number, the CachedRoute is expired or not.\n *\n * @param currentBlockNumber\n * @param optimistic\n */\n notExpired(currentBlockNumber, optimistic = false) {\n const blocksToLive = optimistic ? this.blocksToLive : 0;\n const blocksDifference = currentBlockNumber - this.blockNumber;\n return blocksDifference <= BigInt(blocksToLive);\n }\n};\n\n// src/providers/caching/route/model/cache-mode.ts\nvar CacheMode = /* @__PURE__ */ ((CacheMode2) => {\n CacheMode2[\"Livemode\"] = \"livemode\";\n CacheMode2[\"Darkmode\"] = \"darkmode\";\n CacheMode2[\"Tapcompare\"] = \"tapcompare\";\n return CacheMode2;\n})(CacheMode || {});\n\n// src/providers/caching/route/route-caching-provider.ts\nvar IRouteCachingProvider2 = class {\n constructor() {\n /**\n * Final implementation of the public `getCachedRoute` method, this is how code will interact with the implementation\n *\n * @public\n * @readonly\n * @param chainId\n * @param amount\n * @param quoteToken\n * @param tradeType\n * @param protocols\n * @param blockNumber\n */\n this.getCachedRoute = async (chainId, amount, quoteToken, tradeType, protocols, blockNumber, optimistic = false) => {\n if (await this.getCacheMode(chainId, amount, quoteToken, tradeType, protocols) == \"darkmode\" /* Darkmode */) {\n return void 0;\n }\n const cachedRoute = await this._getCachedRoute(\n chainId,\n amount,\n quoteToken,\n tradeType,\n protocols,\n blockNumber,\n optimistic\n );\n return this.filterExpiredCachedRoutes(cachedRoute, blockNumber, optimistic);\n };\n /**\n * Final implementation of the public `setCachedRoute` method.\n * This method will set the blockToLive in the CachedRoutes object before calling the internal method to insert in cache.\n *\n * @public\n * @readonly\n * @param cachedRoutes The route to cache.\n * @returns Promise Indicates if the route was inserted into cache.\n */\n this.setCachedRoute = async (cachedRoutes, amount) => {\n if (await this.getCacheModeFromCachedRoutes(cachedRoutes, amount) == \"darkmode\" /* Darkmode */) {\n return false;\n }\n cachedRoutes.blocksToLive = await this._getBlocksToLive(cachedRoutes, amount);\n return this._setCachedRoute(cachedRoutes, amount);\n };\n }\n /**\n * Returns the CacheMode for the given cachedRoutes and amount\n *\n * @param cachedRoutes\n * @param amount\n */\n getCacheModeFromCachedRoutes(cachedRoutes, amount) {\n const quoteToken = cachedRoutes.tradeType == TradeType.EXACT_INPUT ? cachedRoutes.tokenOut : cachedRoutes.tokenIn;\n return this.getCacheMode(\n cachedRoutes.chainId,\n amount,\n quoteToken,\n cachedRoutes.tradeType,\n cachedRoutes.protocolsCovered\n );\n }\n filterExpiredCachedRoutes(cachedRoutes, blockNumber, optimistic) {\n return cachedRoutes?.notExpired(blockNumber, optimistic) ? cachedRoutes : void 0;\n }\n};\nvar CachingV1PoolProvider = class {\n /**\n * Creates an instance of CachingV3PoolProvider.\n * @param chainId The chain id to use.\n * @param poolProvider The provider to use to get the pools when not in the cache.\n * @param cache Cache instance to hold cached pools.\n */\n constructor(chainId, poolProvider, cache) {\n this.chainId = chainId;\n this.poolProvider = poolProvider;\n this.cache = cache;\n this.POOL_KEY = (chainId, address) => `pool-${chainId}-${address}`;\n }\n async getPools(tokenPairs, providerConfig) {\n const poolAddressSet = /* @__PURE__ */ new Set();\n const poolsToGetTokenPairs = [];\n const poolsToGetAddresses = [];\n const poolAddressToPool = {};\n const blockNumber = await providerConfig?.blockNumber;\n for (const [tokenA, tokenB] of tokenPairs) {\n const { poolAddress, token0, token1 } = this.getPoolAddress(\n tokenA,\n tokenB\n );\n if (poolAddressSet.has(poolAddress)) {\n continue;\n }\n poolAddressSet.add(poolAddress);\n const cachedPool = await this.cache.get(\n this.POOL_KEY(this.chainId, poolAddress)\n );\n if (cachedPool) {\n if (!blockNumber || blockNumber && cachedPool.block == blockNumber) {\n poolAddressToPool[poolAddress] = cachedPool.pair;\n continue;\n }\n }\n poolsToGetTokenPairs.push([token0, token1]);\n poolsToGetAddresses.push(poolAddress);\n }\n log.info(\n {\n poolsFound: _16.map(\n Object.values(poolAddressToPool),\n (p) => p.token0.symbol + \" \" + p.token1.symbol\n ),\n poolsToGetTokenPairs: _16.map(\n poolsToGetTokenPairs,\n (t) => t[0].symbol + \" \" + t[1].symbol\n )\n },\n `Found ${Object.keys(poolAddressToPool).length} V1 pools already in local cache for block ${blockNumber}. About to get reserves for ${poolsToGetTokenPairs.length} pools.`\n );\n if (poolsToGetAddresses.length > 0) {\n const poolAccessor = await this.poolProvider.getPools(\n poolsToGetTokenPairs,\n providerConfig\n );\n for (const address of poolsToGetAddresses) {\n const pool = poolAccessor.getPoolByAddress(address);\n if (pool) {\n poolAddressToPool[address] = pool;\n await this.cache.set(this.POOL_KEY(this.chainId, address), {\n pair: pool,\n block: blockNumber\n });\n }\n }\n }\n return {\n getPool: (tokenA, tokenB) => {\n const { poolAddress } = this.getPoolAddress(tokenA, tokenB);\n return poolAddressToPool[poolAddress];\n },\n getPoolByAddress: (address) => poolAddressToPool[address],\n getAllPools: () => Object.values(poolAddressToPool)\n };\n }\n getPoolAddress(tokenA, tokenB) {\n return this.poolProvider.getPoolAddress(tokenA, tokenB);\n }\n};\n\n// src/providers/v1/caching-subgraph-provider.ts\nvar CachingV1SubgraphProvider2 = class {\n /**\n * Creates an instance of CachingV1SubgraphProvider.\n * @param chainId The chain id to use.\n * @param subgraphProvider The provider to use to get the subgraph pools when not in the cache.\n * @param cache Cache instance to hold cached pools.\n */\n constructor(chainId, subgraphProvider, cache) {\n this.chainId = chainId;\n this.subgraphProvider = subgraphProvider;\n this.cache = cache;\n this.SUBGRAPH_KEY = (chainId) => `subgraph-pools-v1-${chainId}`;\n }\n async getPools() {\n const cachedPools = await this.cache.get(this.SUBGRAPH_KEY(this.chainId));\n if (cachedPools) {\n return cachedPools;\n }\n const pools = await this.subgraphProvider.getPools();\n await this.cache.set(this.SUBGRAPH_KEY(this.chainId), pools);\n return pools;\n }\n};\nvar V1QuoteProvider = class {\n /* eslint-disable @typescript-eslint/no-empty-function */\n constructor() {\n }\n /* eslint-enable @typescript-eslint/no-empty-function */\n async getQuotesManyExactIn(amountIns, routes) {\n return this.getQuotes(amountIns, routes, TradeType.EXACT_INPUT);\n }\n async getQuotesManyExactOut(amountOuts, routes) {\n return this.getQuotes(amountOuts, routes, TradeType.EXACT_OUTPUT);\n }\n async getQuotes(amounts, routes, tradeType) {\n const routesWithQuotes = [];\n const debugStrs = [];\n for (const route of routes) {\n const amountQuotes = [];\n let insufficientInputAmountErrorCount = 0;\n let insufficientReservesErrorCount = 0;\n for (const amount of amounts) {\n try {\n if (tradeType == TradeType.EXACT_INPUT) {\n let outputAmount = amount.wrapped;\n for (const pair of route.pairs) {\n const [outputAmountNew] = pair.getOutputAmount(outputAmount);\n outputAmount = outputAmountNew;\n }\n amountQuotes.push({\n amount,\n quote: outputAmount.quotient\n });\n } else {\n let inputAmount = amount.wrapped;\n for (let i = route.pairs.length - 1; i >= 0; i--) {\n const pair = route.pairs[i];\n [inputAmount] = pair.getInputAmount(inputAmount);\n }\n amountQuotes.push({\n amount,\n quote: inputAmount.quotient\n });\n }\n } catch (err) {\n if (err instanceof InsufficientInputAmountError) {\n insufficientInputAmountErrorCount = insufficientInputAmountErrorCount + 1;\n amountQuotes.push({ amount, quote: null });\n } else if (err instanceof InsufficientReservesError) {\n insufficientReservesErrorCount = insufficientReservesErrorCount + 1;\n amountQuotes.push({ amount, quote: null });\n } else {\n throw err;\n }\n }\n }\n if (insufficientInputAmountErrorCount > 0 || insufficientReservesErrorCount > 0) {\n debugStrs.push(\n `${[\n routeToString(route)\n ]} Input: ${insufficientInputAmountErrorCount} Reserves: ${insufficientReservesErrorCount} }`\n );\n }\n routesWithQuotes.push([route, amountQuotes]);\n }\n if (debugStrs.length > 0) {\n log.info({ debugStrs }, `Failed quotes for V1 routes`);\n }\n return {\n routesWithQuotes\n };\n }\n};\nvar BASES_TO_CHECK_TRADES_AGAINST = {\n [ChainId.PULSECHAIN]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.PULSECHAIN],\n eUSDC_PULSECHAIN,\n eUSDT_PULSECHAIN,\n eWBTC_PULSECHAIN,\n eDAI_PULSECHAIN,\n PLSX_PULSECHAIN,\n eHEX_PULSECHAIN,\n HEX_PULSECHAIN,\n INC_PULSECHAIN,\n WETH_PULSECHAIN\n ],\n [ChainId.PULSECHAIN_TESTNET]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.PULSECHAIN_TESTNET],\n PLSX_TESTNET,\n INC_TESTNET,\n HEX_TESTNET,\n tDAI_TESTNET\n ]\n};\nvar StaticV1SubgraphProvider = class {\n constructor(chainId) {\n this.chainId = chainId;\n }\n async getPools(tokenIn, tokenOut) {\n log.info(\"In static subgraph provider for V1\");\n const bases = BASES_TO_CHECK_TRADES_AGAINST[this.chainId];\n const basePairs = _16.flatMap(\n bases,\n (base) => bases.map((otherBase) => [base, otherBase])\n );\n if (tokenIn && tokenOut) {\n basePairs.push(\n [tokenIn, tokenOut],\n ...bases.map((base) => [tokenIn, base]),\n ...bases.map((base) => [tokenOut, base])\n );\n }\n const pairs = _16(basePairs).filter(\n (tokens) => Boolean(tokens[0] && tokens[1])\n ).filter(\n ([tokenA, tokenB]) => tokenA.address !== tokenB.address && !tokenA.equals(tokenB)\n ).value();\n const poolAddressSet = /* @__PURE__ */ new Set();\n const subgraphPools = _16(pairs).map(([tokenA, tokenB]) => {\n const poolAddress = PairV1.getAddress(tokenA, tokenB);\n if (poolAddressSet.has(poolAddress)) {\n return void 0;\n }\n poolAddressSet.add(poolAddress);\n const [token0, token1] = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA];\n return {\n id: poolAddress,\n liquidity: \"100\",\n token0: {\n id: token0.address\n },\n token1: {\n id: token1.address\n },\n supply: 100,\n reserve: 100,\n reserveUSD: 100\n };\n }).compact().value();\n return subgraphPools;\n }\n};\nvar SUBGRAPH_URL_BY_CHAIN = {\n [ChainId.PULSECHAIN]: \"https://graph.pulsechain.com/subgraphs/name/pulsechain/pulsex\",\n [ChainId.PULSECHAIN_TESTNET]: \"https://graph.v4.testnet.pulsechain.com/subgraphs/name/pulsechain/pulsex\"\n};\nvar threshold = 0.025;\nvar PAGE_SIZE = 1e3;\nvar V1SubgraphProvider2 = class {\n constructor(chainId, retries = 2, timeout = 36e4, rollback = true, pageSize = PAGE_SIZE) {\n this.chainId = chainId;\n this.retries = retries;\n this.timeout = timeout;\n this.rollback = rollback;\n this.pageSize = pageSize;\n const subgraphUrl = SUBGRAPH_URL_BY_CHAIN[this.chainId];\n if (!subgraphUrl) {\n throw new Error(`No subgraph url for chain id: ${this.chainId}`);\n }\n this.client = new GraphQLClient(subgraphUrl, { fetch });\n }\n async getPools(_tokenIn, _tokenOut, providerConfig) {\n let blockNumber = providerConfig?.blockNumber ? await providerConfig.blockNumber : void 0;\n const query2 = gql`\n query getPools($pageSize: Int!, $id: String) {\n pairs(\n first: $pageSize\n ${blockNumber ? `block: { number: ${blockNumber} }` : ``}\n where: { id_gt: $id }\n ) {\n id\n token0 { id, symbol }\n token1 { id, symbol }\n totalSupply\n trackedReservePLS\n reserveUSD\n }\n }\n `;\n let pools = [];\n log.info(\n `Getting V1 pools from the subgraph with page size ${this.pageSize}${providerConfig?.blockNumber ? ` as of block ${providerConfig?.blockNumber}` : \"\"}.`\n );\n await retry7(\n async () => {\n const timeout = new Timeout();\n const getPools = async () => {\n let lastId = \"\";\n let pairs = [];\n let pairsPage = [];\n do {\n await retry7(\n async () => {\n const poolsResult = await this.client.request(query2, {\n pageSize: this.pageSize,\n id: lastId\n });\n pairsPage = poolsResult.pairs;\n pairs = pairs.concat(pairsPage);\n lastId = pairs[pairs.length - 1].id;\n },\n {\n retries: this.retries,\n onRetry: (err, retry9) => {\n pools = [];\n log.info(\n { err },\n `Failed request for page of pools from subgraph. Retry attempt: ${retry9}`\n );\n }\n }\n );\n } while (pairsPage.length > 0);\n return pairs;\n };\n try {\n const getPoolsPromise = getPools();\n const timerPromise = timeout.set(this.timeout).then(() => {\n throw new Error(\n `Timed out getting pools from subgraph: ${this.timeout}`\n );\n });\n pools = await Promise.race([getPoolsPromise, timerPromise]);\n return;\n } catch (err) {\n throw err;\n } finally {\n timeout.clear();\n }\n },\n {\n retries: this.retries,\n onRetry: (err, retry9) => {\n if (this.rollback && blockNumber && _16.includes(err.message, \"indexed up to\")) {\n blockNumber = BigInt(blockNumber) - 10n;\n log.info(\n `Detected subgraph indexing error. Rolled back block number to: ${blockNumber}`\n );\n }\n pools = [];\n log.info(\n { err },\n `Failed to get pools from subgraph. Retry attempt: ${retry9}`\n );\n }\n }\n );\n const poolsSanitized = pools.filter((pool) => {\n return parseFloat(pool.trackedReservePLS) > threshold;\n }).map((pool) => {\n return {\n id: pool.id.toLowerCase(),\n token0: {\n id: pool.token0.id.toLowerCase()\n },\n token1: {\n id: pool.token1.id.toLowerCase()\n },\n supply: parseFloat(pool.totalSupply),\n reserve: parseFloat(pool.trackedReservePLS),\n reserveUSD: parseFloat(pool.reserveUSD)\n };\n });\n log.info(\n `Got ${pools.length} V1 pools from the subgraph. ${poolsSanitized.length} after filtering`\n );\n return poolsSanitized;\n }\n};\n\n// src/providers/v1/subgraph-provider-with-fallback.ts\nvar V1SubgraphProviderWithFallBacks = class {\n /**\n * Creates an instance of V1SubgraphProviderWithFallBacks.\n * @param fallbacks Ordered list of `IV1SubgraphProvider` to try to get pools from.\n */\n constructor(fallbacks) {\n this.fallbacks = fallbacks;\n }\n async getPools(tokenIn, tokenOut, providerConfig) {\n for (let i = 0; i < this.fallbacks.length; i++) {\n const provider = this.fallbacks[i];\n try {\n const pools = await provider.getPools(\n tokenIn,\n tokenOut,\n providerConfig\n );\n return pools;\n } catch (err) {\n log.info(`Failed to get subgraph pools for V1 from fallback #${i}`);\n }\n }\n throw new Error(\"Failed to get subgraph pools from any providers\");\n }\n};\n\n// src/providers/v1/uri-subgraph-provider.ts\nvar V1URISubgraphProvider = class extends URISubgraphProvider {\n};\nvar CachingV2PoolProvider = class {\n /**\n * Creates an instance of CachingV3PoolProvider.\n * @param chainId The chain id to use.\n * @param poolProvider The provider to use to get the pools when not in the cache.\n * @param cache Cache instance to hold cached pools.\n */\n constructor(chainId, poolProvider, cache) {\n this.chainId = chainId;\n this.poolProvider = poolProvider;\n this.cache = cache;\n this.POOL_KEY = (chainId, address) => `pool-${chainId}-${address}`;\n }\n async getPools(tokenPairs, providerConfig) {\n const poolAddressSet = /* @__PURE__ */ new Set();\n const poolsToGetTokenPairs = [];\n const poolsToGetAddresses = [];\n const poolAddressToPool = {};\n const blockNumber = await providerConfig?.blockNumber;\n for (const [tokenA, tokenB] of tokenPairs) {\n const { poolAddress, token0, token1 } = this.getPoolAddress(\n tokenA,\n tokenB\n );\n if (poolAddressSet.has(poolAddress)) {\n continue;\n }\n poolAddressSet.add(poolAddress);\n const cachedPool = await this.cache.get(\n this.POOL_KEY(this.chainId, poolAddress)\n );\n if (cachedPool) {\n if (!blockNumber || blockNumber && cachedPool.block == blockNumber) {\n poolAddressToPool[poolAddress] = cachedPool.pair;\n continue;\n }\n }\n poolsToGetTokenPairs.push([token0, token1]);\n poolsToGetAddresses.push(poolAddress);\n }\n log.info(\n {\n poolsFound: _16.map(\n Object.values(poolAddressToPool),\n (p) => p.token0.symbol + \" \" + p.token1.symbol\n ),\n poolsToGetTokenPairs: _16.map(\n poolsToGetTokenPairs,\n (t) => t[0].symbol + \" \" + t[1].symbol\n )\n },\n `Found ${Object.keys(poolAddressToPool).length} V2 pools already in local cache for block ${blockNumber}. About to get reserves for ${poolsToGetTokenPairs.length} pools.`\n );\n if (poolsToGetAddresses.length > 0) {\n const poolAccessor = await this.poolProvider.getPools(\n poolsToGetTokenPairs,\n providerConfig\n );\n for (const address of poolsToGetAddresses) {\n const pool = poolAccessor.getPoolByAddress(address);\n if (pool) {\n poolAddressToPool[address] = pool;\n await this.cache.set(this.POOL_KEY(this.chainId, address), {\n pair: pool,\n block: blockNumber\n });\n }\n }\n }\n return {\n getPool: (tokenA, tokenB) => {\n const { poolAddress } = this.getPoolAddress(tokenA, tokenB);\n return poolAddressToPool[poolAddress];\n },\n getPoolByAddress: (address) => poolAddressToPool[address],\n getAllPools: () => Object.values(poolAddressToPool)\n };\n }\n getPoolAddress(tokenA, tokenB) {\n return this.poolProvider.getPoolAddress(tokenA, tokenB);\n }\n};\n\n// src/providers/v2/caching-subgraph-provider.ts\nvar CachingV2SubgraphProvider2 = class {\n /**\n * Creates an instance of CachingV2SubgraphProvider.\n * @param chainId The chain id to use.\n * @param subgraphProvider The provider to use to get the subgraph pools when not in the cache.\n * @param cache Cache instance to hold cached pools.\n */\n constructor(chainId, subgraphProvider, cache) {\n this.chainId = chainId;\n this.subgraphProvider = subgraphProvider;\n this.cache = cache;\n this.SUBGRAPH_KEY = (chainId) => `subgraph-pools-v2-${chainId}`;\n }\n async getPools() {\n const cachedPools = await this.cache.get(this.SUBGRAPH_KEY(this.chainId));\n if (cachedPools) {\n return cachedPools;\n }\n const pools = await this.subgraphProvider.getPools();\n await this.cache.set(this.SUBGRAPH_KEY(this.chainId), pools);\n return pools;\n }\n};\nvar V2QuoteProvider = class {\n /* eslint-disable @typescript-eslint/no-empty-function */\n constructor() {\n }\n /* eslint-enable @typescript-eslint/no-empty-function */\n async getQuotesManyExactIn(amountIns, routes) {\n return this.getQuotes(amountIns, routes, TradeType.EXACT_INPUT);\n }\n async getQuotesManyExactOut(amountOuts, routes) {\n return this.getQuotes(amountOuts, routes, TradeType.EXACT_OUTPUT);\n }\n async getQuotes(amounts, routes, tradeType) {\n const routesWithQuotes = [];\n const debugStrs = [];\n for (const route of routes) {\n const amountQuotes = [];\n let insufficientInputAmountErrorCount = 0;\n let insufficientReservesErrorCount = 0;\n for (const amount of amounts) {\n try {\n if (tradeType == TradeType.EXACT_INPUT) {\n let outputAmount = amount.wrapped;\n for (const pair of route.pairs) {\n const [outputAmountNew] = pair.getOutputAmount(outputAmount);\n outputAmount = outputAmountNew;\n }\n amountQuotes.push({\n amount,\n quote: outputAmount.quotient\n });\n } else {\n let inputAmount = amount.wrapped;\n for (let i = route.pairs.length - 1; i >= 0; i--) {\n const pair = route.pairs[i];\n [inputAmount] = pair.getInputAmount(inputAmount);\n }\n amountQuotes.push({\n amount,\n quote: inputAmount.quotient\n });\n }\n } catch (err) {\n if (err instanceof InsufficientInputAmountError) {\n insufficientInputAmountErrorCount = insufficientInputAmountErrorCount + 1;\n amountQuotes.push({ amount, quote: null });\n } else if (err instanceof InsufficientReservesError) {\n insufficientReservesErrorCount = insufficientReservesErrorCount + 1;\n amountQuotes.push({ amount, quote: null });\n } else {\n throw err;\n }\n }\n }\n if (insufficientInputAmountErrorCount > 0 || insufficientReservesErrorCount > 0) {\n debugStrs.push(\n `${[\n routeToString(route)\n ]} Input: ${insufficientInputAmountErrorCount} Reserves: ${insufficientReservesErrorCount} }`\n );\n }\n routesWithQuotes.push([route, amountQuotes]);\n }\n if (debugStrs.length > 0) {\n log.info({ debugStrs }, `Failed quotes for V2 routes`);\n }\n return {\n routesWithQuotes\n };\n }\n};\nvar BASES_TO_CHECK_TRADES_AGAINST2 = {\n [ChainId.PULSECHAIN]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.PULSECHAIN],\n eUSDC_PULSECHAIN,\n eUSDT_PULSECHAIN,\n eWBTC_PULSECHAIN,\n eDAI_PULSECHAIN,\n PLSX_PULSECHAIN,\n eHEX_PULSECHAIN,\n HEX_PULSECHAIN,\n INC_PULSECHAIN,\n WETH_PULSECHAIN\n ],\n [ChainId.PULSECHAIN_TESTNET]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.PULSECHAIN_TESTNET],\n PLSX_TESTNET,\n INC_TESTNET,\n HEX_TESTNET,\n tDAI_TESTNET\n ]\n};\nvar StaticV2SubgraphProvider = class {\n constructor(chainId) {\n this.chainId = chainId;\n }\n async getPools(tokenIn, tokenOut) {\n log.info(\"In static subgraph provider for V2\");\n const bases = BASES_TO_CHECK_TRADES_AGAINST2[this.chainId];\n const basePairs = _16.flatMap(\n bases,\n (base) => bases.map((otherBase) => [base, otherBase])\n );\n if (tokenIn && tokenOut) {\n basePairs.push(\n [tokenIn, tokenOut],\n ...bases.map((base) => [tokenIn, base]),\n ...bases.map((base) => [tokenOut, base])\n );\n }\n const pairs = _16(basePairs).filter(\n (tokens) => Boolean(tokens[0] && tokens[1])\n ).filter(\n ([tokenA, tokenB]) => tokenA.address !== tokenB.address && !tokenA.equals(tokenB)\n ).value();\n const poolAddressSet = /* @__PURE__ */ new Set();\n const subgraphPools = _16(pairs).map(([tokenA, tokenB]) => {\n const poolAddress = PairV2.getAddress(tokenA, tokenB);\n if (poolAddressSet.has(poolAddress)) {\n return void 0;\n }\n poolAddressSet.add(poolAddress);\n const [token0, token1] = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA];\n return {\n id: poolAddress,\n liquidity: \"100\",\n token0: {\n id: token0.address\n },\n token1: {\n id: token1.address\n },\n supply: 100,\n reserve: 100,\n reserveUSD: 100\n };\n }).compact().value();\n return subgraphPools;\n }\n};\nvar SUBGRAPH_URL_BY_CHAIN2 = {\n [ChainId.PULSECHAIN]: \"https://graph.pulsechain.com/subgraphs/name/pulsechain/pulsexv2\",\n [ChainId.PULSECHAIN_TESTNET]: \"https://graph.v4.testnet.pulsechain.com/subgraphs/name/pulsechain/pulsexv2\"\n};\nvar threshold2 = 0.025;\nvar PAGE_SIZE2 = 1e3;\nvar V2SubgraphProvider2 = class {\n constructor(chainId, retries = 2, timeout = 36e4, rollback = true, pageSize = PAGE_SIZE2) {\n this.chainId = chainId;\n this.retries = retries;\n this.timeout = timeout;\n this.rollback = rollback;\n this.pageSize = pageSize;\n const subgraphUrl = SUBGRAPH_URL_BY_CHAIN2[this.chainId];\n if (!subgraphUrl) {\n throw new Error(`No subgraph url for chain id: ${this.chainId}`);\n }\n this.client = new GraphQLClient(subgraphUrl, { fetch });\n }\n async getPools(_tokenIn, _tokenOut, providerConfig) {\n let blockNumber = providerConfig?.blockNumber ? await providerConfig.blockNumber : void 0;\n const query2 = gql`\n query getPools($pageSize: Int!, $id: String) {\n pairs(\n first: $pageSize\n ${blockNumber ? `block: { number: ${blockNumber} }` : ``}\n where: { id_gt: $id }\n ) {\n id\n token0 { id, symbol }\n token1 { id, symbol }\n totalSupply\n trackedReservePLS\n reserveUSD\n }\n }\n `;\n let pools = [];\n log.info(\n `Getting V2 pools from the subgraph with page size ${this.pageSize}${providerConfig?.blockNumber ? ` as of block ${providerConfig?.blockNumber}` : \"\"}.`\n );\n await retry7(\n async () => {\n const timeout = new Timeout();\n const getPools = async () => {\n let lastId = \"\";\n let pairs = [];\n let pairsPage = [];\n do {\n await retry7(\n async () => {\n const poolsResult = await this.client.request(query2, {\n pageSize: this.pageSize,\n id: lastId\n });\n pairsPage = poolsResult.pairs;\n pairs = pairs.concat(pairsPage);\n lastId = pairs[pairs.length - 1].id;\n },\n {\n retries: this.retries,\n onRetry: (err, retry9) => {\n pools = [];\n log.info(\n { err },\n `Failed request for page of pools from subgraph. Retry attempt: ${retry9}`\n );\n }\n }\n );\n } while (pairsPage.length > 0);\n return pairs;\n };\n try {\n const getPoolsPromise = getPools();\n const timerPromise = timeout.set(this.timeout).then(() => {\n throw new Error(\n `Timed out getting pools from subgraph: ${this.timeout}`\n );\n });\n pools = await Promise.race([getPoolsPromise, timerPromise]);\n return;\n } catch (err) {\n throw err;\n } finally {\n timeout.clear();\n }\n },\n {\n retries: this.retries,\n onRetry: (err, retry9) => {\n if (this.rollback && blockNumber && _16.includes(err.message, \"indexed up to\")) {\n blockNumber = BigInt(blockNumber) - 10n;\n log.info(\n `Detected subgraph indexing error. Rolled back block number to: ${blockNumber}`\n );\n }\n pools = [];\n log.info(\n { err },\n `Failed to get pools from subgraph. Retry attempt: ${retry9}`\n );\n }\n }\n );\n const poolsSanitized = pools.filter((pool) => {\n return parseFloat(pool.trackedReservePLS) > threshold2;\n }).map((pool) => {\n return {\n id: pool.id.toLowerCase(),\n token0: {\n id: pool.token0.id.toLowerCase()\n },\n token1: {\n id: pool.token1.id.toLowerCase()\n },\n supply: parseFloat(pool.totalSupply),\n reserve: parseFloat(pool.trackedReservePLS),\n reserveUSD: parseFloat(pool.reserveUSD)\n };\n });\n log.info(\n `Got ${pools.length} V2 pools from the subgraph. ${poolsSanitized.length} after filtering`\n );\n return poolsSanitized;\n }\n};\n\n// src/providers/v2/subgraph-provider-with-fallback.ts\nvar V2SubgraphProviderWithFallBacks = class {\n /**\n * Creates an instance of V2SubgraphProviderWithFallBacks.\n * @param fallbacks Ordered list of `IV2SubgraphProvider` to try to get pools from.\n */\n constructor(fallbacks) {\n this.fallbacks = fallbacks;\n }\n async getPools(tokenIn, tokenOut, providerConfig) {\n for (let i = 0; i < this.fallbacks.length; i++) {\n const provider = this.fallbacks[i];\n try {\n const pools = await provider.getPools(\n tokenIn,\n tokenOut,\n providerConfig\n );\n return pools;\n } catch (err) {\n log.info(`Failed to get subgraph pools for V2 from fallback #${i}`);\n }\n }\n throw new Error(\"Failed to get subgraph pools from any providers\");\n }\n};\n\n// src/providers/v2/uri-subgraph-provider.ts\nvar V2URISubgraphProvider = class extends URISubgraphProvider {\n};\n\nexport { ARB_GASINFO_ADDRESS, AlphaRouter, BaseQuoter, BlockConflictError, CACHE_SEED_TOKENS, CHAIN_IDS_LIST, CacheMode, CachedRoute, CachedRoutes, CachingGasStationProvider, CachingTokenListProvider, CachingTokenProviderWithFallback, CachingV1PoolProvider, CachingV1SubgraphProvider2 as CachingV1SubgraphProvider, CachingV2PoolProvider, CachingV2SubgraphProvider2 as CachingV2SubgraphProvider, ChainName, CurrencyAmount, DAI_ON, EIP1559GasPriceProvider, ETHGasStationInfoProvider2 as ETHGasStationInfoProvider, EthEstimateGasSimulator, ExtendedEther, FallbackTenderlySimulator, HEX_PULSECHAIN, HEX_TESTNET, ID_TO_CHAIN_ID, ID_TO_NETWORK_NAME, ID_TO_PROVIDER, IGasPriceProvider, IMetric, IMulticallProvider, INC_PULSECHAIN, INC_TESTNET, IOnChainGasModelFactory, IRouteCachingProvider2 as IRouteCachingProvider, IRouter, ISwapToRatio, IV1GasModelFactory, IV2GasModelFactory, LegacyGasPriceProvider, MAX_UINT160, MULTICALL2_ADDRESS, MapWithLowerCaseKey, MetricLogger, MetricLoggerUnit, MixedQuoter, MixedRoute2 as MixedRoute, MixedRouteWithValidQuote2 as MixedRouteWithValidQuote, NATIVE_CURRENCY, NATIVE_NAMES_BY_ID, NativeCurrencyName, NodeJSCache, OVM_GASPRICE_ADDRESS, OnChainGasPriceProvider, OnChainQuoteProvider, PERMIT2_ADDRESS, PLSX_PULSECHAIN, PLSX_TESTNET, PULSEX_MULTICALL_ADDRESSES, PULSEX_QUOTER_ADDRESSES, PULSEX_SWAP_ROUTER_ADDRESSES, ProviderBlockHeaderError, ProviderGasError, ProviderTimeoutError, QUOTER_V2_ADDRESSES, SUPPORTED_CHAINS, SimulationStatus, Simulator2 as Simulator, StaticGasPriceProvider, StaticV1SubgraphProvider, StaticV2SubgraphProvider, SuccessRateError, SwapRouterProvider, SwapToRatioStatus, SwapType, TOKEN_VALIDATOR_ADDRESSES, TO_PROTOCOL, TenderlySimulator, TokenProvider, TokenValidationResult, TokenValidatorProvider, UNIVERSAL_ROUTER_ADDRESS, URISubgraphProvider, USDC_ON, USDT_ON, UniswapMulticallProvider, V1PoolProvider, V1QuoteProvider, V1Quoter, V1Route, V1RouteWithValidQuote2 as V1RouteWithValidQuote, V1SubgraphProvider2 as V1SubgraphProvider, V1SubgraphProviderWithFallBacks, V1URISubgraphProvider, V1_SUPPORTED, V2PoolProvider, V2QuoteProvider, V2Quoter, V2Route, V2RouteWithValidQuote2 as V2RouteWithValidQuote, V2SubgraphProvider2 as V2SubgraphProvider, V2SubgraphProviderWithFallBacks, V2URISubgraphProvider, V2_SUPPORTED, V3_CORE_FACTORY_ADDRESSES, WETH9, WETH_PULSECHAIN, WNATIVE_ON, WRAPPED_NATIVE_CURRENCY, eDAI_PULSECHAIN, eHEX_PULSECHAIN, eUSDC_PULSECHAIN, eUSDT_PULSECHAIN, eWBTC_PULSECHAIN, log, metric, nativeOnChain, parseAmount, parseFeeAmount, poolToString, routeAmountToString, routeAmountsToString, routeToString, setGlobalLogger, setGlobalMetric, tDAI_TESTNET, unparseFeeAmount, usdGasTokensByChain };\n","export enum Protocol {\n\tV1 = 'V1',\n\tV2 = 'V2',\n\tMIXED = 'MIXED',\n}\n","import invariant from 'tiny-invariant'\n\nimport { Currency, PairV1, PairV2, Price, Token } from '@pulsex/sdk'\n\ntype TPool = PairV1 | PairV2\n\n/**\n * Represents a list of pools or pairs through which a swap can occur\n * @template TInput The input token\n * @template TOutput The output token\n */\nexport class MixedRouteSDK {\n public readonly pools: TPool[]\n public readonly path: Token[]\n public readonly input: TInput\n public readonly output: TOutput\n\n private _midPrice: Price | null = null\n\n /**\n * Creates an instance of route.\n * @param pools An array of `TPool` objects (pools or pairs), ordered by the route the swap will take\n * @param input The input token\n * @param output The output token\n */\n public constructor(pools: TPool[], input: TInput, output: TOutput) {\n invariant(pools.length > 0, 'POOLS')\n\n const chainId = pools[0].chainId\n const allOnSameChain = pools.every((pool) => pool.chainId === chainId)\n invariant(allOnSameChain, 'CHAIN_IDS')\n\n const wrappedInput = input.wrapped\n invariant(pools[0].involvesToken(wrappedInput), 'INPUT')\n\n invariant(pools[pools.length - 1].involvesToken(output.wrapped), 'OUTPUT')\n\n /**\n * Normalizes token0-token1 order and selects the next token/fee step to add to the path\n * */\n const tokenPath: Token[] = [wrappedInput]\n for (const [i, pool] of pools.entries()) {\n const currentInputToken = tokenPath[i]\n invariant(currentInputToken.equals(pool.token0) || currentInputToken.equals(pool.token1), 'PATH')\n const nextToken = currentInputToken.equals(pool.token0) ? pool.token1 : pool.token0\n tokenPath.push(nextToken)\n }\n\n this.pools = pools\n this.path = tokenPath\n this.input = input\n // @ts-ignore\n this.output = output ?? tokenPath[tokenPath.length - 1]\n }\n\n public get chainId(): number {\n return this.pools[0].chainId\n }\n\n /**\n * Returns the mid price of the route\n */\n public get midPrice(): Price {\n if (this._midPrice !== null) return this._midPrice\n\n const price = this.pools.slice(1).reduce(\n ({ nextInput, price }, pool) => {\n return nextInput.equals(pool.token0)\n ? {\n nextInput: pool.token1,\n price: price.multiply(pool.token0Price),\n }\n : {\n nextInput: pool.token0,\n price: price.multiply(pool.token1Price),\n }\n },\n this.pools[0].token0.equals(this.input.wrapped)\n ? {\n nextInput: this.pools[0].token1,\n price: this.pools[0].token0Price,\n }\n : {\n nextInput: this.pools[0].token0,\n price: this.pools[0].token1Price,\n }\n ).price\n\n return (this._midPrice = new Price(this.input, this.output, price.denominator, price.numerator))\n }\n}\n","import {\n BestTradeOptions,\n Currency,\n Fraction,\n Percent,\n PairV1,\n PairV2,\n Price,\n sortedInsert,\n CurrencyAmount,\n ZERO,\n ONE,\n TradeType,\n Token\n} from '@pulsex/sdk'\nimport invariant from 'tiny-invariant'\nimport { MixedRouteSDK } from './route'\n\n/**\n * Trades comparator, an extension of the input output comparator that also considers other dimensions of the trade in ranking them\n * @template TInput The input token, either Ether or an ERC-20\n * @template TOutput The output token, either Ether or an ERC-20\n * @template TTradeType The trade type, either exact input or exact output\n * @param a The first trade to compare\n * @param b The second trade to compare\n * @returns A sorted ordering for two neighboring elements in a trade array\n */\nexport function tradeComparator(\n a: MixedRouteTrade,\n b: MixedRouteTrade\n) {\n // must have same input and output token for comparison\n invariant(a.inputAmount.currency.equals(b.inputAmount.currency), 'INPUT_CURRENCY')\n invariant(a.outputAmount.currency.equals(b.outputAmount.currency), 'OUTPUT_CURRENCY')\n if (a.outputAmount.equalTo(b.outputAmount)) {\n if (a.inputAmount.equalTo(b.inputAmount)) {\n // consider the number of hops since each hop costs gas\n const aHops = a.swaps.reduce((total, cur) => total + cur.route.path.length, 0)\n const bHops = b.swaps.reduce((total, cur) => total + cur.route.path.length, 0)\n return aHops - bHops\n }\n // trade A requires less input than trade B, so A should come first\n if (a.inputAmount.lessThan(b.inputAmount)) {\n return -1\n } else {\n return 1\n }\n } else {\n // tradeA has less output than trade B, so should come second\n if (a.outputAmount.lessThan(b.outputAmount)) {\n return 1\n } else {\n return -1\n }\n }\n}\n\n/**\n * Represents a trade executed against a set of routes where some percentage of the input is\n * split across each route.\n *\n * Each route has its own set of pools. Pools can not be re-used across routes.\n *\n * Does not account for slippage, i.e., changes in price environment that can occur between\n * the time the trade is submitted and when it is executed.\n * @notice This class is functionally the same as the `Trade` class in the `@uniswap/v3-sdk` package, aside from typing and some input validation.\n * @template TInput The input token, either Ether or an ERC-20\n * @template TOutput The output token, either Ether or an ERC-20\n * @template TTradeType The trade type, either exact input or exact output\n */\nexport class MixedRouteTrade {\n /**\n * @deprecated Deprecated in favor of 'swaps' property. If the trade consists of multiple routes\n * this will return an error.\n *\n * When the trade consists of just a single route, this returns the route of the trade,\n * i.e. which pools the trade goes through.\n */\n public get route(): MixedRouteSDK {\n invariant(this.swaps.length == 1, 'MULTIPLE_ROUTES')\n return this.swaps[0].route\n }\n\n /**\n * The swaps of the trade, i.e. which routes and how much is swapped in each that\n * make up the trade.\n */\n public readonly swaps: {\n route: MixedRouteSDK\n inputAmount: CurrencyAmount\n outputAmount: CurrencyAmount\n }[]\n\n /**\n * The type of the trade, either exact in or exact out.\n */\n public readonly tradeType: TTradeType\n\n /**\n * The cached result of the input amount computation\n * @private\n */\n private _inputAmount: CurrencyAmount | undefined\n\n /**\n * The input amount for the trade assuming no slippage.\n */\n public get inputAmount(): CurrencyAmount {\n if (this._inputAmount) {\n return this._inputAmount\n }\n\n const inputCurrency = this.swaps[0].inputAmount.currency\n const totalInputFromRoutes = this.swaps\n .map(({ inputAmount }) => inputAmount)\n .reduce((total, cur) => total.add(cur), CurrencyAmount.fromRawAmount(inputCurrency, 0))\n\n this._inputAmount = totalInputFromRoutes\n return this._inputAmount\n }\n\n /**\n * The cached result of the output amount computation\n * @private\n */\n private _outputAmount: CurrencyAmount | undefined\n\n /**\n * The output amount for the trade assuming no slippage.\n */\n public get outputAmount(): CurrencyAmount {\n if (this._outputAmount) {\n return this._outputAmount\n }\n\n const outputCurrency = this.swaps[0].outputAmount.currency\n const totalOutputFromRoutes = this.swaps\n .map(({ outputAmount }) => outputAmount)\n .reduce((total, cur) => total.add(cur), CurrencyAmount.fromRawAmount(outputCurrency, 0))\n\n this._outputAmount = totalOutputFromRoutes\n return this._outputAmount\n }\n\n /**\n * The cached result of the computed execution price\n * @private\n */\n private _executionPrice: Price | undefined\n\n /**\n * The price expressed in terms of output amount/input amount.\n */\n public get executionPrice(): Price {\n return (\n this._executionPrice ??\n (this._executionPrice = new Price(\n this.inputAmount.currency,\n this.outputAmount.currency,\n this.inputAmount.quotient,\n this.outputAmount.quotient\n ))\n )\n }\n\n /**\n * The cached result of the price impact computation\n * @private\n */\n private _priceImpact: Percent | undefined\n\n /**\n * Returns the percent difference between the route's mid price and the price impact\n */\n public get priceImpact(): Percent {\n if (this._priceImpact) {\n return this._priceImpact\n }\n\n let spotOutputAmount = CurrencyAmount.fromRawAmount(this.outputAmount.currency, 0)\n for (const { route, inputAmount } of this.swaps) {\n const midPrice = route.midPrice\n spotOutputAmount = spotOutputAmount.add(midPrice.quote(inputAmount))\n }\n\n const priceImpact = spotOutputAmount.subtract(this.outputAmount).divide(spotOutputAmount)\n this._priceImpact = new Percent(priceImpact.numerator, priceImpact.denominator)\n\n return this._priceImpact\n }\n\n /**\n * Constructs a trade by simulating swaps through the given route\n * @template TInput The input token, either Ether or an ERC-20.\n * @template TOutput The output token, either Ether or an ERC-20.\n * @template TTradeType The type of the trade, either exact in or exact out.\n * @param route route to swap through\n * @param amount the amount specified, either input or output, depending on tradeType\n * @param tradeType whether the trade is an exact input or exact output swap\n * @returns The route\n */\n public static async fromRoute(\n route: MixedRouteSDK,\n amount: TTradeType extends TradeType.EXACT_INPUT ? CurrencyAmount : CurrencyAmount,\n tradeType: TTradeType\n ): Promise> {\n const amounts: CurrencyAmount[] = new Array(route.path.length)\n let inputAmount: CurrencyAmount\n let outputAmount: CurrencyAmount\n\n invariant(tradeType === TradeType.EXACT_INPUT, 'TRADE_TYPE')\n\n invariant(amount.currency.equals(route.input), 'INPUT')\n amounts[0] = amount.wrapped\n for (let i = 0; i < route.path.length - 1; i++) {\n const pool = route.pools[i]\n const [outputAmount] = await pool.getOutputAmount(amounts[i])\n amounts[i + 1] = outputAmount\n }\n inputAmount = CurrencyAmount.fromFractionalAmount(route.input, amount.numerator, amount.denominator)\n outputAmount = CurrencyAmount.fromFractionalAmount(\n route.output,\n amounts[amounts.length - 1].numerator,\n amounts[amounts.length - 1].denominator\n )\n\n return new MixedRouteTrade({\n routes: [{ inputAmount, outputAmount, route }],\n tradeType,\n })\n }\n\n /**\n * Constructs a trade from routes by simulating swaps\n *\n * @template TInput The input token, either Ether or an ERC-20.\n * @template TOutput The output token, either Ether or an ERC-20.\n * @template TTradeType The type of the trade, either exact in or exact out.\n * @param routes the routes to swap through and how much of the amount should be routed through each\n * @param tradeType whether the trade is an exact input or exact output swap\n * @returns The trade\n */\n public static async fromRoutes(\n routes: {\n amount: TTradeType extends TradeType.EXACT_INPUT ? CurrencyAmount : CurrencyAmount\n route: MixedRouteSDK\n }[],\n tradeType: TTradeType\n ): Promise> {\n const populatedRoutes: {\n route: MixedRouteSDK\n inputAmount: CurrencyAmount\n outputAmount: CurrencyAmount\n }[] = []\n\n invariant(tradeType === TradeType.EXACT_INPUT, 'TRADE_TYPE')\n\n for (const { route, amount } of routes) {\n const amounts: CurrencyAmount[] = new Array(route.path.length)\n let inputAmount: CurrencyAmount\n let outputAmount: CurrencyAmount\n\n invariant(amount.currency.equals(route.input), 'INPUT')\n inputAmount = CurrencyAmount.fromFractionalAmount(route.input, amount.numerator, amount.denominator)\n amounts[0] = CurrencyAmount.fromFractionalAmount(route.input.wrapped, amount.numerator, amount.denominator)\n\n for (let i = 0; i < route.path.length - 1; i++) {\n const pool = route.pools[i]\n const [outputAmount] = await pool.getOutputAmount(amounts[i])\n amounts[i + 1] = outputAmount\n }\n\n outputAmount = CurrencyAmount.fromFractionalAmount(\n route.output,\n amounts[amounts.length - 1].numerator,\n amounts[amounts.length - 1].denominator\n )\n\n populatedRoutes.push({ route, inputAmount, outputAmount })\n }\n\n return new MixedRouteTrade({\n routes: populatedRoutes,\n tradeType,\n })\n }\n\n /**\n * Creates a trade without computing the result of swapping through the route. Useful when you have simulated the trade\n * elsewhere and do not have any tick data\n * @template TInput The input token, either Ether or an ERC-20\n * @template TOutput The output token, either Ether or an ERC-20\n * @template TTradeType The type of the trade, either exact in or exact out\n * @param constructorArguments The arguments passed to the trade constructor\n * @returns The unchecked trade\n */\n public static createUncheckedTrade<\n TInput extends Currency,\n TOutput extends Currency,\n TTradeType extends TradeType\n >(constructorArguments: {\n route: MixedRouteSDK\n inputAmount: CurrencyAmount\n outputAmount: CurrencyAmount\n tradeType: TTradeType\n }): MixedRouteTrade {\n return new MixedRouteTrade({\n ...constructorArguments,\n routes: [\n {\n inputAmount: constructorArguments.inputAmount,\n outputAmount: constructorArguments.outputAmount,\n route: constructorArguments.route,\n },\n ],\n })\n }\n\n /**\n * Creates a trade without computing the result of swapping through the routes. Useful when you have simulated the trade\n * elsewhere and do not have any tick data\n * @template TInput The input token, either Ether or an ERC-20\n * @template TOutput The output token, either Ether or an ERC-20\n * @template TTradeType The type of the trade, either exact in or exact out\n * @param constructorArguments The arguments passed to the trade constructor\n * @returns The unchecked trade\n */\n public static createUncheckedTradeWithMultipleRoutes<\n TInput extends Currency,\n TOutput extends Currency,\n TTradeType extends TradeType\n >(constructorArguments: {\n routes: {\n route: MixedRouteSDK\n inputAmount: CurrencyAmount\n outputAmount: CurrencyAmount\n }[]\n tradeType: TTradeType\n }): MixedRouteTrade {\n return new MixedRouteTrade(constructorArguments)\n }\n\n /**\n * Construct a trade by passing in the pre-computed property values\n * @param routes The routes through which the trade occurs\n * @param tradeType The type of trade, exact input or exact output\n */\n private constructor({\n routes,\n tradeType,\n }: {\n routes: {\n route: MixedRouteSDK\n inputAmount: CurrencyAmount\n outputAmount: CurrencyAmount\n }[]\n tradeType: TTradeType\n }) {\n const inputCurrency = routes[0].inputAmount.currency\n const outputCurrency = routes[0].outputAmount.currency\n invariant(\n routes.every(({ route }) => inputCurrency.wrapped.equals(route.input.wrapped)),\n 'INPUT_CURRENCY_MATCH'\n )\n invariant(\n routes.every(({ route }) => outputCurrency.wrapped.equals(route.output.wrapped)),\n 'OUTPUT_CURRENCY_MATCH'\n )\n\n const numPools = routes.map(({ route }) => route.pools.length).reduce((total, cur) => total + cur, 0)\n const poolAddressSet = new Set()\n for (const { route } of routes) {\n for (const pool of route.pools) {\n pool instanceof PairV1\n ? poolAddressSet.add(PairV1.getAddress(pool.token0, pool.token1))\n : poolAddressSet.add(PairV2.getAddress(pool.token0, pool.token1))\n }\n }\n\n invariant(numPools == poolAddressSet.size, 'POOLS_DUPLICATED')\n\n invariant(tradeType === TradeType.EXACT_INPUT, 'TRADE_TYPE')\n\n this.swaps = routes\n this.tradeType = tradeType\n }\n\n /**\n * Get the minimum amount that must be received from this trade for the given slippage tolerance\n * @param slippageTolerance The tolerance of unfavorable slippage from the execution price of this trade\n * @returns The amount out\n */\n public minimumAmountOut(slippageTolerance: Percent, amountOut = this.outputAmount): CurrencyAmount {\n invariant(!slippageTolerance.lessThan(ZERO), 'SLIPPAGE_TOLERANCE')\n /// does not support exactOutput, as enforced in the constructor\n const slippageAdjustedAmountOut = new Fraction(ONE)\n .add(slippageTolerance)\n .invert()\n .multiply(amountOut.quotient).quotient\n return CurrencyAmount.fromRawAmount(amountOut.currency, slippageAdjustedAmountOut)\n }\n\n /**\n * Get the maximum amount in that can be spent via this trade for the given slippage tolerance\n * @param slippageTolerance The tolerance of unfavorable slippage from the execution price of this trade\n * @returns The amount in\n */\n public maximumAmountIn(slippageTolerance: Percent, amountIn = this.inputAmount): CurrencyAmount {\n invariant(!slippageTolerance.lessThan(ZERO), 'SLIPPAGE_TOLERANCE')\n return amountIn\n /// does not support exactOutput\n }\n\n /**\n * Return the execution price after accounting for slippage tolerance\n * @param slippageTolerance the allowed tolerated slippage\n * @returns The execution price\n */\n public worstExecutionPrice(slippageTolerance: Percent): Price {\n return new Price(\n this.inputAmount.currency,\n this.outputAmount.currency,\n this.maximumAmountIn(slippageTolerance).quotient,\n this.minimumAmountOut(slippageTolerance).quotient\n )\n }\n\n /**\n * Given a list of pools, and a fixed amount in, returns the top `maxNumResults` trades that go from an input token\n * amount to an output token, making at most `maxHops` hops.\n * Note this does not consider aggregation, as routes are linear. It's possible a better route exists by splitting\n * the amount in among multiple routes.\n * @param pools the pools to consider in finding the best trade\n * @param nextAmountIn exact amount of input currency to spend\n * @param currencyOut the desired currency out\n * @param maxNumResults maximum number of results to return\n * @param maxHops maximum number of hops a returned trade can make, e.g. 1 hop goes through a single pool\n * @param currentPools used in recursion; the current list of pools\n * @param currencyAmountIn used in recursion; the original value of the currencyAmountIn parameter\n * @param bestTrades used in recursion; the current list of best trades\n * @returns The exact in trade\n */\n public static async bestTradeExactIn(\n pools: (PairV1 | PairV2)[],\n currencyAmountIn: CurrencyAmount,\n currencyOut: TOutput,\n { maxNumResults = 3, maxHops = 3 }: BestTradeOptions = {},\n // used in recursion.\n currentPools: (PairV1 | PairV2)[] = [],\n nextAmountIn: CurrencyAmount = currencyAmountIn,\n bestTrades: MixedRouteTrade[] = []\n ): Promise[]> {\n invariant(pools.length > 0, 'POOLS')\n invariant(maxHops > 0, 'MAX_HOPS')\n invariant(currencyAmountIn === nextAmountIn || currentPools.length > 0, 'INVALID_RECURSION')\n\n const amountIn = nextAmountIn.wrapped\n const tokenOut = currencyOut.wrapped\n for (let i = 0; i < pools.length; i++) {\n const pool = pools[i]\n // pool irrelevant\n if (!pool.token0.equals(amountIn.currency) && !pool.token1.equals(amountIn.currency)) continue\n if (pool instanceof PairV1) {\n if ((pool as PairV1).reserve0.equalTo(ZERO) || (pool as PairV1).reserve1.equalTo(ZERO)) continue\n }\n if (pool instanceof PairV2) {\n if ((pool as PairV2).reserve0.equalTo(ZERO) || (pool as PairV2).reserve1.equalTo(ZERO)) continue\n }\n\n let amountOut: CurrencyAmount\n try {\n ;[amountOut] = await pool.getOutputAmount(amountIn)\n } catch (error) {\n // input too low\n // @ts-ignore[2571] error is unknown\n if (error.isInsufficientInputAmountError) {\n continue\n }\n throw error\n }\n // we have arrived at the output token, so this is the final trade of one of the paths\n if (amountOut.currency.isToken && amountOut.currency.equals(tokenOut)) {\n sortedInsert(\n bestTrades,\n await MixedRouteTrade.fromRoute(\n new MixedRouteSDK([...currentPools, pool], currencyAmountIn.currency, currencyOut),\n currencyAmountIn,\n TradeType.EXACT_INPUT\n ),\n maxNumResults,\n tradeComparator\n )\n } else if (maxHops > 1 && pools.length > 1) {\n const poolsExcludingThisPool = pools.slice(0, i).concat(pools.slice(i + 1, pools.length))\n\n // otherwise, consider all the other paths that lead from this token as long as we have not exceeded maxHops\n await MixedRouteTrade.bestTradeExactIn(\n poolsExcludingThisPool,\n currencyAmountIn,\n currencyOut,\n {\n maxNumResults,\n maxHops: maxHops - 1,\n },\n [...currentPools, pool],\n amountOut,\n bestTrades\n )\n }\n }\n\n return bestTrades\n }\n}\n","import { Currency, Price, Token, RouteV1 as V1RouteSDK, RouteV2 as V2RouteSDK, PairV1, PairV2 } from '@pulsex/sdk'\nimport { Protocol } from './protocol'\nimport { MixedRouteSDK } from './mixedRoute/route'\n\nexport interface IRoute {\n\tprotocol: Protocol\n\tpools: TPool[]\n\tpath: Token[]\n\tmidPrice: Price\n\tinput: TInput\n\toutput: TOutput\n}\n\n// V1 route wrapper\nexport class RouteV1\n\textends V1RouteSDK\n\timplements IRoute\n{\n\tpublic readonly protocol: Protocol = Protocol.V1\n\tpublic readonly pools: PairV1[]\n\n\tconstructor(v1Route: V1RouteSDK) {\n\t\tsuper(v1Route.pairs, v1Route.input, v1Route.output)\n\t\tthis.pools = this.pairs\n\t}\n}\n\n// V2 route wrapper\nexport class RouteV2\n\textends V2RouteSDK\n\timplements IRoute\n{\n\tpublic readonly protocol: Protocol = Protocol.V2\n\tpublic readonly pools: PairV2[]\n\n\tconstructor(v2Route: V2RouteSDK) {\n\t\tsuper(v2Route.pairs, v2Route.input, v2Route.output)\n\t\tthis.pools = this.pairs\n\t}\n}\n\n// Mixed route wrapper\nexport class MixedRoute\n\textends MixedRouteSDK\n\timplements IRoute\n{\n\tpublic readonly protocol: Protocol = Protocol.MIXED\n\n\tconstructor(mixedRoute: MixedRouteSDK) {\n\t\tsuper(mixedRoute.pools, mixedRoute.input, mixedRoute.output)\n\t}\n}\n","import {\n\tCurrency,\n\tCurrencyAmount,\n\tFraction,\n\tPercent,\n\tPrice,\n\tTradeType,\n\tPairV1,\n\tPairV2,\n\tRouteV1 as V1RouteSDK,\n\tTradeV1 as V1TradeSDK,\n\tRouteV2 as V2RouteSDK,\n\tTradeV2 as V2TradeSDK,\n\tONE,\n\tZERO,\n} from '@pulsex/sdk'\nimport invariant from 'tiny-invariant'\nimport { MixedRouteSDK } from './mixedRoute/route'\nimport { MixedRouteTrade as MixedRouteTradeSDK } from './mixedRoute/trade'\nimport { IRoute, MixedRoute, RouteV1, RouteV2 } from './route'\n\nexport class Trade {\n\tpublic readonly routes: IRoute[]\n\tpublic readonly tradeType: TTradeType\n\tprivate _outputAmount: CurrencyAmount | undefined\n\tprivate _inputAmount: CurrencyAmount | undefined\n\n\t/**\n\t * The swaps of the trade, i.e. which routes and how much is swapped in each that\n\t * make up the trade. May consist of swaps in v1 or v2.\n\t */\n\tpublic readonly swaps: {\n\t\troute: IRoute\n\t\tinputAmount: CurrencyAmount\n\t\toutputAmount: CurrencyAmount\n\t}[]\n\n\t// construct a trade across v1 and v2 routes from pre-computed amounts\n\tpublic constructor({\n\t\tv1Routes,\n\t\tv2Routes,\n\t\ttradeType,\n\t\tmixedRoutes,\n\t}: {\n\t\tv1Routes: {\n\t\t\troutev1: V1RouteSDK\n\t\t\tinputAmount: CurrencyAmount\n\t\t\toutputAmount: CurrencyAmount\n\t\t}[]\n\t\tv2Routes: {\n\t\t\troutev2: V2RouteSDK\n\t\t\tinputAmount: CurrencyAmount\n\t\t\toutputAmount: CurrencyAmount\n\t\t}[]\n\t\ttradeType: TTradeType\n\t\tmixedRoutes?: {\n\t\t\tmixedRoute: MixedRouteSDK\n\t\t\tinputAmount: CurrencyAmount\n\t\t\toutputAmount: CurrencyAmount\n\t\t}[]\n\t}) {\n\t\tthis.swaps = []\n\t\tthis.routes = []\n\t\t// wrap v1 routes\n\t\tfor (const { routev1, inputAmount, outputAmount } of v1Routes) {\n\t\t\tconst route = new RouteV1(routev1)\n\t\t\tthis.routes.push(route)\n\t\t\tthis.swaps.push({\n\t\t\t\troute,\n\t\t\t\tinputAmount,\n\t\t\t\toutputAmount,\n\t\t\t})\n\t\t}\n\t\t// wrap v2 routes\n\t\tfor (const { routev2, inputAmount, outputAmount } of v2Routes) {\n\t\t\tconst route = new RouteV2(routev2)\n\t\t\tthis.routes.push(route)\n\t\t\tthis.swaps.push({\n\t\t\t\troute,\n\t\t\t\tinputAmount,\n\t\t\t\toutputAmount,\n\t\t\t})\n\t\t}\n\t\t// wrap mixedRoutes\n\t\tif (mixedRoutes) {\n\t\t\tfor (const { mixedRoute, inputAmount, outputAmount } of mixedRoutes) {\n\t\t\t\tconst route = new MixedRoute(mixedRoute)\n\t\t\t\tthis.routes.push(route)\n\t\t\t\tthis.swaps.push({\n\t\t\t\t\troute,\n\t\t\t\t\tinputAmount,\n\t\t\t\t\toutputAmount,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tthis.tradeType = tradeType\n\n\t\t// each route must have the same input and output currency\n\t\tconst inputCurrency = this.swaps[0].inputAmount.currency\n\t\tconst outputCurrency = this.swaps[0].outputAmount.currency\n\t\tinvariant(\n\t\t\tthis.swaps.every(({ route }) => inputCurrency.wrapped.equals(route.input.wrapped)),\n\t\t\t'INPUT_CURRENCY_MATCH'\n\t\t)\n\t\tinvariant(\n\t\t\tthis.swaps.every(({ route }) => outputCurrency.wrapped.equals(route.output.wrapped)),\n\t\t\t'OUTPUT_CURRENCY_MATCH'\n\t\t)\n\n\t\t// pools must be unique inter protocols\n\t\tconst numPools = this.swaps.map(({ route }) => route.pools.length).reduce((total, cur) => total + cur, 0)\n\t\tconst poolAddressSet = new Set()\n\t\tfor (const { route } of this.swaps) {\n\t\t\tfor (const pool of route.pools) {\n\t\t\t\tif (pool instanceof PairV1) {\n\t\t\t\t\tpoolAddressSet.add(PairV1.getAddress(pool.token0, pool.token1))\n\t\t\t\t} else if (pool instanceof PairV2) {\n\t\t\t\t\tpoolAddressSet.add(PairV2.getAddress(pool.token0, pool.token1))\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error('Unexpected pool type in route when constructing trade object')\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tinvariant(numPools == poolAddressSet.size, 'POOLS_DUPLICATED')\n\t}\n\n\tpublic get inputAmount(): CurrencyAmount {\n\t\tif (this._inputAmount) {\n\t\t\treturn this._inputAmount\n\t\t}\n\n\t\tconst inputCurrency = this.swaps[0].inputAmount.currency\n\t\tconst totalInputFromRoutes = this.swaps\n\t\t\t.map(({ inputAmount }) => inputAmount)\n\t\t\t.reduce((total, cur) => total.add(cur), CurrencyAmount.fromRawAmount(inputCurrency, 0))\n\n\t\tthis._inputAmount = totalInputFromRoutes\n\t\treturn this._inputAmount\n\t}\n\n\tpublic get outputAmount(): CurrencyAmount {\n\t\tif (this._outputAmount) {\n\t\t\treturn this._outputAmount\n\t\t}\n\n\t\tconst outputCurrency = this.swaps[0].outputAmount.currency\n\t\tconst totalOutputFromRoutes = this.swaps\n\t\t\t.map(({ outputAmount }) => outputAmount)\n\t\t\t.reduce((total, cur) => total.add(cur), CurrencyAmount.fromRawAmount(outputCurrency, 0))\n\n\t\tthis._outputAmount = totalOutputFromRoutes\n\t\treturn this._outputAmount\n\t}\n\n\tprivate _executionPrice: Price | undefined\n\n\t/**\n\t * The price expressed in terms of output amount/input amount.\n\t */\n\tpublic get executionPrice(): Price {\n\t\treturn (\n\t\t\tthis._executionPrice ??\n\t\t\t(this._executionPrice = new Price(\n\t\t\t\tthis.inputAmount.currency,\n\t\t\t\tthis.outputAmount.currency,\n\t\t\t\tthis.inputAmount.quotient,\n\t\t\t\tthis.outputAmount.quotient\n\t\t\t))\n\t\t)\n\t}\n\n\t/**\n\t * The cached result of the price impact computation\n\t * @private\n\t */\n\tprivate _priceImpact: Percent | undefined\n\t/**\n\t * Returns the percent difference between the route's mid price and the price impact\n\t */\n\tpublic get priceImpact(): Percent {\n\t\tif (this._priceImpact) {\n\t\t\treturn this._priceImpact\n\t\t}\n\n\t\tlet spotOutputAmount = CurrencyAmount.fromRawAmount(this.outputAmount.currency, 0)\n\t\tfor (const { route, inputAmount } of this.swaps) {\n\t\t\tconst midPrice = route.midPrice\n\t\t\tspotOutputAmount = spotOutputAmount.add(midPrice.quote(inputAmount))\n\t\t}\n\n\t\tconst priceImpact = spotOutputAmount.subtract(this.outputAmount).divide(spotOutputAmount)\n\t\tthis._priceImpact = new Percent(priceImpact.numerator, priceImpact.denominator)\n\n\t\treturn this._priceImpact\n\t}\n\n\t/**\n\t * Get the minimum amount that must be received from this trade for the given slippage tolerance\n\t * @param slippageTolerance The tolerance of unfavorable slippage from the execution price of this trade\n\t * @returns The amount out\n\t */\n\tpublic minimumAmountOut(slippageTolerance: Percent, amountOut = this.outputAmount): CurrencyAmount {\n\t\tinvariant(!slippageTolerance.lessThan(ZERO), 'SLIPPAGE_TOLERANCE')\n\t\tif (this.tradeType === TradeType.EXACT_OUTPUT) {\n\t\t\treturn amountOut\n\t\t} else {\n\t\t\tconst slippageAdjustedAmountOut = new Fraction(ONE)\n\t\t\t\t.add(slippageTolerance)\n\t\t\t\t.invert()\n\t\t\t\t.multiply(amountOut.quotient).quotient\n\t\t\treturn CurrencyAmount.fromRawAmount(amountOut.currency, slippageAdjustedAmountOut)\n\t\t}\n\t}\n\n\t/**\n\t * Get the maximum amount in that can be spent via this trade for the given slippage tolerance\n\t * @param slippageTolerance The tolerance of unfavorable slippage from the execution price of this trade\n\t * @returns The amount in\n\t */\n\tpublic maximumAmountIn(slippageTolerance: Percent, amountIn = this.inputAmount): CurrencyAmount {\n\t\tinvariant(!slippageTolerance.lessThan(ZERO), 'SLIPPAGE_TOLERANCE')\n\t\tif (this.tradeType === TradeType.EXACT_INPUT) {\n\t\t\treturn amountIn\n\t\t} else {\n\t\t\tconst slippageAdjustedAmountIn = new Fraction(ONE).add(slippageTolerance).multiply(amountIn.quotient).quotient\n\t\t\treturn CurrencyAmount.fromRawAmount(amountIn.currency, slippageAdjustedAmountIn)\n\t\t}\n\t}\n\n\t/**\n\t * Return the execution price after accounting for slippage tolerance\n\t * @param slippageTolerance the allowed tolerated slippage\n\t * @returns The execution price\n\t */\n\tpublic worstExecutionPrice(slippageTolerance: Percent): Price {\n\t\treturn new Price(\n\t\t\tthis.inputAmount.currency,\n\t\t\tthis.outputAmount.currency,\n\t\t\tthis.maximumAmountIn(slippageTolerance).quotient,\n\t\t\tthis.minimumAmountOut(slippageTolerance).quotient\n\t\t)\n\t}\n\n\tpublic static async fromRoutes(\n\t\tv1Routes: {\n\t\t\troutev1: V1RouteSDK\n\t\t\tamount: TTradeType extends TradeType.EXACT_INPUT ? CurrencyAmount : CurrencyAmount\n\t\t}[],\n\t\tv2Routes: {\n\t\t\troutev2: V2RouteSDK\n\t\t\tamount: TTradeType extends TradeType.EXACT_INPUT ? CurrencyAmount : CurrencyAmount\n\t\t}[],\n\t\ttradeType: TTradeType,\n\t\tmixedRoutes?: {\n\t\t\tmixedRoute: MixedRouteSDK\n\t\t\tamount: TTradeType extends TradeType.EXACT_INPUT ? CurrencyAmount : CurrencyAmount\n\t\t}[]\n\t): Promise> {\n\t\tconst populatedV1Routes: {\n\t\t\troutev1: V1RouteSDK\n\t\t\tinputAmount: CurrencyAmount\n\t\t\toutputAmount: CurrencyAmount\n\t\t}[] = []\n\n\t\tconst populatedV2Routes: {\n\t\t\troutev2: V2RouteSDK\n\t\t\tinputAmount: CurrencyAmount\n\t\t\toutputAmount: CurrencyAmount\n\t\t}[] = []\n\n\t\tconst populatedMixedRoutes: {\n\t\t\tmixedRoute: MixedRouteSDK\n\t\t\tinputAmount: CurrencyAmount\n\t\t\toutputAmount: CurrencyAmount\n\t\t}[] = []\n\n\t\tfor (const { routev1, amount } of v1Routes) {\n\t\t\tconst v1Trade = new V1TradeSDK(routev1, amount, tradeType)\n\t\t\tconst { inputAmount, outputAmount } = v1Trade\n\n\t\t\tpopulatedV1Routes.push({\n\t\t\t\troutev1,\n\t\t\t\tinputAmount,\n\t\t\t\toutputAmount,\n\t\t\t})\n\t\t}\n\n\t\tfor (const { routev2, amount } of v2Routes) {\n\t\t\tconst v2Trade = new V2TradeSDK(routev2, amount, tradeType)\n\t\t\tconst { inputAmount, outputAmount } = v2Trade\n\n\t\t\tpopulatedV2Routes.push({\n\t\t\t\troutev2,\n\t\t\t\tinputAmount,\n\t\t\t\toutputAmount,\n\t\t\t})\n\t\t}\n\n\t\tif (mixedRoutes) {\n\t\t\tfor (const { mixedRoute, amount } of mixedRoutes) {\n\t\t\t\tconst mixedRouteTrade = await MixedRouteTradeSDK.fromRoute(mixedRoute, amount, tradeType)\n\t\t\t\tconst { inputAmount, outputAmount } = mixedRouteTrade\n\n\t\t\t\tpopulatedMixedRoutes.push({\n\t\t\t\t\tmixedRoute,\n\t\t\t\t\tinputAmount,\n\t\t\t\t\toutputAmount,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn new Trade({\n\t\t\tv1Routes: populatedV1Routes,\n\t\t\tv2Routes: populatedV2Routes,\n\t\t\tmixedRoutes: populatedMixedRoutes,\n\t\t\ttradeType,\n\t\t})\n\t}\n\n\tpublic static async fromRoute(\n\t\troute: V1RouteSDK | V2RouteSDK | MixedRouteSDK,\n\t\tamount: TTradeType extends TradeType.EXACT_INPUT ? CurrencyAmount : CurrencyAmount,\n\t\ttradeType: TTradeType\n\t): Promise> {\n\t\tlet v1Routes: {\n\t\t\troutev1: V1RouteSDK\n\t\t\tinputAmount: CurrencyAmount\n\t\t\toutputAmount: CurrencyAmount\n\t\t}[] = []\n\n\t\tlet v2Routes: {\n\t\t\troutev2: V2RouteSDK\n\t\t\tinputAmount: CurrencyAmount\n\t\t\toutputAmount: CurrencyAmount\n\t\t}[] = []\n\n\t\tlet mixedRoutes: {\n\t\t\tmixedRoute: MixedRouteSDK\n\t\t\tinputAmount: CurrencyAmount\n\t\t\toutputAmount: CurrencyAmount\n\t\t}[] = []\n\n\t\tif (route instanceof V1RouteSDK) {\n\t\t\tconst v1Trade = new V1TradeSDK(route, amount, tradeType)\n\t\t\tconst { inputAmount, outputAmount } = v1Trade\n\t\t\tv1Routes = [{ routev1: route, inputAmount, outputAmount }]\n\t\t} else if (route instanceof V2RouteSDK) {\n\t\t\tconst v2Trade = new V2TradeSDK(route, amount, tradeType)\n\t\t\tconst { inputAmount, outputAmount } = v2Trade\n\t\t\tv2Routes = [{ routev2: route, inputAmount, outputAmount }]\n\t\t} else if (route instanceof MixedRouteSDK) {\n\t\t\tconst mixedRouteTrade = await MixedRouteTradeSDK.fromRoute(route, amount, tradeType)\n\t\t\tconst { inputAmount, outputAmount } = mixedRouteTrade\n\t\t\tmixedRoutes = [{ mixedRoute: route, inputAmount, outputAmount }]\n\t\t} else {\n\t\t\tthrow new Error('Invalid route type')\n\t\t}\n\n\t\treturn new Trade({\n\t\t\tv1Routes,\n\t\t\tv2Routes,\n\t\t\tmixedRoutes,\n\t\t\ttradeType,\n\t\t})\n\t}\n}\n","import { ChainId } from '@pulsex/chains'\nimport { MixedRouteSDK, Trade } from '@pulsex/smart-order-router/src/routers/sdk'\nimport { Currency, CurrencyAmount, Token, TradeType, RouteV1 as V1Route, RouteV2 as V2Route } from '@pulsex/sdk'\n\nexport enum TradeState {\n LOADING,\n INVALID,\n NO_ROUTE_FOUND,\n VALID,\n SYNCING,\n}\n\nexport enum RouterPreference {\n API = 'api',\n CLIENT = 'client',\n PRICE = 'price',\n}\n\n// from https://github.com/Uniswap/routing-api/blob/main/lib/handlers/schema.ts\n\ntype TokenInRoute = Pick\n\ntype V1Reserve = {\n token: TokenInRoute\n quotient: string\n}\n\nexport type V1PoolInRoute = {\n type: 'v1-pool'\n tokenIn: TokenInRoute\n tokenOut: TokenInRoute\n reserve0: V1Reserve\n reserve1: V1Reserve\n amountIn?: string\n amountOut?: string\n\n // not used in the interface\n // avoid returning it from the client-side smart-order-router\n address?: string\n}\n\ntype V2Reserve = {\n token: TokenInRoute\n quotient: string\n}\n\nexport type V2PoolInRoute = {\n type: 'v2-pool'\n tokenIn: TokenInRoute\n tokenOut: TokenInRoute\n reserve0: V2Reserve\n reserve1: V2Reserve\n amountIn?: string\n amountOut?: string\n\n // not used in the interface\n // avoid returning it from the client-side smart-order-router\n address?: string\n}\n\nexport interface QuoteArguments {\n tokenInAddress: string\n tokenInChainId: ChainId\n tokenInDecimals: number\n tokenInSymbol?: string\n tokenOutAddress: string\n tokenOutChainId: ChainId\n tokenOutDecimals: number\n tokenOutSymbol?: string\n amount: string\n type: 'exactIn' | 'exactOut'\n}\n\nexport interface GetQuoteResult {\n quoteId?: string\n blockNumber: string\n amount: string\n amountDecimals: string\n gasPriceWei: string\n gasUseEstimate: string\n gasUseEstimateQuote: string\n gasUseEstimateQuoteDecimals: string\n gasUseEstimateUSD: string\n methodParameters?: { calldata: string; value: string }\n quote: string\n quoteDecimals: string\n quoteGasAdjusted: string\n quoteGasAdjustedDecimals: string\n route: Array<(V1PoolInRoute | V2PoolInRoute)[]>\n routeString: string\n}\n\nexport class InterfaceTrade<\n TInput extends Currency,\n TOutput extends Currency,\n TTradeType extends TradeType\n> extends Trade {\n gasUseEstimateUSD: CurrencyAmount | null | undefined\n\n blockNumber: string | null | undefined\n\n constructor({\n gasUseEstimateUSD,\n blockNumber,\n ...routes\n }: {\n gasUseEstimateUSD?: CurrencyAmount | undefined | null\n blockNumber?: string | null | undefined\n v1Routes: {\n routev1: V1Route\n inputAmount: CurrencyAmount\n outputAmount: CurrencyAmount\n }[]\n v2Routes: {\n routev2: V2Route\n inputAmount: CurrencyAmount\n outputAmount: CurrencyAmount\n }[]\n tradeType: TTradeType\n mixedRoutes?: {\n mixedRoute: MixedRouteSDK\n inputAmount: CurrencyAmount\n outputAmount: CurrencyAmount\n }[]\n }) {\n super(routes)\n this.blockNumber = blockNumber\n this.gasUseEstimateUSD = gasUseEstimateUSD\n }\n}\n","import {\n Currency,\n CurrencyAmount,\n Token,\n TradeType,\n PairV1,\n PairV2,\n RouteV1 as V1Route,\n RouteV2 as V2Route,\n} from '@pulsex/sdk'\nimport { MixedRouteSDK, Protocol } from '@pulsex/smart-order-router/src/routers/sdk'\nimport { AlphaRouter, AlphaRouterConfig, routeAmountsToString, SwapRoute } from '@pulsex/smart-order-router'\nimport { GetQuoteResult, InterfaceTrade, V2PoolInRoute, V1PoolInRoute } from './types'\n\n// Gets a quote from the client side router\nexport async function getClientSideQuote(\n deferedAmount: string,\n currencyIn: Currency,\n currencyOut: Currency,\n tradeType: TradeType,\n router: AlphaRouter,\n config: Partial\n): Promise<{ data: GetQuoteResult; error?: unknown }> {\n const amount = CurrencyAmount.fromRawAmount(currencyIn, deferedAmount)\n const swapRoute = await router.route(\n amount,\n currencyOut,\n tradeType,\n /* swapConfig= */ undefined,\n config\n )\n if (!swapRoute) throw new Error('Failed to generate client side quote')\n\n return { data: transformSwapRoute(amount, tradeType, swapRoute) }\n}\n\n// Transforms a Routing API quote into an array of routes that can be used to create a `Trade`.\nexport function computeRoutes(\n currencyIn: Currency | undefined,\n currencyOut: Currency | undefined,\n tradeType: TradeType,\n quoteResult: Pick | undefined\n) {\n if (!quoteResult || !quoteResult.route || !currencyIn || !currencyOut) return undefined\n\n if (quoteResult.route.length === 0) return []\n\n const parsedTokenIn = parseToken(quoteResult.route[0][0].tokenIn)\n const parsedTokenOut = parseToken(quoteResult.route[0][quoteResult.route[0].length - 1].tokenOut)\n if (parsedTokenIn.address !== currencyIn.wrapped.address) return undefined\n if (parsedTokenOut.address !== currencyOut.wrapped.address) return undefined\n if (parsedTokenIn.wrapped.equals(parsedTokenOut.wrapped)) return undefined\n\n try {\n return quoteResult.route.map((route) => {\n if (route.length === 0) {\n throw new Error('Expected route to have at least one pair or pool')\n }\n const rawAmountIn = route[0].amountIn\n const rawAmountOut = route[route.length - 1].amountOut\n\n if (!rawAmountIn || !rawAmountOut) {\n throw new Error('Expected both amountIn and amountOut to be present')\n }\n\n const routeProtocol = getRouteProtocol(route)\n\n return {\n routev1:\n routeProtocol === Protocol.V1\n ? new V1Route(route.map(genericPoolPairParser) as PairV1[], currencyIn, currencyOut)\n : null,\n routev2:\n routeProtocol === Protocol.V2\n ? new V2Route(route.map(genericPoolPairParser) as PairV2[], currencyIn, currencyOut)\n : null,\n mixedRoute:\n routeProtocol === Protocol.MIXED\n ? new MixedRouteSDK(route.map(genericPoolPairParser), currencyIn, currencyOut)\n : null,\n inputAmount: CurrencyAmount.fromRawAmount(currencyIn, rawAmountIn),\n outputAmount: CurrencyAmount.fromRawAmount(currencyOut, rawAmountOut),\n }\n })\n } catch (e) {\n // `Route` constructor may throw if inputs/outputs are temporarily out of sync\n // (RTK-Query always returns the latest data which may not be the right inputs/outputs)\n // This is not fatal and will fix itself in future render cycles\n console.error(e)\n return undefined\n }\n}\n\nexport function transformRoutesToTrade(\n route: ReturnType,\n tradeType: TTradeType,\n blockNumber?: string | null,\n gasUseEstimateUSD?: CurrencyAmount | null\n): InterfaceTrade {\n return new InterfaceTrade({\n v1Routes:\n route\n ?.filter((r): r is typeof route[0] & { routev3: NonNullable } => r.routev1 !== null)\n .map(({ routev1, inputAmount, outputAmount }) => ({ routev1, inputAmount, outputAmount })) ?? [],\n v2Routes:\n route\n ?.filter((r): r is typeof route[0] & { routev2: NonNullable } => r.routev2 !== null)\n .map(({ routev2, inputAmount, outputAmount }) => ({ routev2, inputAmount, outputAmount })) ?? [],\n mixedRoutes:\n route\n ?.filter(\n (r): r is typeof route[0] & { mixedRoute: NonNullable } =>\n r.mixedRoute !== null\n )\n .map(({ mixedRoute, inputAmount, outputAmount }) => ({ mixedRoute, inputAmount, outputAmount })) ?? [],\n tradeType,\n gasUseEstimateUSD,\n blockNumber,\n })\n}\n\nconst parseToken = ({ address, chainId, decimals, symbol }: GetQuoteResult['route'][0][0]['tokenIn']): Token => {\n return new Token(chainId, address, parseInt(decimals.toString()), symbol)\n}\n\nconst parsePairV1 = ({ reserve0, reserve1 }: V1PoolInRoute): PairV1 =>\n new PairV1(\n CurrencyAmount.fromRawAmount(parseToken(reserve0.token), reserve0.quotient),\n CurrencyAmount.fromRawAmount(parseToken(reserve1.token), reserve1.quotient)\n )\n\nconst parsePairV2 = ({ reserve0, reserve1 }: V2PoolInRoute): PairV2 =>\n new PairV2(\n CurrencyAmount.fromRawAmount(parseToken(reserve0.token), reserve0.quotient),\n CurrencyAmount.fromRawAmount(parseToken(reserve1.token), reserve1.quotient)\n )\n\nconst genericPoolPairParser = (pool: V1PoolInRoute | V2PoolInRoute): PairV1 | PairV2 => {\n return pool.type === 'v1-pool' ? parsePairV1(pool) : parsePairV2(pool)\n}\n\nfunction getRouteProtocol(route: (V1PoolInRoute | V2PoolInRoute)[]): Protocol {\n if (route.every((pool) => pool.type === 'v1-pool')) return Protocol.V1\n if (route.every((pool) => pool.type === 'v2-pool')) return Protocol.V2\n return Protocol.MIXED\n}\n\n// from routing-api (https://github.com/Uniswap/routing-api/blob/main/lib/handlers/quote/quote.ts#L243-L311)\nexport function transformSwapRoute(\n amount: CurrencyAmount,\n tradeType: TradeType,\n {\n quote,\n quoteGasAdjusted,\n route,\n estimatedGasUsed,\n estimatedGasUsedQuoteToken,\n estimatedGasUsedUSD,\n gasPriceWei,\n methodParameters,\n blockNumber,\n }: SwapRoute\n): GetQuoteResult {\n const routeResponse: Array<(V1PoolInRoute | V2PoolInRoute)[]> = []\n\n for (const subRoute of route) {\n const { amount: amnt, quote: qt, tokenPath } = subRoute\n\n const pools = subRoute.protocol === Protocol.MIXED ? subRoute.route.pools : subRoute.route.pairs\n const curRoute: (V1PoolInRoute | V2PoolInRoute)[] = []\n for (let i = 0; i < pools.length; i++) {\n const nextPool = pools[i]\n const tokenIn = tokenPath[i]\n const tokenOut = tokenPath[i + 1]\n\n let edgeAmountIn\n if (i === 0) {\n edgeAmountIn = tradeType === TradeType.EXACT_INPUT ? amnt.quotient.toString() : qt.quotient.toString()\n }\n\n let edgeAmountOut\n if (i === pools.length - 1) {\n edgeAmountOut = tradeType === TradeType.EXACT_INPUT ? qt.quotient.toString() : amnt.quotient.toString()\n }\n\n if (nextPool instanceof PairV1) {\n const {reserve0} = nextPool\n const {reserve1} = nextPool\n\n curRoute.push({\n type: 'v1-pool',\n tokenIn: {\n chainId: tokenIn.chainId,\n decimals: tokenIn.decimals,\n address: tokenIn.address,\n symbol: tokenIn.symbol,\n },\n tokenOut: {\n chainId: tokenOut.chainId,\n decimals: tokenOut.decimals,\n address: tokenOut.address,\n symbol: tokenOut.symbol,\n },\n reserve0: {\n token: {\n chainId: reserve0.currency.wrapped.chainId,\n decimals: reserve0.currency.wrapped.decimals,\n address: reserve0.currency.wrapped.address,\n symbol: reserve0.currency.wrapped.symbol,\n },\n quotient: reserve0.quotient.toString(),\n },\n reserve1: {\n token: {\n chainId: reserve1.currency.wrapped.chainId,\n decimals: reserve1.currency.wrapped.decimals,\n address: reserve1.currency.wrapped.address,\n symbol: reserve1.currency.wrapped.symbol,\n },\n quotient: reserve1.quotient.toString(),\n },\n amountIn: edgeAmountIn,\n amountOut: edgeAmountOut,\n })\n } else {\n const {reserve0} = nextPool\n const {reserve1} = nextPool\n\n curRoute.push({\n type: 'v2-pool',\n tokenIn: {\n chainId: tokenIn.chainId,\n decimals: tokenIn.decimals,\n address: tokenIn.address,\n symbol: tokenIn.symbol,\n },\n tokenOut: {\n chainId: tokenOut.chainId,\n decimals: tokenOut.decimals,\n address: tokenOut.address,\n symbol: tokenOut.symbol,\n },\n reserve0: {\n token: {\n chainId: reserve0.currency.wrapped.chainId,\n decimals: reserve0.currency.wrapped.decimals,\n address: reserve0.currency.wrapped.address,\n symbol: reserve0.currency.wrapped.symbol,\n },\n quotient: reserve0.quotient.toString(),\n },\n reserve1: {\n token: {\n chainId: reserve1.currency.wrapped.chainId,\n decimals: reserve1.currency.wrapped.decimals,\n address: reserve1.currency.wrapped.address,\n symbol: reserve1.currency.wrapped.symbol,\n },\n quotient: reserve1.quotient.toString(),\n },\n amountIn: edgeAmountIn,\n amountOut: edgeAmountOut,\n })\n }\n }\n\n routeResponse.push(curRoute)\n }\n\n const result: GetQuoteResult = {\n methodParameters,\n blockNumber: blockNumber.toString(),\n amount: amount.quotient.toString(),\n amountDecimals: amount.toExact(),\n quote: quote.quotient.toString(),\n quoteDecimals: quote.toExact(),\n quoteGasAdjusted: quoteGasAdjusted.quotient.toString(),\n quoteGasAdjustedDecimals: quoteGasAdjusted.toExact(),\n gasUseEstimateQuote: estimatedGasUsedQuoteToken.quotient.toString(),\n gasUseEstimateQuoteDecimals: estimatedGasUsedQuoteToken.toExact(),\n gasUseEstimate: estimatedGasUsed.toString(),\n gasUseEstimateUSD: estimatedGasUsedUSD.toExact(),\n gasPriceWei: gasPriceWei.toString(),\n route: routeResponse,\n routeString: routeAmountsToString(route),\n }\n\n return result\n}\n","import { ChainId } from '@pulsex/chains'\nimport { AlphaRouter } from '@pulsex/smart-order-router'\nimport { Protocol } from '@pulsex/smart-order-router/src/routers/sdk'\nimport { Currency, CurrencyAmount, TradeType } from '@pulsex/sdk'\nimport { useDebounce } from '@pulsex/hooks'\nimport { keepPreviousData, useQuery } from '@tanstack/react-query'\nimport { useDeferredValue, useMemo } from 'react'\nimport qs from 'qs'\nimport { QUOTING_API } from 'config/constants/endpoints'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport { useStablecoinAmountFromFiatValue } from 'hooks/useUSDCPrice'\nimport { useCurrentBlock } from 'state/block/hooks'\nimport { getViemClients } from 'utils/viem'\nimport { GetQuoteResult, InterfaceTrade, TradeState } from './types'\nimport { computeRoutes, getClientSideQuote, transformRoutesToTrade } from './utils'\n\n// Revalidate interval in milliseconds\nconst REVALIDATE_AFTER = {\n [ChainId.PULSECHAIN]: 20_000,\n [ChainId.PULSECHAIN_TESTNET]: 20_000,\n}\nconst CLIENT_PARAMS = {\n protocols: [Protocol.V1, Protocol.V2, Protocol.MIXED],\n minSplits: 1,\n}\nconst QUERY_TIMEOUT = 20000 // cancel api query if it takes longer than 20sec\nconst QUERY_RETRY_COUNT = 3\n\nasync function fetchQuote(\n currencyIn: Currency,\n currencyOut: Currency,\n deferQuotient: string,\n tradeType: TradeType,\n router: AlphaRouter,\n retries: number = QUERY_RETRY_COUNT\n) {\n try {\n const query = qs.stringify({\n tokenInAddress: currencyIn.wrapped.address,\n tokenOutAddress: currencyOut.wrapped.address,\n chainId: currencyIn.chainId,\n amountRaw: deferQuotient,\n type: tradeType === TradeType.EXACT_INPUT ? 'exactIn' : 'exactOut',\n })\n\n // Fetch with timeout\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), QUERY_TIMEOUT)\n const response = await fetch(`${QUOTING_API}?${query}`, {\n signal: controller.signal\n })\n\n // Clear timeout\n clearTimeout(timeoutId);\n\n // TODO: handle different types of errors appropriately\n if (!response.ok) {\n console.error('API fetch failed, trying client side routing')\n try {\n const { data } = await getClientSideQuote(\n deferQuotient,\n currencyIn,\n currencyOut,\n tradeType,\n router,\n CLIENT_PARAMS\n )\n return { ...data }\n } catch {\n console.error('Client side routing failed')\n return undefined\n }\n }\n const parsed = await response.json()\n return parsed\n } catch (e) {\n if (e instanceof DOMException && e.name === 'AbortError' && retries > 0) {\n console.error('Fetch aborted due to timeout, retrying...')\n // Retry fetch\n return fetchQuote(currencyIn, currencyOut, deferQuotient, tradeType, router, retries - 1)\n }\n console.error(`Failed to fetch quote: ${e}`)\n return undefined\n }\n}\n\n/**\n * @dev Returns the quote from the routing api or the client side router\n * @param key string of the query\n * @param amount the exact amount to swap in/out\n * @param currencyIn the desired input currency\n * @param currencyOut the desired output currency\n * @param tradeType whether the swap is an exact in/out\n * @param autoRevalidate\n */\nfunction useQuoter(\n key: string,\n amount: CurrencyAmount | undefined,\n currencyIn: Currency | undefined,\n currencyOut: Currency | undefined,\n tradeType: TradeType,\n autoRevalidate: boolean,\n): {\n quote: GetQuoteResult\n isLoading: boolean\n isSyncing: boolean\n isStale: boolean\n isError: boolean\n error: Error\n} {\n const { chainId } = useActiveWeb3React()\n const provider = getViemClients({ chainId })\n const blockNumber = useCurrentBlock()\n\n const deferredChainId = useDeferredValue(currencyIn?.chainId)\n const deferredIdentifierIn = useDeferredValue(currencyIn?.isToken ? currencyIn?.address : currencyIn?.symbol)\n const deferredIdentifierOut = useDeferredValue(currencyOut?.isToken ? currencyOut?.address : currencyOut?.symbol)\n const deferredTradeType = useDeferredValue(tradeType)\n const deferQuotientRaw = useDeferredValue(amount?.quotient.toString())\n const deferQuotient = useDebounce(deferQuotientRaw, 500)\n\n const router = new AlphaRouter({\n chainId,\n provider,\n })\n\n const {\n data: quote,\n fetchStatus,\n isPlaceholderData,\n isLoading,\n isPending,\n isError,\n error\n } = useQuery({\n queryKey: [\n key,\n deferredChainId,\n deferredIdentifierIn,\n deferredIdentifierOut,\n deferredTradeType,\n deferQuotient\n ],\n queryFn: () => {\n if (!amount || !currencyIn || !currencyOut || !deferQuotient) {\n return undefined\n }\n return fetchQuote(currencyIn, currencyOut, deferQuotient, tradeType, router)\n },\n enabled: Boolean(deferredChainId && deferredIdentifierIn && deferredIdentifierOut && deferQuotient),\n refetchOnWindowFocus: false,\n placeholderData: keepPreviousData,\n retry: false,\n staleTime: autoRevalidate ? REVALIDATE_AFTER[currencyOut?.chainId] : 0,\n refetchInterval: autoRevalidate && REVALIDATE_AFTER[currencyOut?.chainId],\n })\n\n const isValidating = fetchStatus === 'fetching'\n const isSyncing = isValidating || (amount?.quotient.toString() !== deferQuotient && deferQuotient !== undefined)\n const isStale = quote?.blockNumber !== blockNumber.toString()\n\n return {\n quote,\n isLoading: isPending || isLoading || isPlaceholderData,\n isSyncing,\n isStale,\n isError,\n error,\n }\n}\n\n/**\n * @dev Returns the best trade by invoking the routing api or the client side router\n * @param amount the exact amount to swap in/out\n * @param otherCurrency the desired output/payment currency\n * @param tradeType whether the swap is an exact in/out\n * @param autoRevalidate\n */\nexport function useAutorouterTrade(\n amount: CurrencyAmount | undefined,\n otherCurrency: Currency | undefined,\n tradeType: TradeType,\n autoRevalidate: boolean\n): {\n state: TradeState\n trade: InterfaceTrade | undefined\n} {\n const [currencyIn, currencyOut]: [Currency | undefined, Currency | undefined] = useMemo(\n () =>\n tradeType === TradeType.EXACT_INPUT\n ? [amount?.currency, otherCurrency]\n : [otherCurrency, amount?.currency],\n [amount, otherCurrency, tradeType]\n )\n\n const {\n quote: quoteResult,\n isLoading,\n isSyncing,\n isError,\n } = useQuoter(\n \"useAutorouterTrade\",\n amount,\n currencyIn,\n currencyOut,\n tradeType,\n autoRevalidate,\n )\n\n const route = useMemo(\n () => computeRoutes(currencyIn, currencyOut, tradeType, quoteResult),\n [currencyIn, currencyOut, quoteResult, tradeType]\n )\n\n // get USD gas cost of trade in active chains stablecoin amount\n const gasUseEstimateUSD = useStablecoinAmountFromFiatValue(quoteResult?.gasUseEstimateUSD) ?? null\n return useMemo(() => {\n if (!currencyIn || !currencyOut || currencyIn.equals(currencyOut)) {\n return {\n state: TradeState.INVALID,\n trade: undefined,\n }\n }\n\n if (isLoading) {\n return {\n state: TradeState.LOADING,\n trade: undefined,\n }\n }\n\n let otherAmount: CurrencyAmount\n if (quoteResult?.quote) {\n if (tradeType === TradeType.EXACT_INPUT && currencyOut) {\n otherAmount = CurrencyAmount.fromRawAmount(currencyOut, quoteResult.quote)\n }\n\n if (tradeType === TradeType.EXACT_OUTPUT && currencyIn) {\n otherAmount = CurrencyAmount.fromRawAmount(currencyIn, quoteResult.quote)\n }\n }\n\n if (isError || !otherAmount || !route || route.length === 0) {\n return {\n state: TradeState.NO_ROUTE_FOUND,\n trade: undefined,\n }\n }\n\n try {\n const trade = transformRoutesToTrade(route, tradeType, quoteResult?.blockNumber, gasUseEstimateUSD)\n return {\n // always return VALID regardless of isFetching status\n state: isSyncing ? TradeState.SYNCING : TradeState.VALID,\n trade,\n }\n } catch (e) {\n return { state: TradeState.INVALID, trade: undefined }\n }\n }, [\n currencyIn,\n currencyOut,\n quoteResult,\n isLoading,\n tradeType,\n isError,\n route,\n gasUseEstimateUSD,\n isSyncing,\n ])\n}\n","import { useMemo } from 'react'\nimport { useIsWindowVisible } from '@pulsex/hooks'\nimport { CurrencyAmount, TradeType, Currency } from '@pulsex/sdk'\nimport { useIsWrapping } from 'hooks/useWrapCallback'\nimport { useAutorouterTrade } from 'state/autorouter/hooks'\nimport { InterfaceTrade, TradeState } from 'state/autorouter/types'\n\nexport function useBestTrade(\n tradeType: TradeType,\n amount?: CurrencyAmount,\n otherCurrency?: Currency\n): {\n state: TradeState\n trade: InterfaceTrade | undefined\n} {\n const isWindowVisible = useIsWindowVisible()\n const isWrapping = useIsWrapping(amount?.currency, otherCurrency, amount?.toExact())\n const shouldGetTrade = !isWrapping && isWindowVisible\n\n const routingAPITrade = useAutorouterTrade(\n shouldGetTrade ? amount : undefined,\n otherCurrency,\n tradeType,\n true,\n )\n\n const isLoading = routingAPITrade.state === TradeState.LOADING\n\n // only return gas estimate from api if routing api trade is used\n return useMemo(\n () => ({\n ...(routingAPITrade),\n ...(isLoading ? { state: TradeState.LOADING } : {}),\n }),\n [isLoading, routingAPITrade]\n )\n}\n","import { ChainId } from '@pulsex/chains'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport { useEnsAddress } from 'wagmi'\n\nconst ENS_NAME_REGEX = /^[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)?$/\n\nconst ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/\n\nexport const useGetENSAddressByName = (ensNameOrAddress: string) => {\n const { chainId } = useActiveChainId()\n const { data: recipientENSAddress } = useEnsAddress({\n name: ensNameOrAddress,\n chainId,\n enabled:\n (ENS_NAME_REGEX.test(ensNameOrAddress) || ADDRESS_REGEX.test(ensNameOrAddress)) &&\n chainId !== ChainId.PULSECHAIN &&\n chainId !== ChainId.PULSECHAIN_TESTNET,\n })\n return recipientENSAddress\n}\n","import { parse, ParsedQs } from 'qs'\nimport { useMemo } from 'react'\nimport { useLocation } from 'react-router-dom'\n\nexport function parsedQueryString(search?: string): ParsedQs {\n if (!search) {\n // react-router-dom places search string in the hash\n const {hash} = window.location\n // eslint-disable-next-line no-param-reassign\n search = hash.substr(hash.indexOf('?'))\n }\n return search && search.length > 1 ? parse(search, { parseArrays: false, ignoreQueryPrefix: true }) : {}\n}\n\nexport default function useParsedQueryString(): ParsedQs {\n const { search } = useLocation()\n return useMemo(() => parsedQueryString(search), [search])\n}\n","import { WNATIVE } from '@pulsex/sdk'\n\nconst MIN_VALUE_DISPLAYED = 0.001\n\nexport const getTimeWindowChange = (lineChartData) => {\n if (lineChartData.length > 0) {\n const firstValue = lineChartData.find(({ value }) => !!value && value > 0)?.value ?? 0\n const lastValue = lineChartData[lineChartData.length - 1].value\n const changeValue = lastValue - firstValue\n\n return {\n changeValue:\n changeValue > 0 ? Math.max(changeValue, MIN_VALUE_DISPLAYED) : Math.min(changeValue, MIN_VALUE_DISPLAYED * -1),\n changePercentage: ((changeValue / firstValue) * 100).toFixed(2),\n isChangePositive: changeValue >= 0,\n }\n }\n\n return {\n changeValue: 0,\n changePercentage: 0,\n isChangePositive: true,\n }\n}\n\nexport const getTokenAddress = (chainId: number, tokenAddress: undefined | string) => {\n if (!chainId || !tokenAddress) {\n return ''\n }\n const lowerCaseAddress = tokenAddress.toLowerCase()\n if (lowerCaseAddress === 'pls' || lowerCaseAddress === 'tpls') {\n return WNATIVE[chainId]?.address.toLowerCase()\n }\n\n return lowerCaseAddress\n}\n","import { createReducer } from '@reduxjs/toolkit'\nimport { atomWithReducer } from 'jotai/utils'\nimport {\n Field,\n replaceSwapState,\n selectCurrency,\n setRecipient,\n switchCurrencies,\n typeInput,\n updateDerivedPairData,\n updatePairData,\n} from './actions'\nimport { DerivedPairDataNormalized, PairDataNormalized } from './types'\n\nexport interface SwapState {\n readonly independentField: Field\n readonly typedValue: string\n readonly [Field.INPUT]: {\n readonly currencyId: string | undefined\n }\n readonly [Field.OUTPUT]: {\n readonly currencyId: string | undefined\n }\n // the typed recipient address or ENS name, or null if swap should go to sender\n readonly recipient: string | null\n readonly pairDataById: Record> | null\n readonly derivedPairDataById: Record> | null\n}\n\nconst initialState: SwapState = {\n independentField: Field.INPUT,\n typedValue: '',\n [Field.INPUT]: {\n currencyId: '',\n },\n [Field.OUTPUT]: {\n currencyId: '',\n },\n pairDataById: {},\n derivedPairDataById: {},\n recipient: null,\n}\n\nconst reducer = createReducer(initialState, (builder) =>\n builder\n .addCase(\n replaceSwapState,\n (state, { payload: { typedValue, recipient, field, inputCurrencyId, outputCurrencyId } }) => {\n return {\n [Field.INPUT]: {\n currencyId: inputCurrencyId,\n },\n [Field.OUTPUT]: {\n currencyId: outputCurrencyId,\n },\n independentField: field,\n typedValue,\n recipient,\n pairDataById: state.pairDataById,\n derivedPairDataById: state.derivedPairDataById,\n }\n },\n )\n .addCase(selectCurrency, (state, { payload: { currencyId, field } }) => {\n const otherField = field === Field.INPUT ? Field.OUTPUT : Field.INPUT\n if (currencyId === state[otherField].currencyId) {\n // the case where we have to swap the order\n return {\n ...state,\n independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT,\n [field]: { currencyId },\n [otherField]: { currencyId: state[field].currencyId },\n }\n }\n // the normal case\n return {\n ...state,\n [field]: { currencyId },\n }\n })\n .addCase(switchCurrencies, (state) => {\n return {\n ...state,\n independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT,\n [Field.INPUT]: { currencyId: state[Field.OUTPUT].currencyId },\n [Field.OUTPUT]: { currencyId: state[Field.INPUT].currencyId },\n }\n })\n .addCase(typeInput, (state, { payload: { field, typedValue } }) => {\n return {\n ...state,\n independentField: field,\n typedValue,\n }\n })\n .addCase(setRecipient, (state, { payload: { recipient } }) => {\n state.recipient = recipient\n })\n .addCase(updatePairData, (state, { payload: { pairData, pairId, timeWindow } }) => {\n if (!state.pairDataById[pairId]) {\n state.pairDataById[pairId] = {}\n }\n state.pairDataById[pairId][timeWindow] = pairData\n })\n .addCase(updateDerivedPairData, (state, { payload: { pairData, pairId, timeWindow } }) => {\n if (!state.derivedPairDataById[pairId]) {\n state.derivedPairDataById[pairId] = {}\n }\n state.derivedPairDataById[pairId][timeWindow] = pairData\n }),\n)\n\nexport const swapReducerAtom = atomWithReducer(initialState, reducer)\n","import dayjs from 'dayjs'\nimport fromPairs from 'lodash/fromPairs'\nimport { DerivedPairDataNormalized, PairPricesNormalized } from './types'\n\nexport const normalizeDerivedChartData = (data: any) => {\n if (!data?.token0DerivedUSD || data?.token0DerivedUSD.length === 0) {\n return []\n }\n\n const token1DerivedUSDEntryMap: any = fromPairs(\n data?.token1DerivedUSD?.map((entry) => [entry.timestamp, entry]) ?? [],\n )\n\n return data?.token0DerivedUSD.reduce((acc, token0DerivedUSDEntry) => {\n const token1DerivedUSDEntry = token1DerivedUSDEntryMap[token0DerivedUSDEntry.timestamp]\n if (token1DerivedUSDEntry) {\n acc.push({\n time: parseInt(token0DerivedUSDEntry.timestamp, 10),\n token0Id: token0DerivedUSDEntry.tokenAddress,\n token1Id: token1DerivedUSDEntry.tokenAddress,\n token0DerivedUSD: token0DerivedUSDEntry.derivedUSD,\n token1DerivedUSD: token1DerivedUSDEntry.derivedUSD,\n })\n }\n return acc\n }, [])\n}\n\ntype normalizeDerivedPairDataByActiveTokenParams = {\n pairData: DerivedPairDataNormalized\n activeToken: string\n}\n\nexport const normalizeDerivedPairDataByActiveToken = ({\n pairData,\n activeToken,\n}: normalizeDerivedPairDataByActiveTokenParams): PairPricesNormalized =>\n pairData?.map((pairPrice) => ({\n time: dayjs.unix(pairPrice.time).toDate(),\n value:\n activeToken === pairPrice?.token0Id\n ? pairPrice.token0DerivedUSD / pairPrice.token1DerivedUSD\n : pairPrice.token1DerivedUSD / pairPrice.token0DerivedUSD,\n }))\n","import { gql } from 'graphql-request'\nimport { Block } from 'state/info/types'\n\nexport const getTVL = (tokenAddress: string) => gql`\n query DerivedTokenPriceTVL {\n token(id: \"${tokenAddress}\") {\n totalValueLocked: 'totalLiquidity'}\n }\n }\n`\n\nexport const getDerivedPrices = (tokenAddress: string, blocks: Block[]) =>\n blocks.map(\n (block) => `\n t${block.timestamp}:token(id:\"${tokenAddress}\", block: { number: ${block.number}}) {\n derivedUSD\n }\n `,\n )\n\nexport const getDerivedPricesQueryConstructor = (subqueries: string[]) => {\n return gql`\n query derivedTokenPriceData {\n ${subqueries}\n }\n `\n}\n","export type PairDataNormalized = {\n time: number\n token0Id: string\n token1Id: string\n reserve0: number\n reserve1: number\n}[]\n\nexport type DerivedPairDataNormalized = {\n time: number\n token0Id: string\n token1Id: string\n token0DerivedUSD: number\n token1DerivedUSD: number\n}[]\n\nexport type PairPricesNormalized = {\n time: Date\n value: number\n}[]\n\nexport enum PairDataTimeWindowEnum {\n DAY,\n WEEK,\n MONTH,\n YEAR,\n}\n","import orderBy from 'lodash/orderBy'\nimport { ChainId, V1_SUBGRAPHS, V2_SUBGRAPHS } from '@pulsex/chains'\nimport { BLOCKS_CLIENT, BLOCKS_CLIENT_TESTNET } from 'config/constants/endpoints'\nimport { ONE_DAY_UNIX, ONE_HOUR_SECONDS } from 'config/constants/info'\nimport dayjs from 'dayjs'\nimport request from 'graphql-request'\nimport mapValues from 'lodash/mapValues'\nimport { Block } from 'state/info/types'\nimport { getBlocksFromTimestamps } from 'utils/getBlocksFromTimestamps'\nimport { multiQuery } from 'pages/Info/utils/infoQueryHelpers'\nimport { getTVL, getDerivedPrices, getDerivedPricesQueryConstructor } from '../queries/getDerivedPrices'\nimport { PairDataTimeWindowEnum } from '../types'\n\nconst PROTOCOL = ['v1', 'v2'] as const\ntype Protocol = (typeof PROTOCOL)[number]\n\nconst SWAP_INFO_BY_CHAIN = {\n [ChainId.PULSECHAIN]: {\n v1: V1_SUBGRAPHS[ChainId.PULSECHAIN],\n v2: V2_SUBGRAPHS[ChainId.PULSECHAIN],\n },\n [ChainId.PULSECHAIN_TESTNET]: {\n v1: V1_SUBGRAPHS[ChainId.PULSECHAIN_TESTNET],\n v2: V2_SUBGRAPHS[ChainId.PULSECHAIN_TESTNET],\n },\n}\n\nexport const BLOCKS_CLIENT_BY_CHAIN: Record = {\n [ChainId.PULSECHAIN]: BLOCKS_CLIENT,\n [ChainId.PULSECHAIN_TESTNET]: BLOCKS_CLIENT_TESTNET,\n}\n\nexport const getTokenBestTvlProtocol = async (tokenAddress: string, chainId: ChainId): Promise => {\n const infos = SWAP_INFO_BY_CHAIN[chainId]\n if (infos) {\n const [v1, v2] = await Promise.allSettled([\n 'v1' in infos ? request(infos.v1.url, getTVL(tokenAddress.toLowerCase())) : Promise.resolve(),\n 'v2' in infos ? request(infos.v2.url, getTVL(tokenAddress.toLowerCase())) : Promise.resolve(),\n ])\n\n const results = [v1, v2]\n let bestProtocol: Protocol = 'v1'\n let bestTVL = 0\n for (const [index, result] of results.entries()) {\n if (result.status === 'fulfilled' && result.value && result.value.token) {\n if (+result.value.token.totalValueLocked > bestTVL) {\n bestTVL = +result.value.token.totalValueLocked\n bestProtocol = PROTOCOL[index]\n }\n }\n }\n\n return bestProtocol\n }\n\n return null\n}\n\nconst getTokenDerivedUSDCPrices = async (tokenAddress: string, blocks: Block[], endpoint: string) => {\n const rawPrices: any | undefined = await multiQuery(\n getDerivedPricesQueryConstructor,\n getDerivedPrices(tokenAddress, blocks),\n endpoint,\n 200,\n )\n\n if (!rawPrices) {\n console.error('Price data failed to load')\n return null\n }\n\n const prices = mapValues(rawPrices, (value) => {\n return value?.derivedUSD\n })\n\n // format token PLS price results\n const tokenPrices: {\n tokenAddress: string\n timestamp: string\n derivedUSD: number\n }[] = []\n\n // Get Token prices in PLS\n Object.keys(prices).forEach((priceKey) => {\n const timestamp = priceKey.split('t')[1]\n if (timestamp) {\n tokenPrices.push({\n tokenAddress,\n timestamp,\n derivedUSD: prices[priceKey] ? parseFloat(prices[priceKey]) : 0,\n })\n }\n })\n\n return orderBy(tokenPrices, (tokenPrice) => parseInt(tokenPrice.timestamp, 10))\n}\n\nconst getInterval = (timeWindow: PairDataTimeWindowEnum) => {\n switch (timeWindow) {\n case PairDataTimeWindowEnum.DAY:\n return ONE_HOUR_SECONDS\n case PairDataTimeWindowEnum.WEEK:\n return ONE_HOUR_SECONDS * 4\n case PairDataTimeWindowEnum.MONTH:\n return ONE_DAY_UNIX\n case PairDataTimeWindowEnum.YEAR:\n return ONE_DAY_UNIX * 15\n default:\n return ONE_HOUR_SECONDS * 4\n }\n}\n\nconst getSkipDaysToStart = (timeWindow: PairDataTimeWindowEnum) => {\n switch (timeWindow) {\n case PairDataTimeWindowEnum.DAY:\n return 1\n case PairDataTimeWindowEnum.WEEK:\n return 7\n case PairDataTimeWindowEnum.MONTH:\n return 30\n case PairDataTimeWindowEnum.YEAR:\n return 365\n default:\n return 7\n }\n}\n\n// Fetches derivedPls values for tokens to calculate derived price\n// Used when no direct pool is available\nconst fetchDerivedPriceData = async (\n token0Address: string,\n token1Address: string,\n timeWindow: PairDataTimeWindowEnum,\n protocol0: Protocol,\n protocol1: Protocol,\n chainId: ChainId,\n) => {\n const interval = getInterval(timeWindow)\n const endTimestamp = dayjs()\n const endTimestampUnix = endTimestamp.unix()\n let startTimestamp = endTimestamp.subtract(getSkipDaysToStart(timeWindow), 'days').startOf('hour').unix()\n // check if we are going too far back, if so, set to subgraph deployment timestamp\n if (startTimestamp < SWAP_INFO_BY_CHAIN[chainId][protocol0].timestamp) {\n startTimestamp = SWAP_INFO_BY_CHAIN[chainId][protocol0].timestamp\n }\n const timestamps: number[] = []\n let time = startTimestamp\n if (!SWAP_INFO_BY_CHAIN[chainId][protocol0] || !SWAP_INFO_BY_CHAIN[chainId][protocol1]) {\n return null\n }\n while (time <= endTimestampUnix) {\n timestamps.push(time)\n time += interval\n }\n\n try {\n const blocks = await getBlocksFromTimestamps(timestamps, 'asc', 500, chainId)\n if (!blocks || blocks.length === 0) {\n console.error('Error fetching blocks for timestamps', timestamps)\n return null\n }\n blocks.pop()\n const [token0DerivedUSD, token1DerivedUSD] = await Promise.all([\n getTokenDerivedUSDCPrices(token0Address, blocks, SWAP_INFO_BY_CHAIN[chainId][protocol0].url),\n getTokenDerivedUSDCPrices(token1Address, blocks, SWAP_INFO_BY_CHAIN[chainId][protocol1].url),\n ])\n return { token0DerivedUSD, token1DerivedUSD }\n } catch (error) {\n console.error('Failed to fetched derived price data for chart', error)\n return null\n }\n}\n\nexport default fetchDerivedPriceData\n","import { Currency, CurrencyAmount, PairV1, PairV2, Percent, Price, TradeV1, TradeV2, TradeType } from '@pulsex/sdk'\nimport { Trade as SmartTrade } from '@pulsex/smart-order-router/src/routers/sdk'\nimport { ParsedQs } from 'qs'\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport { SLOW_INTERVAL , DEFAULT_INPUT_CURRENCY } from 'config/constants/exchange'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport { useAtom, useAtomValue } from 'jotai'\nimport { useTradeExactIn, useTradeExactOut } from 'hooks/Trades'\nimport { useBestTrade } from 'hooks/useBestTrade'\nimport { useGetENSAddressByName } from 'hooks/useGetENSAddressByName'\nimport useNativeCurrency from 'hooks/useNativeCurrency'\nimport { InterfaceTrade, TradeState } from 'state/autorouter/types'\nimport { useAddLiquidityFormState } from 'state/mint/reducer'\nimport useParsedQueryString from 'hooks/useParsedQueryString'\nimport { useTranslation } from '@pulsex/localization'\nimport useSWRImmutable from 'swr/immutable'\nimport { safeGetAddress } from 'utils'\nimport { computeSlippageAdjustedAmounts } from 'utils/exchange'\nimport { getTokenAddress } from 'pages/Swap/components/Chart/utils'\nimport { useAccount } from 'wagmi'\nimport tryParseAmount from '@pulsex/utils/tryParseAmount'\nimport { PLSX } from '@pulsex/tokens'\nimport { useCurrencyBalances } from '../wallet/hooks'\nimport {\n Field,\n replaceSwapState,\n selectCurrency,\n setRecipient,\n switchCurrencies,\n typeInput,\n} from './actions'\nimport { SwapState, swapReducerAtom } from './reducer'\nimport { useUserSlippageTolerance } from '../user/hooks'\nimport { normalizeDerivedChartData, normalizeDerivedPairDataByActiveToken } from './normalizers'\nimport { PairDataTimeWindowEnum } from './types'\nimport fetchDerivedPriceData, { getTokenBestTvlProtocol } from './fetch/fetchDerivedPriceData'\n\nexport function useSwapState() {\n return useAtomValue(swapReducerAtom)\n}\n\nexport function useSwapActionHandlers(): {\n onCurrencySelection: (field: Field, currency: Currency) => void\n onSwitchTokens: () => void\n onUserInput: (field: Field, typedValue: string) => void\n onChangeRecipient: (recipient: string | null) => void\n} {\n const [, dispatch] = useAtom(swapReducerAtom)\n\n const onCurrencySelection = useCallback((field: Field, currency: Currency) => {\n dispatch(\n selectCurrency({\n field,\n currencyId: currency?.isToken ? currency.address : currency?.isNative ? currency.symbol : '',\n }),\n )\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const onSwitchTokens = useCallback(() => {\n dispatch(switchCurrencies())\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const onUserInput = useCallback((field: Field, typedValue: string) => {\n dispatch(typeInput({ field, typedValue }))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const onChangeRecipient = useCallback((recipient: string | null) => {\n dispatch(setRecipient({ recipient }))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return {\n onSwitchTokens,\n onCurrencySelection,\n onUserInput,\n onChangeRecipient,\n }\n}\n\nconst BAD_RECIPIENT_ADDRESSES = new Set([\n '0x1715a3E4A142d8b698131108995174F37aEBA10D', // v2 factory\n '0x98bf93ebf5c380C0e6Ae8e192A7e2AE08edAcc02', // v2 router 02\n])\n\n/**\n * Returns true if any of the pairs or tokens in a trade have the given checksummed address\n * @param trade to check for the given address\n * @param checksummedAddress address to check in the pairs and tokens\n */\nfunction involvesAddress(\n trade: TradeV1 | TradeV2 | SmartTrade,\n checksummedAddress: string,\n): boolean {\n if (trade instanceof TradeV1 || trade instanceof TradeV2) {\n return (\n trade.route.path.some((token) => token.address === checksummedAddress) ||\n trade.route.pairs.some((pair) => pair.liquidityToken.address === checksummedAddress)\n )\n }\n // is a pool/pair\n return !!trade?.swaps.find((swap) => {\n return (\n swap.route.path.some((token) => {\n return token.address === checksummedAddress\n }) ||\n swap.route.pools.some((pool) => {\n return (pool instanceof PairV1 || pool instanceof PairV2) && pool.liquidityToken.address === checksummedAddress\n })\n )\n })\n}\n\n// Get swap price for single token disregarding slippage and price impact\nexport function useSingleTokenSwapInfo(\n inputCurrencyId: string | undefined,\n inputCurrency: Currency | undefined,\n outputCurrencyId: string | undefined,\n outputCurrency: Currency | undefined,\n): { [key: string]: number } {\n const { chainId } = useActiveChainId()\n const { protocol } = useAddLiquidityFormState()\n\n const token0Address = useMemo(() => getTokenAddress(chainId, inputCurrencyId), [chainId, inputCurrencyId])\n const token1Address = useMemo(() => getTokenAddress(chainId, outputCurrencyId), [chainId, outputCurrencyId])\n\n const amount = useMemo(() => tryParseAmount('1', inputCurrency ?? undefined), [inputCurrency])\n\n const bestTradeExactIn = useTradeExactIn(protocol, amount, outputCurrency ?? undefined)\n if (!inputCurrency || !outputCurrency || !bestTradeExactIn) {\n return null\n }\n\n let inputTokenPrice: number\n try {\n inputTokenPrice = parseFloat(\n new Price({\n baseAmount: bestTradeExactIn.inputAmount,\n quoteAmount: bestTradeExactIn.outputAmount,\n }).toSignificant(6),\n )\n } catch (error) {\n //\n }\n if (!inputTokenPrice) {\n return null\n }\n const outputTokenPrice = 1 / inputTokenPrice\n\n return {\n [token0Address]: inputTokenPrice,\n [token1Address]: outputTokenPrice,\n }\n}\n\n// from the current swap inputs, compute the best trade and return it.\nexport function useSmartRouterDerivedSwapInfo(\n independentField: Field,\n typedValue: string,\n inputCurrency: Currency | undefined,\n outputCurrency: Currency | undefined,\n recipient: string,\n): {\n currencies: { [field in Field]?: Currency }\n currencyBalances: { [field in Field]?: CurrencyAmount }\n parsedAmount: CurrencyAmount | undefined\n inputError?: string\n trade: {\n trade: InterfaceTrade | undefined\n state: TradeState\n }\n allowedSlippage: number\n} {\n const { address: account } = useAccount()\n const { t } = useTranslation()\n\n const recipientENSAddress = useGetENSAddressByName(recipient)\n const to: string | null =\n (recipient === null ? account : safeGetAddress(recipient) || safeGetAddress(recipientENSAddress) || null) ?? null\n\n const relevantTokenBalances = useCurrencyBalances(\n account ?? undefined,\n useMemo(() => [inputCurrency ?? undefined, outputCurrency ?? undefined], [inputCurrency, outputCurrency]),\n )\n\n const isExactIn: boolean = independentField === Field.INPUT\n const parsedAmount = tryParseAmount(typedValue, (isExactIn ? inputCurrency : outputCurrency) ?? undefined)\n\n const v2Trade = useBestTrade(\n isExactIn ? TradeType.EXACT_INPUT : TradeType.EXACT_OUTPUT,\n parsedAmount,\n (isExactIn ? outputCurrency : inputCurrency) ?? undefined,\n )\n\n const currencyBalances = useMemo(\n () => ({\n [Field.INPUT]: relevantTokenBalances[0],\n [Field.OUTPUT]: relevantTokenBalances[1],\n }),\n [relevantTokenBalances],\n )\n\n const currencies: { [field in Field]?: Currency | null } = useMemo(\n () => ({\n [Field.INPUT]: inputCurrency,\n [Field.OUTPUT]: outputCurrency,\n }),\n [inputCurrency, outputCurrency],\n )\n\n let inputError: string | undefined\n if (!account) {\n inputError = t('Connect Wallet')\n }\n\n if (!parsedAmount) {\n inputError = inputError ?? t('Enter an amount')\n }\n\n if (!currencies[Field.INPUT] || !currencies[Field.OUTPUT]) {\n inputError = inputError ?? t('Select a token')\n }\n\n const formattedTo = safeGetAddress(to)\n if (!to || !formattedTo) {\n inputError = inputError ?? t('Enter a recipient')\n } else if (BAD_RECIPIENT_ADDRESSES.has(formattedTo) || (v2Trade && involvesAddress(v2Trade.trade, formattedTo))) {\n inputError = inputError ?? t('Invalid recipient')\n }\n\n const [allowedSlippage] = useUserSlippageTolerance()\n\n // compare input balance to max input based on version\n const [balanceIn, amountIn] = [currencyBalances[Field.INPUT], v2Trade.trade?.maximumAmountIn(new Percent(allowedSlippage, 10000))]\n\n if (balanceIn && amountIn && balanceIn.lessThan(amountIn)) {\n inputError = t('Insufficient %symbol% balance', { symbol: amountIn.currency.symbol })\n }\n\n return useMemo(\n () => ({\n currencies,\n currencyBalances,\n parsedAmount,\n inputError,\n trade: v2Trade,\n allowedSlippage,\n }),\n [allowedSlippage, currencies, currencyBalances, inputError, parsedAmount, v2Trade],\n )\n}\n\n// from the current swap inputs, compute the best trade and return it.\nexport function useDerivedSwapInfo(\n independentField: Field,\n typedValue: string,\n inputCurrency: Currency | undefined,\n outputCurrency: Currency | undefined,\n recipient: string,\n): {\n allowedSlippage: number\n currencies: { [field in Field]?: Currency }\n currencyBalances: { [field in Field]?: CurrencyAmount }\n parsedAmount: CurrencyAmount | undefined\n v2Trade: TradeV1 | TradeV2 | undefined\n inputError?: string\n} {\n const { address: account } = useAccount()\n const { t } = useTranslation()\n const recipientENSAddress = useGetENSAddressByName(recipient)\n const { protocol } = useAddLiquidityFormState()\n\n const to: string | null =\n (recipient === null ? account : safeGetAddress(recipient) || safeGetAddress(recipientENSAddress) || null) ?? null\n\n const relevantTokenBalances = useCurrencyBalances(\n account ?? undefined,\n useMemo(() => [inputCurrency ?? undefined, outputCurrency ?? undefined], [inputCurrency, outputCurrency]),\n )\n\n const isExactIn: boolean = independentField === Field.INPUT\n const parsedAmount = tryParseAmount(typedValue, (isExactIn ? inputCurrency : outputCurrency) ?? undefined)\n\n const bestTradeExactIn = useTradeExactIn(protocol, isExactIn ? parsedAmount : undefined, outputCurrency ?? undefined)\n const bestTradeExactOut = useTradeExactOut(protocol, inputCurrency ?? undefined, !isExactIn ? parsedAmount : undefined)\n\n const v2Trade = isExactIn ? bestTradeExactIn : bestTradeExactOut\n\n const currencyBalances = {\n [Field.INPUT]: relevantTokenBalances[0],\n [Field.OUTPUT]: relevantTokenBalances[1],\n }\n\n const currencies: { [field in Field]?: Currency } = {\n [Field.INPUT]: inputCurrency ?? undefined,\n [Field.OUTPUT]: outputCurrency ?? undefined,\n }\n\n let inputError: string | undefined\n if (!account) {\n inputError = t('Connect Wallet')\n }\n\n if (!parsedAmount) {\n inputError = inputError ?? t('Enter an amount')\n }\n\n if (!currencies[Field.INPUT] || !currencies[Field.OUTPUT]) {\n inputError = inputError ?? t('Select a token')\n }\n\n const formattedTo = safeGetAddress(to)\n if (!to || !formattedTo) {\n inputError = inputError ?? t('Enter a recipient')\n } else if (\n BAD_RECIPIENT_ADDRESSES.has(formattedTo) ||\n (bestTradeExactIn && involvesAddress(bestTradeExactIn, formattedTo)) ||\n (bestTradeExactOut && involvesAddress(bestTradeExactOut, formattedTo))\n ) {\n inputError = inputError ?? t('Invalid recipient')\n }\n\n const [allowedSlippage] = useUserSlippageTolerance()\n\n const slippageAdjustedAmounts = v2Trade && allowedSlippage && computeSlippageAdjustedAmounts(v2Trade, allowedSlippage)\n\n // compare input balance to max input based on version\n const [balanceIn, amountIn] = [\n currencyBalances[Field.INPUT],\n slippageAdjustedAmounts ? slippageAdjustedAmounts[Field.INPUT] : null,\n ]\n\n if (balanceIn && amountIn && balanceIn.lessThan(amountIn)) {\n inputError = t('Insufficient %symbol% balance', { symbol: amountIn.currency.symbol })\n }\n\n return {\n allowedSlippage,\n currencies,\n currencyBalances,\n parsedAmount,\n v2Trade: v2Trade ?? undefined,\n inputError,\n }\n}\n\nfunction parseTokenAmountURLParameter(urlParam: any): string {\n // eslint-disable-next-line no-restricted-globals\n return typeof urlParam === 'string' && !isNaN(parseFloat(urlParam)) ? urlParam : ''\n}\n\nfunction parseIndependentFieldURLParameter(urlParam: any): Field {\n return typeof urlParam === 'string' && urlParam.toLowerCase() === 'output' ? Field.OUTPUT : Field.INPUT\n}\n\nconst ENS_NAME_REGEX = /^[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)?$/\nconst ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/\nfunction validatedRecipient(recipient: any): string | null {\n if (typeof recipient !== 'string') return null\n const address = safeGetAddress(recipient)\n if (address) return address\n if (ENS_NAME_REGEX.test(recipient)) return recipient\n if (ADDRESS_REGEX.test(recipient)) return recipient\n return null\n}\n\nexport function queryParametersToSwapState(\n parsedQs: ParsedQs,\n chainId: number,\n nativeSymbol?: string,\n defaultOutputCurrency?: string,\n): SwapState {\n let inputCurrency = safeGetAddress(parsedQs.inputCurrency) || (nativeSymbol ?? DEFAULT_INPUT_CURRENCY[chainId])\n let outputCurrency = typeof parsedQs.outputCurrency === 'string'\n ? safeGetAddress(parsedQs.outputCurrency) || nativeSymbol : defaultOutputCurrency\n if (inputCurrency === outputCurrency) {\n if (typeof parsedQs.outputCurrency === 'string') {\n inputCurrency = ''\n } else {\n outputCurrency = ''\n }\n }\n\n const recipient = validatedRecipient(parsedQs.recipient)\n\n return {\n [Field.INPUT]: {\n currencyId: inputCurrency,\n },\n [Field.OUTPUT]: {\n currencyId: outputCurrency,\n },\n typedValue: parseTokenAmountURLParameter(parsedQs.exactAmount),\n independentField: parseIndependentFieldURLParameter(parsedQs.exactField),\n recipient,\n pairDataById: {},\n derivedPairDataById: {},\n }\n}\n\n// updates the swap state to use the defaults for a given network\nexport function useDefaultsFromURLSearch():\n | { inputCurrencyId: string | undefined; outputCurrencyId: string | undefined }\n | undefined {\n const { chainId } = useActiveChainId()\n const [, dispatch] = useAtom(swapReducerAtom)\n const native = useNativeCurrency()\n const parsedQs = useParsedQueryString()\n const [result, setResult] = useState<\n { inputCurrencyId: string | undefined; outputCurrencyId: string | undefined } | undefined\n >()\n\n useEffect(() => {\n if (!chainId || !native) return\n const parsed = queryParametersToSwapState(\n parsedQs, \n chainId, \n native.symbol, \n PLSX[chainId]?.address\n )\n\n dispatch(\n replaceSwapState({\n typedValue: parsed.typedValue,\n field: parsed.independentField,\n inputCurrencyId: parsed[Field.INPUT].currencyId,\n outputCurrencyId: parsed[Field.OUTPUT].currencyId,\n recipient: null,\n }),\n )\n\n setResult({ inputCurrencyId: parsed[Field.INPUT].currencyId, outputCurrencyId: parsed[Field.OUTPUT].currencyId })\n }, [dispatch, chainId, parsedQs, native])\n\n return result\n}\n\ntype useFetchPairPricesParams = {\n chainId: number\n token0Address: string\n token1Address: string\n timeWindow: PairDataTimeWindowEnum\n currentSwapPrice: {\n [key: string]: number\n }\n}\n\nexport const useFetchPairPrices = ({\n chainId,\n token0Address,\n token1Address,\n timeWindow,\n currentSwapPrice,\n}: useFetchPairPricesParams) => {\n const { data: protocol0 } = useSWRImmutable(\n token0Address && chainId && ['protocol', token0Address, chainId],\n async () => {\n return getTokenBestTvlProtocol(token0Address, chainId)\n },\n )\n const { data: protocol1 } = useSWRImmutable(\n token1Address && chainId && ['protocol', token1Address, chainId],\n async () => {\n return getTokenBestTvlProtocol(token1Address, chainId)\n },\n )\n\n const {\n data: normalizedDerivedPairData,\n error,\n isLoading,\n } = useSWRImmutable(\n protocol0 &&\n protocol1 &&\n token0Address &&\n chainId &&\n token1Address && ['derivedPrice', { token0Address, token1Address, chainId, protocol0, protocol1, timeWindow }],\n async () => {\n const data = await fetchDerivedPriceData(\n token0Address,\n token1Address,\n timeWindow,\n protocol0 ?? 'v1',\n protocol1 ?? 'v1',\n chainId,\n )\n return normalizeDerivedPairDataByActiveToken({\n activeToken: token0Address,\n pairData: normalizeDerivedChartData(data),\n })\n },\n {\n dedupingInterval: SLOW_INTERVAL,\n refreshInterval: SLOW_INTERVAL,\n },\n )\n\n const hasSwapPrice = currentSwapPrice && currentSwapPrice[token0Address] > 0\n const normalizedDerivedPairDataWithCurrentSwapPrice = useMemo(\n () =>\n normalizedDerivedPairData?.length > 0 && hasSwapPrice\n ? [...normalizedDerivedPairData, { time: new Date(), value: currentSwapPrice[token0Address] }]\n : normalizedDerivedPairData,\n [currentSwapPrice, hasSwapPrice, normalizedDerivedPairData, token0Address],\n )\n\n return {\n data: normalizedDerivedPairDataWithCurrentSwapPrice,\n error,\n isLoading,\n }\n}\n","import { useState } from 'react'\nimport { escapeRegExp } from 'utils'\nimport { Text, Button, Input, Flex, Box, QuestionHelper } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport { useUserSlippageTolerance, useUserTransactionTTL } from 'state/user/hooks'\n\nenum SlippageError {\n InvalidInput = 'InvalidInput',\n RiskyLow = 'RiskyLow',\n RiskyHigh = 'RiskyHigh',\n}\n\nenum DeadlineError {\n InvalidInput = 'InvalidInput',\n}\n\nconst inputRegex = RegExp(`^\\\\d*(?:\\\\\\\\[.])?\\\\d*$`) // match escaped \".\" characters via in a non-capturing group\n\nconst SlippageTabs = () => {\n const [userSlippageTolerance, setUserSlippageTolerance] = useUserSlippageTolerance()\n const [ttl, setTtl] = useUserTransactionTTL()\n const [slippageInput, setSlippageInput] = useState('')\n const [deadlineInput, setDeadlineInput] = useState('')\n\n const { t } = useTranslation()\n\n const slippageInputIsValid =\n slippageInput === '' || (userSlippageTolerance / 100).toFixed(2) === Number.parseFloat(slippageInput).toFixed(2)\n const deadlineInputIsValid = deadlineInput === '' || (ttl / 60).toString() === deadlineInput\n\n let slippageError: SlippageError | undefined\n if (slippageInput !== '' && !slippageInputIsValid) {\n slippageError = SlippageError.InvalidInput\n } else if (slippageInputIsValid && userSlippageTolerance < 50) {\n slippageError = SlippageError.RiskyLow\n } else if (slippageInputIsValid && userSlippageTolerance > 500) {\n slippageError = SlippageError.RiskyHigh\n } else {\n slippageError = undefined\n }\n\n let deadlineError: DeadlineError | undefined\n if (deadlineInput !== '' && !deadlineInputIsValid) {\n deadlineError = DeadlineError.InvalidInput\n } else {\n deadlineError = undefined\n }\n\n const parseCustomSlippage = (value: string) => {\n if (value === '' || inputRegex.test(escapeRegExp(value))) {\n setSlippageInput(value)\n\n try {\n const valueAsIntFromRoundedFloat = Number.parseInt((Number.parseFloat(value) * 100).toString())\n if (!Number.isNaN(valueAsIntFromRoundedFloat) && valueAsIntFromRoundedFloat < 5000) {\n setUserSlippageTolerance(valueAsIntFromRoundedFloat)\n }\n } catch (error) {\n console.error(error)\n }\n }\n }\n\n const parseCustomDeadline = (value: string) => {\n setDeadlineInput(value)\n\n try {\n const valueAsInt: number = Number.parseInt(value) * 60\n if (!Number.isNaN(valueAsInt) && valueAsInt > 0) {\n setTtl(valueAsInt)\n }\n } catch (error) {\n console.error(error)\n }\n }\n\n return (\n \n \n \n {t('Slippage Tolerance')}\n \n \n \n {\n setSlippageInput('')\n setUserSlippageTolerance(10)\n }}\n variant={userSlippageTolerance === 10 ? 'primary' : 'tertiary'}\n >\n 0.1%\n \n {\n setSlippageInput('')\n setUserSlippageTolerance(50)\n }}\n variant={userSlippageTolerance === 50 ? 'primary' : 'tertiary'}\n >\n 0.5%\n \n {\n setSlippageInput('')\n setUserSlippageTolerance(100)\n }}\n variant={userSlippageTolerance === 100 ? 'primary' : 'tertiary'}\n >\n 1.0%\n \n \n \n {\n parseCustomSlippage((userSlippageTolerance / 100).toFixed(2))\n }}\n onChange={(event) => {\n if (event.currentTarget.validity.valid) {\n parseCustomSlippage(event.target.value.replace(/,/g, '.'))\n }\n }}\n />\n \n \n %\n \n \n \n {!!slippageError && (\n \n {slippageError === SlippageError.InvalidInput\n ? t('Enter a valid slippage percentage')\n : slippageError === SlippageError.RiskyLow\n ? t('Your transaction may fail')\n : t('Your transaction may be frontrun')}\n \n )}\n \n \n \n {t('Tx deadline (mins)')}\n \n \n \n \n {\n parseCustomDeadline((ttl / 60).toString())\n }}\n placeholder={(ttl / 60).toString()}\n value={deadlineInput}\n onChange={(event) => {\n if (event.currentTarget.validity.valid) {\n parseCustomDeadline(event.target.value)\n }\n }}\n />\n \n \n \n \n )\n}\n\nexport default SlippageTabs\n","import { useState } from 'react'\nimport { Button, Text, Flex, Message, Modal, InjectedModalProps, Checkbox } from '@pulsex/uikit'\nimport { useExpertModeManager } from 'state/user/hooks'\nimport { useTranslation } from '@pulsex/localization'\n\ninterface ExpertModalProps extends InjectedModalProps {\n setShowConfirmExpertModal: (boolean) => void\n setShowExpertModeAcknowledgement: (boolean) => void\n}\n\nconst ExpertModal: React.FC = ({ setShowConfirmExpertModal, setShowExpertModeAcknowledgement }) => {\n const [, toggleExpertMode] = useExpertModeManager()\n const [isRememberChecked, setIsRememberChecked] = useState(false)\n\n const { t } = useTranslation()\n\n return (\n setShowConfirmExpertModal(false)}\n onDismiss={() => setShowConfirmExpertModal(false)}\n headerBackground=\"gradients.cardHeader\"\n style={{ maxWidth: '360px' }}\n >\n \n \n {t(\n \"Expert mode turns off the 'Confirm' transaction prompt, and allows high slippage trades that often result in bad rates and lost funds.\",\n )}\n \n \n {t('Only use this mode if you know what you’re doing.')}\n \n setIsRememberChecked(!isRememberChecked)}\n scale=\"sm\"\n />\n \n {t('Don’t show this again')}\n \n \n {\n // eslint-disable-next-line no-alert\n if (window.prompt(`Please type the word \"confirm\" to enable expert mode.`) === 'confirm') {\n toggleExpertMode()\n setShowConfirmExpertModal(false)\n if (isRememberChecked) {\n setShowExpertModeAcknowledgement(false)\n }\n }\n }}\n >\n {t('Turn On Expert Mode')}\n \n {\n setShowConfirmExpertModal(false)\n }}\n >\n {t('Cancel')}\n \n \n )\n}\n\nexport default ExpertModal\n","import { useState } from 'react'\nimport { styled } from 'styled-components'\nimport { Text, Toggle, Flex, Modal, InjectedModalProps, QuestionHelper } from '@pulsex/uikit'\nimport {\n useExpertModeManager,\n useUserExpertModeAcknowledgementShow,\n useUserSingleHopOnly,\n useSmartRouterManager,\n} from 'state/user/hooks'\nimport { useTranslation } from '@pulsex/localization'\nimport { useSwapActionHandlers } from 'state/swap/hooks'\nimport useTheme from 'hooks/useTheme'\nimport TransactionSettings from './TransactionSettings'\nimport ExpertModal from './ExpertModal'\n// import GasSettings from './GasSettings'\n\nconst ScrollableContainer = styled(Flex)`\n flex-direction: column;\n max-height: 400px;\n ${({ theme }) => theme.mediaQueries.sm} {\n max-height: none;\n }\n`\n\nconst SettingsModal: React.FC = ({ onDismiss }) => {\n const [showConfirmExpertModal, setShowConfirmExpertModal] = useState(false)\n const [showExpertModeAcknowledgement, setShowExpertModeAcknowledgement] = useUserExpertModeAcknowledgementShow()\n const [expertMode, toggleExpertMode] = useExpertModeManager()\n const [isSmartRouter, toggleSetSmartRouter] = useSmartRouterManager()\n const [singleHopOnly, setSingleHopOnly] = useUserSingleHopOnly()\n const { onChangeRecipient } = useSwapActionHandlers()\n\n const { t } = useTranslation()\n\n const { theme } = useTheme()\n\n if (showConfirmExpertModal) {\n return (\n \n )\n }\n\n const handleExpertModeToggle = () => {\n if (expertMode) {\n onChangeRecipient(null)\n toggleExpertMode()\n } else if (!showExpertModeAcknowledgement) {\n onChangeRecipient(null)\n toggleExpertMode()\n } else {\n setShowConfirmExpertModal(true)\n }\n }\n\n return (\n \n \n \n \n \n \n \n {t('AutoRouter')}\n \n \n {\n toggleSetSmartRouter()\n }}\n />\n \n \n \n {t('Expert Mode')}\n \n \n \n \n \n \n {t('Disable Multihops')}\n \n \n {\n setSingleHopOnly(!singleHopOnly)\n }}\n />\n \n {/* \n \n {t('Subgraph Health Indicator')}\n \n \n {\n setSubgraphHealth(!subgraphHealth)\n }}\n />\n */}\n \n \n )\n}\n\nexport default SettingsModal\n","import { Flex, IconButton, CogIcon, useModal, NotificationDot } from '@pulsex/uikit'\nimport { useExpertModeManager } from 'state/user/hooks'\nimport SettingsModal from './SettingsModal'\n\ntype Props = {\n color?: string\n mr?: string\n}\n\nconst GlobalSettings = ({ color, mr = '8px' }: Props) => {\n const [onPresentSettingsModal] = useModal()\n const [expertMode] = useExpertModeManager()\n\n return (\n \n \n \n \n \n \n \n )\n}\n\nexport default GlobalSettings\n","import orderBy from 'lodash/orderBy'\nimport { ConfigMenuItemsType } from './config/config'\n\nexport const getActiveMenuItem = ({ pathname, menuConfig }: { pathname: string; menuConfig: ConfigMenuItemsType[] }) => {\n return menuConfig.find((menuItem) => pathname === menuItem.href || getActiveSubMenuItem({ menuItem, pathname }))\n}\n\nexport const getActiveSubMenuItem = ({ pathname, menuItem }: { pathname: string; menuItem?: ConfigMenuItemsType }) => {\n const activeSubMenuItems = menuItem?.items.filter((subMenuItem) => pathname === subMenuItem.href) ?? []\n\n // Pathname doesn't include any submenu item href - return undefined\n if (!activeSubMenuItems || activeSubMenuItems.length === 0) {\n return undefined\n }\n\n // Pathname includes one sub menu item href - return it\n if (activeSubMenuItems.length === 1) {\n return activeSubMenuItems[0]\n }\n\n // Pathname includes multiple sub menu item hrefs - find the most specific match\n const mostSpecificMatch = orderBy(activeSubMenuItems, (subMenuItem) => subMenuItem.href.length, 'desc')[0]\n\n return mostSpecificMatch\n}\n","import { ChainId } from '@pulsex/chains'\nimport { useEffect, useState } from 'react'\nimport { useLocation } from 'react-router'\nimport { Link } from 'react-router-dom'\nimport { Menu as UikitMenu } from '@pulsex/uikit'\nimport { languageList, useTranslation } from '@pulsex/localization'\nimport { useTheme } from 'styled-components'\nimport { usePlsxUsdPrice } from 'hooks/useUSDCPrice'\nimport { useAddLiquidityFormState } from 'state/mint/reducer'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport TestnetWarningBanner from \"../TestnetWarningBanner\"\nimport config from './config/config'\nimport UserMenu from './UserMenu'\nimport GlobalSettings from './GlobalSettings'\nimport { getActiveMenuItem, getActiveSubMenuItem } from './utils'\n\nconst Menu = (props) => {\n const { chainId } = useActiveChainId()\n const { isDark } = useTheme()\n const { protocol } = useAddLiquidityFormState()\n const pulsexPriceUsd = usePlsxUsdPrice(protocol)\n const { currentLanguage, setLanguage, t } = useTranslation()\n const { pathname } = useLocation()\n const [showWarning, setShowWarning] = useState(false)\n\n const activeMenuItem = getActiveMenuItem({ menuConfig: config(t), pathname })\n const activeSubMenuItem = getActiveSubMenuItem({ menuItem: activeMenuItem, pathname })\n\n useEffect(() => {\n if (ChainId.PULSECHAIN_TESTNET === chainId) {\n setShowWarning(true)\n } else {\n setShowWarning(false)\n }\n }, [chainId])\n\n return (\n <>\n {\n return \n }}\n userMenu={}\n globalMenu={}\n isDark={isDark}\n banner={showWarning && typeof window !== 'undefined' && }\n // toggleTheme={toggleTheme}\n currentLang={currentLanguage.code}\n langs={languageList}\n setLang={setLanguage}\n plsxPriceUsd={pulsexPriceUsd}\n links={config(t)}\n subLinks={activeMenuItem?.hideSubNav ? [] : activeMenuItem?.items}\n activeItem={activeMenuItem?.href}\n activeSubItem={activeSubMenuItem?.href}\n buyCakeLabel={t('Buy PLSX')}\n {...props}\n />\n \n )\n}\n\nexport default Menu\n","import { styled } from 'styled-components'\nimport { Flex, Text, OpenNewIcon } from '@pulsex/uikit'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport { ChainLogo } from 'components/Logo/ChainLogo'\nimport { PULSECHAIN_BRIDGE_URL } from 'config/constants/endpoints'\n\nconst StyledAnchor = styled.a`\n text-decoration: none; /* Remove underline from anchor */\n`;\n\nexport const StyledBridgeButton = styled(Flex)`\n width: 360px;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n height: 50px;\n padding: 0;\n border-radius: 10px;\n background-color: ${({ theme }) => theme.colors.backgroundAlt};\n border: 1px solid ${({ theme }) => theme.colors.cardBorder};\n cursor: pointer;\n &:hover {\n background: ${({ theme }) => theme.colors.backgroundAlt2};\n }\n\n ${({ theme }) => theme.mediaQueries.lg} {\n width: 450px;\n padding: 0;\n }\n\n ${({ theme }) => theme.mediaQueries.xxl} {\n width: 450px;\n padding: 0;\n }\n`\n\nexport const BridgeButton = () => {\n const { chainId } = useActiveChainId()\n return (\n \n \n \n \n PulseChain Bridge\n \n \n \n \n \n \n )\n}\n","import { useState, useCallback, useEffect } from 'react'\nimport { useSWRConfig } from 'swr'\n\nexport const useRefreshBlockNumber = () => {\n const [isLoading, setFetch] = useState(false)\n\n const refreshBlockNumber = useCallback(() => {\n if (!isLoading) {\n setFetch(true)\n }\n }, [isLoading])\n\n const { mutate } = useSWRConfig()\n\n useEffect(() => {\n if (!isLoading) return\n\n mutate(['blockNumber'])\n\n // setTimeout is used to demonstrate the loading\n // because the real loading state occurs on multicall state\n // we don't know when the fetch is finished.\n setTimeout(() => setFetch(false), 500)\n }, [mutate, isLoading])\n\n return { refreshBlockNumber, isLoading }\n}\n\nexport default useRefreshBlockNumber\n","import { useDebounce } from '@pulsex/hooks'\nimport { useCallback } from 'react'\nimport styled from 'styled-components'\nimport { Text, LinkExternal } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport { useGetENSAddressByName } from 'hooks/useGetENSAddressByName'\nimport { AutoColumn } from 'components/Layout/Column'\nimport { RowBetween } from 'components/Layout/Row'\nimport { getBlockExplorerLink, getBlockExploreName, safeGetAddress } from 'utils'\n\nconst InputPanel = styled.div`\n display: flex;\n flex-flow: column nowrap;\n position: relative;\n border-radius: 1.25rem;\n background-color: ${({ theme }) => theme.colors.backgroundAlt};\n z-index: 1;\n width: 100%;\n`\n\nconst ContainerRow = styled(\"div\").withConfig({\n shouldForwardProp: (props) => ![\"error\"].includes(props),\n})<{ error: boolean }>`\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ${({ error, theme }) => (error ? theme.colors.failure : theme.colors.background)};\n transition: border-color 300ms ${({ error }) => (error ? 'step-end' : 'step-start')},\n color 500ms ${({ error }) => (error ? 'step-end' : 'step-start')};\n background-color: ${({ theme }) => theme.colors.backgroundAlt};\n`\n\nconst InputContainer = styled.div`\n flex: 1;\n padding: 1rem;\n`\n\nconst Input = styled(\"input\").withConfig({\n shouldForwardProp: (props) => ![\"error\"].includes(props),\n})<{ error?: boolean }>`\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: ${({ theme }) => theme.colors.backgroundAlt};\n transition: color 300ms ${({ error }) => (error ? 'step-end' : 'step-start')};\n color: ${({ error, theme }) => (error ? theme.colors.failure : theme.colors.primary)};\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n &::placeholder {\n color: ${({ theme }) => theme.colors.textDisabled};\n }\n padding: 0px;\n -webkit-appearance: textfield;\n\n &::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n\n &::placeholder {\n color: ${({ theme }) => theme.colors.textDisabled};\n }\n`\n\nexport default function AddressInputPanel({\n id,\n value,\n onChange,\n}: {\n id?: string\n // the typed string value\n value: string\n // triggers whenever the typed value changes\n onChange: (value: string) => void\n}) {\n const { chainId } = useActiveChainId()\n const { t } = useTranslation()\n const debounceEnsName = useDebounce(value, 500)\n const recipientENSAddress = useGetENSAddressByName(debounceEnsName)\n\n const address = safeGetAddress(value) ? value : safeGetAddress(recipientENSAddress)\n\n const handleInput = useCallback(\n (event) => {\n const input = event.target.value\n const withoutSpaces = input.replace(/\\s+/g, '')\n onChange(withoutSpaces)\n },\n [onChange],\n )\n\n const error = Boolean(value.length > 0 && !address)\n\n return (\n \n \n \n \n \n {t('Recipient')}\n {address && chainId && (\n \n ({t(`View on ${getBlockExploreName(chainId)}`)})\n \n )}\n \n \n \n \n \n \n )\n}\n","import { ErrorIcon, Flex, Text } from '@pulsex/uikit'\nimport { AutoColumn } from 'components/Layout/Column'\nimport styled, { css } from 'styled-components'\n\nexport const Wrapper = styled(Flex)`\n position: relative;\n flex-direction: column;\n justify-content: space-between;\n padding: 1rem;\n`\n\nexport const ArrowWrapper = styled(\"div\").withConfig({\n shouldForwardProp: (props) => ![\"clickable\"].includes(props),\n})<{ clickable: boolean }>`\n padding: 2px;\n\n ${({ clickable }) =>\n clickable\n ? css`\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n `\n : null}\n`\n\nexport const ErrorText = styled(Text)<{ severity?: 0 | 1 | 2 | 3 | 4 }>`\n color: ${({ theme, severity }) =>\n severity === 3 || severity === 4\n ? theme.colors.failure\n : severity === 2\n ? theme.colors.warning\n : severity === 1\n ? theme.colors.text\n : theme.colors.success};\n`\n\nexport const StyledBalanceMaxMini = styled.button`\n height: 22px;\n width: 22px;\n background-color: ${({ theme }) => theme.colors.background};\n border: none;\n border-radius: 50%;\n padding: 0.2rem;\n font-size: 0.875rem;\n font-weight: 400;\n margin-left: 0.4rem;\n cursor: pointer;\n color: ${({ theme }) => theme.colors.text};\n display: flex;\n justify-content: center;\n align-items: center;\n float: right;\n\n :hover {\n background-color: ${({ theme }) => theme.colors.dropdown};\n }\n :focus {\n background-color: ${({ theme }) => theme.colors.dropdown};\n outline: none;\n }\n`\n\nexport const TruncatedText = styled(Text).attrs({ ellipsis: true })`\n width: 220px;\n`\n\nconst SwapCallbackErrorInner = styled.div`\n background-color: ${({ theme }) => `${theme.colors.failure}33`};\n border-radius: 1rem;\n display: flex;\n align-items: center;\n font-size: 0.825rem;\n width: 100%;\n padding: 3rem 1.25rem 1rem 1rem;\n margin-top: -2rem;\n color: ${({ theme }) => theme.colors.failure};\n z-index: -1;\n p {\n padding: 0;\n margin: 0;\n font-weight: 500;\n }\n`\n\nconst SwapCallbackErrorInnerAlertTriangle = styled.div`\n background-color: ${({ theme }) => `${theme.colors.failure}33`};\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: 12px;\n border-radius: 10px;\n min-width: 48px;\n height: 48px;\n`\n\nexport function SwapCallbackError({ error }: { error: string }) {\n return (\n \n \n \n \n

    {error}

    \n
    \n )\n}\n\nexport const SwapShowAcceptChanges = styled(AutoColumn)`\n background-color: ${({ theme }) => `${theme.colors.warning33}`};\n padding: 0.5rem;\n border-radius: 10px;\n margin-top: 1rem;\n`\n","import { Percent } from '@pulsex/sdk'\nimport { warningSeverity } from 'utils/exchange'\nimport { ONE_BIPS } from '../../../config/constants/exchange'\nimport { ErrorText } from './styleds'\n\n/**\n * Formatted version of price impact text with warning colors\n */\nexport default function FormattedPriceImpact({ priceImpact }: { priceImpact?: Percent }) {\n return (\n \n {priceImpact ? (priceImpact.lessThan(ONE_BIPS) ? '<0.01%' : `${priceImpact.toFixed(2)}%`) : '-'}\n \n )\n}\n","import { useMemo } from 'react'\nimport styled from 'styled-components'\nimport { Currency, TradeV1, TradeV2, TradeType } from '@pulsex/sdk'\nimport { Button, Text, ErrorIcon, MouseoverTooltip } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport { Field } from 'state/swap/actions'\nimport {\n computeSlippageAdjustedAmounts,\n computeTradePriceBreakdown,\n warningSeverity,\n} from 'utils/exchange'\nimport { AutoColumn } from 'components/Layout/Column'\nimport { AutoRow, RowBetween, RowFixed } from 'components/Layout/Row'\nimport truncateHash from 'utils/truncateHash'\nimport FormattedPriceImpact from './FormattedPriceImpact'\nimport { SwapCallbackError, SwapShowAcceptChanges } from './styleds'\n\nconst SwapModalFooterContainer = styled(AutoColumn)`\n margin-top: 1rem;\n padding: 0.5rem 0;\n border-radius: ${({ theme }) => theme.radii.default};\n border: 1px solid ${({ theme }) => theme.colors.cardBorder};\n`\nconst LabelRow = styled.div`\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: space-between;\n color: ${({ theme }) => theme.colors.text};\n padding: 0.1rem 0.5rem;\n`\n\nexport default function SwapModalFooter({\n trade,\n onConfirm,\n recipient,\n allowedSlippage,\n swapErrorMessage,\n disabledConfirm,\n showAcceptChanges,\n isMobile,\n onAcceptChanges\n}: {\n trade: TradeV1 | TradeV2\n allowedSlippage: number\n onConfirm: () => void\n recipient: string | null\n swapErrorMessage: string | undefined\n disabledConfirm: boolean\n showAcceptChanges: boolean\n isMobile: boolean\n onAcceptChanges: () => void\n}) {\n const { t } = useTranslation()\n const slippageAdjustedAmounts = useMemo(\n () => computeSlippageAdjustedAmounts(trade, allowedSlippage),\n [allowedSlippage, trade],\n )\n const { priceImpactWithoutFee, realizedLPFee } = useMemo(() => computeTradePriceBreakdown(trade), [trade])\n const severity = warningSeverity(priceImpactWithoutFee)\n\n\n const amount =\n trade.tradeType === TradeType.EXACT_INPUT\n ? slippageAdjustedAmounts[Field.OUTPUT]?.toSignificant(6)\n : slippageAdjustedAmounts[Field.INPUT]?.toSignificant(6)\n const symbol =\n trade.tradeType === TradeType.EXACT_INPUT ? trade.outputAmount.currency.symbol : trade.inputAmount.currency.symbol\n const tradeInfoText =\n trade.tradeType === TradeType.EXACT_INPUT\n ? t('Output is estimated. You will receive at least %amount% %symbol% or the transaction will revert.', {\n amount,\n symbol,\n })\n : t('Input is estimated. You will sell at most %amount% %symbol% or the transaction will revert.', {\n amount,\n symbol,\n })\n const [estimatedText, transactionRevertText] = tradeInfoText.split(`${amount} ${symbol}`)\n\n const truncatedRecipient = recipient ? truncateHash(recipient) : ''\n\n const recipientInfoText = t('Output will be sent to %recipient%', {\n recipient: truncatedRecipient,\n })\n\n const [recipientSentToText, postSentToText] = recipientInfoText.split(truncatedRecipient)\n\n return (\n <>\n \n \n \n \n {t('Price Impact')}\n \n \n \n \n\n \n {`1 ${trade.inputAmount.currency.symbol} price`}\n \n {`${trade.executionPrice?.toSignificant(3)} ${trade.outputAmount.currency.symbol}`}\n \n \n\n \n {`1 ${trade.outputAmount.currency.symbol} price`}\n \n {`${trade.executionPrice?.invert().toSignificant(3)} ${trade.inputAmount.currency.symbol}`}\n \n \n \n \n \n {t('For each trade a %amount% fee is paid towards PLSX buy and burn', { amount: '0.29%' })}\n }\n >\n {t('Liquidity Provider Fee')}\n \n \n \n {realizedLPFee ? `${realizedLPFee?.toSignificant(6)} ${trade.inputAmount.currency.symbol}` : '-'}\n \n \n\n \n \n \n \n {trade.tradeType === TradeType.EXACT_INPUT ? t('Minimum received') : t('Maximum sold')}{' '}\n {t(`after slippage (${(allowedSlippage / 100)}%)`)}\n \n \n \n \n \n {trade.tradeType === TradeType.EXACT_INPUT\n ? slippageAdjustedAmounts[Field.OUTPUT]?.toSignificant(6) ?? '-'\n : slippageAdjustedAmounts[Field.INPUT]?.toSignificant(6) ?? '-'}\n \n \n {trade.tradeType === TradeType.EXACT_INPUT\n ? trade.outputAmount.currency.symbol\n : trade.inputAmount.currency.symbol}\n \n \n \n \n\n {showAcceptChanges ? (\n \n \n \n \n {t('Price Updated')}\n \n \n \n \n ) : null}\n \n \n {estimatedText}\n \n {amount} {symbol}\n \n {transactionRevertText}\n \n \n {recipient !== null ? (\n \n \n {recipientSentToText}\n {truncatedRecipient}\n {postSentToText}\n \n \n ) : null}\n\n \n 2 ? 'danger' : 'primary'}\n onClick={onConfirm}\n disabled={disabledConfirm}\n mt=\"12px\"\n id=\"confirm-swap-or-send\"\n width=\"100%\"\n >\n {severity > 2 ? t('Swap Anyway') : t('Confirm Swap')}\n \n\n {swapErrorMessage ? : null}\n \n \n )\n}\n","import { useMemo } from 'react'\nimport styled from 'styled-components'\nimport { Currency, TradeV1, TradeV2, TradeType } from '@pulsex/sdk'\nimport { Box, Text, ArrowDownIcon, Flex } from '@pulsex/uikit'\nimport { computeTradePriceBreakdown, warningSeverity } from 'utils/exchange'\nimport { CurrencyLogo } from 'components/Logo'\nimport { TruncatedText } from './styleds'\n\nconst StyledHeaderRow = styled(Box)`\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: space-between;\n border-radius: 10px;\n background-color: ${({ theme }) => theme.colors.input};\n padding: 0.5rem 0.5rem;\n`\nconst ArrowWrapper = styled.div`\n border-radius: 50%;\n height: 28px;\n width: 28px;\n position: relative;\n margin-top: -11px;\n margin-bottom: -11px;\n left: calc(50% - 14px);\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: ${({ theme }) => theme.colors.tertiary};\n z-index: 2;\n`\n\nexport default function SwapModalHeader({\n trade,\n showAcceptChanges,\n}: {\n trade: TradeV1 | TradeV2\n showAcceptChanges: boolean\n}) {\n const { priceImpactWithoutFee } = useMemo(() => computeTradePriceBreakdown(trade), [trade])\n const priceImpactSeverity = warningSeverity(priceImpactWithoutFee)\n\n return (\n <>\n \n \n {trade.inputAmount.toSignificant(6)}\n \n \n \n \n {trade.inputAmount.currency.symbol}\n \n \n \n \n \n \n \n 2\n ? 'failure'\n : showAcceptChanges && trade.tradeType === TradeType.EXACT_INPUT\n ? 'primary'\n : 'text'\n }\n >\n {trade.outputAmount.toSignificant(6)}\n \n\n \n \n \n {trade.outputAmount.currency.symbol}\n \n \n \n \n )\n}\n","import { useCallback, useMemo } from 'react'\nimport { Currency, TradeV1, TradeV2, TradeType } from '@pulsex/sdk'\nimport { InjectedModalProps } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport TransactionConfirmationModal, {\n ConfirmationModalContent,\n TransactionErrorContent,\n} from 'components/TransactionConfirmationModal'\nimport SwapModalFooter from './SwapModalFooter'\nimport SwapModalHeader from './SwapModalHeader'\n\n/**\n * Returns true if the trade requires a confirmation of details before we can submit it\n * @param tradeA trade A\n * @param tradeB trade B\n */\nfunction tradeMeaningfullyDiffers(\n tradeA: TradeV1 | TradeV2,\n tradeB: TradeV1 | TradeV2,\n): boolean {\n return (\n tradeA.tradeType !== tradeB.tradeType ||\n !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) ||\n !tradeA.inputAmount.equalTo(tradeB.inputAmount) ||\n !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency) ||\n !tradeA.outputAmount.equalTo(tradeB.outputAmount)\n )\n}\ninterface ConfirmSwapModalProps {\n trade?: TradeV1 | TradeV2\n originalTrade?: TradeV1 | TradeV2\n attemptingTxn: boolean\n txHash?: string\n recipient: string | null\n allowedSlippage: number\n isMobile?: boolean\n swapErrorMessage?: string\n onAcceptChanges: () => void\n onConfirm: () => void\n customOnDismiss?: () => void\n}\n\nconst ConfirmSwapModal: React.FC = ({\n trade,\n originalTrade,\n attemptingTxn,\n txHash,\n recipient,\n allowedSlippage,\n isMobile,\n swapErrorMessage,\n onAcceptChanges,\n onConfirm,\n customOnDismiss,\n onDismiss,\n}) => {\n const showAcceptChanges = useMemo(\n () => Boolean(trade && originalTrade && tradeMeaningfullyDiffers(trade, originalTrade)),\n [originalTrade, trade],\n )\n\n const { t } = useTranslation()\n\n const modalHeader = useCallback(() => {\n return trade ? (\n \n ) : null\n }, [showAcceptChanges, trade])\n\n const modalBottom = useCallback(() => {\n return trade ? (\n \n ) : null\n }, \n [\n allowedSlippage, \n onConfirm, \n showAcceptChanges, \n swapErrorMessage, \n trade, \n isMobile, \n onAcceptChanges, \n recipient\n ])\n\n // text to show while loading\n const pendingText = t('Swapping %amountA% %symbolA% for %amountB% %symbolB%', {\n amountA: trade?.inputAmount?.toSignificant(6) ?? '',\n symbolA: trade?.inputAmount?.currency?.symbol ?? '',\n amountB: trade?.outputAmount?.toSignificant(6) ?? '',\n symbolB: trade?.outputAmount?.currency?.symbol ?? '',\n })\n\n const confirmationContent = useCallback(\n () =>\n swapErrorMessage ? (\n \n ) : (\n \n ),\n [onDismiss, modalBottom, modalHeader, swapErrorMessage],\n )\n\n return (\n \n )\n}\n\nexport default ConfirmSwapModal\n","import { Fragment, memo } from 'react'\nimport { Currency, TradeV1, TradeV2, TradeType } from '@pulsex/sdk'\nimport { Text, Flex, ChevronRightIcon } from '@pulsex/uikit'\nimport { unwrappedToken } from 'utils/wrappedCurrency'\n\nexport default memo(function SwapRoute({ trade }: {\n trade: TradeV1 | TradeV2\n}) {\n return (\n \n {trade.route.path.map((token, i, path) => {\n const isLastItem: boolean = i === path.length - 1\n const currency = unwrappedToken(token)\n return (\n // eslint-disable-next-line react/no-array-index-key\n \n \n \n {currency.symbol}\n \n \n {!isLastItem && }\n \n )\n })}\n \n )\n})\n","import { animated, useSpring } from 'react-spring'\nimport useResizeObserver from 'use-resize-observer'\n\n/**\n * @param open conditional to show content or hide\n * @returns Wrapper to smoothly hide and expand content\n */\nexport default function AnimatedDropdown({ open, children }: React.PropsWithChildren<{ open: boolean }>) {\n const { ref, height } = useResizeObserver()\n\n const props = useSpring({\n height: open ? height ?? 0 : 0,\n config: {\n mass: 1.2,\n tension: 300,\n friction: 20,\n clamp: true,\n velocity: 0.01,\n },\n })\n\n return (\n \n
    {children}
    \n \n )\n}\n","import { Currency, Price } from '@pulsex/sdk'\nimport { useCallback, useState } from 'react'\nimport { Box, Text } from '@pulsex/uikit'\n\ninterface TradePriceProps {\n price: Price\n}\n\nexport default function TradePrice({ price }: TradePriceProps) {\n const [showInverted, setShowInverted] = useState(false)\n const formattedPrice = showInverted ? price?.toSignificant(6) : price?.invert()?.toSignificant(6)\n\n const show = Boolean(price?.baseCurrency && price?.quoteCurrency)\n const label = showInverted\n ? `1 ${price?.baseCurrency?.symbol} = ${price?.quoteCurrency?.symbol}`\n : `1 ${price?.quoteCurrency?.symbol} = ${price?.baseCurrency?.symbol}`\n const flipPrice = useCallback(() => setShowInverted(!showInverted), [setShowInverted, showInverted])\n\n return (\n \n {show ? (\n {\n e.stopPropagation() // dont want this click to affect dropdowns / hovers\n flipPrice()\n }}>\n {label} {formattedPrice ?? '-'}\n \n ) : (\n '-'\n )}\n \n )\n}\n","import { useState } from 'react'\nimport styled from 'styled-components'\nimport BigNumber from 'bignumber.js'\nimport { Currency, TradeV1, TradeV2, TradeType } from '@pulsex/sdk'\nimport { Text, Box, Flex, ChevronDownIcon, MouseoverTooltip } from '@pulsex/uikit'\nimport { Field } from 'state/swap/actions'\nimport { useTranslation } from '@pulsex/localization'\nimport { useUserSlippageTolerance } from 'state/user/hooks'\nimport { computeSlippageAdjustedAmounts, computeTradePriceBreakdown } from 'utils/exchange'\nimport { AutoColumn } from 'components/Layout/Column'\nimport { RowFixed } from 'components/Layout/Row'\nimport FormattedPriceImpact from './FormattedPriceImpact'\nimport SwapRoute from './SwapRoute'\nimport AnimatedDropdown from './AnimatedDropdown'\nimport TradePrice from './TradePrice'\n\nconst StyledHeaderRow = styled(Box)`\n cursor: pointer;\n border-radius: 10px;\n background-color: ${({ theme }) => theme.colors.backgroundAlt};\n padding: 0.5rem 0.5rem;\n`\nconst StyledDetailsRow = styled(Box)`\n border-radius: 10px;\n border: 1px solid ${({ theme }) => theme.colors.cardBorder};\n`\nconst LabelRow = styled.div`\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: space-between;\n color: ${({ theme }) => theme.colors.text};\n font-size: 0.75rem;\n line-height: 1rem;\n padding: 0.1rem 0.5rem;\n`\nconst Container = styled.div`\n display: flex;\n flex-flow: column nowrap;\n position: relative;\n border-radius: '10px';\n background-color: ${({ theme }) => theme.colors.backgroundAlt};\n z-index: 1;\n`\nconst RotatingArrow = styled(ChevronDownIcon)<{ open?: boolean; hidden?: boolean }>`\n hidden: ${({ hidden }) => (hidden ? 'true' : 'false')};\n transform: ${({ open }) => (open ? 'rotate(180deg)' : 'none')};\n transition: transform 0.1s linear;\n`\n\nfunction TradeSummary({\n price,\n trade,\n allowedSlippage,\n isMobile\n}: { \n price: any; \n trade: TradeV1 | TradeV2; \n allowedSlippage: number, \n isMobile: boolean }) {\n const { t } = useTranslation()\n const [showDetails, setShowDetails] = useState(false)\n const showRoute = Boolean(trade && trade.route.path.length > 2)\n const { priceImpactWithoutFee, realizedLPFee } = computeTradePriceBreakdown(trade)\n const isExactIn = trade.tradeType === TradeType.EXACT_INPUT\n const slippageAdjustedAmounts = computeSlippageAdjustedAmounts(trade, allowedSlippage)\n const fee = new BigNumber(realizedLPFee.toSignificant(2))\n\n return (\n \n setShowDetails(!showDetails)}>\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n {t('Price Impact')}\n \n \n \n \n \n\n \n\n \n \n {t('For each trade a %amount% fee is paid towards PLSX buy and burn', { amount: '0.29%' })}\n }\n >\n \n {t('Liquidity Provider Fee')}\n \n \n \n \n {realizedLPFee\n ? `~$${fee.multipliedBy(price).toString()} (${realizedLPFee.toSignificant(4)} ${\n trade.inputAmount.currency.symbol\n })`\n : '-'}\n \n \n\n \n \n \n \n {isExactIn ? t('Minimum received') : t('Maximum sold')}{' '}\n {t(`after slippage (${(allowedSlippage / 100).toFixed(2)}%)`)}\n \n \n \n \n {isExactIn\n ? `${slippageAdjustedAmounts[Field.OUTPUT]?.toSignificant(4)} ${trade.outputAmount.currency.symbol}` ??\n '-'\n : `${slippageAdjustedAmounts[Field.INPUT]?.toSignificant(4)} ${trade.inputAmount.currency.symbol}` ??\n '-'}\n \n \n\n {showRoute && (\n <>\n \n \n \n \n {t('Route')}\n \n \n \n \n \n \n )}\n \n \n \n )\n}\n\nexport interface AdvancedSwapDetailsProps {\n price?: any\n trade?: TradeV1 | TradeV2\n isMobile?: boolean\n}\n\nexport function AdvancedSwapDetails({ price, trade, isMobile }: AdvancedSwapDetailsProps) {\n const [allowedSlippage] = useUserSlippageTolerance()\n\n return (\n \n {trade && (\n \n )}\n \n )\n}\n","import { Percent } from '@pulsex/sdk'\nimport { ContextApi } from '@pulsex/localization'\nimport { ALLOWED_PRICE_IMPACT_HIGH, PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN } from '../../../config/constants/exchange'\n\n/**\n * Given the price impact, get user confirmation.\n *\n * @param priceImpactWithoutFee price impact of the trade without the fee.\n * @param t Translation\n */\nexport default function confirmPriceImpactWithoutFee(priceImpactWithoutFee: Percent, t: ContextApi['t']): boolean {\n if (!priceImpactWithoutFee.lessThan(PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN)) {\n const confirmWord = 'confirm'\n return (\n // eslint-disable-next-line no-alert\n window.prompt(\n t(\n 'This swap has a price impact of at least %amount%%. Please type the word \"%word%\" to continue with this swap.',\n {\n amount: PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN.toFixed(0),\n word: confirmWord,\n },\n ),\n ) === confirmWord\n )\n }\n if (!priceImpactWithoutFee.lessThan(ALLOWED_PRICE_IMPACT_HIGH)) {\n // eslint-disable-next-line no-alert\n return window.confirm(\n t(\n 'This swap has a price impact of at least %amount%%. Please confirm that you would like to continue with this swap.',\n {\n amount: ALLOWED_PRICE_IMPACT_HIGH.toFixed(0),\n },\n ),\n )\n }\n return true\n}\n","import styled from 'styled-components'\nimport { RowBetween } from 'components/Layout/Row'\nimport { AutoColumn } from 'components/Layout/Column'\n\nconst Grouping = styled(RowBetween)`\n width: 50%;\n`\n\nconst Circle = styled.div<{ confirmed?: boolean; disabled?: boolean }>`\n min-width: 20px;\n min-height: 20px;\n background-color: ${({ theme, confirmed, disabled }) =>\n disabled ? theme.colors.backgroundDisabled : confirmed ? theme.colors.success : theme.colors.primary};\n border-radius: 50%;\n color: #ffffff;\n display: flex;\n align-items: center;\n justify-content: center;\n line-height: 8px;\n font-size: 12px;\n`\n\nconst CircleRow = styled.div`\n width: calc(100% - 20px);\n display: flex;\n align-items: center;\n`\n\nconst Connector = styled.div<{ prevConfirmed?: boolean; disabled?: boolean }>`\n width: 100%;\n height: 2px;\n background: linear-gradient(\n 90deg,\n ${({ theme, prevConfirmed, disabled }) =>\n disabled ? theme.colors.backgroundDisabled : prevConfirmed ? theme.colors.success : theme.colors.primary}\n 0%,\n ${({ theme, prevConfirmed, disabled }) =>\n disabled\n ? theme.colors.backgroundDisabled\n : prevConfirmed\n ? theme.colors.primary\n : theme.colors.backgroundDisabled}\n 80%\n );\n opacity: 0.6;\n`\n\ninterface ProgressCirclesProps {\n steps: boolean[]\n disabled?: boolean\n}\n\n/**\n * Based on array of steps, create a step counter of circles.\n * A circle can be enabled, disabled, or confirmed. States are derived\n * from previous step.\n *\n * An extra circle is added to represent the ability to swap, add, or remove.\n * This step will never be marked as complete (because no 'txn done' state in body ui).\n *\n * @param steps array of booleans where true means step is complete\n */\nexport default function ProgressCircles({ steps, disabled = false, ...rest }: ProgressCirclesProps) {\n return (\n \n \n {steps.map((step, i) => {\n return (\n // eslint-disable-next-line react/no-array-index-key\n \n \n {step ? '✓' : i + 1}\n \n \n \n )\n })}\n {steps.length + 1}\n \n \n )\n}\n","/**\n * Returns true if the string value is zero in hex\n * @param hexNumberString\n */\nexport default function isZero(hexNumberString: string) {\n return /^0x0*$/.test(hexNumberString)\n}\n","import memoize from 'lodash/memoize'\n/**\n * Truncate a transaction or address hash\n */\nconst truncateHash = memoize(\n (address: string, startLength = 4, endLength = 4) => {\n if (!address) return ''\n\n return `${address.substring(0, startLength)}...${address.substring(address.length - endLength)}`\n },\n (address, startLength, endLength) => `${address}#${startLength}#${endLength}`,\n)\n\nexport default truncateHash\n","import { useTranslation } from '@pulsex/localization'\nimport { Currency, SwapParameters, Percent, RouterV1, RouterV2, TradeType, TradeV1, TradeV2 } from '@pulsex/sdk'\nimport isZero from '@pulsex/utils/isZero'\nimport truncateHash from '@pulsex/utils/truncateHash'\nimport { useMemo } from 'react'\nimport { isUserRejected } from 'utils/sentry'\nimport { Hash, isAddress } from 'viem'\nimport { useAddLiquidityFormState } from 'state/mint/reducer'\nimport { useRouterContractBothProtocols , basisPointsToPercent } from 'utils/exchange'\nimport { BIPS_BASE , INITIAL_ALLOWED_SLIPPAGE } from 'config/constants/exchange'\n\nimport { useTransactionAdder } from 'state/transactions/hooks'\nimport { transactionErrorToUserReadableMessage } from 'utils/transactionErrorToUserReadableMessage'\nimport useAccountActiveChain from 'hooks/useAccountActiveChain'\nimport useTransactionDeadline from './useTransactionDeadline'\n\nexport enum SwapCallbackState {\n INVALID,\n LOADING,\n VALID,\n}\n\ninterface SwapCall {\n contract: ReturnType\n parameters: SwapParameters\n}\n\ninterface SuccessfulCall extends SwapCallEstimate {\n gasEstimate: bigint\n}\n\ninterface FailedCall extends SwapCallEstimate {\n error: string\n}\n\ninterface SwapCallEstimate {\n call: SwapCall\n}\n\nexport class TransactionRejectedError extends Error { }\n\n/**\n * Returns the swap calls that can be used to make the trade\n * @param trade trade to execute\n * @param allowedSlippage user allowed slippage\n * @param recipientAddress\n */\nfunction useSwapCallArguments(\n trade: TradeV1 | TradeV2 | undefined, // trade to execute, required\n allowedSlippage: number = INITIAL_ALLOWED_SLIPPAGE, // in bips\n recipientAddress: string | null, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender\n): SwapCall[] {\n const { account, chainId } = useAccountActiveChain()\n const { protocol } = useAddLiquidityFormState()\n const contract = useRouterContractBothProtocols(protocol)\n const recipient = recipientAddress === null ? account : recipientAddress\n const deadline = useTransactionDeadline()\n\n return useMemo(() => {\n if (!trade || !account || !recipient || !chainId) return []\n\n if (!contract) {\n return []\n }\n\n const swapMethods = []\n\n if (trade instanceof TradeV1) {\n swapMethods.push(\n RouterV1.swapCallParameters(trade, {\n feeOnTransfer: false,\n allowedSlippage: new Percent(BigInt(allowedSlippage), BIPS_BASE),\n recipient,\n deadline: Number(deadline),\n }),\n )\n\n if (trade.tradeType === TradeType.EXACT_INPUT) {\n swapMethods.push(\n RouterV1.swapCallParameters(trade, {\n feeOnTransfer: true,\n allowedSlippage: new Percent(BigInt(allowedSlippage), BIPS_BASE),\n recipient,\n deadline: Number(deadline),\n }),\n )\n }\n } else {\n swapMethods.push(\n RouterV2.swapCallParameters(trade, {\n feeOnTransfer: false,\n allowedSlippage: new Percent(BigInt(allowedSlippage), BIPS_BASE),\n recipient,\n deadline: Number(deadline),\n }),\n )\n\n if (trade.tradeType === TradeType.EXACT_INPUT) {\n swapMethods.push(\n RouterV2.swapCallParameters(trade, {\n feeOnTransfer: true,\n allowedSlippage: new Percent(BigInt(allowedSlippage), BIPS_BASE),\n recipient,\n deadline: Number(deadline),\n }),\n )\n }\n }\n\n return swapMethods.map((parameters) => ({ parameters, contract }))\n }, [account, allowedSlippage, chainId, deadline, recipient, trade, contract])\n}\n\n// returns a function that will execute a swap, if the parameters are all valid\n// and the user has approved the slippage adjusted input amount for the trade\nexport function useSwapCallback(\n trade: TradeV1 | TradeV2 | undefined, // trade to execute, required\n allowedSlippage: number = INITIAL_ALLOWED_SLIPPAGE, // in bips\n recipientAddress: string | null, // the address of the recipient of the trade, or null if swap should be returned to sender\n): { state: SwapCallbackState; callback: null | (() => Promise); error: string | null } {\n const { account, chainId } = useAccountActiveChain()\n\n const { t } = useTranslation()\n\n const addTransaction = useTransactionAdder()\n\n const recipient = recipientAddress === null ? account : recipientAddress\n\n const swapCalls = useSwapCallArguments(trade, allowedSlippage, recipient)\n\n return useMemo(() => {\n if (!trade || !account || !chainId) {\n return { state: SwapCallbackState.INVALID, callback: null, error: 'Missing dependencies' }\n }\n if (!recipient) {\n if (recipientAddress !== null) {\n return { state: SwapCallbackState.INVALID, callback: null, error: 'Invalid recipient' }\n }\n return { state: SwapCallbackState.LOADING, callback: null, error: null }\n }\n\n return {\n state: SwapCallbackState.VALID,\n callback: async function onSwap(): Promise {\n const estimatedCalls: SwapCallEstimate[] = await Promise.all(\n swapCalls.map((call) => {\n const {\n parameters: { methodName, args, value },\n contract,\n } = call\n const options = !value || isZero(value) ? {} : { value }\n\n return contract.estimateGas[methodName](args, options)\n .then((gasEstimate) => {\n return {\n call,\n gasEstimate,\n }\n })\n .catch((gasError) => {\n console.error('Gas estimate failed, trying eth_call to extract error', call)\n return { call, error: transactionErrorToUserReadableMessage(gasError, t) }\n })\n }),\n )\n\n // a successful estimation is a bignumber gas estimate and the next call is also a bignumber gas estimate\n let bestCallOption: SuccessfulCall | SwapCallEstimate | undefined = estimatedCalls.find(\n (el, ix, list): el is SuccessfulCall =>\n 'gasEstimate' in el && (ix === list.length - 1 || 'gasEstimate' in list[ix + 1]),\n )\n\n if (!bestCallOption) {\n const errorCalls = estimatedCalls.filter((call): call is FailedCall => 'error' in call)\n if (errorCalls.length > 0) throw errorCalls[errorCalls.length - 1].error\n const firstNoErrorCall = estimatedCalls.find(\n (call): call is SwapCallEstimate => !('error' in call),\n )\n if (!firstNoErrorCall) throw new Error(t('Unexpected error. Could not estimate gas for the swap.'))\n bestCallOption = firstNoErrorCall\n }\n \n const call = bestCallOption.call as SwapCall & { gas?: string | bigint }\n\n const {\n contract,\n gas,\n parameters: {\n args,\n methodName,\n value,\n },\n } = call\n\n return contract.write[methodName](args, {\n gas,\n // TODO: implement gasPrice calc or oracle so we are not relying on wallet gasPrice feed\n ...(value && !isZero(value) ? { value, account } : { account }),\n })\n .then((response: Hash) => {\n const inputSymbol = trade.inputAmount.currency.symbol\n const outputSymbol = trade.outputAmount.currency.symbol\n const pct = basisPointsToPercent(allowedSlippage)\n const inputAmount =\n trade.tradeType === TradeType.EXACT_INPUT\n ? trade.inputAmount.toSignificant(3)\n : trade.maximumAmountIn(pct).toSignificant(3)\n\n const outputAmount =\n trade.tradeType === TradeType.EXACT_OUTPUT\n ? trade.outputAmount.toSignificant(3)\n : trade.minimumAmountOut(pct).toSignificant(3)\n\n const base = `Swap ${trade.tradeType === TradeType.EXACT_OUTPUT ? 'max.' : ''\n } ${inputAmount} ${inputSymbol} for ${trade.tradeType === TradeType.EXACT_INPUT ? 'min.' : ''\n } ${outputAmount} ${outputSymbol}`\n\n const recipientAddressText =\n recipientAddress && isAddress(recipientAddress) ? truncateHash(recipientAddress) : recipientAddress\n\n const withRecipient = recipient === account ? base : `${base} to ${recipientAddressText}`\n\n const translatableWithRecipient =\n trade.tradeType === TradeType.EXACT_OUTPUT\n ? recipient === account\n ? 'Swap max. %inputAmount% %inputSymbol% for %outputAmount% %outputSymbol%'\n : 'Swap max. %inputAmount% %inputSymbol% for %outputAmount% %outputSymbol% to %recipientAddress%'\n : recipient === account\n ? 'Swap %inputAmount% %inputSymbol% for min. %outputAmount% %outputSymbol%'\n : 'Swap %inputAmount% %inputSymbol% for min. %outputAmount% %outputSymbol% to %recipientAddress%'\n\n addTransaction(\n { hash: response },\n {\n summary: withRecipient,\n translatableSummary: {\n text: translatableWithRecipient,\n data: {\n inputAmount,\n inputSymbol,\n outputAmount,\n outputSymbol,\n ...(recipient !== account && { recipientAddress: recipientAddressText }),\n },\n },\n type: 'swap',\n },\n )\n\n return response\n })\n .catch((error: any) => {\n // if the user rejected the tx, pass this along\n if (isUserRejected(error)) {\n throw new Error('Transaction rejected.')\n } else {\n // otherwise, the error was unexpected and we need to convey that\n console.error(`Swap failed`, error, methodName, args, value)\n throw new Error(t('Swap failed: %message%', { message: transactionErrorToUserReadableMessage(error, t) }))\n }\n })\n },\n error: null,\n }\n }, [trade, account, chainId, recipient, recipientAddress, swapCalls, t, addTransaction, allowedSlippage])\n}\n","import { ERC20Token } from '@pulsex/sdk'\nimport { ChainId } from '@pulsex/chains'\n\nexport const plsWarningTokens = {\n safemoon: new ERC20Token(\n ChainId.PULSECHAIN,\n '0x8076C74C5e3F5852037F31Ff0093Eeb8c8ADd8D3',\n 9,\n 'SAFEMOON',\n 'Safemoon Token',\n '',\n )\n}\n\nexport const plsTestnetWarningTokens = {}\n","import { Token } from '@pulsex/sdk'\nimport { ChainId } from '@pulsex/chains'\n// import { plsTokens } from '@pulsex/tokens'\nimport { plsWarningTokens } from 'config/constants/warningTokens'\n\n// const {} = plsTokens\nconst { safemoon } = plsWarningTokens\n\ninterface WarningTokenList {\n [chainId: number]: {\n [key: string]: Token\n }\n}\n\nconst SwapWarningTokens = {\n [ChainId.PULSECHAIN]: {\n safemoon,\n },\n [ChainId.PULSECHAIN_TESTNET]: {\n // ...\n }\n}\n\nexport default SwapWarningTokens\n","import { Currency } from '@pulsex/sdk'\nimport SwapWarningTokens from 'config/constants/swapWarningTokens'\n\nconst shouldShowSwapWarning = (chainId: number, swapCurrency: Currency): boolean => {\n if (SwapWarningTokens[chainId]) {\n const swapWarningTokens = Object.values(SwapWarningTokens[chainId])\n return swapWarningTokens.some((warningToken) => warningToken.equals(swapCurrency))\n }\n\n return false\n}\n\nexport default shouldShowSwapWarning\n","import { Token } from '@pulsex/sdk'\nimport { Modal, Box, InjectedModalProps } from '@pulsex/uikit'\nimport ImportToken from 'components/SearchModal/ImportToken'\nimport { useTranslation } from '@pulsex/localization'\n\ninterface Props extends InjectedModalProps {\n tokens: Token[]\n onCancel: () => void\n}\n\nconst ImportTokenWarningModal: React.FC> = ({ tokens, onDismiss, onCancel }) => {\n const { t } = useTranslation()\n return (\n {\n onDismiss?.()\n onCancel()\n }}\n >\n \n \n \n \n )\n}\n\nexport default ImportTokenWarningModal\n","import { useState } from 'react'\nimport { useTranslation } from '@pulsex/localization'\nimport { Text, Flex, Checkbox, Button } from '@pulsex/uikit'\n\ninterface AcknowledgementProps {\n handleContinueClick: () => void\n}\n\nconst Acknowledgement: React.FC = ({ handleContinueClick }) => {\n const { t } = useTranslation()\n const [isConfirmed, setIsConfirmed] = useState(false)\n\n return (\n <>\n \n \n setIsConfirmed(!isConfirmed)}\n scale=\"sm\"\n />\n \n {t('I understand')}\n \n \n\n \n \n \n )\n}\n\nexport default Acknowledgement\n","import { useEffect } from 'react'\nimport styled from 'styled-components'\nimport { ModalBody, ModalContainer, Message, ModalHeader, Box, Heading } from '@pulsex/uikit'\nimport useTheme from 'hooks/useTheme'\nimport { useTranslation } from '@pulsex/localization'\nimport { WrappedTokenInfo } from '@pulsex/token-lists'\nimport Acknowledgement from './Acknowledgement'\n\nconst StyledModalContainer = styled(ModalContainer)`\n max-width: 440px;\n`\n\nconst MessageContainer = styled(Message)`\n align-items: flex-start;\n justify-content: flex-start;\n`\n\ninterface SwapWarningModalProps {\n swapCurrency: WrappedTokenInfo\n onDismiss?: () => void\n}\n\n// Modal is fired by a useEffect and doesn't respond to closeOnOverlayClick prop being set to false\nconst usePreventModalOverlayClick = () => {\n useEffect(() => {\n const preventClickHandler = (e) => {\n e.stopPropagation()\n e.preventDefault()\n return false\n }\n\n document.querySelectorAll('[role=\"presentation\"]').forEach((el) => {\n el.addEventListener('click', preventClickHandler, true)\n })\n\n return () => {\n document.querySelectorAll('[role=\"presentation\"]').forEach((el) => {\n el.removeEventListener('click', preventClickHandler, true)\n })\n }\n }, [])\n}\n\nconst SwapWarningModal: React.FC = ({ onDismiss }) => {\n const { t } = useTranslation()\n const { theme } = useTheme()\n usePreventModalOverlayClick()\n\n const SWAP_WARNING = null\n\n return (\n \n \n {t('Notice for trading %symbol%', { symbol: SWAP_WARNING.symbol })}\n \n \n \n {SWAP_WARNING.component}\n \n \n \n \n )\n}\n\nexport default SwapWarningModal\n","import { Currency, Token } from '@pulsex/sdk'\nimport { useModal } from '@pulsex/uikit'\nimport { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { useNavigate } from 'react-router-dom'\nimport useSWRImmutable from 'swr/immutable'\nimport shouldShowSwapWarning from 'utils/shouldShowSwapWarning'\n\nimport ImportTokenWarningModal from 'components/ImportTokenWarningModal'\nimport { useAllTokens, useCurrency } from 'hooks/Tokens'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport { Field } from 'state/swap/actions'\nimport { useSwapState } from 'state/swap/hooks'\nimport { safeGetAddress } from 'utils'\n\nimport SwapWarningModal from '../components/SwapWarningModal'\n\nexport default function useWarningImport() {\n const navigate = useNavigate()\n const { chainId, isWrongNetwork } = useActiveWeb3React()\n const {\n [Field.INPUT]: { currencyId: inputCurrencyId },\n [Field.OUTPUT]: { currencyId: outputCurrencyId },\n } = useSwapState()\n\n // swap warning state\n const [swapWarningCurrency, setSwapWarningCurrency] = useState(null)\n\n // token warning stuff\n const [loadedInputCurrency, loadedOutputCurrency] = [useCurrency(inputCurrencyId), useCurrency(outputCurrencyId)]\n\n const urlLoadedTokens: Token[] = useMemo(\n () => [loadedInputCurrency, loadedOutputCurrency]?.filter((c): c is Token => c?.isToken) ?? [],\n [loadedInputCurrency, loadedOutputCurrency],\n )\n\n const defaultTokens = useAllTokens()\n\n const { data: loadedTokenList } = useSWRImmutable(['token-list'])\n\n const importTokensNotInDefault = useMemo(() => {\n return !isWrongNetwork && urlLoadedTokens && !!loadedTokenList\n ? urlLoadedTokens.filter((token: Token) => {\n const checksummedAddress = safeGetAddress(token.address) || ''\n\n return !(checksummedAddress in defaultTokens) && token.chainId === chainId\n })\n : []\n }, [chainId, defaultTokens, isWrongNetwork, loadedTokenList, urlLoadedTokens])\n\n const [onPresentSwapWarningModal] = useModal(, false)\n const [onPresentImportTokenWarningModal] = useModal(\n navigate('/swap')} />,\n )\n\n useEffect(() => {\n if (swapWarningCurrency) {\n onPresentSwapWarningModal()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [swapWarningCurrency])\n\n const swapWarningHandler = useCallback(\n (currencyInput: Currency) => {\n const showSwapWarning = shouldShowSwapWarning(chainId, currencyInput)\n if (showSwapWarning) {\n setSwapWarningCurrency(currencyInput)\n } else {\n setSwapWarningCurrency(null)\n }\n },\n [chainId, setSwapWarningCurrency],\n )\n\n useEffect(() => {\n if (importTokensNotInDefault.length > 0) {\n onPresentImportTokenWarningModal()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [importTokensNotInDefault.length])\n\n return swapWarningHandler\n}\n","import { Box } from '@pulsex/uikit'\nimport styled from 'styled-components'\n\nexport const StyledPriceChart = styled(Box)<{ \n $isDark: boolean; \n $isExpanded: boolean;\n $isFullWidthContainer?: boolean\n}>`\n border: none;\n border-radius: 10px;\n width: 100%;\n padding-bottom: 20px;\n padding-top: 36px;\n ${({ theme }) => theme.mediaQueries.md} {\n padding-top: 8px;\n background: transparent;\n border-radius: ${({ $isExpanded }) => ($isExpanded ? '0' : '10px')};\n width: ${({ $isExpanded, $isFullWidthContainer }) => ($isFullWidthContainer || $isExpanded ? '100%' : '50%')};\n height: ${({ $isExpanded }) => ($isExpanded ? 'calc(100vh - 167px)' : '566px')};\n margin-right: ${({ $isExpanded }) => ($isExpanded ? '0px' : '0px')};\n }\n`\n\nStyledPriceChart.defaultProps = {\n height: '70%',\n}\n","import { Flex, Text } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport { StyledPriceChart } from './styles'\n\ninterface PlsWplsNoticeProps {\n isDark: boolean\n isChartExpanded: boolean\n}\n\nconst PlsWplsNotice: React.FC = ({ isDark, isChartExpanded }) => {\n const { t } = useTranslation()\n return (\n \n \n \n {t('You can swap WPLS for PLS (and vice versa) with no trading fees.')}\n \n \n {t('Exchange rate is always 1 to 1.')}\n \n \n \n )\n}\n\nexport default PlsWplsNotice\n","import { Flex, Text } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\n\ninterface NoChartAvailableProps {\n token0Address: string\n token1Address: string\n isMobile: boolean\n}\n\nconst NoChartAvailable: React.FC = ({ token0Address, token1Address, isMobile }) => {\n const { t } = useTranslation()\n return (\n <>\n \n {t('Failed to load price chart for this pair')}\n \n Token0: {token0Address ?? 'null'}\n \n \n Token1: {token1Address ?? 'null'}\n \n \n \n )\n}\n\nexport default NoChartAvailable\n","import { Flex, FlexProps, Skeleton, Text } from '@pulsex/uikit'\nimport { formatAmount, formatAmountNotation, tokenPrecisionStyle } from 'utils/formatInfoNumbers'\n\nconst formatOptions = {\n notation: 'standard' as formatAmountNotation,\n displayThreshold: 0.001,\n tokenPrecision: 'normal' as tokenPrecisionStyle,\n}\n\ninterface TokenDisplayProps extends FlexProps {\n value?: number\n inputSymbol?: string\n outputSymbol?: string\n}\n\nconst TokenDisplay: React.FC = ({ value, inputSymbol, outputSymbol, children, ...props }) => {\n return value ? (\n \n \n {formatAmount(value, formatOptions)}\n \n {inputSymbol && outputSymbol && (\n \n {`${inputSymbol}/${outputSymbol}`}\n \n )}\n {children}\n \n ) : (\n \n )\n}\n\nexport default TokenDisplay\n","import { Dispatch, SetStateAction } from 'react'\nimport { ResponsiveContainer, XAxis, YAxis, Tooltip, AreaChart, Area } from 'recharts'\nimport useTheme from 'hooks/useTheme'\nimport { LineChartLoader } from 'components/ChartLoaders'\nimport { PairDataTimeWindowEnum } from 'state/swap/types'\nimport { useTranslation } from '@pulsex/localization'\n\nexport type SwapLineChartProps = {\n data: any[]\n setHoverValue: Dispatch> // used for value on hover\n setHoverDate: Dispatch> // used for label of valye\n isChangePositive: boolean\n timeWindow: PairDataTimeWindowEnum\n} & React.HTMLAttributes\n\nconst getChartColors = ({ isChangePositive }) => {\n return isChangePositive\n ? { gradient1: '#33ff77', gradient2: '#00802b', stroke: '#00e64d' }\n : { gradient1: '#ff4d4d', gradient2: '#800000', stroke: '#ff0001 ' }\n}\n\nconst dateFormattingByTimewindow: Record = {\n [PairDataTimeWindowEnum.DAY]: {\n hour: '2-digit',\n minute: '2-digit',\n },\n [PairDataTimeWindowEnum.WEEK]: {\n month: 'short',\n day: '2-digit',\n },\n [PairDataTimeWindowEnum.MONTH]: {\n month: 'short',\n day: '2-digit',\n },\n [PairDataTimeWindowEnum.YEAR]: {\n month: 'short',\n day: '2-digit',\n },\n}\n\n/**\n * Note: remember that it needs to be mounted inside the container with fixed height\n */\nconst LineChart = ({ data, setHoverValue, setHoverDate, isChangePositive, timeWindow }: SwapLineChartProps) => {\n const {\n currentLanguage: { locale },\n } = useTranslation()\n const { theme } = useTheme()\n const colors = getChartColors({ isChangePositive })\n const dateFormatting = dateFormattingByTimewindow[timeWindow]\n\n if (!data || data.length === 0) {\n return \n }\n return (\n \n {\n if (setHoverDate) setHoverDate(undefined)\n if (setHoverValue) setHoverValue(undefined)\n }}\n >\n \n \n \n \n \n \n time.toLocaleString(locale, dateFormatting)}\n minTickGap={30}\n />\n \n {\n setHoverValue(props.payload.value)\n setHoverDate(\n props.payload.time.toLocaleString(locale, {\n year: 'numeric',\n month: 'short',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n }),\n )\n return null\n }}\n />\n \n \n \n )\n}\n\nexport default LineChart\n","import { Box, ButtonMenu, ButtonMenuItem, Flex, Text } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport { memo, useMemo, useState } from 'react'\nimport { useFetchPairPrices } from 'state/swap/hooks'\nimport { PairDataTimeWindowEnum } from 'state/swap/types'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport NoChartAvailable from './NoChartAvailable'\nimport TokenDisplay from './TokenDisplay'\nimport SwapLineChart from './SwapLineChart'\nimport { getTimeWindowChange } from './utils'\n\nconst BasicChart = ({\n token0Address,\n token1Address,\n isChartExpanded,\n inputCurrency,\n outputCurrency,\n isMobile,\n currentSwapPrice,\n}) => {\n const { chainId } = useActiveChainId()\n const [timeWindow, setTimeWindow] = useState(0)\n\n const { data: pairPrices = [] } = useFetchPairPrices({\n chainId,\n token0Address,\n token1Address,\n timeWindow,\n currentSwapPrice,\n })\n const [hoverValue, setHoverValue] = useState()\n const [hoverDate, setHoverDate] = useState()\n const valueToDisplay = hoverValue || pairPrices[pairPrices.length - 1]?.value\n const {\n changePercentage: changePercentageToCurrent,\n changeValue: changeValueToCurrent,\n isChangePositive: isChangePositiveToCurrent,\n } = useMemo(() => getTimeWindowChange(pairPrices), [pairPrices])\n const { changePercentage, changeValue, isChangePositive } = useMemo(() => {\n if (hoverValue) {\n const lastItem = pairPrices[pairPrices.length - 1]\n if (lastItem) {\n const copyPairPrices = [...pairPrices]\n copyPairPrices[pairPrices.length - 1] = { ...lastItem, value: hoverValue }\n return getTimeWindowChange(copyPairPrices)\n }\n }\n return {\n changePercentage: changePercentageToCurrent,\n changeValue: changeValueToCurrent,\n isChangePositive: isChangePositiveToCurrent,\n }\n }, [pairPrices, hoverValue, changePercentageToCurrent, changeValueToCurrent, isChangePositiveToCurrent])\n const chartHeight = useMemo(() => (isChartExpanded ? 'calc(100% - 120px)' : '378px'), [isChartExpanded])\n const {\n t,\n currentLanguage: { locale },\n } = useTranslation()\n const currentDate = useMemo(() => {\n if (!hoverDate) {\n return new Date().toLocaleString(locale, {\n year: 'numeric',\n month: 'short',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n })\n }\n return null\n }, [hoverDate, locale])\n\n // Sometimes we might receive array full of zeros for obscure tokens while trying to derive data\n // In that case chart is not useful to users\n const isBadData = useMemo(\n () =>\n pairPrices &&\n pairPrices.length > 0 &&\n pairPrices.every(\n (price) => !price.value || price.value === 0 || price.value === Infinity || Number.isNaN(price.value),\n ),\n [pairPrices],\n )\n\n if (isBadData) {\n return (\n \n )\n }\n\n return (\n <>\n \n \n 0 && valueToDisplay}\n inputSymbol={inputCurrency?.symbol}\n outputSymbol={outputCurrency?.symbol}\n >\n \n {`${isChangePositive ? '+' : ''}${changeValue.toFixed(3)} (${changePercentage}%)`}\n \n \n \n {hoverDate || currentDate}\n \n \n \n \n {t('24H')}\n {t('1W')}\n {t('1M')}\n {t('1Y')}\n \n \n \n \n \n \n \n )\n}\n\nexport default memo(BasicChart, (prev, next) => {\n return (\n prev.token0Address === next.token0Address &&\n prev.token1Address === next.token1Address &&\n prev.isChartExpanded === next.isChartExpanded &&\n prev.isMobile === next.isMobile &&\n prev.isChartExpanded === next.isChartExpanded &&\n ((prev.currentSwapPrice !== null &&\n next.currentSwapPrice !== null &&\n prev.currentSwapPrice[prev.token0Address] === next.currentSwapPrice[next.token0Address] &&\n prev.currentSwapPrice[prev.token1Address] === next.currentSwapPrice[next.token1Address]) ||\n (prev.currentSwapPrice === null && next.currentSwapPrice === null))\n )\n})\n","import {\n Button,\n ExpandIcon,\n Flex,\n IconButton,\n ShrinkIcon,\n SyncAltIcon,\n Text,\n LineGraphIcon,\n useMatchBreakpoints,\n} from '@pulsex/uikit'\nimport { CurrencyLogo, DoubleCurrencyLogo } from 'components/Logo'\nimport { useTranslation } from '@pulsex/localization'\nimport { ChartViewMode } from 'state/user/actions'\nimport { useExchangeChartViewManager } from 'state/user/hooks'\nimport styled from 'styled-components'\nimport BasicChart from './BasicChart'\nimport { StyledPriceChart } from './styles'\n\nconst ChartButton = styled(Button)`\n background-color: ${({ $active, theme }) => $active && `${theme.colors.primary}0f`};\n padding: 4px 8px;\n border-radius: 6px;\n`\n\nconst PriceChart = ({\n inputCurrency,\n outputCurrency,\n onSwitchTokens,\n isDark,\n isChartExpanded,\n setIsChartExpanded,\n isMobile,\n isFullWidthContainer,\n token0Address,\n token1Address,\n currentSwapPrice,\n}) => {\n const { isDesktop } = useMatchBreakpoints()\n const toggleExpanded = () => setIsChartExpanded((currentIsExpanded) => !currentIsExpanded)\n const [chartView, setChartView] = useExchangeChartViewManager()\n const { t } = useTranslation()\n\n return (\n \n \n \n {outputCurrency ? (\n \n ) : (\n inputCurrency && \n )}\n {inputCurrency && (\n \n {outputCurrency ? `${inputCurrency.symbol}/${outputCurrency.symbol}` : inputCurrency.symbol}\n \n )}\n \n \n \n \n setChartView(ChartViewMode.BASIC)}\n mr=\"8px\"\n >\n {isDesktop ? t('Basic') : }\n \n \n \n {!isMobile && (\n \n \n {isChartExpanded ? : }\n \n \n )}\n \n {chartView === ChartViewMode.BASIC && (\n \n )}\n \n )\n}\n\nexport default PriceChart","import { Currency, WNATIVE } from '@pulsex/sdk'\nimport useTheme from 'hooks/useTheme'\nimport { useCallback, useState } from 'react'\nimport PlsWplsNotice from './PlsWplsNotice'\nimport PriceChart from './PriceChart'\n\ntype PriceChartContainerProps = {\n inputCurrencyId: string\n inputCurrency: Currency\n outputCurrencyId: string\n outputCurrency: Currency\n isChartExpanded: boolean\n setIsChartExpanded: React.Dispatch>\n isChartDisplayed: boolean\n currentSwapPrice: {\n [key: string]: number\n }\n isMobile?: boolean\n isFullWidthContainer?: boolean\n}\n\nconst PriceChartContainer: React.FC = ({\n inputCurrency,\n outputCurrency,\n isChartExpanded,\n setIsChartExpanded,\n isChartDisplayed,\n isMobile,\n isFullWidthContainer = false,\n currentSwapPrice,\n}) => {\n const token0Address = inputCurrency?.wrapped.address?.toLocaleLowerCase()\n const token1Address = outputCurrency?.wrapped.address?.toLocaleLowerCase()\n const [isPairReversed, setIsPairReversed] = useState(false)\n const togglePairReversed = useCallback(() => setIsPairReversed((prePairReversed) => !prePairReversed), [])\n\n const { isDark } = useTheme()\n\n if (!isChartDisplayed) {\n return null\n }\n\n const isWrap =\n inputCurrency &&\n outputCurrency &&\n WNATIVE[inputCurrency?.chainId]?.equals(inputCurrency.wrapped) &&\n WNATIVE[outputCurrency?.chainId]?.equals(outputCurrency.wrapped)\n\n if (isWrap) {\n return \n }\n\n return (\n \n )\n}\n\nexport default PriceChartContainer\n","import { Box, Flex } from '@pulsex/uikit'\nimport styled from 'styled-components'\n\nexport const Wrapper = styled(Flex)`\n position: relative;\n flex-direction: column;\n justify-content: space-between;\n padding: 0.3rem 0.75rem 0.75rem;\n`\n\nexport const StyledSwapContainer = styled(Flex)<{ $isChartExpanded: boolean }>`\n width: 360px;\n flex-shrink: 0;\n height: fit-content;\n padding: 0;\n\n ${({ theme }) => theme.mediaQueries.lg} {\n width: 450px;\n padding: 0;\n }\n\n ${({ theme }) => theme.mediaQueries.xxl} {\n width: 450px;\n padding: 0;\n }\n`\n\nexport const StyledInputCurrencyWrapper = styled(Box)`\n width: 100%;\n`\nexport const Separator = styled.div`\n width: 100%;\n height: 1px;\n background-color: ${({ theme }) => theme.colors.cardBorder};\n`","import { styled } from 'styled-components'\nimport { ChainId } from '@pulsex/chains'\nimport {\n Flex,\n IconButton,\n Text,\n LineGraphIcon,\n} from '@pulsex/uikit'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\n\ninterface Props {\n title: string\n noConfig?: boolean\n setIsChartDisplayed?: React.Dispatch>\n isChartDisplayed?: boolean\n hasAmount: boolean\n onRefreshPrice: () => void\n protocolSelector?: JSX.Element\n}\n\nconst CurrencyInputContainer = styled(Flex)`\n flex-direction: column;\n align-items: center;\n padding: 10px 10px 0px 20px;\n width: 100%;\n`\n\nconst ColoredIconButton = styled(IconButton)`\n color: ${({ theme }) => theme.colors.textSubtle};\n`\n\nconst CurrencyInputHeader: React.FC = ({ title, setIsChartDisplayed, isChartDisplayed, protocolSelector }) => {\n const { chainId } = useActiveChainId()\n const toggleChartDisplayed = () => {\n setIsChartDisplayed((currentIsChartDisplayed) => !currentIsChartDisplayed)\n }\n\n return (\n \n \n \n \n {title}\n \n \n \n {(chainId === ChainId.PULSECHAIN || chainId === ChainId.PULSECHAIN_TESTNET) && protocolSelector && {protocolSelector}}\n {setIsChartDisplayed && (\n \n {isChartDisplayed ? : }\n \n )}\n \n \n \n )\n}\n\nexport default CurrencyInputHeader\n","import { useCallback, useEffect, useState } from 'react'\nimport BigNumber from 'bignumber.js'\nimport styled from 'styled-components'\nimport { Currency, CurrencyAmount, TradeV1, TradeV2, TradeType } from '@pulsex/sdk'\nimport {\n Button,\n ButtonMenu,\n ButtonMenuItem,\n Text,\n ArrowDownIcon,\n Box,\n useModal,\n Flex,\n IconButton,\n BottomDrawer,\n useMatchBreakpoints,\n ArrowUpDownIcon\n} from '@pulsex/uikit'\nimport { useSearchParams } from 'react-router-dom'\nimport { BIG_INT_ZERO } from 'config/constants/exchange'\nimport { useIsTransactionUnsupported } from 'hooks/Trades'\nimport UnsupportedCurrencyFooter from 'components/UnsupportedCurrencyFooter'\nimport { useTranslation } from '@pulsex/localization'\nimport useUSDCPrice from 'hooks/useUSDCPrice'\nimport { computeTradePriceBreakdown, warningSeverity } from 'utils/exchange'\nimport { currencyId } from 'utils/currencyId'\nimport Dots from 'components/Loader/Dots'\nimport { useAddLiquidityFormState } from 'state/mint/reducer'\nimport { useCurrency } from 'hooks/Tokens'\nimport { BridgeButton } from 'components/BridgeButton'\nimport useRefreshBlockNumberID from './hooks/useRefreshBlockNumber'\nimport AddressInputPanel from './components/AddressInputPanel'\nimport { GreyCard } from '../../components/Card'\nimport { AutoColumn, Column } from '../../components/Layout/Column'\nimport ConfirmSwapModal from './components/ConfirmSwapModal'\nimport CurrencyInputPanel from '../../components/CurrencyInputPanel'\nimport { AutoRow, RowBetween } from '../../components/Layout/Row'\nimport { AdvancedSwapDetails } from './components/AdvancedSwapDetails'\nimport confirmPriceImpactWithoutFee from './components/confirmPriceImpactWithoutFee'\nimport { ArrowWrapper, SwapCallbackError } from './components/styleds'\nimport ProgressSteps from './components/ProgressSteps'\nimport { AppBody } from '../../components/App'\nimport ConnectWalletButton from '../../components/ConnectWalletButton'\n\nimport useActiveWeb3React from '../../hooks/useActiveWeb3React'\nimport { ApprovalState, useApproveCallbackFromTrade } from '../../hooks/useApproveCallback'\nimport { useSwapCallback, TransactionRejectedError } from '../../hooks/useSwapCallback'\nimport useWrapCallback, { WrapType } from '../../hooks/useWrapCallback'\nimport { Field } from '../../state/swap/actions'\nimport { useMintActionHandlers } from '../../state/mint/hooks'\nimport {\n useDefaultsFromURLSearch,\n useDerivedSwapInfo,\n useSwapActionHandlers,\n useSwapState,\n useSingleTokenSwapInfo,\n} from '../../state/swap/hooks'\nimport {\n useExpertModeManager,\n useUserSlippageTolerance,\n useUserSingleHopOnly,\n useExchangeChartManager,\n} from '../../state/user/hooks'\nimport useWarningImport from './hooks/useWarningImport'\nimport { maxAmountSpend } from '../../utils/maxAmountSpend'\nimport Page from '../Page'\nimport SwapWarningModal from './components/SwapWarningModal'\nimport PriceChartContainer from './components/Chart/PriceChartContainer'\nimport { Wrapper, StyledInputCurrencyWrapper, StyledSwapContainer } from './styles'\nimport CurrencyInputHeader from './components/CurrencyInputHeader'\n\nexport const SwitchIconButton = styled(IconButton)`\n background-color: ${({ theme }) => theme.colors.tertiary};\n box-shadow: inset 0px -2px 0px rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n width: 28px;\n height: 28px;\n .icon-up-down {\n display: none;\n }\n &:hover {\n background-color: ${({ theme }) => theme.colors.primary};\n .icon-down {\n display: none;\n fill: white;\n }\n .icon-up-down {\n display: block;\n fill: white;\n }\n }\n`\n\nexport default function Swap() {\n const { t } = useTranslation()\n const [search, setSearch] = useSearchParams()\n const { isMobile } = useMatchBreakpoints()\n const [isChartExpanded, setIsChartExpanded] = useState(false)\n const [userChartPreference, setUserChartPreference] = useExchangeChartManager(isMobile)\n const [isChartDisplayed, setIsChartDisplayed] = useState(userChartPreference)\n const { refreshBlockNumber } = useRefreshBlockNumberID()\n const warningSwapHandler = useWarningImport()\n useDefaultsFromURLSearch()\n\n useEffect(() => {\n setUserChartPreference(isChartDisplayed)\n }, [isChartDisplayed, setUserChartPreference])\n\n const { account } = useActiveWeb3React()\n\n // for expert mode\n const [isExpertMode] = useExpertModeManager()\n\n // get custom setting values for user\n const [allowedSlippage] = useUserSlippageTolerance()\n\n const { protocol } = useAddLiquidityFormState()\n const { onChangeProtocol } = useMintActionHandlers(true)\n\n // Price data\n const {\n [Field.INPUT]: { currencyId: inputCurrencyId },\n [Field.OUTPUT]: { currencyId: outputCurrencyId },\n } = useSwapState()\n const inputCurrency = useCurrency(inputCurrencyId)\n const outputCurrency = useCurrency(outputCurrencyId)\n\n // swap state\n const { independentField, typedValue, recipient } = useSwapState()\n const { v2Trade, currencyBalances, parsedAmount, currencies, inputError: swapInputError } = useDerivedSwapInfo(\n independentField,\n typedValue,\n inputCurrency,\n outputCurrency,\n recipient,\n )\n const price = new BigNumber(useUSDCPrice(currencies?.INPUT)?.toSignificant(2))\n\n const {\n wrapType,\n execute: onWrap,\n inputError: wrapInputError,\n } = useWrapCallback(currencies[Field.INPUT], currencies[Field.OUTPUT], typedValue)\n const showWrap: boolean = wrapType !== WrapType.NOT_APPLICABLE\n const trade = showWrap ? undefined : v2Trade\n\n const singleTokenPrice = useSingleTokenSwapInfo(inputCurrencyId, inputCurrency, outputCurrencyId, outputCurrency)\n\n const parsedAmounts = showWrap\n ? {\n [Field.INPUT]: parsedAmount,\n [Field.OUTPUT]: parsedAmount,\n }\n : {\n [Field.INPUT]: independentField === Field.INPUT ? parsedAmount : trade?.inputAmount,\n [Field.OUTPUT]: independentField === Field.OUTPUT ? parsedAmount : trade?.outputAmount,\n }\n\n const { onSwitchTokens, onCurrencySelection, onUserInput, onChangeRecipient } = useSwapActionHandlers()\n const isValid = !swapInputError\n const dependentField: Field = independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT\n\n const handleTypeInput = useCallback(\n (value: string) => {\n onUserInput(Field.INPUT, value)\n },\n [onUserInput],\n )\n const handleTypeOutput = useCallback(\n (value: string) => {\n onUserInput(Field.OUTPUT, value)\n },\n [onUserInput],\n )\n\n // modal and loading\n const [{ tradeToConfirm, swapErrorMessage, attemptingTxn, txHash }, setSwapState] = useState<{\n tradeToConfirm: TradeV1 | TradeV2 | undefined\n attemptingTxn: boolean\n swapErrorMessage: string | undefined\n txHash: string | undefined\n }>({\n tradeToConfirm: undefined,\n attemptingTxn: false,\n swapErrorMessage: undefined,\n txHash: undefined,\n })\n\n const formattedAmounts = {\n [independentField]: typedValue,\n [dependentField]: showWrap\n ? parsedAmounts[independentField]?.toExact() ?? ''\n : parsedAmounts[dependentField]?.toSignificant(6) ?? '',\n }\n\n const route = trade?.route\n const userHasSpecifiedInputOutput = Boolean(\n currencies[Field.INPUT] && currencies[Field.OUTPUT] && parsedAmounts[independentField]?.greaterThan(BIG_INT_ZERO),\n )\n const noRoute = !route\n\n // check whether the user has approved the router on the input token\n const { approvalState: approval, approveCallback } = useApproveCallbackFromTrade(trade, allowedSlippage)\n\n // check if user has gone through approval process, used to show two step buttons, reset on token change\n const [approvalSubmitted, setApprovalSubmitted] = useState(false)\n\n // mark when a user has submitted an approval, reset onTokenSelection for input field\n useEffect(() => {\n if (approval === ApprovalState.PENDING) {\n setApprovalSubmitted(true)\n }\n }, [approval, approvalSubmitted])\n\n const maxAmountInput: CurrencyAmount | undefined = maxAmountSpend(currencyBalances[Field.INPUT])\n const atMaxAmountInput = Boolean(maxAmountInput && parsedAmounts[Field.INPUT]?.equalTo(maxAmountInput))\n\n // the callback to execute the swap\n const { callback: swapCallback, error: swapCallbackError } = useSwapCallback(trade, allowedSlippage, recipient)\n\n const { priceImpactWithoutFee } = computeTradePriceBreakdown(trade)\n\n const [singleHopOnly] = useUserSingleHopOnly()\n\n // warnings on slippage\n const priceImpactSeverity = warningSeverity(priceImpactWithoutFee)\n\n // show approve flow when: no error on inputs, not approved or pending, or approved in current session\n // never show if price impact is above threshold in non expert mode\n const showApproveFlow =\n !swapInputError &&\n (approval === ApprovalState.NOT_APPROVED ||\n approval === ApprovalState.PENDING ||\n (approvalSubmitted && approval === ApprovalState.APPROVED)) &&\n !(priceImpactSeverity > 3 && !isExpertMode)\n\n const handleConfirmDismiss = useCallback(() => {\n setSwapState({ tradeToConfirm, attemptingTxn, swapErrorMessage, txHash })\n // if there was a tx hash, we want to clear the input\n if (txHash) {\n onUserInput(Field.INPUT, '')\n }\n }, [attemptingTxn, onUserInput, swapErrorMessage, tradeToConfirm, txHash])\n\n const handleSwap = useCallback(() => {\n if (priceImpactWithoutFee && !confirmPriceImpactWithoutFee(priceImpactWithoutFee, t)) {\n return\n }\n if (!swapCallback) {\n return\n }\n setSwapState({ attemptingTxn: true, tradeToConfirm, swapErrorMessage: undefined, txHash: undefined })\n swapCallback()\n .then((hash) => {\n setSwapState({ attemptingTxn: false, tradeToConfirm, swapErrorMessage: undefined, txHash: hash })\n })\n .catch((error) => {\n if (error instanceof TransactionRejectedError) {\n handleConfirmDismiss()\n return\n }\n setSwapState({\n attemptingTxn: false,\n tradeToConfirm,\n swapErrorMessage: error.message,\n txHash: undefined,\n })\n })\n }, [priceImpactWithoutFee, swapCallback, handleConfirmDismiss, tradeToConfirm, t])\n\n const handleAcceptChanges = useCallback(() => {\n setSwapState({ tradeToConfirm: trade, swapErrorMessage, txHash, attemptingTxn })\n }, [attemptingTxn, swapErrorMessage, trade, txHash])\n\n // swap warning state\n const [swapWarningCurrency, setSwapWarningCurrency] = useState(null)\n const [onPresentSwapWarningModal] = useModal()\n\n useEffect(() => {\n if (swapWarningCurrency) {\n onPresentSwapWarningModal()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [swapWarningCurrency])\n\n const handleMaxInput = useCallback(() => {\n if (maxAmountInput) {\n onUserInput(Field.INPUT, maxAmountInput.toExact())\n }\n }, [maxAmountInput, onUserInput])\n\n const handleCurrencySelect = useCallback(\n (newCurrency: Currency, field: Field, currentInputCurrencyId: string, currentOutputCurrencyId: string) => {\n onCurrencySelection(field, newCurrency)\n\n warningSwapHandler(newCurrency)\n \n const isInput = field === Field.INPUT\n const oldCurrencyId = isInput ? currentInputCurrencyId : currentOutputCurrencyId\n const otherCurrencyId = isInput ? currentOutputCurrencyId : currentInputCurrencyId\n const newCurrencyId = currencyId(newCurrency)\n if (newCurrencyId === otherCurrencyId) {\n search.set(isInput ? \"inputCurrency\" : \"outputCurrency\", oldCurrencyId);\n setSearch(search)\n }\n search.set(isInput ? \"inputCurrency\" : \"outputCurrency\", newCurrencyId);\n setSearch(search)\n },\n [onCurrencySelection, warningSwapHandler],\n )\n const handleInputSelect = useCallback(\n (newCurrency: Currency) => handleCurrencySelect(newCurrency, Field.INPUT, inputCurrencyId, outputCurrencyId),\n [handleCurrencySelect, inputCurrencyId, outputCurrencyId],\n )\n const handleOutputSelect = useCallback(\n (newCurrency: Currency) => handleCurrencySelect(newCurrency, Field.OUTPUT, inputCurrencyId, outputCurrencyId),\n [handleCurrencySelect, inputCurrencyId, outputCurrencyId],\n )\n\n const swapIsUnsupported = useIsTransactionUnsupported(currencies?.INPUT, currencies?.OUTPUT)\n\n const [onPresentConfirmModal] = useModal(\n ,\n true,\n true,\n 'confirmSwapModal',\n )\n\n const hasAmount = Boolean(parsedAmount)\n\n const onRefreshPrice = useCallback(() => {\n if (hasAmount) {\n refreshBlockNumber()\n }\n }, [hasAmount, refreshBlockNumber])\n\n const protocolSelector =\n onChangeProtocol(index === 0 ? 'V1' : 'V2')}\n variant=\"subtle\"\n >\n V1\n V2\n \n\n return (\n \n \n {!isMobile && (\n \n )}\n \n \n \n \n \n \n \n \n {\n setApprovalSubmitted(false) // reset 2 step UI for approvals\n onSwitchTokens()\n }}\n >\n \n \n \n {recipient === null && !showWrap && isExpertMode ? (\n \n ) : null}\n \n \n {isExpertMode && recipient !== null && !showWrap ? (\n <>\n \n \n \n \n \n \n \n \n ) : null}\n \n {!swapIsUnsupported ? (\n trade && \n ) : (\n \n )}\n \n {swapIsUnsupported ? (\n \n ) : !account ? (\n \n ) : showWrap ? (\n \n ) : noRoute && userHasSpecifiedInputOutput ? (\n \n {t('Insufficient liquidity for this trade.')}\n {singleHopOnly && {t('Try enabling multi-hop trades.')}}\n \n ) : showApproveFlow ? (\n \n \n {approval === ApprovalState.PENDING ? (\n \n {t('Enabling')} \n \n ) : approvalSubmitted && approval === ApprovalState.APPROVED ? (\n t('Enabled')\n ) : (\n t('Enable %asset%', { asset: currencies[Field.INPUT]?.symbol ?? '' })\n )}\n \n 2 ? 'danger' : 'primary'}\n onClick={() => {\n if (isExpertMode) {\n handleSwap()\n } else {\n setSwapState({\n tradeToConfirm: trade,\n attemptingTxn: false,\n swapErrorMessage: undefined,\n txHash: undefined,\n })\n onPresentConfirmModal()\n }\n }}\n width=\"48%\"\n id=\"swap-button\"\n disabled={\n !isValid || approval !== ApprovalState.APPROVED || (priceImpactSeverity > 3 && !isExpertMode)\n }\n >\n {priceImpactSeverity > 3 && !isExpertMode\n ? t('Price Impact High')\n : priceImpactSeverity > 2\n ? t('Swap Anyway')\n : t('Swap')}\n \n \n ) : (\n 2 && !swapCallbackError ? 'danger' : 'primary'}\n onClick={() => {\n if (isExpertMode) {\n handleSwap()\n } else {\n setSwapState({\n tradeToConfirm: trade,\n attemptingTxn: false,\n swapErrorMessage: undefined,\n txHash: undefined,\n })\n onPresentConfirmModal()\n }\n }}\n id=\"swap-button\"\n width=\"100%\"\n disabled={!isValid || (priceImpactSeverity > 3 && !isExpertMode) || !!swapCallbackError}\n >\n {swapInputError ||\n (priceImpactSeverity > 3 && !isExpertMode\n ? t('Price Impact Too High')\n : priceImpactSeverity > 2\n ? t('Swap Anyway')\n : t('Swap'))}\n \n )}\n {showApproveFlow && (\n \n \n \n )}\n {isExpertMode && swapErrorMessage ? : null}\n \n \n \n \n \n \n \n \n }\n isOpen={isChartDisplayed}\n setIsOpen={setIsChartDisplayed}\n />\n \n )\n}\n","import { Percent } from '@pulsex/sdk'\n\nconst PRECISION = 10000\nexport function computeFiatValuePriceImpact(\n fiatValueInput: number | undefined | null,\n fiatValueOutput: number | undefined | null\n): Percent | undefined {\n if (!fiatValueOutput || !fiatValueInput) return undefined\n if (fiatValueInput === 0) return undefined\n\n const ratio = 1 - fiatValueOutput / fiatValueInput\n const numerator = Math.floor(ratio * PRECISION)\n return new Percent(numerator, PRECISION)\n}\n","import { Percent, Fraction, Price, Currency, CurrencyAmount } from '@pulsex/swap-sdk-core'\n\nexport function formatPercent(percent?: Percent, precision?: number) {\n return percent ? formatFraction(percent.asFraction.multiply(100), precision) : undefined\n}\n\nexport function formatFraction(fraction?: Fraction | null | undefined, precision: number | undefined = 6) {\n if (!fraction || fraction.denominator === 0n) {\n return undefined\n }\n if (fraction.greaterThan(10n ** BigInt(precision))) {\n return fraction.toFixed(0)\n }\n return fraction.toSignificant(precision)\n}\n\nexport function formatPrice(price?: Price | null | undefined, precision?: number | undefined) {\n if (!price) {\n return undefined\n }\n return formatFraction(price?.asFraction.multiply(price?.scalar), precision)\n}\n\nexport function formatAmount(amount?: CurrencyAmount | null | undefined, precision?: number | undefined) {\n if (!amount) {\n return undefined\n }\n return formatFraction(amount?.asFraction.divide(10n ** BigInt(amount?.currency.decimals)), precision)\n}\n\nexport function parseNumberToFraction(num: number, precision = 6) {\n if (Number.isNaN(num) || !Number.isFinite(num)) {\n return undefined\n }\n const scalar = 10 ** precision\n return new Fraction(BigInt(Math.floor(num * scalar)), BigInt(scalar))\n}\n","/**\n * Returns true if the string value is zero in hex\n * @param hexNumberString\n */\nexport function isZero(hexNumberString: string) {\n return /^0x0*$/.test(hexNumberString)\n}\n","import { Currency, TradeType } from '@pulsex/sdk'\nimport { useTranslation } from '@pulsex/localization'\nimport { useMemo } from 'react'\nimport { ChainId } from '@pulsex/chains'\nimport truncateHash from '@pulsex/utils/truncateHash'\nimport { useUserSlippageTolerance } from 'state/user/hooks'\nimport { SendTransactionResult } from 'wagmi/actions'\nimport { formatAmount } from '@pulsex/utils/formatFractions'\nimport { InterfaceTrade } from 'state/autorouter/types'\nimport { useSwapState } from 'state/swap/hooks'\nimport { basisPointsToPercent } from 'utils/exchange'\nimport { transactionErrorToUserReadableMessage } from 'utils/transactionErrorToUserReadableMessage'\nimport { useTransactionAdder } from 'state/transactions/hooks'\nimport { calculateGasMargin, safeGetAddress } from 'utils'\nimport { isUserRejected } from 'utils/sentry'\nimport { viemClients } from 'utils/viem'\nimport { Address, Hex, hexToBigInt } from 'viem'\nimport { useSendTransaction } from 'wagmi'\n\nimport { isZero } from '../../utils/isZero'\n\ninterface SwapCall {\n address: Address\n calldata: Hex\n value: Hex\n}\n\ninterface SwapCallEstimate {\n call: SwapCall\n}\n\ninterface SuccessfulCall extends SwapCallEstimate {\n call: SwapCall\n gasEstimate: bigint\n}\n\ninterface FailedCall extends SwapCallEstimate {\n call: SwapCall\n error: Error\n}\n\nexport class TransactionRejectedError extends Error {}\n\n// returns a function that will execute a swap, if the parameters are all valid\nexport default function useSendSwapTransaction(\n account?: Address,\n chainId?: number,\n trade?: InterfaceTrade, // trade to execute, required\n swapCalls: SwapCall[] = [],\n): { callback: null | (() => Promise) } {\n const { t } = useTranslation()\n const addTransaction = useTransactionAdder()\n const { sendTransactionAsync } = useSendTransaction()\n const publicClient = viemClients[chainId as ChainId]\n const [allowedSlippage] = useUserSlippageTolerance()\n const { recipient } = useSwapState()\n const recipientAddress = recipient === null ? account : recipient\n\n return useMemo(() => {\n if (!trade || !sendTransactionAsync || !account || !chainId || !publicClient) {\n return { callback: null }\n }\n return {\n callback: async function onSwap(): Promise {\n const estimatedCalls: SwapCallEstimate[] = await Promise.all(\n swapCalls.map((call) => {\n const { address, calldata, value } = call\n\n const tx =\n !value || isZero(value)\n ? { account, to: address, data: calldata, value: 0n }\n : {\n account,\n to: address,\n data: calldata,\n value: hexToBigInt(value),\n }\n\n return publicClient\n .estimateGas(tx)\n .then((gasEstimate) => {\n return {\n call,\n gasEstimate,\n }\n })\n .catch((gasError) => {\n console.debug('Gas estimate failed, trying eth_call to extract error', call)\n return { call, error: transactionErrorToUserReadableMessage(gasError, t) }\n })\n }),\n )\n\n // a successful estimation is a bignumber gas estimate and the next call is also a bignumber gas estimate\n let bestCallOption: SuccessfulCall | SwapCallEstimate | undefined = estimatedCalls.find(\n (el, ix, list): el is SuccessfulCall =>\n 'gasEstimate' in el && (ix === list.length - 1 || 'gasEstimate' in list[ix + 1]),\n )\n\n // check if any calls errored with a recognizable error\n if (!bestCallOption) {\n const errorCalls = estimatedCalls.filter((call): call is FailedCall => 'error' in call)\n if (errorCalls.length > 0) throw errorCalls[errorCalls.length - 1].error\n const firstNoErrorCall = estimatedCalls.find(\n (call): call is SwapCallEstimate => !('error' in call),\n )\n if (!firstNoErrorCall) throw new Error(t('Unexpected error. Could not estimate gas for the swap.'))\n bestCallOption = firstNoErrorCall\n }\n\n const call = bestCallOption.call as SwapCall & { gas?: string | bigint }\n\n if ('error' in call) {\n throw new Error('Route lost. Need to restart.')\n }\n\n call.gas = 'gasEstimate' in bestCallOption && bestCallOption.gasEstimate\n ? calculateGasMargin(bestCallOption.gasEstimate)\n : undefined\n\n return sendTransactionAsync({\n account,\n chainId,\n to: call.address,\n data: call.calldata,\n value: call.value && !isZero(call.value) ? hexToBigInt(call.value) : 0n,\n gas: call.gas,\n })\n .then((response) => {\n const inputSymbol = trade.inputAmount.currency.symbol\n const outputSymbol = trade.outputAmount.currency.symbol\n const pct = basisPointsToPercent(allowedSlippage)\n const inputAmount =\n trade.tradeType === TradeType.EXACT_INPUT\n ? formatAmount(trade.inputAmount, 3)\n : formatAmount(trade.maximumAmountIn(pct), 3)\n const outputAmount =\n trade.tradeType === TradeType.EXACT_OUTPUT\n ? formatAmount(trade.outputAmount, 3)\n : formatAmount(trade.minimumAmountOut(pct), 3)\n\n const base = `Swap ${\n trade.tradeType === TradeType.EXACT_OUTPUT ? 'max.' : ''\n } ${inputAmount} ${inputSymbol} for ${\n trade.tradeType === TradeType.EXACT_INPUT ? 'min.' : ''\n } ${outputAmount} ${outputSymbol}`\n\n const recipientAddressText =\n recipientAddress && safeGetAddress(recipientAddress) ? truncateHash(recipientAddress) : recipientAddress\n\n const withRecipient = recipient === account ? base : `${base} to ${recipientAddressText}`\n\n const translatableWithRecipient =\n trade.tradeType === TradeType.EXACT_OUTPUT\n ? recipient === account\n ? 'Swap max. %inputAmount% %inputSymbol% for %outputAmount% %outputSymbol%'\n : 'Swap max. %inputAmount% %inputSymbol% for %outputAmount% %outputSymbol% to %recipientAddress%'\n : recipient === account\n ? 'Swap %inputAmount% %inputSymbol% for min. %outputAmount% %outputSymbol%'\n : 'Swap %inputAmount% %inputSymbol% for min. %outputAmount% %outputSymbol% to %recipientAddress%'\n addTransaction(response, {\n summary: withRecipient,\n translatableSummary: {\n text: translatableWithRecipient,\n data: {\n inputAmount,\n inputSymbol,\n outputAmount,\n outputSymbol,\n ...(recipient !== account && { recipientAddress: recipientAddressText }),\n },\n },\n type: 'swap',\n })\n return response\n })\n .catch((error) => {\n // if the user rejected the tx, pass this along\n if (isUserRejected(error)) {\n throw new TransactionRejectedError(t('Transaction rejected'))\n } else {\n // otherwise, the error was unexpected and we need to convey that\n console.error(`Swap failed`, error, call.address, call.calldata, call.value)\n\n throw new Error(`Swap failed: ${transactionErrorToUserReadableMessage(error, t)}`)\n }\n })\n },\n }\n }, [\n trade,\n sendTransactionAsync,\n account,\n chainId,\n publicClient,\n swapCalls,\n t,\n allowedSlippage,\n recipientAddress,\n recipient,\n addTransaction,\n ])\n}\n","export const swapRouter02Abi = [\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"previousBlockhash\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"data\",\n \"type\": \"bytes[]\"\n }\n ],\n \"name\": \"multicall\",\n \"outputs\": [\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"results\",\n \"type\": \"bytes[]\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"data\",\n \"type\": \"bytes[]\"\n }\n ],\n \"name\": \"multicall\",\n \"outputs\": [\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"results\",\n \"type\": \"bytes[]\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"data\",\n \"type\": \"bytes[]\"\n }\n ],\n \"name\": \"multicall\",\n \"outputs\": [\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"results\",\n \"type\": \"bytes[]\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"selfPermit\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"expiry\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"selfPermitAllowed\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"expiry\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"selfPermitAllowedIfNecessary\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"selfPermitIfNecessary\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOutMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"path\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"swapExactTokensForTokensV1\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOutMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"path\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"swapExactTokensForTokensV2\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountInMax\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"path\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"swapTokensForExactTokensV1\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountOut\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountInMax\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"path\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"swapTokensForExactTokensV2\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountIn\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n }\n] as const\n","export const MSG_SENDER = '0x0000000000000000000000000000000000000001'\nexport const ADDRESS_THIS = '0x0000000000000000000000000000000000000002'\n\n// = 1 << 23 or 100000000000000000000000\nexport const V1_FEE_PATH_PLACEHOLDER = 1\nexport const V2_FEE_PATH_PLACEHOLDER = 2\n","import { Hex, encodeFunctionData, Address } from 'viem'\nimport invariant from 'tiny-invariant'\nimport { Currency, Percent, Token } from '@pulsex/sdk'\nimport {\n MintSpecificOptions,\n IncreaseSpecificOptions,\n NonfungiblePositionManager,\n Position,\n} from '@pulsex/v3-sdk'\n\nimport { approveAndCallAbi } from '../../abis/IApproveAndCall'\n\n// condensed version of v3-sdk AddLiquidityOptions containing only necessary swap + add attributes\nexport type CondensedAddLiquidityOptions = Omit | IncreaseSpecificOptions\n\nexport enum ApprovalTypes {\n NOT_REQUIRED = 0,\n MAX = 1,\n MAX_MINUS_ONE = 2,\n ZERO_THEN_MAX = 3,\n ZERO_THEN_MAX_MINUS_ONE = 4,\n}\n\n// type guard\nexport function isMint(options: CondensedAddLiquidityOptions): options is Omit {\n return Object.keys(options).some((k) => k === 'recipient')\n}\n\nexport abstract class ApproveAndCall {\n public static ABI = approveAndCallAbi\n\n /**\n * Cannot be constructed.\n */\n private constructor() {}\n\n public static encodeApproveMax(token: Token): Hex {\n return encodeFunctionData({\n abi: ApproveAndCall.ABI,\n functionName: 'approveMax',\n args: [token.address],\n })\n }\n\n public static encodeApproveMaxMinusOne(token: Token): Hex {\n return encodeFunctionData({\n abi: ApproveAndCall.ABI,\n functionName: 'approveMaxMinusOne',\n args: [token.address],\n })\n }\n\n public static encodeApproveZeroThenMax(token: Token): Hex {\n return encodeFunctionData({\n abi: ApproveAndCall.ABI,\n functionName: 'approveZeroThenMax',\n args: [token.address],\n })\n }\n\n public static encodeApproveZeroThenMaxMinusOne(token: Token): Hex {\n return encodeFunctionData({\n abi: ApproveAndCall.ABI,\n functionName: 'approveZeroThenMaxMinusOne',\n args: [token.address],\n })\n }\n\n public static encodeCallPositionManager(calldatas: Hex[]): Hex {\n invariant(calldatas.length > 0, 'NULL_CALLDATA')\n\n if (calldatas.length == 1) {\n return encodeFunctionData({\n abi: ApproveAndCall.ABI,\n functionName: 'callPositionManager',\n args: calldatas as [Hex],\n })\n }\n const encodedMulticall = encodeFunctionData({\n abi: NonfungiblePositionManager.ABI,\n functionName: 'multicall',\n args: [calldatas],\n })\n return encodeFunctionData({\n abi: ApproveAndCall.ABI,\n functionName: 'callPositionManager',\n args: [encodedMulticall],\n })\n }\n /**\n * Encode adding liquidity to a position in the nft manager contract\n * @param position Forcasted position with expected amount out from swap\n * @param minimalPosition Forcasted position with custom minimal token amounts\n * @param addLiquidityOptions Options for adding liquidity\n * @param slippageTolerance Defines maximum slippage\n */\n public static encodeAddLiquidity(\n position: Position,\n minimalPosition: Position,\n addLiquidityOptions: CondensedAddLiquidityOptions,\n slippageTolerance: Percent\n ): Hex {\n let { amount0: amount0Min, amount1: amount1Min } = position.mintAmountsWithSlippage(slippageTolerance)\n\n // position.mintAmountsWithSlippage() can create amounts not dependenable in scenarios\n // such as range orders. Allow the option to provide a position with custom minimum amounts\n // for these scenarios\n if (minimalPosition.amount0.quotient < amount0Min) {\n amount0Min = minimalPosition.amount0.quotient\n }\n if (minimalPosition.amount1.quotient < amount1Min) {\n amount1Min = minimalPosition.amount1.quotient\n }\n\n if (isMint(addLiquidityOptions)) {\n return encodeFunctionData({\n abi: ApproveAndCall.ABI,\n functionName: 'mint',\n args: [\n {\n token0: position.pool.token0.address,\n token1: position.pool.token1.address,\n fee: position.pool.fee,\n tickLower: position.tickLower,\n tickUpper: position.tickUpper,\n amount0Min,\n amount1Min,\n recipient: addLiquidityOptions.recipient as Address,\n },\n ],\n })\n }\n\n return encodeFunctionData({\n abi: ApproveAndCall.ABI,\n functionName: 'increaseLiquidity',\n args: [\n {\n token0: position.pool.token0.address,\n token1: position.pool.token1.address,\n amount0Min,\n amount1Min,\n tokenId: BigInt(addLiquidityOptions.tokenId),\n },\n ],\n })\n }\n\n public static encodeApprove(token: Currency, approvalType: ApprovalTypes): Hex {\n switch (approvalType) {\n case ApprovalTypes.MAX:\n return ApproveAndCall.encodeApproveMax(token.wrapped)\n case ApprovalTypes.MAX_MINUS_ONE:\n return ApproveAndCall.encodeApproveMaxMinusOne(token.wrapped)\n case ApprovalTypes.ZERO_THEN_MAX:\n return ApproveAndCall.encodeApproveZeroThenMax(token.wrapped)\n case ApprovalTypes.ZERO_THEN_MAX_MINUS_ONE:\n return ApproveAndCall.encodeApproveZeroThenMaxMinusOne(token.wrapped)\n default:\n throw 'Error: invalid ApprovalType'\n }\n }\n}\n","export const approveAndCallAbi = [\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"token\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"approveMax\",\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"payable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"token\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"approveMaxMinusOne\",\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"payable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"token\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"approveZeroThenMax\",\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"payable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"token\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"approveZeroThenMaxMinusOne\",\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"payable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"bytes\",\n\t\t\t\t\"name\": \"data\",\n\t\t\t\t\"type\": \"bytes\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"callPositionManager\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"bytes\",\n\t\t\t\t\"name\": \"result\",\n\t\t\t\t\"type\": \"bytes\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"payable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"token\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"amount\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"getApprovalType\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"enum IApproveAndCall.ApprovalType\",\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"uint8\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"nonpayable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"components\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\t\t\"name\": \"token0\",\n\t\t\t\t\t\t\"type\": \"address\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\t\t\"name\": \"token1\",\n\t\t\t\t\t\t\"type\": \"address\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\t\t\"name\": \"tokenId\",\n\t\t\t\t\t\t\"type\": \"uint256\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\t\t\"name\": \"amount0Min\",\n\t\t\t\t\t\t\"type\": \"uint256\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\t\t\"name\": \"amount1Min\",\n\t\t\t\t\t\t\"type\": \"uint256\"\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"internalType\": \"struct IApproveAndCall.IncreaseLiquidityParams\",\n\t\t\t\t\"name\": \"params\",\n\t\t\t\t\"type\": \"tuple\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"increaseLiquidity\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"bytes\",\n\t\t\t\t\"name\": \"result\",\n\t\t\t\t\"type\": \"bytes\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"payable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"components\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\t\t\"name\": \"token0\",\n\t\t\t\t\t\t\"type\": \"address\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\t\t\"name\": \"token1\",\n\t\t\t\t\t\t\"type\": \"address\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"internalType\": \"uint24\",\n\t\t\t\t\t\t\"name\": \"fee\",\n\t\t\t\t\t\t\"type\": \"uint24\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"internalType\": \"int24\",\n\t\t\t\t\t\t\"name\": \"tickLower\",\n\t\t\t\t\t\t\"type\": \"int24\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"internalType\": \"int24\",\n\t\t\t\t\t\t\"name\": \"tickUpper\",\n\t\t\t\t\t\t\"type\": \"int24\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\t\t\"name\": \"amount0Min\",\n\t\t\t\t\t\t\"type\": \"uint256\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\t\t\"name\": \"amount1Min\",\n\t\t\t\t\t\t\"type\": \"uint256\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\t\t\"name\": \"recipient\",\n\t\t\t\t\t\t\"type\": \"address\"\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"internalType\": \"struct IApproveAndCall.MintParams\",\n\t\t\t\t\"name\": \"params\",\n\t\t\t\t\"type\": \"tuple\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"mint\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"bytes\",\n\t\t\t\t\"name\": \"result\",\n\t\t\t\t\"type\": \"bytes\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"payable\",\n\t\t\"type\": \"function\"\n\t}\n] as const\n","import { encodeFunctionData, Hex } from 'viem'\nimport { BigintIsh } from '@pulsex/sdk'\nimport { Multicall } from '@pulsex/v3-sdk'\n\nimport { multicallExtendedAbi } from '../../abis/IMulticallExtended'\n\n// deadline or previousBlockhash\nexport type Validation = BigintIsh | string\n\nfunction validateAndParseBytes32(bytes32: string): `0x${string}` {\n if (!bytes32.match(/^0x[0-9a-fA-F]{64}$/)) {\n throw new Error(`${bytes32} is not valid bytes32.`)\n }\n\n return bytes32.toLowerCase() as `0x${string}`\n}\n\nexport abstract class MulticallExtended {\n public static ABI = multicallExtendedAbi\n\n /**\n * Cannot be constructed.\n */\n private constructor() {}\n\n public static encodeMulticall(calldatas: Hex | Hex[], validation?: Validation): Hex {\n // if there's no validation, we can just fall back to regular multicall\n if (typeof validation === 'undefined') {\n return Multicall.encodeMulticall(calldatas)\n }\n\n // if there is validation, we have to normalize calldatas\n if (!Array.isArray(calldatas)) {\n calldatas = [calldatas]\n }\n\n // this means the validation value should be a previousBlockhash\n if (typeof validation === 'string' && validation.startsWith('0x')) {\n const previousBlockhash = validateAndParseBytes32(validation)\n return encodeFunctionData({\n abi: MulticallExtended.ABI,\n functionName: 'multicall',\n args: [previousBlockhash, calldatas],\n })\n }\n const deadline = BigInt(validation)\n return encodeFunctionData({\n abi: MulticallExtended.ABI,\n functionName: 'multicall',\n args: [deadline, calldatas],\n })\n }\n}\n","export const multicallExtendedAbi = [\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"bytes32\",\n\t\t\t\t\"name\": \"previousBlockhash\",\n\t\t\t\t\"type\": \"bytes32\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"bytes[]\",\n\t\t\t\t\"name\": \"data\",\n\t\t\t\t\"type\": \"bytes[]\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"multicall\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"bytes[]\",\n\t\t\t\t\"name\": \"results\",\n\t\t\t\t\"type\": \"bytes[]\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"payable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"deadline\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"bytes[]\",\n\t\t\t\t\"name\": \"data\",\n\t\t\t\t\"type\": \"bytes[]\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"multicall\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"bytes[]\",\n\t\t\t\t\"name\": \"results\",\n\t\t\t\t\"type\": \"bytes[]\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"payable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"bytes[]\",\n\t\t\t\t\"name\": \"data\",\n\t\t\t\t\"type\": \"bytes[]\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"multicall\",\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"bytes[]\",\n\t\t\t\t\"name\": \"results\",\n\t\t\t\t\"type\": \"bytes[]\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"payable\",\n\t\t\"type\": \"function\"\n\t}\n] as const\n","import { Hex, Address, encodeFunctionData } from 'viem'\nimport { Percent, Token, validateAndParseAddress } from '@pulsex/sdk'\nimport { peripheryPaymentsWithFeeExtendedAbi } from '../../abis/IPeripheryPaymentsWithFeeExtended'\nimport { FeeOptions, Payments } from '@pulsex/v3-sdk'\n\nfunction encodeFeeBips(fee: Percent): bigint {\n return fee.multiply(10_000).quotient\n}\n\nexport abstract class PaymentsExtended {\n public static ABI = peripheryPaymentsWithFeeExtendedAbi\n\n /**\n * Cannot be constructed.\n */\n private constructor() {}\n\n public static encodeUnwrapWETH9(amountMinimum: bigint, recipient?: Address, feeOptions?: FeeOptions): Hex {\n // if there's a recipient, just pass it along\n if (typeof recipient === 'string') {\n return Payments.encodeUnwrapWETH9(amountMinimum, recipient, feeOptions)\n }\n\n if (!!feeOptions) {\n const feeBips = encodeFeeBips(feeOptions.fee)\n const feeRecipient = validateAndParseAddress(feeOptions.recipient)\n\n return encodeFunctionData({\n abi: PaymentsExtended.ABI,\n functionName: 'unwrapWETH9WithFee',\n args: [amountMinimum, feeBips, feeRecipient],\n })\n }\n\n return encodeFunctionData({\n abi: PaymentsExtended.ABI,\n functionName: 'unwrapWETH9',\n args: [amountMinimum],\n })\n }\n\n public static encodeSweepToken(\n token: Token,\n amountMinimum: bigint,\n recipient?: Address,\n feeOptions?: FeeOptions\n ): Hex {\n // if there's a recipient, just pass it along\n if (typeof recipient === 'string') {\n return Payments.encodeSweepToken(token, amountMinimum, recipient, feeOptions)\n }\n\n if (!!feeOptions) {\n const feeBips = encodeFeeBips(feeOptions.fee)\n const feeRecipient = validateAndParseAddress(feeOptions.recipient)\n\n return encodeFunctionData({\n abi: PaymentsExtended.ABI,\n functionName: 'sweepTokenWithFee',\n args: [token.address, amountMinimum, feeBips, feeRecipient],\n })\n }\n\n return encodeFunctionData({\n abi: PaymentsExtended.ABI,\n functionName: 'sweepToken',\n args: [token.address, amountMinimum],\n })\n }\n\n public static encodePull(token: Token, amount: bigint): Hex {\n return encodeFunctionData({ abi: PaymentsExtended.ABI, functionName: 'pull', args: [token.address, amount] })\n }\n\n public static encodeWrapETH(amount: bigint): Hex {\n return encodeFunctionData({ abi: PaymentsExtended.ABI, functionName: 'wrapETH', args: [amount] })\n }\n}\n","export const peripheryPaymentsWithFeeExtendedAbi = [\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"token\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"value\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"pull\",\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"payable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [],\n\t\t\"name\": \"refundETH\",\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"payable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"token\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"amountMinimum\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"recipient\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"sweepToken\",\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"payable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"token\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"amountMinimum\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"sweepToken\",\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"payable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"token\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"amountMinimum\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"feeBips\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"feeRecipient\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"sweepTokenWithFee\",\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"payable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"token\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"amountMinimum\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"recipient\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"feeBips\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"feeRecipient\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"sweepTokenWithFee\",\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"payable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"amountMinimum\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"recipient\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"unwrapWETH9\",\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"payable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"amountMinimum\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"unwrapWETH9\",\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"payable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"amountMinimum\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"recipient\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"feeBips\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"feeRecipient\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"unwrapWETH9WithFee\",\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"payable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"amountMinimum\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"feeBips\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"internalType\": \"address\",\n\t\t\t\t\"name\": \"feeRecipient\",\n\t\t\t\t\"type\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"unwrapWETH9WithFee\",\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"payable\",\n\t\t\"type\": \"function\"\n\t},\n\t{\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\"name\": \"value\",\n\t\t\t\t\"type\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"name\": \"wrapETH\",\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"payable\",\n\t\t\"type\": \"function\"\n\t}\n] as const\n","import { Currency, Token, PairV1, PairV2 } from '@pulsex/sdk'\nimport { MixedRouteSDK } from '../entities/mixedRoute/route'\n\n/**\n * Utility function to return each consecutive section of Pools or Pairs in a MixedRoute\n * @param route\n * @returns a nested array of Pools or Pairs in the order of the route\n */\nexport const partitionMixedRouteByProtocol = (route: MixedRouteSDK): (PairV1 | PairV2)[][] => {\n let acc = []\n\n let left = 0\n let right = 0\n while (right < route.pools.length) {\n if (\n (route.pools[left] instanceof PairV1 && route.pools[right] instanceof PairV2) ||\n (route.pools[left] instanceof PairV2 && route.pools[right] instanceof PairV1)\n ) {\n acc.push(route.pools.slice(left, right))\n left = right\n }\n // seek forward with right pointer\n right++\n if (right === route.pools.length) {\n /// we reached the end, take the rest\n acc.push(route.pools.slice(left, right))\n }\n }\n return acc\n}\n\n/**\n * Simple utility function to get the output of an array of Pools or Pairs\n * @param pools\n * @param firstInputToken\n * @returns the output token of the last pool in the array\n */\nexport const getOutputOfPools = (pools: (PairV1 | PairV2)[], firstInputToken: Token): Token => {\n const { inputToken: outputToken } = pools.reduce(\n ({ inputToken }, pool: PairV1 | PairV2): { inputToken: Token } => {\n if (!pool.involvesToken(inputToken)) throw new Error('PATH')\n const outputToken: Token = pool.token0.equals(inputToken) ? pool.token1 : pool.token0\n return {\n inputToken: outputToken,\n }\n },\n { inputToken: firstInputToken }\n )\n return outputToken\n}\n","import { encodeFunctionData, Hex, Address } from 'viem'\nimport { swapRouter02Abi } from '../../abis/ISwapRouter02'\nimport {\n Currency,\n CurrencyAmount,\n Percent,\n TradeType,\n validateAndParseAddress,\n WNATIVE,\n PairV1,\n TradeV1 as V1Trade,\n TradeV2 as V2Trade\n} from '@pulsex/sdk'\nimport {\n FeeOptions,\n MethodParameters,\n Payments,\n PermitOptions,\n Position,\n SelfPermit,\n toHex,\n} from '@pulsex/v3-sdk'\nimport invariant from 'tiny-invariant'\nimport { ADDRESS_THIS, MSG_SENDER } from './constants'\nimport { ApproveAndCall, ApprovalTypes, CondensedAddLiquidityOptions } from './approveAndCall'\nimport { Trade } from './entities/trade'\nimport { Protocol } from './entities/protocol'\nimport { MixedRoute, RouteV1, RouteV2 } from './entities/route'\nimport { MulticallExtended, Validation } from './multicallExtended'\nimport { PaymentsExtended } from './paymentsExtended'\nimport { MixedRouteTrade } from './entities/mixedRoute/trade'\nimport { MixedRouteSDK } from './entities/mixedRoute/route'\nimport { partitionMixedRouteByProtocol, getOutputOfPools } from './utils'\n\nconst ZERO = 0n\nconst REFUND_ETH_PRICE_IMPACT_THRESHOLD = new Percent(50n, 100n)\n\n/**\n * Options for producing the arguments to send calls to the router.\n */\nexport interface SwapOptions {\n /**\n * How much the execution price is allowed to move unfavorably from the trade execution price.\n */\n slippageTolerance: Percent\n\n /**\n * The account that should receive the output. If omitted, output is sent to msg.sender.\n */\n recipient?: Address\n\n /**\n * Either deadline (when the transaction expires, in epoch seconds), or previousBlockhash.\n */\n deadlineOrPreviousBlockhash?: Validation\n\n /**\n * The optional permit parameters for spending the input.\n */\n inputTokenPermit?: PermitOptions\n\n /**\n * Optional information for taking a fee on output.\n */\n fee?: FeeOptions\n}\n\nexport interface SwapAndAddOptions extends SwapOptions {\n /**\n * The optional permit parameters for pulling in remaining output token.\n */\n outputTokenPermit?: PermitOptions\n}\n\nexport type AnyTradeType =\n | Trade\n | V1Trade\n | V2Trade\n | MixedRouteTrade\n | (\n | V1Trade\n | V2Trade\n | MixedRouteTrade\n )[]\n\n/**\n * Represents the PulseX V1 + V2 SwapRouter02, and has static methods for helping execute trades.\n */\nexport abstract class SwapRouter {\n public static ABI = swapRouter02Abi\n\n /**\n * Cannot be constructed.\n */\n private constructor() {}\n\n /**\n * @notice Generates the calldata for a Swap with a V1 Route.\n * @param trade The V1Trade to encode.\n * @param options SwapOptions to use for the trade.\n * @param routerMustCustody Flag for whether funds should be sent to the router\n * @param performAggregatedSlippageCheck Flag for whether we want to perform an aggregated slippage check\n * @returns A string array of calldatas for the trade.\n */\n private static encodeV1Swap(\n trade: V1Trade,\n options: SwapOptions,\n routerMustCustody: boolean,\n performAggregatedSlippageCheck: boolean\n ): Hex {\n const amountIn: bigint = trade.maximumAmountIn(options.slippageTolerance).quotient\n const amountOut: bigint = trade.minimumAmountOut(options.slippageTolerance).quotient\n\n const path = trade.route.path.map((token) => token.address)\n const recipient = routerMustCustody\n ? ADDRESS_THIS\n : typeof options.recipient === 'undefined'\n ? MSG_SENDER\n : validateAndParseAddress(options.recipient)\n\n if (trade.tradeType === TradeType.EXACT_INPUT) {\n const exactInputParams = [amountIn, performAggregatedSlippageCheck ? 0n : amountOut, path, recipient] as const\n\n return encodeFunctionData({\n abi: SwapRouter.ABI,\n functionName: 'swapExactTokensForTokensV1',\n args: exactInputParams,\n })\n } \n const exactOutputParams = [amountOut, amountIn, path, recipient] as const\n\n return encodeFunctionData({\n abi: SwapRouter.ABI,\n functionName: 'swapTokensForExactTokensV1',\n args: exactOutputParams,\n })\n }\n\n /**\n * @notice Generates the calldata for a Swap with a V2 Route.\n * @param trade The V2Trade to encode.\n * @param options SwapOptions to use for the trade.\n * @param routerMustCustody Flag for whether funds should be sent to the router\n * @param performAggregatedSlippageCheck Flag for whether we want to perform an aggregated slippage check\n * @returns A string array of calldatas for the trade.\n */\n private static encodeV2Swap(\n trade: V2Trade,\n options: SwapOptions,\n routerMustCustody: boolean,\n performAggregatedSlippageCheck: boolean\n ): Hex {\n const amountIn: bigint = trade.maximumAmountIn(options.slippageTolerance).quotient\n const amountOut: bigint = trade.minimumAmountOut(options.slippageTolerance).quotient\n\n const path = trade.route.path.map((token) => token.address)\n const recipient = routerMustCustody\n ? ADDRESS_THIS\n : typeof options.recipient === 'undefined'\n ? MSG_SENDER\n : validateAndParseAddress(options.recipient)\n\n if (trade.tradeType === TradeType.EXACT_INPUT) {\n const exactInputParams = [amountIn, performAggregatedSlippageCheck ? 0n : amountOut, path, recipient] as const\n\n return encodeFunctionData({\n abi: SwapRouter.ABI,\n functionName: 'swapExactTokensForTokensV2',\n args: exactInputParams,\n })\n }\n const exactOutputParams = [amountOut, amountIn, path, recipient] as const\n\n return encodeFunctionData({\n abi: SwapRouter.ABI,\n functionName: 'swapTokensForExactTokensV2',\n args: exactOutputParams,\n })\n }\n\n /**\n * @notice Generates the calldata for a MixedRouteSwap. Since single hop routes are not MixedRoutes, we will instead generate\n * them via the existing encodeV3Swap and encodeV2Swap methods.\n * @param trade The MixedRouteTrade to encode.\n * @param options SwapOptions to use for the trade.\n * @param routerMustCustody Flag for whether funds should be sent to the router\n * @param performAggregatedSlippageCheck Flag for whether we want to perform an aggregated slippage check\n * @returns A string array of calldatas for the trade.\n */\n private static encodeMixedRouteSwap(\n trade: MixedRouteTrade,\n options: SwapOptions,\n routerMustCustody: boolean,\n performAggregatedSlippageCheck: boolean\n ): Hex[] {\n const calldatas: Hex[] = []\n\n invariant(trade.tradeType === TradeType.EXACT_INPUT, 'TRADE_TYPE')\n\n for (const { route, inputAmount, outputAmount } of trade.swaps) {\n const amountIn: bigint = trade.maximumAmountIn(options.slippageTolerance, inputAmount).quotient\n const amountOut: bigint = trade.minimumAmountOut(options.slippageTolerance, outputAmount).quotient\n\n // flag for whether the trade is single hop or not\n const singleHop = route.pools.length === 1\n\n const recipient = routerMustCustody\n ? ADDRESS_THIS\n : typeof options.recipient === 'undefined'\n ? MSG_SENDER\n : validateAndParseAddress(options.recipient)\n\n const mixedRouteIsAllV1 = (route: MixedRouteSDK) => {\n return route.pools.every((pool) => pool instanceof PairV1)\n }\n\n if (singleHop) {\n /// For single hop, since it isn't really a mixedRoute, we'll just mimic behavior of V1 or V2\n if (mixedRouteIsAllV1(route)) {\n const path = route.path.map((token) => token.address)\n\n const exactInputParams = [amountIn, performAggregatedSlippageCheck ? 0n : amountOut, path, recipient] as const\n\n calldatas.push(encodeFunctionData({\n abi: SwapRouter.ABI,\n functionName: 'swapExactTokensForTokensV1',\n args: exactInputParams,\n }))\n } else {\n const path = route.path.map((token) => token.address)\n\n const exactInputParams = [amountIn, performAggregatedSlippageCheck ? 0n : amountOut, path, recipient] as const\n\n calldatas.push(encodeFunctionData({\n abi: SwapRouter.ABI,\n functionName: 'swapExactTokensForTokensV2',\n args: exactInputParams,\n }))\n }\n } else {\n const sections = partitionMixedRouteByProtocol(route)\n\n const isLastSectionInRoute = (i: number) => {\n return i === sections.length - 1\n }\n\n let outputToken\n let inputToken = route.input.wrapped\n\n for (let i = 0; i < sections.length; i++) {\n const section = sections[i]\n /// Now, we get output of this section\n outputToken = getOutputOfPools(section, inputToken)\n\n const newRouteOriginal = new MixedRouteSDK(\n [...section],\n section[0].token0.equals(inputToken) ? section[0].token0 : section[0].token1,\n outputToken\n )\n const newRoute = new MixedRoute(newRouteOriginal)\n\n /// Previous output is now input\n inputToken = outputToken\n\n if (mixedRouteIsAllV1(newRoute)) {\n const exactInputParams = [\n i == 0 ? amountIn : 0n, // amountIn\n !isLastSectionInRoute(i) ? 0n : amountOut, // amountOutMin\n newRoute.path.map((token) => token.address), // path\n isLastSectionInRoute(i) ? recipient : ADDRESS_THIS, // to\n ] as const\n\n calldatas.push(encodeFunctionData({\n abi: SwapRouter.ABI,\n functionName: 'swapExactTokensForTokensV1',\n args: exactInputParams,\n }))\n } else {\n const exactInputParams = [\n i == 0 ? amountIn : 0n, // amountIn\n !isLastSectionInRoute(i) ? 0n : amountOut, // amountOutMin\n newRoute.path.map((token) => token.address), // path\n isLastSectionInRoute(i) ? recipient : ADDRESS_THIS, // to\n ] as const\n\n calldatas.push(encodeFunctionData({\n abi: SwapRouter.ABI,\n functionName: 'swapExactTokensForTokensV2',\n args: exactInputParams,\n }))\n }\n }\n }\n }\n\n return calldatas\n }\n\n private static encodeSwaps(\n trades: AnyTradeType,\n options: SwapOptions,\n isSwapAndAdd?: boolean\n ): {\n calldatas: Hex[]\n sampleTrade:\n | V1Trade\n | V2Trade\n | MixedRouteTrade\n routerMustCustody: boolean\n inputIsNative: boolean\n outputIsNative: boolean\n totalAmountIn: CurrencyAmount\n minimumAmountOut: CurrencyAmount\n quoteAmountOut: CurrencyAmount\n } {\n // If dealing with an instance of the aggregated Trade object, unbundle it to individual trade objects.\n if (trades instanceof Trade) {\n invariant(\n trades.swaps.every(\n (swap) =>\n swap.route.protocol == Protocol.V1 ||\n swap.route.protocol == Protocol.V2 ||\n swap.route.protocol == Protocol.MIXED\n ),\n 'UNSUPPORTED_PROTOCOL'\n )\n\n let individualTrades: (\n | V1Trade\n | V2Trade\n | MixedRouteTrade\n )[] = []\n\n for (const { route, inputAmount, outputAmount } of trades.swaps) {\n if (route.protocol == Protocol.V1) {\n individualTrades.push(\n new V1Trade(\n route as RouteV1,\n trades.tradeType == TradeType.EXACT_INPUT ? inputAmount : outputAmount,\n trades.tradeType\n )\n )\n } else if (route.protocol == Protocol.V2) {\n individualTrades.push(\n new V2Trade(\n route as RouteV2,\n trades.tradeType == TradeType.EXACT_INPUT ? inputAmount : outputAmount,\n trades.tradeType\n )\n )\n } else if (route.protocol == Protocol.MIXED) {\n individualTrades.push(\n /// we can change the naming of this function on MixedRouteTrade if needed\n MixedRouteTrade.createUncheckedTrade({\n route: route as MixedRoute,\n inputAmount,\n outputAmount,\n tradeType: trades.tradeType,\n })\n )\n } else {\n throw new Error('UNSUPPORTED_TRADE_PROTOCOL')\n }\n }\n trades = individualTrades\n }\n\n if (!Array.isArray(trades)) {\n trades = [trades]\n }\n\n const numberOfTrades = trades.reduce(\n (numberOfTrades, trade) =>\n numberOfTrades + (trade instanceof MixedRouteTrade ? trade.swaps.length : 1),\n 0\n )\n\n const sampleTrade = trades[0]\n\n // All trades should have the same starting/ending currency and trade type\n invariant(\n trades.every((trade) => trade.inputAmount.currency.equals(sampleTrade.inputAmount.currency)),\n 'TOKEN_IN_DIFF'\n )\n invariant(\n trades.every((trade) => trade.outputAmount.currency.equals(sampleTrade.outputAmount.currency)),\n 'TOKEN_OUT_DIFF'\n )\n invariant(\n trades.every((trade) => trade.tradeType === sampleTrade.tradeType),\n 'TRADE_TYPE_DIFF'\n )\n\n const calldatas: Hex[] = []\n\n const inputIsNative = sampleTrade.inputAmount.currency.isNative\n const outputIsNative = sampleTrade.outputAmount.currency.isNative\n\n // flag for whether we want to perform an aggregated slippage check\n // 1. when there are >2 exact input trades. this is only a heuristic,\n // as it's still more gas-expensive even in this case, but has benefits\n // in that the reversion probability is lower\n const performAggregatedSlippageCheck = sampleTrade.tradeType === TradeType.EXACT_INPUT && numberOfTrades > 2\n // flag for whether funds should be send first to the router\n // 1. when receiving ETH (which much be unwrapped from WETH)\n // 2. when a fee on the output is being taken\n // 3. when performing swap and add\n // 4. when performing an aggregated slippage check\n const routerMustCustody = outputIsNative || !!options.fee || !!isSwapAndAdd || performAggregatedSlippageCheck\n\n // encode permit if necessary\n if (options.inputTokenPermit) {\n invariant(sampleTrade.inputAmount.currency.isToken, 'NON_TOKEN_PERMIT')\n calldatas.push(SelfPermit.encodePermit(sampleTrade.inputAmount.currency, options.inputTokenPermit))\n }\n\n for (const trade of trades) {\n if (trade instanceof V1Trade) {\n calldatas.push(SwapRouter.encodeV1Swap(trade, options, routerMustCustody, performAggregatedSlippageCheck))\n } else if (trade instanceof V2Trade) {\n calldatas.push(SwapRouter.encodeV2Swap(trade, options, routerMustCustody, performAggregatedSlippageCheck))\n } else if (trade instanceof MixedRouteTrade) {\n for (const calldata of SwapRouter.encodeMixedRouteSwap(\n trade,\n options,\n routerMustCustody,\n performAggregatedSlippageCheck\n )) {\n calldatas.push(calldata)\n }\n } else {\n throw new Error('Unsupported trade object')\n }\n }\n\n const ZERO_IN: CurrencyAmount = CurrencyAmount.fromRawAmount(sampleTrade.inputAmount.currency, 0)\n const ZERO_OUT: CurrencyAmount = CurrencyAmount.fromRawAmount(sampleTrade.outputAmount.currency, 0)\n\n const minimumAmountOut: CurrencyAmount = trades.reduce(\n (sum, trade) => sum.add(trade.minimumAmountOut(options.slippageTolerance)),\n ZERO_OUT\n )\n\n const quoteAmountOut: CurrencyAmount = trades.reduce(\n (sum, trade) => sum.add(trade.outputAmount),\n ZERO_OUT\n )\n\n const totalAmountIn: CurrencyAmount = trades.reduce(\n (sum, trade) => sum.add(trade.maximumAmountIn(options.slippageTolerance)),\n ZERO_IN\n )\n\n return {\n calldatas,\n sampleTrade,\n routerMustCustody,\n inputIsNative,\n outputIsNative,\n totalAmountIn,\n minimumAmountOut,\n quoteAmountOut,\n }\n }\n\n /**\n * Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given trade.\n * @param trades to produce call parameters for\n * @param options options for the call parameters\n */\n public static swapCallParameters(\n trades:\n | Trade\n | V1Trade\n | V2Trade\n | MixedRouteTrade\n | (\n | V1Trade\n | V2Trade\n | MixedRouteTrade\n )[],\n options: SwapOptions\n ): MethodParameters {\n const {\n calldatas,\n sampleTrade,\n routerMustCustody,\n inputIsNative,\n outputIsNative,\n totalAmountIn,\n minimumAmountOut,\n } = SwapRouter.encodeSwaps(trades, options)\n\n // unwrap or sweep\n if (routerMustCustody) {\n if (outputIsNative) {\n calldatas.push(PaymentsExtended.encodeUnwrapWETH9(minimumAmountOut.quotient, options.recipient, options.fee))\n } else {\n calldatas.push(\n PaymentsExtended.encodeSweepToken(\n sampleTrade.outputAmount.currency.wrapped,\n minimumAmountOut.quotient,\n options.recipient,\n options.fee\n )\n )\n }\n }\n\n // must refund when paying in ETH: either with an uncertain input amount OR if there's a chance of a partial fill.\n // unlike ERC20's, the full ETH value must be sent in the transaction, so the rest must be refunded.\n if (inputIsNative && (sampleTrade.tradeType === TradeType.EXACT_OUTPUT || SwapRouter.riskOfPartialFill(trades))) {\n calldatas.push(Payments.encodeRefundETH())\n }\n\n return {\n calldata: MulticallExtended.encodeMulticall(calldatas, options.deadlineOrPreviousBlockhash),\n value: toHex(inputIsNative ? totalAmountIn.quotient : ZERO),\n }\n }\n\n /**\n * Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given trade.\n * @param trades to produce call parameters for\n * @param options options for the call parameters\n */\n public static swapAndAddCallParameters(\n trades: AnyTradeType,\n options: SwapAndAddOptions,\n position: Position,\n addLiquidityOptions: CondensedAddLiquidityOptions,\n tokenInApprovalType: ApprovalTypes,\n tokenOutApprovalType: ApprovalTypes\n ): MethodParameters {\n const {\n calldatas,\n inputIsNative,\n outputIsNative,\n sampleTrade,\n totalAmountIn: totalAmountSwapped,\n quoteAmountOut,\n minimumAmountOut,\n } = SwapRouter.encodeSwaps(trades, options, true)\n\n // encode output token permit if necessary\n if (options.outputTokenPermit) {\n invariant(quoteAmountOut.currency.isToken, 'NON_TOKEN_PERMIT_OUTPUT')\n calldatas.push(SelfPermit.encodePermit(quoteAmountOut.currency, options.outputTokenPermit))\n }\n\n const chainId = sampleTrade.route.chainId as any\n const zeroForOne = position.pool.token0.wrapped.address === totalAmountSwapped.currency.wrapped.address\n const { positionAmountIn, positionAmountOut } = SwapRouter.getPositionAmounts(position, zeroForOne)\n\n // if tokens are native they will be converted to WETH9\n const tokenIn = inputIsNative ? WNATIVE[chainId] : positionAmountIn.currency.wrapped\n const tokenOut = outputIsNative ? WNATIVE[chainId] : positionAmountOut.currency.wrapped\n\n // if swap output does not make up whole outputTokenBalanceDesired, pull in remaining tokens for adding liquidity\n const amountOutRemaining = positionAmountOut.subtract(quoteAmountOut.wrapped)\n if (amountOutRemaining.greaterThan(CurrencyAmount.fromRawAmount(positionAmountOut.currency, 0))) {\n // if output is native, this means the remaining portion is included as native value in the transaction\n // and must be wrapped. Otherwise, pull in remaining ERC20 token.\n outputIsNative\n ? calldatas.push(PaymentsExtended.encodeWrapETH(amountOutRemaining.quotient))\n : calldatas.push(PaymentsExtended.encodePull(tokenOut, amountOutRemaining.quotient))\n }\n\n // if input is native, convert to WETH9, else pull ERC20 token\n inputIsNative\n ? calldatas.push(PaymentsExtended.encodeWrapETH(positionAmountIn.quotient))\n : calldatas.push(PaymentsExtended.encodePull(tokenIn, positionAmountIn.quotient))\n\n // approve token balances to NFTManager\n if (tokenInApprovalType !== ApprovalTypes.NOT_REQUIRED)\n calldatas.push(ApproveAndCall.encodeApprove(tokenIn, tokenInApprovalType))\n if (tokenOutApprovalType !== ApprovalTypes.NOT_REQUIRED)\n calldatas.push(ApproveAndCall.encodeApprove(tokenOut, tokenOutApprovalType))\n\n // represents a position with token amounts resulting from a swap with maximum slippage\n // hence the minimal amount out possible.\n const minimalPosition = Position.fromAmounts({\n pool: position.pool,\n tickLower: position.tickLower,\n tickUpper: position.tickUpper,\n amount0: zeroForOne ? position.amount0.quotient.toString() : minimumAmountOut.quotient.toString(),\n amount1: zeroForOne ? minimumAmountOut.quotient.toString() : position.amount1.quotient.toString(),\n useFullPrecision: false,\n })\n\n // encode NFTManager add liquidity\n calldatas.push(\n ApproveAndCall.encodeAddLiquidity(position, minimalPosition, addLiquidityOptions, options.slippageTolerance)\n )\n\n // sweep remaining tokens\n if (inputIsNative) {\n calldatas.push(PaymentsExtended.encodeUnwrapWETH9(ZERO))\n } else {\n calldatas.push(PaymentsExtended.encodeSweepToken(tokenIn, ZERO))\n }\n if (outputIsNative) {\n calldatas.push(PaymentsExtended.encodeUnwrapWETH9(ZERO))\n } else {\n calldatas.push(PaymentsExtended.encodeSweepToken(tokenOut, ZERO))\n }\n\n let value: bigint\n if (inputIsNative) {\n value = totalAmountSwapped.wrapped.add(positionAmountIn.wrapped).quotient\n } else if (outputIsNative) {\n value = amountOutRemaining.quotient\n } else {\n value = ZERO\n }\n\n return {\n calldata: MulticallExtended.encodeMulticall(calldatas, options.deadlineOrPreviousBlockhash),\n value: toHex(value.toString()),\n }\n }\n\n // if price impact is very high, there's a chance of hitting max/min prices resulting in a partial fill of the swap\n private static riskOfPartialFill(trades: AnyTradeType): boolean {\n if (Array.isArray(trades)) {\n return trades.some((trade) => {\n return SwapRouter.v3TradeWithHighPriceImpact(trade)\n })\n } else {\n return SwapRouter.v3TradeWithHighPriceImpact(trades)\n }\n }\n\n private static v3TradeWithHighPriceImpact(\n trade:\n | Trade\n | V1Trade\n | V2Trade\n | MixedRouteTrade\n ): boolean {\n return !(trade instanceof V1Trade || trade instanceof V2Trade) && trade.priceImpact.greaterThan(REFUND_ETH_PRICE_IMPACT_THRESHOLD)\n }\n\n private static getPositionAmounts(\n position: Position,\n zeroForOne: boolean\n ): {\n positionAmountIn: CurrencyAmount\n positionAmountOut: CurrencyAmount\n } {\n const { amount0, amount1 } = position.mintAmounts\n const currencyAmount0 = CurrencyAmount.fromRawAmount(position.pool.token0, amount0)\n const currencyAmount1 = CurrencyAmount.fromRawAmount(position.pool.token1, amount1)\n\n const [positionAmountIn, positionAmountOut] = zeroForOne\n ? [currencyAmount0, currencyAmount1]\n : [currencyAmount1, currencyAmount0]\n return { positionAmountIn, positionAmountOut }\n }\n}\n","// eslint-disable-next-line no-restricted-imports\nimport { Currency, TradeType } from '@pulsex/sdk'\nimport { FeeOptions } from '@pulsex/v3-sdk'\nimport { useTranslation } from '@pulsex/localization'\nimport { ReactNode, useMemo } from 'react'\nimport { SendTransactionResult } from 'wagmi/actions'\nimport useAccountActiveChain from 'hooks/useAccountActiveChain'\nimport { InterfaceTrade } from 'state/autorouter/types'\nimport { useSwapState } from 'state/swap/hooks'\nimport { useUserSlippageTolerance } from 'state/user/hooks'\nimport { basisPointsToPercent } from 'utils/exchange'\nimport useSendSwapTransaction from './useSendSwapTransaction'\nimport { useSwapCallArguments } from './useSwapCallArguments'\n\nexport enum SwapCallbackState {\n INVALID,\n LOADING,\n VALID,\n}\n\ninterface UseSwapCallbackReturns {\n state: SwapCallbackState\n callback?: () => Promise\n error?: ReactNode\n}\ninterface UseSwapCallbackArgs {\n trade: InterfaceTrade | undefined | null // trade to execute, required\n // allowedSlippage: Percent // in bips\n // recipientAddressOrName: string | null | undefined // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender\n // signatureData: SignatureData | null | undefined\n deadline?: bigint\n feeOptions?: FeeOptions\n}\n\n// returns a function that will execute a swap, if the parameters are all valid\n// and the user has approved the slippage adjusted input amount for the trade\nexport function useSwapCallback({\n trade,\n // signatureData,\n deadline,\n feeOptions,\n}: UseSwapCallbackArgs): UseSwapCallbackReturns {\n const { t } = useTranslation()\n const { account, chainId } = useAccountActiveChain()\n const [allowedSlippageRaw] = useUserSlippageTolerance()\n const allowedSlippage = useMemo(() => basisPointsToPercent(allowedSlippageRaw), [allowedSlippageRaw])\n const { recipient: recipientAddress } = useSwapState()\n const recipient = recipientAddress === null ? account : recipientAddress\n\n const swapCalls = useSwapCallArguments(\n trade,\n allowedSlippage,\n recipientAddress,\n // signatureData,\n deadline,\n feeOptions,\n )\n const { callback } = useSendSwapTransaction(account, chainId, trade, swapCalls)\n\n return useMemo(() => {\n if (!trade || !account || !chainId || !callback) {\n return { state: SwapCallbackState.INVALID, error: t('Missing dependencies') }\n }\n if (!recipient) {\n if (recipientAddress !== null) {\n return { state: SwapCallbackState.INVALID, error: t('Invalid recipient') }\n }\n return { state: SwapCallbackState.LOADING }\n }\n\n return {\n state: SwapCallbackState.VALID,\n callback: async () => callback(),\n }\n }, [trade, account, chainId, callback, recipient, recipientAddress, t])\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { SwapRouter } from '@pulsex/smart-order-router/src/routers/sdk'\nimport { PULSEX_SWAP_ROUTER_ADDRESSES } from '@pulsex/smart-order-router'\nimport { Currency, Percent, TradeType } from '@pulsex/sdk'\nimport { FeeOptions } from '@pulsex/v3-sdk'\nimport { useMemo } from 'react'\nimport useAccountActiveChain from 'hooks/useAccountActiveChain'\nimport { useGetENSAddressByName } from 'hooks/useGetENSAddressByName'\nimport { InterfaceTrade } from 'state/autorouter/types'\nimport { Address, Hex, isAddress } from 'viem'\n\ninterface SwapCall {\n address: Address\n calldata: Hex\n value: Hex\n}\n\n/**\n * Returns the swap calls that can be used to make the trade\n * @param trade trade to execute\n * @param allowedSlippage user allowed slippage\n * @param recipientAddressOrName the ENS name or address of the recipient of the swap output\n * @param signatureData the signature data of the permit of the input token amount, if available\n */\nexport function useSwapCallArguments(\n trade: InterfaceTrade | undefined | null,\n allowedSlippage: Percent,\n recipientAddressOrName: string | null | undefined,\n // signatureData: SignatureData | null | undefined,\n deadline: bigint | undefined,\n feeOptions: FeeOptions | undefined,\n): SwapCall[] {\n const { account, chainId } = useAccountActiveChain()\n const recipientENSAddress = useGetENSAddressByName(recipientAddressOrName)\n\n const recipient = (\n recipientAddressOrName === null || recipientAddressOrName === undefined\n ? account\n : isAddress(recipientAddressOrName)\n ? recipientAddressOrName\n : isAddress(recipientENSAddress)\n ? recipientENSAddress\n : null\n ) as Address | null\n\n return useMemo(() => {\n if (!trade || !recipient || !account || !chainId) return []\n\n const swapRouterAddress = chainId ? PULSEX_SWAP_ROUTER_ADDRESSES[chainId] as Address : undefined\n if (!swapRouterAddress) return []\n\n const { value, calldata } = SwapRouter.swapCallParameters(trade, {\n fee: feeOptions,\n recipient,\n slippageTolerance: allowedSlippage,\n // ...(signatureData\n // ? {\n // inputTokenPermit:\n // 'allowed' in signatureData\n // ? {\n // expiry: signatureData.deadline,\n // nonce: signatureData.nonce,\n // s: signatureData.s,\n // r: signatureData.r,\n // v: signatureData.v as any,\n // }\n // : {\n // deadline: signatureData.deadline,\n // amount: signatureData.amount,\n // s: signatureData.s,\n // r: signatureData.r,\n // v: signatureData.v as any,\n // },\n // }\n // : {}),\n\n deadlineOrPreviousBlockhash: deadline?.toString(),\n })\n\n // if (argentWalletContract && trade.inputAmount.currency.isToken) {\n // return [\n // {\n // address: argentWalletContract.address,\n // calldata: argentWalletContract.interface.encodeFunctionData('wc_multiCall', [\n // [\n // approveAmountCalldata(trade.maximumAmountIn(allowedSlippage), swapRouterAddress),\n // {\n // to: swapRouterAddress,\n // value,\n // data: calldata,\n // },\n // ],\n // ]),\n // value: '0x0',\n // },\n // ]\n // }\n return [\n {\n address: swapRouterAddress,\n calldata,\n value,\n },\n ]\n }, [\n account,\n allowedSlippage,\n // argentWalletContract,\n chainId,\n deadline,\n feeOptions,\n recipient,\n // signatureData,\n trade,\n ])\n}\n","import { styled, css, keyframes } from 'styled-components'\n\nexport const loadingAnimation = keyframes`\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n`\n\nexport const LoadingRows = styled.div`\n display: grid;\n\n & > div {\n animation: ${loadingAnimation} 1.5s infinite;\n animation-fill-mode: both;\n background: linear-gradient(\n to left,\n ${({ theme }) => theme.colors.backgroundAlt} 25%,\n ${({ theme }) => theme.colors.primaryDark} 50%,\n ${({ theme }) => theme.colors.backgroundAlt} 75%\n );\n background-size: 400%;\n border-radius: 12px;\n height: 2.4em;\n will-change: background-position;\n }\n`\n\nexport const loadingOpacityMixin = css<{ $loading: boolean }>`\n filter: ${({ $loading }) => ($loading ? 'grayscale(1)' : 'none')};\n opacity: ${({ $loading }) => ($loading ? '0.4' : '1')};\n transition: opacity 0.2s ease-in-out;\n`\n\nexport const LoadingOpacityContainer = styled.div<{ $loading: boolean }>`\n ${loadingOpacityMixin}\n`","import { useMemo } from 'react'\nimport styled from 'styled-components'\nimport { useTranslation } from '@pulsex/localization'\nimport { Currency, TradeType } from '@pulsex/sdk'\nimport { Text, useMatchBreakpoints, MouseoverTooltip } from '@pulsex/uikit'\nimport { formatAmount } from '@pulsex/utils/formatFractions'\nimport { Field } from 'state/swap/actions'\nimport {\n computeSmartRouterSlippageAdjustedAmounts,\n computeRealizedPriceImpact\n} from 'utils/exchange'\nimport { RowFixed } from 'components/Layout/Row'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport useNativeCurrency from 'hooks/useNativeCurrency'\nimport { InterfaceTrade } from 'state/autorouter/types'\nimport FormattedPriceImpact from '../../components/FormattedPriceImpact'\nimport { Separator } from '../../styles'\n\nconst LabelRow = styled.div`\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: space-between;\n color: ${({ theme }) => theme.colors.text};\n font-size: 0.75rem;\n line-height: 1rem;\n padding: 0.25rem 0;\n`\nconst Container = styled.div`\n display: flex;\n flex-flow: column nowrap;\n`\n\ninterface AdvancedSwapDetailsProps {\n trade?: InterfaceTrade\n allowedSlippage: number\n syncing?: boolean\n hideInfoTooltips?: boolean\n}\n\nexport function AdvancedSwapDetails({\n trade,\n allowedSlippage,\n}: AdvancedSwapDetailsProps) {\n const { t } = useTranslation()\n const { isMobile } = useMatchBreakpoints()\n const { chainId } = useActiveWeb3React()\n const nativeCurrency = useNativeCurrency()\n const { priceImpactWithoutFee, realizedLPFee } = computeRealizedPriceImpact(trade)\n\n const {\n expectedOutputAmount,\n priceImpact,\n slippageAdjustedAmounts\n } = useMemo(() => {\n return {\n expectedOutputAmount: trade?.outputAmount,\n priceImpact: trade?.priceImpact ? priceImpactWithoutFee : undefined,\n slippageAdjustedAmounts: trade ? computeSmartRouterSlippageAdjustedAmounts(trade, allowedSlippage) : undefined\n }\n }, [allowedSlippage, priceImpactWithoutFee, trade])\n\n return (\n \n \n {!trade?.gasUseEstimateUSD || !chainId ? null : (\n \n \n \n \n {t('Network Fee')}\n \n \n \n \n ~${trade.gasUseEstimateUSD.toFixed(2)}\n \n \n )}\n\n \n \n \n \n {t('Price Impact')}\n \n \n \n \n \n\n \n \n \n \n {t('Trading Fee')}\n \n \n \n {`${formatAmount(realizedLPFee, 4)} ${trade?.inputAmount?.currency?.symbol}`}\n \n\n \n \n \n \n {t('Expected Output')}\n \n \n \n \n {expectedOutputAmount\n ? `${expectedOutputAmount.toSignificant(6)} ${expectedOutputAmount.currency.symbol}`\n : '-'}\n \n \n\n \n \n \n \n {trade.tradeType === TradeType.EXACT_INPUT ? t('Minimum received') : t('Maximum sold')}{' '}\n {t(`after slippage (${(allowedSlippage / 100).toFixed(2)}%)`)}\n \n \n \n \n {trade.tradeType === TradeType.EXACT_INPUT\n ? `${slippageAdjustedAmounts[Field.OUTPUT]?.toSignificant(4)} ${trade.outputAmount.currency.symbol}` ??\n '-'\n : `${slippageAdjustedAmounts[Field.INPUT]?.toSignificant(4)} ${trade.inputAmount.currency.symbol}` ??\n '-'}\n \n \n \n )\n}\n","import { useTranslation } from '@pulsex/localization'\nimport { Currency, TradeType } from '@pulsex/sdk'\nimport { Flex, GasIcon, MouseoverTooltip, useMatchBreakpoints } from '@pulsex/uikit'\nimport { InterfaceTrade } from 'state/autorouter/types'\nimport { LoadingOpacityContainer } from 'components/Loader/LoadingRows'\nimport styled from 'styled-components'\n\nconst GasWrapper = styled(Flex)`\n align-items: center;\n color: ${({ theme }) => theme.colors.textSubtle};\n user-select: none;\n`\nconst StyledGasIcon = styled(GasIcon)`\n margin-right: 4px;\n height: 18px;\n & > * {\n stroke: ${({ theme }) => theme.colors.tertiary};\n }\n`\nexport const TooltipContainer = styled.div`\n max-width: 256px;\n cursor: default;\n padding: 0.6rem 1rem;\n\n color: ${({ theme }) => theme.colors.tertiary};\n font-weight: 400;\n font-size: 12px;\n line-height: 16px;\n word-break: break-word;\n\n background: ${({ theme }) => theme.colors.backgroundAlt2};\n border-radius: 12px;\n border: 1px solid ${({ theme }) => theme.colors.cardBorder};\n`\nexport const ResponsiveTooltipContainer = styled(TooltipContainer)<{ origin?: string; width?: string }>`\n background-color: ${({ theme }) => theme.colors.backgroundAlt2};\n border: 1px solid ${({ theme }) => theme.colors.cardBorder};\n padding: 1rem;\n width: ${({ width }) => width ?? 'auto'};\n\n ${({ theme }) => theme.mediaQueries.xs} {\n transform: scale(0.8);\n transform-origin: top right;\n }\n`\n\nexport default function GasEstimateBadge({\n trade,\n loading,\n}: {\n trade: InterfaceTrade | undefined | null // dollar amount in active chain's stablecoin\n loading: boolean\n showRoute?: boolean // show route instead of gas estimation summary\n disableHover?: boolean\n}) {\n const { t } = useTranslation()\n const { isMobile } = useMatchBreakpoints()\n const formattedGasPriceString = trade?.gasUseEstimateUSD\n ? trade.gasUseEstimateUSD.toFixed(2) === '0.00'\n ? '<$0.01'\n : `$${ trade.gasUseEstimateUSD.toFixed(2)}`\n : undefined\n\n return (\n \n \n \n \n {formattedGasPriceString ?? null}\n \n \n \n )\n}\n","import { styled } from 'styled-components'\n\nexport const Badge = styled.div`\n align-items: center;\n background: ${({ theme }) => theme.colors.backgroundAlt2};\n border: ${({ theme }) => theme.colors.cardBorder};\n border-radius: 0.5rem;\n color: ${({ theme }) => theme.colors.primary};\n display: inline-flex;\n padding: 4px 6px;\n justify-content: center;\n font-weight: 500;\n`\n\nexport const SmallBadge = styled(Badge)`\n border-radius: 5px;\n padding: 2px 4px;\n`\n","import { Protocol } from '@pulsex/smart-order-router/src/routers/sdk'\nimport { Currency } from '@pulsex/sdk'\nimport { Box, Text , DotLineIcon, MouseoverTooltip } from '@pulsex/uikit'\nimport { Badge } from 'components/Badge'\nimport { DoubleCurrencyLogo } from 'components/Logo'\nimport CurrencyLogo from 'components/Logo/CurrencyLogo'\nimport Row, { AutoRow } from 'components/Layout/Row'\nimport { RoutingDiagramEntry } from 'pages/Swap/SmartSwap/components/SwapRoute'\nimport { styled } from 'styled-components'\nimport { useToken } from '../../hooks/Tokens'\n\nconst Wrapper = styled(Box)`\n align-items: center;\n width: 100%;\n`\n\nconst RouteContainerRow = styled(Row)`\n display: grid;\n grid-template-columns: 24px 1fr 24px;\n`\n\nconst RouteRow = styled(Row)`\n align-items: center;\n display: flex;\n justify-content: center;\n padding: 0.1rem 0.5rem;\n position: relative;\n`\n\nconst PoolBadge = styled(Badge)`\n display: flex;\n padding: 4px 4px;\n`\n\nconst DottedLine = styled.div`\n display: flex;\n align-items: center;\n position: absolute;\n width: calc(100%);\n z-index: 1;\n opacity: 0.5;\n`\n\nconst DotColor = styled(DotLineIcon)`\n path {\n stroke: ${({ theme }) => theme.colors.background};\n }\n`\n\nconst OpaqueBadge = styled(Badge)`\n background-color: ${({ theme }) => theme.colors.backgroundAlt2};\n border-radius: 8px;\n display: grid;\n font-size: 12px;\n grid-gap: 4px;\n grid-auto-flow: column;\n justify-content: start;\n padding: 4px 6px 4px 4px;\n z-index: 1000};\n`\n\nconst ProtocolBadge = styled(Badge)`\n background-color: ${({ theme }) => theme.colors.backgroundDisabled};\n border-radius: 4px;\n color: ${({ theme }) => theme.colors.textSubtle};\n font-size: 10px;\n padding: 2px 4px;\n z-index: 1001;\n`\n\nconst MixedProtocolBadge = styled(ProtocolBadge)`\n width: 60px;\n`\n\nconst BadgeText = styled(Text)`\n word-break: normal;\n`\n\nexport default function RoutingDiagram({\n currencyIn,\n currencyOut,\n routes,\n}: {\n currencyIn: Currency\n currencyOut: Currency\n routes: RoutingDiagramEntry[]\n}) {\n const tokenIn = useToken(currencyIn.wrapped.address)\n const tokenOut = useToken(currencyOut.wrapped.address)\n\n return (\n \n {routes?.map((entry, index) => (\n \n \n \n \n \n ))}\n \n )\n}\n\nfunction Route({ entry: { percent, path, protocol } }: { entry: RoutingDiagramEntry }) {\n return (\n \n \n \n \n \n {protocol === Protocol.MIXED ? (\n \n V1 + V2\n \n ) : (\n \n {protocol.toUpperCase()}\n \n )}\n \n {percent.toSignificant(2)}%\n \n \n \n {path.map(([currency0, currency1, protocolVersion], index) => (\n \n ))}\n \n \n )\n}\n\nfunction Pool({ currency0, currency1, protocolVersion }: { currency0: Currency; currency1: Currency; protocolVersion: string }) {\n const tokenInfo0 = useToken(currency0.wrapped.address)\n const tokenInfo1 = useToken(currency1.wrapped.address)\n\n // TODO - link pool icon to info.uniswap.org via query params\n return (\n {`${tokenInfo0?.symbol }/${ tokenInfo1?.symbol } ${protocolVersion}`} pool}\n >\n \n \n \n \n \n \n )\n}\n","import styled from 'styled-components'\n\nimport { AutoRouterIcon, Text } from '@pulsex/uikit'\n\nconst StyledAutoRouterIcon = styled(AutoRouterIcon)`\n height: 16px;\n width: 16px;\n\n :hover {\n filter: brightness(1.3);\n }\n`\nconst StyledAutoRouterLabel = styled(Text)`\n line-height: 1rem;\n\n /* fallback color */\n color: ${({ theme }) => theme.colors.success};\n\n @supports (-webkit-background-clip: text) and (-webkit-text-fill-color: transparent) {\n background-image: linear-gradient(90deg, #2172e5 0%, #54e521 163.16%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n`\n\nexport function AutoRouterLogo() {\n return \n}\n\nexport function AutoRouterLabel() {\n return Auto Router\n}\n","import { memo, useState } from 'react'\nimport styled from 'styled-components'\nimport { useTranslation } from '@pulsex/localization'\nimport AnimatedDropdown from 'pages/Swap/components/AnimatedDropdown'\nimport { Column } from 'components/Layout/Column'\nimport { LoadingRows } from 'components/Loader/LoadingRows'\nimport RoutingDiagram from 'components/RoutingDiagram'\nimport { AutoRow, RowBetween } from 'components/Layout/Row'\nimport { Protocol } from '@pulsex/smart-order-router/src/routers/sdk'\nimport { Currency, PairV1, Percent, TradeType } from '@pulsex/sdk'\nimport { Box, Text, AddIcon } from '@pulsex/uikit'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport { InterfaceTrade } from 'state/autorouter/types'\nimport { AutoRouterLabel, AutoRouterLogo } from './RouterLabel'\nimport { Separator } from '../../styles'\n\nconst Wrapper = styled(Column).withConfig({\n shouldForwardProp: (props) => ![\"darkMode\", \"fixedOpen\"].includes(props),\n})<{ darkMode?: boolean; fixedOpen?: boolean }>`\n padding: ${({ fixedOpen }) => (fixedOpen ? '0px' : '12px 8px 12px 12px')};\n border-radius: 16px;\n border: 1px solid ${({ theme, fixedOpen }) => (fixedOpen ? 'transparent' : theme.colors.cardBorder)};\n cursor: pointer;\n`\n\nconst OpenCloseIcon = styled(AddIcon)<{ open?: boolean }>`\n margin-left: 8px;\n height: 20px;\n stroke-width: 2px;\n transition: transform 0.1s;\n transform: ${({ open }) => (open ? 'rotate(45deg)' : 'none')};\n stroke: ${({ theme }) => theme.colors.textSubtle};\n cursor: pointer;\n :hover {\n opacity: 0.8;\n }\n`\n\ninterface SwapRouteProps extends React.HTMLAttributes {\n trade: InterfaceTrade\n syncing: boolean\n fixedOpen?: boolean // fixed in open state, hide open/close icon\n}\n\nexport default memo(function SwapRoute({ trade, syncing, fixedOpen = true, ...rest }: SwapRouteProps) {\n const { chainId } = useActiveWeb3React()\n const { t } = useTranslation()\n const routes = getTokenPath(trade)\n const [open, setOpen] = useState(false)\n\n const formattedGasPriceString = trade?.gasUseEstimateUSD\n ? trade.gasUseEstimateUSD.toFixed(2) === '0.00'\n ? '<$0.01'\n : `$${ trade.gasUseEstimateUSD.toFixed(2)}`\n : undefined\n\n return (\n \n setOpen(!open)}>\n \n \n \n \n {fixedOpen ? null : }\n \n \n \n {syncing ? (\n \n \n
    \n \n \n ) : (\n \n \n \n )}\n \n {syncing ? (\n \n \n
    \n \n \n ) : (\n \n {trade?.gasUseEstimateUSD && chainId ? (t(`Best price route costs ~${formattedGasPriceString} in gas.`)) : null}{' '}\n {t(`This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.`)}\n \n )}\n \n \n \n )\n})\n\nexport interface RoutingDiagramEntry {\n percent: Percent\n path: [Currency, Currency, string][]\n protocol: Protocol\n}\n\nconst V1_PROTOCOL = 'V1'\nconst V2_PROTOCOL = 'V2'\n\n/**\n * Loops through all routes on a trade and returns an array of diagram entries.\n */\nexport function getTokenPath(trade: InterfaceTrade): RoutingDiagramEntry[] {\n return trade?.swaps?.map(({ route: { path: tokenPath, pools, protocol }, inputAmount, outputAmount }) => {\n const portion =\n trade.tradeType === TradeType.EXACT_INPUT\n ? inputAmount.divide(trade.inputAmount)\n : outputAmount.divide(trade.outputAmount)\n const percent = new Percent(portion.numerator, portion.denominator)\n const path: RoutingDiagramEntry['path'] = []\n for (let i = 0; i < pools.length; i++) {\n const nextPool = pools[i]\n const tokenIn = tokenPath[i]\n const tokenOut = tokenPath[i + 1]\n const entry: RoutingDiagramEntry['path'][0] = [\n tokenIn,\n tokenOut,\n nextPool instanceof PairV1 ? V1_PROTOCOL : V2_PROTOCOL,\n ]\n path.push(entry)\n }\n return {\n percent,\n path,\n protocol,\n }\n })\n}\n","import { useState } from 'react'\nimport { useTranslation } from '@pulsex/localization'\nimport styled, { keyframes } from 'styled-components'\nimport { Currency, TradeType } from '@pulsex/sdk'\nimport { ChevronDownIcon, Flex, Text } from '@pulsex/uikit'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport { InterfaceTrade } from 'state/autorouter/types'\nimport { AutoColumn } from 'components/Layout/Column'\nimport Row, { RowBetween, RowFixed } from 'components/Layout/Row'\nimport { LoadingOpacityContainer } from 'components/Loader/LoadingRows'\nimport { AdvancedSwapDetails } from './AdvancedSwapDetails'\nimport AnimatedDropdown from '../../components/AnimatedDropdown'\nimport TradePrice from '../../components/TradePrice'\nimport GasEstimateBadge from './GasEstimateBadge'\nimport SwapRoute from './SwapRoute'\n\nconst rotate360 = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`\nconst Wrapper = styled(Row)`\n border: 1px solid ${({ theme }) => theme.colors.cardBorder};\n border-radius: 16px;\n padding: 10px 10px;\n`\nconst StyledHeaderRow = styled(RowBetween)<{ disabled: boolean; open: boolean }>`\n align-items: center;\n cursor: ${({ disabled }) => (disabled ? 'initial' : 'pointer')};\n`\nconst StyledPolling = styled.div`\n display: flex;\n height: 16px;\n width: 16px;\n margin-left: 4px;\n align-items: center;\n color: ${({ theme }) => theme.colors.tertiary};\n transition: 250ms ease color;\n`\nconst StyledPollingDot = styled.div`\n width: 8px;\n height: 8px;\n min-height: 8px;\n min-width: 8px;\n border-radius: 50%;\n position: relative;\n background-color: ${({ theme }) => theme.colors.backgroundAlt2};\n transition: 250ms ease background-color;\n`\nconst Spinner = styled.div`\n animation: ${rotate360} 1s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n transform: translateZ(0);\n border-top: 1px solid transparent;\n border-right: 1px solid transparent;\n border-bottom: 1px solid transparent;\n border-left: 2px solid ${({ theme }) => theme.colors.text};\n background: transparent;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n position: relative;\n transition: 250ms ease border-color;\n left: -3px;\n top: -3px;\n`\nexport const HideSmall = styled.span`\n ${({ theme }) => theme.mediaQueries.sm} {\n display: none;\n };\n`\nconst RotatingArrow = styled(ChevronDownIcon)<{ trade?: boolean; open?: boolean; hidden?: boolean }>`\n hidden: ${({ hidden }) => (hidden ? 'true' : 'false')};\n transform: ${({ open }) => (open ? 'rotate(180deg)' : 'none')};\n transition: transform 0.1s linear;\n stroke: ${({ theme, trade }) => trade ? theme.colors.tertiary : theme.colors.backgroundAlt2};\n`\n\ninterface SwapDetailsInlineProps {\n trade: InterfaceTrade | undefined\n syncing: boolean\n loading: boolean\n allowedSlippage: number\n}\n\nexport default function SwapDetailsDropdown({ trade, syncing, loading, allowedSlippage }: SwapDetailsInlineProps) {\n const { t } = useTranslation()\n const { chainId } = useActiveWeb3React()\n const [showDetails, setShowDetails] = useState(true)\n\n return (\n \n \n setShowDetails(!showDetails)} disabled={!trade} open={showDetails}>\n \n {loading || syncing && (\n \n \n \n \n \n )}\n {trade ? (\n \n \n \n ) : loading || syncing ? (\n \n \n \n \n \n \n {t('Fetching best price')}\n \n ) : null}\n \n \n {!trade?.gasUseEstimateUSD ||\n showDetails ||\n !chainId ? null : (\n \n )}\n \n \n \n \n \n {trade ? (\n\n \n\n ) : null}\n {trade ? : null}\n \n \n \n \n )\n}\n","import { useMemo } from 'react'\nimport styled from 'styled-components'\nimport { Currency, TradeType } from '@pulsex/sdk'\nimport { Button, Text, ErrorIcon, MouseoverTooltip } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport { InterfaceTrade } from 'state/autorouter/types'\nimport { Field } from 'state/swap/actions'\nimport {\n computeSmartRouterSlippageAdjustedAmounts,\n computeRealizedPriceImpact,\n warningSeverity,\n} from 'utils/exchange'\nimport { AutoColumn } from 'components/Layout/Column'\nimport { AutoRow, RowBetween, RowFixed } from 'components/Layout/Row'\nimport truncateHash from 'utils/truncateHash'\nimport FormattedPriceImpact from '../../components/FormattedPriceImpact'\nimport { SwapCallbackError, SwapShowAcceptChanges } from '../../components/styleds'\n\nconst SwapModalFooterContainer = styled(AutoColumn)`\n margin-top: 1rem;\n padding: 0.5rem 0;\n border-radius: ${({ theme }) => theme.radii.default};\n border: 1px solid ${({ theme }) => theme.colors.cardBorder};\n`\nconst LabelRow = styled.div`\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: space-between;\n color: ${({ theme }) => theme.colors.text};\n padding: 0.1rem 0.5rem;\n`\n\nexport default function SwapModalFooterV2({\n trade,\n onConfirm,\n recipient,\n allowedSlippage,\n swapErrorMessage,\n disabledConfirm,\n showAcceptChanges,\n isMobile,\n onAcceptChanges\n}: {\n trade: InterfaceTrade\n allowedSlippage: number\n onConfirm: () => void\n recipient: string | null\n swapErrorMessage: string | undefined\n disabledConfirm: boolean\n showAcceptChanges: boolean\n isMobile: boolean\n onAcceptChanges: () => void\n}) {\n const { t } = useTranslation()\n const slippageAdjustedAmounts = useMemo(\n () => computeSmartRouterSlippageAdjustedAmounts(trade, allowedSlippage),\n [allowedSlippage, trade],\n )\n const { priceImpactWithoutFee, realizedLPFee } = useMemo(() => computeRealizedPriceImpact(trade), [trade])\n const severity = warningSeverity(priceImpactWithoutFee)\n\n\n const amount =\n trade.tradeType === TradeType.EXACT_INPUT\n ? slippageAdjustedAmounts[Field.OUTPUT]?.toSignificant(6)\n : slippageAdjustedAmounts[Field.INPUT]?.toSignificant(6)\n const symbol =\n trade.tradeType === TradeType.EXACT_INPUT ? trade.outputAmount.currency.symbol : trade.inputAmount.currency.symbol\n const tradeInfoText =\n trade.tradeType === TradeType.EXACT_INPUT\n ? t('Output is estimated. You will receive at least %amount% %symbol% or the transaction will revert.', {\n amount,\n symbol,\n })\n : t('Input is estimated. You will sell at most %amount% %symbol% or the transaction will revert.', {\n amount,\n symbol,\n })\n const [estimatedText, transactionRevertText] = tradeInfoText.split(`${amount} ${symbol}`)\n\n const truncatedRecipient = recipient ? truncateHash(recipient) : ''\n\n const recipientInfoText = t('Output will be sent to %recipient%', {\n recipient: truncatedRecipient,\n })\n\n const [recipientSentToText, postSentToText] = recipientInfoText.split(truncatedRecipient)\n\n return (\n <>\n \n \n \n \n {t('Price Impact')}\n \n \n \n \n\n \n {`1 ${trade.inputAmount.currency.symbol} price`}\n \n {`${trade.executionPrice?.toSignificant(3)} ${trade.outputAmount.currency.symbol}`}\n \n \n\n \n {`1 ${trade.outputAmount.currency.symbol} price`}\n \n {`${trade.executionPrice?.invert().toSignificant(3)} ${trade.inputAmount.currency.symbol}`}\n \n \n \n \n \n {t('For each trade a %amount% fee is paid towards PLSX buy and burn', { amount: '0.29%' })}\n }\n >\n {t('Liquidity Provider Fee')}\n \n \n \n {realizedLPFee ? `${realizedLPFee?.toSignificant(6)} ${trade.inputAmount.currency.symbol}` : '-'}\n \n \n\n \n \n \n \n {trade.tradeType === TradeType.EXACT_INPUT ? t('Minimum received') : t('Maximum sold')}{' '}\n {t(`after slippage (${(allowedSlippage / 100)}%)`)}\n \n \n \n \n \n {trade.tradeType === TradeType.EXACT_INPUT\n ? slippageAdjustedAmounts[Field.OUTPUT]?.toSignificant(6) ?? '-'\n : slippageAdjustedAmounts[Field.INPUT]?.toSignificant(6) ?? '-'}\n \n \n {trade.tradeType === TradeType.EXACT_INPUT\n ? trade.outputAmount.currency.symbol\n : trade.inputAmount.currency.symbol}\n \n \n \n \n\n {showAcceptChanges ? (\n \n \n \n \n {t('Price Updated')}\n \n \n \n \n ) : null}\n \n \n {estimatedText}\n \n {amount} {symbol}\n \n {transactionRevertText}\n \n \n {recipient !== null ? (\n \n \n {recipientSentToText}\n {truncatedRecipient}\n {postSentToText}\n \n \n ) : null}\n\n \n 2 ? 'danger' : 'primary'}\n onClick={onConfirm}\n disabled={disabledConfirm}\n mt=\"12px\"\n id=\"confirm-swap-or-send\"\n width=\"100%\"\n >\n {severity > 2 ? t('Swap Anyway') : t('Confirm Swap')}\n \n\n {swapErrorMessage ? : null}\n \n \n )\n}\n","import { useMemo } from 'react'\nimport styled from 'styled-components'\nimport { Currency, TradeType } from '@pulsex/sdk'\nimport { Box, Text, ArrowDownIcon, Flex } from '@pulsex/uikit'\nimport { InterfaceTrade } from 'state/autorouter/types'\nimport { computeRealizedPriceImpact, warningSeverity } from 'utils/exchange'\nimport { CurrencyLogo } from 'components/Logo'\nimport { TruncatedText } from '../../components/styleds'\n\nconst StyledHeaderRow = styled(Box)`\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: space-between;\n border-radius: 10px;\n background-color: ${({ theme }) => theme.colors.input};\n padding: 0.5rem 0.5rem;\n`\nconst ArrowWrapper = styled.div`\n border-radius: 50%;\n height: 28px;\n width: 28px;\n position: relative;\n margin-top: -11px;\n margin-bottom: -11px;\n left: calc(50% - 14px);\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: ${({ theme }) => theme.colors.tertiary};\n z-index: 2;\n`\n\nexport default function SwapModalHeaderV2({\n trade,\n showAcceptChanges,\n}: {\n trade: InterfaceTrade\n showAcceptChanges: boolean\n}) {\n const { priceImpactWithoutFee } = useMemo(() => computeRealizedPriceImpact(trade), [trade])\n const priceImpactSeverity = warningSeverity(priceImpactWithoutFee)\n\n return (\n <>\n \n \n {trade.inputAmount.toSignificant(6)}\n \n \n \n \n {trade.inputAmount.currency.symbol}\n \n \n \n \n \n \n \n 2\n ? 'failure'\n : showAcceptChanges && trade.tradeType === TradeType.EXACT_INPUT\n ? 'primary'\n : 'text'\n }\n >\n {trade.outputAmount.toSignificant(6)}\n \n\n \n \n \n {trade.outputAmount.currency.symbol}\n \n \n \n \n )\n}\n","import { useCallback, useMemo } from 'react'\nimport { Currency, TradeType } from '@pulsex/sdk'\nimport { InjectedModalProps } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport { InterfaceTrade } from 'state/autorouter/types'\nimport TransactionConfirmationModal, {\n ConfirmationModalContent,\n TransactionErrorContent,\n} from 'components/TransactionConfirmationModal'\nimport SwapModalFooterV2 from './SwapModalFooterV2'\nimport SwapModalHeaderV2 from './SwapModalHeaderV2'\n\n/**\n * Returns true if the trade requires a confirmation of details before we can submit it\n * @param tradeA trade A\n * @param tradeB trade B\n */\nfunction tradeMeaningfullyDiffers(tradeA: InterfaceTrade, tradeB: InterfaceTrade): boolean {\n return (\n tradeA.tradeType !== tradeB.tradeType ||\n !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) ||\n !tradeA.inputAmount.equalTo(tradeB.inputAmount) ||\n !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency) ||\n !tradeA.outputAmount.equalTo(tradeB.outputAmount)\n )\n}\ninterface ConfirmSwapModalProps {\n trade?: InterfaceTrade\n originalTrade?: InterfaceTrade\n attemptingTxn: boolean\n txHash?: string\n recipient: string | null\n allowedSlippage: number\n isMobile?: boolean\n swapErrorMessage?: string\n onAcceptChanges: () => void\n onConfirm: () => void\n customOnDismiss?: () => void\n}\n\nconst ConfirmSwapModalV2: React.FC = ({\n trade,\n originalTrade,\n attemptingTxn,\n txHash,\n recipient,\n allowedSlippage,\n isMobile,\n swapErrorMessage,\n onAcceptChanges,\n onConfirm,\n customOnDismiss,\n onDismiss,\n}) => {\n const showAcceptChanges = useMemo(\n () => Boolean(trade && originalTrade && tradeMeaningfullyDiffers(trade, originalTrade)),\n [originalTrade, trade],\n )\n\n const { t } = useTranslation()\n\n const modalHeader = useCallback(() => {\n return trade ? (\n \n ) : null\n }, [showAcceptChanges, trade])\n\n const modalBottom = useCallback(() => {\n return trade ? (\n \n ) : null\n }, \n [\n allowedSlippage, \n onConfirm, \n showAcceptChanges, \n swapErrorMessage, \n trade, \n isMobile, \n onAcceptChanges, \n recipient\n ])\n\n // text to show while loading\n const pendingText = t('Swapping %amountA% %symbolA% for %amountB% %symbolB%', {\n amountA: trade?.inputAmount?.toSignificant(6) ?? '',\n symbolA: trade?.inputAmount?.currency?.symbol ?? '',\n amountB: trade?.outputAmount?.toSignificant(6) ?? '',\n symbolB: trade?.outputAmount?.currency?.symbol ?? '',\n })\n\n const confirmationContent = useCallback(\n () =>\n swapErrorMessage ? (\n \n ) : (\n \n ),\n [onDismiss, modalBottom, modalHeader, swapErrorMessage],\n )\n\n return (\n \n )\n}\n\nexport default ConfirmSwapModalV2\n","import { useCallback, useEffect, useState, useMemo } from 'react'\nimport styled from 'styled-components'\nimport { Currency, CurrencyAmount, Percent, TradeType } from '@pulsex/sdk'\nimport {\n Button,\n Text,\n ArrowDownIcon,\n Box,\n useModal,\n Flex,\n IconButton,\n BottomDrawer,\n useMatchBreakpoints,\n ArrowUpDownIcon\n} from '@pulsex/uikit'\nimport { useSearchParams } from 'react-router-dom'\nimport { BIG_INT_ZERO } from 'config/constants/exchange'\nimport { PULSEX_SWAP_ROUTER_ADDRESSES } from '@pulsex/smart-order-router'\nimport { useUSDPrice } from 'hooks/useUSDCPrice'\nimport { useIsTransactionUnsupported } from 'hooks/Trades'\nimport { TradeState, InterfaceTrade } from 'state/autorouter/types'\nimport UnsupportedCurrencyFooter from 'components/UnsupportedCurrencyFooter'\nimport { useTranslation } from '@pulsex/localization'\nimport { warningSeverity } from 'utils/exchange'\nimport { computeRealizedPriceImpact } from 'utils/prices'\nimport { currencyId } from 'utils/currencyId'\nimport Dots from 'components/Loader/Dots'\nimport useTransactionDeadline from 'hooks/useTransactionDeadline'\nimport { computeFiatValuePriceImpact } from 'utils/computeFiatValuePriceImpact'\nimport { useCurrency } from 'hooks/Tokens'\nimport { BridgeButton } from 'components/BridgeButton'\nimport { GreyCard } from 'components/Card'\nimport { AutoColumn, Column } from 'components/Layout/Column'\nimport CurrencyInputPanel from 'components/CurrencyInputPanel'\nimport { AutoRow, RowBetween } from 'components/Layout/Row'\nimport { AppBody } from 'components/App'\nimport ConnectWalletButton from 'components/ConnectWalletButton'\n\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport { ApprovalState, useApproveCallback } from 'hooks/useApproveCallback'\nimport useWrapCallback, { WrapType } from 'hooks/useWrapCallback'\nimport { Field } from 'state/swap/actions'\nimport {\n useDefaultsFromURLSearch,\n useSmartRouterDerivedSwapInfo,\n useSwapActionHandlers,\n useSwapState,\n useSingleTokenSwapInfo,\n} from 'state/swap/hooks'\nimport {\n useExpertModeManager,\n useUserSingleHopOnly,\n useExchangeChartManager,\n} from 'state/user/hooks'\nimport { maxAmountSpend } from 'utils/maxAmountSpend'\nimport useWarningImport from '../hooks/useWarningImport'\nimport { useSlippageAdjustedAmounts, useSwapCallback } from './hooks'\nimport ProgressSteps from '../components/ProgressSteps'\nimport { ArrowWrapper, SwapCallbackError } from '../components/styleds'\nimport confirmPriceImpactWithoutFee from '../components/confirmPriceImpactWithoutFee'\nimport SwapDetailsDropdown from './components/SwapDetailsDropdown'\nimport ConfirmSwapModalV2 from './components/ConfirmSwapModalV2'\nimport AddressInputPanel from '../components/AddressInputPanel'\nimport useRefreshBlockNumberID from '../hooks/useRefreshBlockNumber'\nimport Page from '../../Page'\nimport SwapWarningModal from '../components/SwapWarningModal'\nimport PriceChartContainer from '../components/Chart/PriceChartContainer'\nimport { Wrapper, StyledInputCurrencyWrapper, StyledSwapContainer } from '../styles'\nimport CurrencyInputHeader from '../components/CurrencyInputHeader'\n\nexport const SwitchIconButton = styled(IconButton)`\n background-color: ${({ theme }) => theme.colors.tertiary};\n box-shadow: inset 0px -2px 0px rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n width: 28px;\n height: 28px;\n .icon-up-down {\n display: none;\n }\n &:hover {\n background-color: ${({ theme }) => theme.colors.primary};\n .icon-down {\n display: none;\n fill: white;\n }\n .icon-up-down {\n display: block;\n fill: white;\n }\n }\n`\n\nfunction largerPercentValue(a?: Percent, b?: Percent) {\n if (a && b) {\n return a.greaterThan(b) ? a : b\n } if (a) {\n return a\n } if (b) {\n return b\n }\n return undefined\n}\n\nexport default function SmartSwap() {\n const { t } = useTranslation()\n const [search, setSearch] = useSearchParams()\n const { isMobile } = useMatchBreakpoints()\n const [isChartExpanded, setIsChartExpanded] = useState(false)\n const [userChartPreference, setUserChartPreference] = useExchangeChartManager(isMobile)\n const [isChartDisplayed, setIsChartDisplayed] = useState(userChartPreference)\n const { refreshBlockNumber } = useRefreshBlockNumberID()\n const warningSwapHandler = useWarningImport()\n useDefaultsFromURLSearch()\n\n useEffect(() => {\n setUserChartPreference(isChartDisplayed)\n }, [isChartDisplayed, setUserChartPreference])\n\n const { account } = useActiveWeb3React()\n\n // for expert mode\n const [isExpertMode] = useExpertModeManager()\n\n // Price data\n const {\n [Field.INPUT]: { currencyId: inputCurrencyId },\n [Field.OUTPUT]: { currencyId: outputCurrencyId },\n } = useSwapState()\n const inputCurrency = useCurrency(inputCurrencyId)\n const outputCurrency = useCurrency(outputCurrencyId)\n\n // swap state\n const { independentField, typedValue, recipient } = useSwapState()\n const {\n allowedSlippage,\n trade: { state: tradeState, trade: v2Trade },\n currencyBalances,\n parsedAmount,\n currencies,\n inputError: swapInputError\n } = useSmartRouterDerivedSwapInfo(\n independentField,\n typedValue,\n inputCurrency,\n outputCurrency,\n recipient,\n )\n\n const {\n wrapType,\n execute: onWrap,\n inputError: wrapInputError,\n } = useWrapCallback(currencies[Field.INPUT], currencies[Field.OUTPUT], typedValue)\n const showWrap: boolean = wrapType !== WrapType.NOT_APPLICABLE\n const trade = showWrap ? undefined : v2Trade\n\n const singleTokenPrice = useSingleTokenSwapInfo(inputCurrencyId, inputCurrency, outputCurrencyId, outputCurrency)\n\n const parsedAmounts = showWrap\n ? {\n [Field.INPUT]: parsedAmount,\n [Field.OUTPUT]: parsedAmount,\n }\n : {\n [Field.INPUT]: independentField === Field.INPUT ? parsedAmount : trade?.inputAmount,\n [Field.OUTPUT]: independentField === Field.OUTPUT ? parsedAmount : trade?.outputAmount,\n }\n \n const [routeNotFound, routeIsLoading, routeIsSyncing] = useMemo(\n () => [!trade?.swaps, TradeState.LOADING === tradeState, TradeState.SYNCING === tradeState],\n [trade, tradeState]\n )\n\n const fiatValueTradeInput = useUSDPrice(trade?.inputAmount)\n const fiatValueTradeOutput = useUSDPrice(trade?.outputAmount)\n const stablecoinPriceImpact = useMemo(\n () =>\n routeIsSyncing || !trade\n ? undefined\n : computeFiatValuePriceImpact(fiatValueTradeInput, fiatValueTradeOutput),\n [fiatValueTradeInput, fiatValueTradeOutput, routeIsSyncing, trade]\n )\n\n const { onSwitchTokens, onCurrencySelection, onUserInput, onChangeRecipient } = useSwapActionHandlers()\n const isValid = !swapInputError\n const dependentField: Field = independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT\n\n const handleTypeInput = useCallback(\n (value: string) => {\n onUserInput(Field.INPUT, value)\n },\n [onUserInput],\n )\n const handleTypeOutput = useCallback(\n (value: string) => {\n onUserInput(Field.OUTPUT, value)\n },\n [onUserInput],\n )\n\n // modal and loading\n const [{ tradeToConfirm, swapErrorMessage, attemptingTxn, txHash }, setSwapState] = useState<{\n tradeToConfirm: InterfaceTrade | undefined\n attemptingTxn: boolean\n swapErrorMessage: string | undefined\n txHash: string | undefined\n }>({\n tradeToConfirm: undefined,\n attemptingTxn: false,\n swapErrorMessage: undefined,\n txHash: undefined,\n })\n\n const formattedAmounts = {\n [independentField]: typedValue,\n [dependentField]: showWrap\n ? parsedAmounts[independentField]?.toExact() ?? ''\n : parsedAmounts[dependentField]?.toSignificant(6) ?? '',\n }\n\n const userHasSpecifiedInputOutput = Boolean(\n currencies[Field.INPUT] && currencies[Field.OUTPUT] && parsedAmounts[independentField]?.greaterThan(BIG_INT_ZERO)\n )\n\n const routerAddress = PULSEX_SWAP_ROUTER_ADDRESSES[trade?.inputAmount?.currency.chainId]\n const slippageAdjustedAmounts = useSlippageAdjustedAmounts(trade)\n const amountToApprove = slippageAdjustedAmounts[Field.INPUT]\n\n // check whether the user has approved the router on the input token\n const { approvalState: approval, approveCallback } = useApproveCallback(amountToApprove, routerAddress)\n\n // check if user has gone through approval process, used to show two step buttons, reset on token change\n const [approvalSubmitted, setApprovalSubmitted] = useState(false)\n\n // mark when a user has submitted an approval, reset onTokenSelection for input field\n useEffect(() => {\n if (approval === ApprovalState.PENDING) {\n setApprovalSubmitted(true)\n }\n }, [approval, approvalSubmitted])\n\n const maxAmountInput: CurrencyAmount | undefined = maxAmountSpend(currencyBalances[Field.INPUT])\n const atMaxAmountInput = Boolean(maxAmountInput && parsedAmounts[Field.INPUT]?.equalTo(maxAmountInput))\n\n // the callback to execute the swap\n const deadline = useTransactionDeadline()\n const { callback: swapCallback, error: swapCallbackError } = useSwapCallback({ trade, deadline })\n\n const [singleHopOnly] = useUserSingleHopOnly()\n\n // warnings on the greater of fiat value price impact and execution price impact\n const { priceImpactSeverity } = useMemo(() => {\n const marketPriceImpact = trade?.priceImpact ? computeRealizedPriceImpact(trade) : undefined\n const largerPriceImpact = largerPercentValue(marketPriceImpact, stablecoinPriceImpact)\n return { priceImpactSeverity: warningSeverity(largerPriceImpact), largerPriceImpact }\n }, [stablecoinPriceImpact, trade])\n\n // show approve flow when: no error on inputs, not approved or pending, or approved in current session\n // never show if price impact is above threshold in non expert mode\n const showApproveFlow =\n !swapInputError &&\n (approval === ApprovalState.NOT_APPROVED ||\n approval === ApprovalState.PENDING ||\n (approvalSubmitted && approval === ApprovalState.APPROVED)) &&\n !(priceImpactSeverity > 3 && !isExpertMode)\n\n const handleConfirmDismiss = useCallback(() => {\n setSwapState({ tradeToConfirm, attemptingTxn, swapErrorMessage, txHash })\n // if there was a tx hash, we want to clear the input\n if (txHash) {\n onUserInput(Field.INPUT, '')\n }\n }, [attemptingTxn, onUserInput, swapErrorMessage, tradeToConfirm, txHash])\n\n const handleSwap = useCallback(() => {\n if (!swapCallback) {\n return\n }\n if (stablecoinPriceImpact && !confirmPriceImpactWithoutFee(stablecoinPriceImpact, t)) {\n return\n }\n setSwapState({ attemptingTxn: true, tradeToConfirm, swapErrorMessage: undefined, txHash: undefined })\n swapCallback()\n .then((hash) => {\n setSwapState({ attemptingTxn: false, tradeToConfirm, swapErrorMessage: undefined, txHash: hash.hash })\n })\n .catch((error) => {\n setSwapState({\n attemptingTxn: false,\n tradeToConfirm,\n swapErrorMessage: typeof error === 'string' ? error : error?.message,\n txHash: undefined,\n })\n })\n }, [stablecoinPriceImpact, swapCallback, tradeToConfirm, t])\n\n const handleAcceptChanges = useCallback(() => {\n setSwapState({ tradeToConfirm: trade, swapErrorMessage, txHash, attemptingTxn })\n }, [attemptingTxn, swapErrorMessage, trade, txHash, setSwapState])\n\n // swap warning state\n const [swapWarningCurrency, setSwapWarningCurrency] = useState(null)\n const [onPresentSwapWarningModal] = useModal()\n\n useEffect(() => {\n if (swapWarningCurrency) {\n onPresentSwapWarningModal()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [swapWarningCurrency])\n\n const handleMaxInput = useCallback(() => {\n if (maxAmountInput) {\n onUserInput(Field.INPUT, maxAmountInput.toExact())\n }\n }, [maxAmountInput, onUserInput])\n\n const handleCurrencySelect = useCallback(\n (newCurrency: Currency, field: Field, currentInputCurrencyId: string, currentOutputCurrencyId: string) => {\n onCurrencySelection(field, newCurrency)\n\n warningSwapHandler(newCurrency)\n\n const isInput = field === Field.INPUT\n const oldCurrencyId = isInput ? currentInputCurrencyId : currentOutputCurrencyId\n const otherCurrencyId = isInput ? currentOutputCurrencyId : currentInputCurrencyId\n const newCurrencyId = currencyId(newCurrency)\n if (newCurrencyId === otherCurrencyId) {\n search.set(isInput ? \"inputCurrency\" : \"outputCurrency\", oldCurrencyId);\n setSearch(search)\n }\n search.set(isInput ? \"inputCurrency\" : \"outputCurrency\", newCurrencyId);\n setSearch(search)\n },\n [onCurrencySelection, warningSwapHandler],\n )\n const handleInputSelect = useCallback(\n (newCurrency: Currency) => handleCurrencySelect(newCurrency, Field.INPUT, inputCurrencyId, outputCurrencyId),\n [handleCurrencySelect, inputCurrencyId, outputCurrencyId],\n )\n const handleOutputSelect = useCallback(\n (newCurrency: Currency) => handleCurrencySelect(newCurrency, Field.OUTPUT, inputCurrencyId, outputCurrencyId),\n [handleCurrencySelect, inputCurrencyId, outputCurrencyId],\n )\n\n const swapIsUnsupported = useIsTransactionUnsupported(currencies?.INPUT, currencies?.OUTPUT)\n\n const [onPresentConfirmModal] = useModal(\n ,\n true,\n true,\n 'confirmSwapModal',\n )\n\n const hasAmount = Boolean(parsedAmount)\n\n const onRefreshPrice = useCallback(() => {\n if (hasAmount) {\n refreshBlockNumber()\n }\n }, [hasAmount, refreshBlockNumber])\n\n const showDetailsDropdown = Boolean(\n !showWrap && userHasSpecifiedInputOutput && (trade || routeIsLoading || routeIsSyncing)\n )\n\n return (\n \n \n {!isMobile && (\n \n )}\n \n \n \n \n \n \n \n \n {\n setApprovalSubmitted(false) // reset 2 step UI for approvals\n onSwitchTokens()\n }}\n >\n \n \n \n {recipient === null && !showWrap && isExpertMode ? (\n \n ) : null}\n \n \n {isExpertMode && recipient !== null && !showWrap ? (\n <>\n \n \n \n \n \n \n \n \n ) : null}\n \n {showDetailsDropdown && (\n \n )}\n \n {swapIsUnsupported ? (\n \n ) : !account ? (\n \n ) : showWrap ? (\n \n ) : routeNotFound && userHasSpecifiedInputOutput && !routeIsLoading && !routeIsSyncing ? (\n \n {t('Insufficient liquidity for this trade.')}\n {singleHopOnly && {t('Try enabling multi-hop trades.')}}\n \n ) : showApproveFlow ? (\n \n \n {approval === ApprovalState.PENDING ? (\n \n {t('Enabling')} \n \n ) : approvalSubmitted && approval === ApprovalState.APPROVED ? (\n t('Enabled')\n ) : (\n t('Enable %asset%', { asset: currencies[Field.INPUT]?.symbol ?? '' })\n )}\n \n 2 ? 'danger' : 'primary'}\n onClick={() => {\n if (isExpertMode) {\n handleSwap()\n } else {\n setSwapState({\n tradeToConfirm: trade,\n attemptingTxn: false,\n swapErrorMessage: undefined,\n txHash: undefined,\n })\n onPresentConfirmModal()\n }\n }}\n width=\"48%\"\n id=\"swap-button\"\n disabled={\n !isValid || approval !== ApprovalState.APPROVED || (priceImpactSeverity > 3 && !isExpertMode)\n }\n >\n {priceImpactSeverity > 3 && !isExpertMode\n ? t('Price Impact High')\n : priceImpactSeverity > 2\n ? t('Swap Anyway')\n : t('Swap')}\n \n \n ) : (\n 2 && !swapCallbackError ? 'danger' : 'primary'}\n onClick={() => {\n if (isExpertMode) {\n handleSwap()\n } else {\n setSwapState({\n tradeToConfirm: trade,\n attemptingTxn: false,\n swapErrorMessage: undefined,\n txHash: undefined,\n })\n onPresentConfirmModal()\n }\n }}\n id=\"swap-button\"\n width=\"100%\"\n disabled={!isValid || (priceImpactSeverity > 3 && !isExpertMode) || !!swapCallbackError}\n >\n {swapInputError || (routeIsSyncing || routeIsLoading ? (\n t('Swap')\n ) : priceImpactSeverity > 2 ? (\n t('Swap Anyway')\n ) : (\n t('Swap')\n ))}\n \n )}\n {showApproveFlow && (\n \n \n \n )}\n {isExpertMode && swapErrorMessage ? : null}\n \n {!swapIsUnsupported ? null : (\n \n )}\n \n \n \n \n \n \n \n }\n isOpen={isChartDisplayed}\n setIsOpen={setIsChartDisplayed}\n />\n \n )\n}\n","import { Currency, TradeType } from '@pulsex/sdk'\nimport { useMemo } from 'react'\nimport { InterfaceTrade } from 'state/autorouter/types'\nimport { useUserSlippageTolerance } from 'state/user/hooks'\nimport { computeSmartRouterSlippageAdjustedAmounts } from 'utils/exchange'\n\nexport function useSlippageAdjustedAmounts(trade?: InterfaceTrade) {\n const [allowedSlippage] = useUserSlippageTolerance()\n return useMemo(() => computeSmartRouterSlippageAdjustedAmounts(trade, allowedSlippage), [allowedSlippage, trade])\n}\n","import { useMemo, useState } from 'react'\nimport { styled } from 'styled-components'\nimport {\n AddIcon,\n Button,\n ButtonMenu, \n ButtonMenuItem,\n CardBody,\n CardFooter,\n Text, Flex,\n} from '@pulsex/uikit'\nimport { PairV1, PairV2 } from '@pulsex/sdk'\nimport { Link } from 'react-router-dom'\nimport { useTranslation } from '@pulsex/localization'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport FullPositionCard from 'components/PositionCard'\nimport { useV1PairsByAccount, useV2PairsByAccount } from '../../hooks/usePairs'\nimport { useMintActionHandlers } from '../../state/mint/hooks'\nimport Dots from '../../components/Loader/Dots'\nimport { AppBody, AppHeader } from '../../components/App'\nimport Page from '../Page'\n\nconst Body = styled(CardBody)`\n background-image: ${({ theme }) => theme.colors.gradientInverseBubblegum};\n`\n\nenum FILTER {\n ALL = 0,\n V1 = 1,\n V2 = 2,\n}\n\nexport default function Pool() {\n const { account } = useActiveWeb3React()\n const { t } = useTranslation()\n\n const [selectedTypeIndex, setSelectedTypeIndex] = useState(FILTER.ALL)\n\n const { onChangeProtocol } = useMintActionHandlers(true)\n\n const { data: v1Pairs, loading: v1Loading } = useV1PairsByAccount(account)\n const { data: v2Pairs, loading: v2Loading } = useV2PairsByAccount(account)\n\n let v1PairsSection = null\n if (v1Pairs?.length) {\n v1PairsSection = v1Pairs.map((pair) => (\n \n ))\n }\n\n let v2PairsSection = null\n if (v2Pairs?.length) {\n v2PairsSection = v2Pairs.map((pair) => (\n \n ))\n }\n\n const mainSection = useMemo(() => {\n let resultSection = null\n if (!account) {\n resultSection = (\n \n {t('Connect to a wallet to view your liquidity.')}\n \n )\n } else if (v1Loading || v2Loading) {\n resultSection = (\n \n {t('Loading')}\n \n )\n } else if (!v1PairsSection && !v2PairsSection) {\n resultSection = (\n \n {t('No liquidity found.')}\n \n )\n } else {\n // Order should be v1, v2\n const sections = [v1PairsSection, v2PairsSection]\n\n resultSection = selectedTypeIndex ? sections.filter((_, index) => selectedTypeIndex === index + 1) : sections\n }\n return resultSection\n }, [account, selectedTypeIndex, t, v1Loading, v1PairsSection, v2Loading, v2PairsSection])\n\n const protocolSelector =\n setSelectedTypeIndex(index)}\n variant=\"subtle\"\n >\n All\n V1\n V2\n \n\n return (\n \n \n \n \n {mainSection}\n {account && !v1Loading && !v2Loading && (\n \n \n {t(\"Don't see a pool you joined?\")}\n \n \n \n \n \n )}\n \n \n \n }\n onClick={() => {onChangeProtocol('V2')}}\n >\n {t('Add Liquidity')}\n \n \n \n \n \n )\n}\n","import { ChainId } from '@pulsex/chains'\nimport { Currency, Price } from '@pulsex/sdk'\nimport { SWRConfiguration } from 'swr'\nimport { pulsexPairAbi } from 'config/abi/IPulseXPair'\nimport { POOLS_API } from 'config/constants/endpoints'\nimport { useBuyAndBurnContract } from 'hooks/useContract'\nimport { BuyAndBurnLpResponse, LP } from 'state/buyandburn/types'\nimport chunk from 'lodash/chunk'\nimport flatten from 'lodash/flatten'\nimport { Address, PublicClient } from 'viem'\nimport lpListV1 from './lists/lpListV1.json'\nimport lpListV2 from './lists/lpListV2.json'\nimport testnetLpListV1 from './lists/testnetLpListV1.json'\nimport testnetLpListV2 from './lists/testnetLpListV2.json'\n\nexport const SWR_SETTINGS: SWRConfiguration = {\n refreshInterval: 10000,\n keepPreviousData: true,\n errorRetryCount: 3,\n errorRetryInterval: 3000,\n}\n\nconst POOL_FILTER_SETTINGS = {\n reserveUSD: 100000,\n}\n\nexport const fetchBuyAndBurnPairs = async (\n chainId: number,\n protocol: string,\n buyandburn: ReturnType,\n plsPrice: Price,\n client: PublicClient\n): Promise<{\n result: BuyAndBurnLpResponse[];\n totalBurned: bigint;\n}> => {\n const fetchLpList = async () => {\n const response = await fetch(`${POOLS_API}?chainId=${chainId.toString()}&protocol=${protocol.toLowerCase()}`)\n if (response.ok) {\n const lpList = await response.json()\n const lpListFiltered = lpList.filter((pool) => {\n const plsUSDValue = parseFloat(pool.reserve) * parseFloat(plsPrice.toSignificant())\n return parseFloat(pool.reserveUSD) > POOL_FILTER_SETTINGS.reserveUSD &&\n plsUSDValue > POOL_FILTER_SETTINGS.reserveUSD\n })\n return lpListFiltered as LP[]\n }\n // fallback to static pool list\n return chainId === ChainId.PULSECHAIN ? (protocol === 'V1' ? lpListV1 as LP[] : lpListV2 as LP[]) :\n chainId === ChainId.PULSECHAIN_TESTNET ? (protocol === 'V1' ? testnetLpListV1 as LP[] : testnetLpListV2 as LP[]) : null\n }\n\n const lpList = await fetchLpList()\n\n const lpInfoCalls = lpList.flatMap(\n (lp) =>\n [\n {\n abi: pulsexPairAbi,\n address: lp.id as Address,\n functionName: 'getReserves',\n },\n {\n abi: pulsexPairAbi,\n address: lp.id as Address,\n functionName: 'token0',\n },\n {\n abi: pulsexPairAbi,\n address: lp.id as Address,\n functionName: 'token1',\n },\n {\n abi: pulsexPairAbi,\n address: lp.id as Address,\n functionName: 'totalSupply',\n },\n {\n abi: pulsexPairAbi,\n address: lp.id as Address,\n functionName: 'balanceOf',\n args: [buyandburn.address],\n }\n ] as const\n )\n\n // fetch with multicall splitting calls into the chunks of 500\n \n const callsChunck = chunk(lpInfoCalls, 500)\n const resp = []\n for (let i = 0; i < callsChunck.length; i++) {\n // eslint-disable-next-line no-await-in-loop\n resp.push(await client.multicall({\n contracts: callsChunck[i],\n allowFailure: true,\n }))\n }\n\n // flatten the response nested array and sort the responses\n const chunkSize = lpInfoCalls.length / lpList.length\n const chunked = chunk(flatten(resp), chunkSize)\n\n const result: BuyAndBurnLpResponse[] = []\n for (const [index, res] of chunked.entries()) {\n result.push({\n name: lpList[index].name,\n address: lpList[index].id,\n reserve: {\n reserve0: res[0].result[0],\n reserve1: res[0].result[1],\n blockTimestampLast: res[0].result[2],\n },\n token0: res[1].result as Address,\n token1: res[2].result as Address,\n totalSupply: res[3].result as bigint,\n balance: res[4].result as bigint,\n })\n }\n const totalBurned = await buyandburn.read.burnedPLSX()\n\n return { result, totalBurned }\n}\n","import { styled } from 'styled-components'\nimport { Text, Flex, Checkbox, Skeleton } from '@pulsex/uikit'\n\nexport const ChartCardsContainer = styled(Flex)`\n flex: 1;\n justify-content: center;\n alignItems: center;\n width: 100%;\n padding-top: 0;\n gap: 1em;\n\n & > * {\n width: 100%;\n }\n\n ${({ theme }) => theme.mediaQueries.md} {\n flex: 1;\n justify-content: center;\n alignItems: center;\n padding-top: 0px;\n } ;\n`\n\nexport const ClickableColumnHeader = styled(Text)`\n cursor: pointer;\n`\n\nexport const TableWrapper = styled(Flex)`\n width: 100%;\n padding-top: 16px;\n flex-direction: column;\n gap: 16px;\n background-color: ${({ theme }) => theme.card.background};\n border-radius: ${({ theme }) => theme.radii.card};\n border: 1px solid ${({ theme }) => theme.colors.cardBorder};\n`\n\nexport const PageButtons = styled.div`\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: 0.2em;\n margin-bottom: 1.2em;\n`\n\nexport const Arrow = styled.div`\n color: ${({ theme }) => theme.colors.primary};\n padding: 0 20px;\n :hover {\n cursor: pointer;\n }\n`\n\nexport const Break = styled.div`\n height: 1px;\n background-color: ${({ theme }) => theme.colors.cardBorder};\n width: 100%;\n`\n\n/**\n * Columns on different layouts\n * 5 = | # | Pool | TVL | Volume 24H | Volume 7D |\n * 4 = | # | Pool | | Volume 24H | Volume 7D |\n * 3 = | # | Pool | | Volume 24H | |\n * 2 = | | Pool | | Volume 24H | |\n */\nexport const ResponsiveGrid = styled.div`\n display: grid;\n grid-gap: 1em;\n align-items: center;\n grid-template-columns: 20px 2.5fr repeat(4, 1fr);\n\n padding: 0 24px;\n @media screen and (max-width: 900px) {\n grid-template-columns: 20px 2.5fr repeat(2, 1fr);\n & :nth-child(4),\n & :nth-child(5) {\n display: none;\n }\n }\n @media screen and (max-width: 500px) {\n grid-template-columns: 20px 2.5fr repeat(1, 1fr);\n & :nth-child(4),\n & :nth-child(5),\n & :nth-child(6),\n & :nth-child(7) {\n display: none;\n }\n }\n @media screen and (max-width: 480px) {\n grid-template-columns: 20px 2.5fr repeat(1, 1fr);\n & :nth-child(4),\n & :nth-child(5),\n & :nth-child(6),\n & :nth-child(7) {\n display: none;\n }\n }\n`\n\nexport const StyledCheckbox = styled(Checkbox)`\nbox-shadow: none;\n\n&:hover:not(:disabled):not(:checked) {\n box-shadow: none;\n}\n\n&:focus {\n outline: none;\n box-shadow: none;\n}\n`\n\nexport const SORT_FIELD = {\n balance: 'balance',\n token0: 'token0',\n token1: 'token1',\n USDValue: 'USDValue',\n}\n\nconst LoadingRow: React.FC = () => (\n \n \n \n \n \n \n \n \n \n)\n\nexport const TableLoader: React.FC = () => (\n <>\n \n \n \n \n)\n","import React, { useState, useMemo, useEffect } from 'react'\nimport BigNumber from 'bignumber.js'\nimport { Text, Flex, Box, ArrowBackIcon, ArrowForwardIcon } from '@pulsex/uikit'\nimport { formatAmount } from 'utils/formatInfoNumbers'\nimport { DoubleCurrencyLogo } from 'pages/Info/components/CurrencyLogo'\nimport { useTranslation } from '@pulsex/localization'\nimport { BurnTable, BuyAndBurnLpResponse } from 'state/buyandburn/types'\nimport { useToken } from 'hooks/Tokens'\nimport useUSDCPrice from 'hooks/useUSDCPrice'\nimport { formatEther, formatUnits } from 'viem'\nimport {\n ClickableColumnHeader,\n TableWrapper,\n PageButtons,\n Arrow,\n Break,\n ResponsiveGrid,\n StyledCheckbox,\n SORT_FIELD,\n TableLoader\n} from './shared'\n\nconst ITEMS_PER_PAGE = 100\n\ninterface DataRowProps {\n lp: BuyAndBurnLpResponse\n handleCheck: (event: any) => void\n calculateUSD: (event: any, event2: any) => void\n reset?: boolean\n handleReset: () => void\n}\n\nconst DataRow: React.FC = ({\n lp,\n handleCheck, \n calculateUSD, \n reset, \n handleReset \n}) => {\n const [isChecked, setIsChecked] = useState(false)\n const lpBalance = new BigNumber(formatEther(lp.balance)).toNumber()\n const tok0 = useToken(lp.token0)\n const pr0 = new BigNumber(useUSDCPrice(tok0)?.toSignificant())\n const tok1 = useToken(lp.token1)\n const pr1 = new BigNumber(useUSDCPrice(tok1)?.toSignificant())\n\n const calc = new BigNumber(lp.balance.toString()).div(new BigNumber(lp.totalSupply.toString()))\n const tok0balance = new BigNumber(formatUnits(lp.reserve.reserve0, tok0?.decimals)).multipliedBy(calc)\n const tok1balance = new BigNumber(formatUnits(lp.reserve.reserve1, tok1?.decimals)).multipliedBy(calc)\n const tok0Value = pr0.multipliedBy(tok0balance)\n const tok1Value = pr1.multipliedBy(tok1balance)\n const USDValue = tok0Value.plus(tok1Value)\n\n function click(e) {\n setIsChecked(!isChecked)\n handleCheck(e)\n calculateUSD(e, USDValue.toNumber())\n }\n\n useEffect(() => {\n if (reset) {\n setIsChecked(false)\n handleReset()\n }\n }, [reset, handleReset])\n \n return (\n \n click(e)}/>\n \n \n \n {tok0?.symbol}/{tok1?.symbol}\n \n \n ${formatAmount(USDValue.toNumber())}\n {formatAmount(tok0balance.toNumber())}\n {formatAmount(tok1balance.toNumber())}\n {formatAmount(lpBalance)}\n \n )\n}\n\ninterface PoolTableProps {\n lpData: BuyAndBurnLpResponse[]\n loading?: boolean // If true shows indication that SOME pools are loading, but the ones already fetched will be shown\n handleCheck: (event: any) => void\n calculateUSD: (event: any, event2: any) => void\n reset?: boolean\n handleReset: () => void\n}\n\nconst PoolTable: React.FC = ({ lpData, handleCheck, calculateUSD, reset, handleReset }) => {\n // for sorting\n const [sortField] = useState(SORT_FIELD.balance)\n const [sortDirection] = useState(true)\n const { t } = useTranslation()\n\n // pagination\n const [page, setPage] = useState(1)\n const [maxPage, setMaxPage] = useState(1)\n useEffect(() => {\n let extraPages = 1\n if (lpData && lpData.length % ITEMS_PER_PAGE === 0) {\n extraPages = 0\n }\n setMaxPage(Math.floor(lpData?.length / ITEMS_PER_PAGE) + extraPages)\n }, [lpData])\n\n const sortedLps = useMemo(() => {\n return lpData\n ? lpData\n .sort((a, b) => {\n if (a && b) {\n return a[sortField as keyof BurnTable] > b[sortField as keyof BurnTable]\n ? (sortDirection ? -1 : 1) * 1\n : (sortDirection ? -1 : 1) * -1\n }\n return -1\n })\n .slice(ITEMS_PER_PAGE * (page - 1), page * ITEMS_PER_PAGE)\n : []\n }, [page, lpData, sortDirection, sortField])\n\n // TODO get sorting to work\n // const handleSort = useCallback(\n // (newField: string) => {\n // setSortField(newField)\n // setSortDirection(sortField !== newField ? true : !sortDirection)\n // },\n // [sortDirection, sortField],\n // )\n\n // const arrow = useCallback(\n // (field: string) => {\n // const directionArrow = !sortDirection ? '↑' : '↓'\n // return sortField === field ? directionArrow : ''\n // },\n // [sortDirection, sortField],\n // )\n \n return (\n \n \n \n \n {t('LPs')}\n \n handleSort(SORT_FIELD.balance)}\n textTransform=\"uppercase\"\n >\n {t('USD value')} \n {/* {arrow(SORT_FIELD.balance)} */}\n \n handleSort(SORT_FIELD.token0)}\n textTransform=\"uppercase\"\n >\n {t('Token0 amount')} \n {/* {arrow(SORT_FIELD.token0)} */}\n \n handleSort(SORT_FIELD.token1)}\n textTransform=\"uppercase\"\n >\n {t('Token1 amount')} \n {/* {arrow(SORT_FIELD.token1)} */}\n \n handleSort(SORT_FIELD.USDValue)}\n textTransform=\"uppercase\"\n >\n {t('LP amount')} \n {/* {arrow(SORT_FIELD.USDValue)} */}\n \n \n \n {sortedLps.length > 0 ? (\n <>\n {sortedLps.map((lp) => {\n if (parseInt(lp.balance.toString()) > 1000000000) {\n return (\n \n \n \n \n )\n }\n return null\n })}\n {/* {loading && } */}\n \n {\n setPage(page === 1 ? page : page - 1)\n }}\n >\n \n \n\n {t('Page %page% of %maxPage%', { page, maxPage })}\n\n {\n setPage(page === maxPage ? page : page + 1)\n }}\n >\n \n \n \n \n ) : (\n <>\n \n {/* spacer */}\n \n \n )}\n \n )\n}\n\nexport default PoolTable\n","import { useState, useMemo } from 'react'\nimport BigNumber from 'bignumber.js'\nimport { Flex, ButtonMenu, ButtonMenuItem, Box, Text, Heading, Card, Button, useToast } from '@pulsex/uikit'\nimport useCatchTxError from 'hooks/useCatchTxError'\nimport { useTranslation } from '@pulsex/localization'\nimport Page from 'components/Layout/Page'\nimport { ToastDescriptionWithTx } from 'components/Toast'\nimport useSWR from 'swr'\nimport { useBuyAndBurnContract } from 'hooks/useContract'\nimport { getViemClients } from 'utils/viem'\nimport { usePLSUsdcPrice, usePlsxUsdcPrice } from 'hooks/useUSDCPrice'\nimport { fetchBuyAndBurnPairs, SWR_SETTINGS } from 'state/buyandburn/hooks'\nimport { formatAmount } from '@pulsex/utils/formatInfoNumbers'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\nimport { useAddLiquidityFormState } from 'state/mint/reducer'\nimport { Address, formatEther } from 'viem'\nimport { useMintActionHandlers } from '../../state/mint/hooks'\nimport PoolTable from './PoolsTable'\nimport { ChartCardsContainer } from './shared'\n\nconst Burn: React.FC = () => {\n const { t } = useTranslation()\n const { chainId } = useActiveChainId()\n const { toastSuccess } = useToast()\n const { fetchWithCatchTxError } = useCatchTxError()\n const [reset, setReset] = useState(false)\n const [checked, setChecked] = useState([])\n const [selectedUSD, setSelectedUSD] = useState(0)\n const plsxPrice = usePlsxUsdcPrice()\n const plsxPriceBN = new BigNumber(plsxPrice?.toSignificant())\n const plsPrice = usePLSUsdcPrice()\n\n const { protocol } = useAddLiquidityFormState()\n const { onChangeProtocol } = useMintActionHandlers(true)\n\n const buyandburn = useBuyAndBurnContract(protocol)\n const client = getViemClients({ chainId })\n\n const { data, isLoading } = useSWR(\n [protocol, buyandburn, client],\n () => fetchBuyAndBurnPairs(chainId, protocol, buyandburn, plsPrice, client),\n SWR_SETTINGS, // update lp info every 10s\n )\n const totalPLSXBurned = useMemo(() => {\n return data ? new BigNumber(formatEther(data.totalBurned)) : new BigNumber(0)\n }, [data])\n\n const handleCheck = (event) => {\n let updatedList = [...checked];\n if (event.target.checked) {\n updatedList = [...checked, event.target.value];\n } else {\n updatedList.splice(checked.indexOf(event.target.value), 1);\n }\n setChecked(updatedList);\n };\n\n const calculateUSD = (e, USDValue) => {\n let updatedCout = selectedUSD;\n if (e.target.checked) {\n updatedCout += USDValue;\n } else {\n updatedCout -= USDValue;\n }\n if (updatedCout < 0) {\n updatedCout = 0\n }\n setSelectedUSD(updatedCout)\n }\n\n const burn = async () => {\n const tokensArray0: Address[] = []\n const tokensArray1: Address[] = []\n for (let i = 0; i < checked.length; i++) {\n tokensArray0.push(checked[i].slice(0, 42))\n tokensArray1.push(checked[i].slice(43, 85))\n }\n const receipt = await fetchWithCatchTxError(async() => {\n const gasEstimate = await buyandburn.estimateGas.convertLps([tokensArray0, tokensArray1], {})\n return buyandburn.write.convertLps([tokensArray0, tokensArray1], { gasLimit: gasEstimate })\n })\n if (receipt?.status) {\n toastSuccess(\n t('PLSX Burned!'),\n \n {t('PLSX bounty has been sent to your wallet.')}\n ,\n )\n }\n setChecked([])\n setSelectedUSD(0)\n setReset(true)\n }\n\n const handleReset = () => {\n setReset(false)\n }\n\n const protocolSelector =\n onChangeProtocol(index === 0 ? 'V1' : 'V2')}\n variant=\"subtle\"\n >\n V1\n V2\n \n\n return (\n \n \n \n \n {t('PulseX Buy & Burn')}\n \n \n {t('Select LPs to Buy and Burn PLSX')}\n \n \n \n \n \n \n \n {t('Burn PLSX')}\n \n \n Total PLSX burned: {formatAmount(totalPLSXBurned.toNumber())}🔥\n \n \n Selected USD value: ${formatAmount(selectedUSD)}\n This would burn: ~{formatAmount(selectedUSD / plsxPriceBN.toNumber())} PLSX\n \n Bounty: {formatAmount(((selectedUSD - (selectedUSD * 0.1429)) / plsxPriceBN.toNumber()) * 0.001)} PLSX\n / ~${formatAmount((selectedUSD - (selectedUSD * 0.1429)) * 0.001)}\n \n \n \n \n \n \n \n \n \n \n \n \n {t('LPs to Burn')}\n {protocolSelector}\n \n \n \n )\n}\n\nexport default Burn\n","import { MINIMUM_SEARCH_CHARACTERS } from 'config/constants/info'\nimport { gql } from 'graphql-request'\nimport { useEffect, useState } from 'react'\nimport { usePoolDatasQuery, useTokenDatasQuery } from 'state/info/hooks'\nimport { PoolData, TokenData } from 'state/info/types'\nimport { infoClientWithChain } from 'utils/graphql'\n\nconst TOKEN_SEARCH = gql`\n query tokens($symbol: String, $name: String, $id: String) {\n asSymbol: tokens(first: 10, where: { symbol_contains: $symbol }, orderBy: tradeVolumeUSD, orderDirection: desc) {\n id\n }\n asName: tokens(first: 10, where: { name_contains: $name }, orderBy: tradeVolumeUSD, orderDirection: desc) {\n id\n }\n asAddress: tokens(first: 1, where: { id: $id }, orderBy: tradeVolumeUSD, orderDirection: desc) {\n id\n }\n }\n`\n\nconst POOL_SEARCH = gql`\n query pools($tokens: [Bytes]!, $id: String) {\n as0: pairs(first: 10, where: { token0_in: $tokens }) {\n id\n }\n as1: pairs(first: 10, where: { token1_in: $tokens }) {\n id\n }\n asAddress: pairs(first: 1, where: { id: $id }) {\n id\n }\n }\n`\n\ninterface SingleQueryResponse {\n id: string[]\n}\n\ninterface TokenSearchResponse {\n asSymbol: SingleQueryResponse[]\n asName: SingleQueryResponse[]\n asAddress: SingleQueryResponse[]\n}\ninterface PoolSearchResponse {\n as0: SingleQueryResponse[]\n as1: SingleQueryResponse[]\n asAddress: SingleQueryResponse[]\n}\n\nconst getIds = (entityArrays: SingleQueryResponse[][]) => {\n const ids = entityArrays\n .reduce((entities, currentTokenArray) => [...entities, ...currentTokenArray], [])\n .map((entity) => entity.id)\n return Array.from(new Set(ids))\n}\n\nconst useFetchSearchResults = (\n chainId: number,\n protocol: string,\n searchString: string,\n): {\n tokens: TokenData[]\n pools: PoolData[]\n tokensLoading: boolean\n poolsLoading: boolean\n error: boolean\n} => {\n const [searchResults, setSearchResults] = useState({\n tokens: [], // Token ids found by search query\n pools: [], // Pool ids found by search query\n loading: false, // Search query is in progress\n error: false, // GraphQL returned error\n })\n\n const searchStringTooShort = searchString.length < MINIMUM_SEARCH_CHARACTERS\n\n // New value received, reset state\n useEffect(() => {\n setSearchResults({\n tokens: [],\n pools: [],\n loading: !searchStringTooShort,\n error: false,\n })\n }, [searchString, searchStringTooShort])\n\n useEffect(() => {\n const search = async () => {\n try {\n const tokens = await infoClientWithChain(chainId, protocol).request(TOKEN_SEARCH, {\n symbol: searchString.toUpperCase(),\n // Most well known tokens have first letter capitalized\n name: searchString.charAt(0).toUpperCase() + searchString.slice(1),\n id: searchString.toLowerCase(),\n })\n const tokenIds = getIds([tokens.asAddress, tokens.asSymbol, tokens.asName])\n const pools = await infoClientWithChain(chainId, protocol).request(POOL_SEARCH, {\n tokens: tokenIds,\n id: searchString.toLowerCase(),\n })\n setSearchResults({\n tokens: tokenIds,\n pools: getIds([pools.asAddress, pools.as0, pools.as1]),\n loading: false,\n error: false,\n })\n } catch (error) {\n console.error(`Search failed for ${searchString}`, error)\n setSearchResults({\n tokens: [],\n pools: [],\n loading: false,\n error: true,\n })\n }\n }\n if (!searchStringTooShort) {\n search()\n }\n }, [chainId, searchString, searchStringTooShort, protocol])\n\n // Save ids to Redux\n // Token and Pool updater will then go fetch full data for these addresses\n // These hooks in turn will return data of tokens that have been fetched\n const tokenDatasFull = useTokenDatasQuery(protocol, searchResults.tokens)\n const poolDatasFull = usePoolDatasQuery(protocol, searchResults.pools)\n\n // If above hooks returned not all tokens/pools it means\n // that some requests for full data are in progress\n const tokensLoading = tokenDatasFull.length !== searchResults.tokens.length || searchResults.loading\n const poolsLoading = poolDatasFull.length !== searchResults.pools.length || searchResults.loading\n\n return {\n tokens: tokenDatasFull,\n pools: poolDatasFull,\n tokensLoading,\n poolsLoading,\n error: searchResults.error,\n }\n}\n\nexport default useFetchSearchResults\n","import { useRef, useState, useEffect, useMemo } from 'react'\nimport styled from 'styled-components'\nimport { Text, Input, Flex, Skeleton, useMatchBreakpoints } from '@pulsex/uikit'\nimport useFetchSearchResults from 'state/info/queries/search'\nimport { CurrencyLogo, DoubleCurrencyLogo } from 'pages/Info/components/CurrencyLogo'\nimport { formatAmount } from 'utils/formatInfoNumbers'\nimport useInfoUserSavedTokensAndPools from 'hooks/useInfoUserSavedTokensAndPoolsList'\nimport SaveIcon from 'pages/Info/components/SaveIcon'\nimport { usePoolDatasQuery, useTokenDatasQuery } from 'state/info/hooks'\nimport { useTranslation } from '@pulsex/localization'\nimport { useDebounce } from '@pulsex/hooks'\nimport { MINIMUM_SEARCH_CHARACTERS } from 'config/constants/info'\nimport { PoolData } from 'state/info/types'\nimport { useNavigate } from \"react-router-dom\";\nimport orderBy from 'lodash/orderBy'\nimport { useActiveChainId } from 'hooks/useActiveChainId'\n\nconst Container = styled.div`\n position: relative;\n z-index: 30;\n width: 100%;\n`\n\nconst StyledInput = styled(Input)`\n z-index: 9999;\n border: 1px solid ${({ theme }) => theme.colors.inputSecondary};\n`\n\nconst Menu = styled(\"div\").withConfig({\n shouldForwardProp: (props) => ![\"hide\"].includes(props),\n})<{ hide: boolean }>`\n display: ${({ hide }) => (hide ? 'none' : 'flex')};\n flex-direction: column;\n z-index: 9999;\n width: 100%;\n top: 50px;\n max-height: 400px;\n overflow: auto;\n right: 0;\n padding: 1.5rem;\n padding-bottom: 2.5rem;\n position: absolute;\n background: ${({ theme }) => theme.colors.background};\n border-radius: 8px;\n box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.04), 0px 4px 8px rgba(0, 0, 0, 0.04), 0px 16px 24px rgba(0, 0, 0, 0.04),\n 0px 24px 32px rgba(0, 0, 0, 0.04);\n border: 1px solid ${({ theme }) => theme.colors.secondary};\n margin-top: 4px;\n ${({ theme }) => theme.mediaQueries.sm} {\n margin-top: 0;\n width: 500px;\n max-height: 600px;\n }\n ${({ theme }) => theme.mediaQueries.md} {\n margin-top: 0;\n width: 800px;\n max-height: 600px;\n }\n`\n\nconst Blackout = styled.div`\n position: absolute;\n min-height: 100vh;\n width: 100vw;\n z-index: 10;\n background-color: black;\n opacity: 0.7;\n left: 0;\n top: 0;\n`\n\nconst ResponsiveGrid = styled.div`\n display: grid;\n grid-gap: 1em;\n grid-template-columns: 1fr;\n margin: 8px 0;\n align-items: center;\n ${({ theme }) => theme.mediaQueries.sm} {\n grid-template-columns: 1.5fr repeat(3, 1fr);\n }\n`\n\nconst Break = styled.div`\n height: 1px;\n background-color: ${({ theme }) => theme.colors.cardBorder};\n width: 100%;\n margin: 16px 0;\n`\n\nconst HoverText = styled(\"div\").withConfig({\n shouldForwardProp: (props) => ![\"hide\"].includes(props),\n})<{ hide: boolean }>`\n color: ${({ theme }) => theme.colors.secondary};\n display: ${({ hide }) => (hide ? 'none' : 'block')};\n margin-top: 16px;\n :hover {\n cursor: pointer;\n opacity: 0.6;\n }\n`\n\nconst HoverRowLink = styled.div`\n :hover {\n cursor: pointer;\n opacity: 0.6;\n }\n`\n\nconst OptionButton = styled(\"div\").withConfig({\n shouldForwardProp: (props) => ![\"enabled\"].includes(props),\n})<{ enabled: boolean }>`\n width: fit-content;\n padding: 4px 8px;\n border-radius: 8px;\n display: flex;\n font-size: 12px;\n font-weight: 600;\n margin-right: 10px;\n justify-content: center;\n align-items: center;\n background-color: ${({ theme, enabled }) => (enabled ? theme.colors.primary : 'transparent')};\n color: ${({ theme, enabled }) => (enabled ? theme.card.background : theme.colors.secondary)};\n :hover {\n opacity: 0.6;\n cursor: pointer;\n }\n`\ntype BasicTokenData = {\n address: string\n symbol: string\n name: string\n}\nconst tokenIncludesSearchTerm = (token: BasicTokenData, value: string) => {\n return (\n token.address.toLowerCase().includes(value.toLowerCase()) ||\n token.symbol.toLowerCase().includes(value.toLowerCase()) ||\n token.name.toLowerCase().includes(value.toLowerCase())\n )\n}\n\nconst poolIncludesSearchTerm = (pool: PoolData, value: string) => {\n return (\n pool.address.toLowerCase().includes(value.toLowerCase()) ||\n tokenIncludesSearchTerm(pool.token0, value) ||\n tokenIncludesSearchTerm(pool.token1, value)\n )\n}\n\nconst Search: React.FC<{ protocol: string }> = ({ protocol }) => {\n const { chainId } = useActiveChainId()\n const navigate = useNavigate();\n const { isXs, isSm } = useMatchBreakpoints()\n const { t } = useTranslation()\n\n const inputRef = useRef(null)\n const menuRef = useRef(null)\n const showMoreRef = useRef(null)\n\n const [showMenu, setShowMenu] = useState(false)\n const [value, setValue] = useState('')\n const debouncedSearchTerm = useDebounce(value, 600)\n\n const { tokens, pools, tokensLoading, poolsLoading, error } = useFetchSearchResults(chainId, protocol, debouncedSearchTerm)\n\n const [tokensShown, setTokensShown] = useState(3)\n const [poolsShown, setPoolsShown] = useState(3)\n\n useEffect(() => {\n setTokensShown(3)\n setPoolsShown(3)\n }, [debouncedSearchTerm])\n\n const handleOutsideClick = (e: any) => {\n const menuClick = menuRef.current && menuRef.current.contains(e.target)\n const inputCLick = inputRef.current && inputRef.current.contains(e.target)\n const showMoreClick = showMoreRef.current && showMoreRef.current.contains(e.target)\n\n if (!menuClick && !inputCLick && !showMoreClick) {\n setPoolsShown(3)\n setTokensShown(3)\n setShowMenu(false)\n }\n }\n\n useEffect(() => {\n if (showMenu) {\n document.addEventListener('click', handleOutsideClick)\n document.querySelector('body').style.overflow = 'hidden'\n } else {\n document.removeEventListener('click', handleOutsideClick)\n document.querySelector('body').style.overflow = 'visible'\n }\n\n return () => {\n document.removeEventListener('click', handleOutsideClick)\n }\n }, [showMenu])\n\n // watchlist\n const { v1, v2 } = useInfoUserSavedTokensAndPools(chainId)\n const { savedPools, savedTokens, addPool, addToken } = protocol === 'v1' ? v1 : v2\n\n const handleItemClick = (to: string) => {\n setShowMenu(false)\n setPoolsShown(3)\n setTokensShown(3)\n navigate(to)\n }\n\n // get date for watchlist\n const watchListTokenData = useTokenDatasQuery(protocol, savedTokens)\n const watchListTokenLoading = watchListTokenData.length !== savedTokens.length\n const watchListPoolData = usePoolDatasQuery(protocol, savedPools)\n const watchListPoolLoading = watchListPoolData.length !== savedPools.length\n\n // filter on view\n const [showWatchlist, setShowWatchlist] = useState(false)\n const tokensForList = useMemo(() => {\n if (showWatchlist) {\n return watchListTokenData.filter((token) => tokenIncludesSearchTerm(token, value))\n }\n return orderBy(tokens, (token) => token.volumeUSD, 'desc')\n }, [showWatchlist, tokens, watchListTokenData, value])\n\n const poolForList = useMemo(() => {\n if (showWatchlist) {\n return watchListPoolData.filter((pool) => poolIncludesSearchTerm(pool, value))\n }\n return orderBy(pools, (pool) => pool.volumeUSD, 'desc')\n }, [pools, showWatchlist, watchListPoolData, value])\n\n const contentUnderTokenList = () => {\n const isLoading = showWatchlist ? watchListTokenLoading : tokensLoading\n const noTokensFound =\n tokensForList.length === 0 && !isLoading && debouncedSearchTerm.length >= MINIMUM_SEARCH_CHARACTERS\n const noWatchlistTokens = tokensForList.length === 0 && !isLoading\n const showMessage = showWatchlist ? noWatchlistTokens : noTokensFound\n const noTokensMessage = showWatchlist ? t('Saved tokens will appear here') : t('No results')\n return (\n <>\n {isLoading && }\n {showMessage && {noTokensMessage}}\n {!showWatchlist && debouncedSearchTerm.length < MINIMUM_SEARCH_CHARACTERS && (\n {t('Search pools or tokens')}\n )}\n \n )\n }\n\n const contentUnderPoolList = () => {\n const isLoading = showWatchlist ? watchListPoolLoading : poolsLoading\n const noPoolsFound =\n poolForList.length === 0 && !poolsLoading && debouncedSearchTerm.length >= MINIMUM_SEARCH_CHARACTERS\n const noWatchlistPools = poolForList.length === 0 && !isLoading\n const showMessage = showWatchlist ? noWatchlistPools : noPoolsFound\n const noPoolsMessage = showWatchlist ? t('Saved tokens will appear here') : t('No results')\n return (\n <>\n {isLoading && }\n {showMessage && {noPoolsMessage}}\n {!showWatchlist && debouncedSearchTerm.length < MINIMUM_SEARCH_CHARACTERS && (\n {t('Search pools or tokens')}\n )}\n \n )\n }\n\n return (\n <>\n {showMenu ? : null}\n \n {\n setValue(e.target.value)\n }}\n placeholder={t('Search pools or tokens')}\n ref={inputRef}\n onFocus={() => {\n setShowMenu(true)\n }}\n />\n \n \n setShowWatchlist(false)}>\n {t('Search')}\n \n setShowWatchlist(true)}>\n {t('Watchlist')}\n \n \n {error && {t('Error occurred, please try again')}}\n\n \n \n {t('Tokens')}\n \n {!isXs && !isSm && (\n \n {t('Price')}\n \n )}\n {!isXs && !isSm && (\n \n {t('Volume 24H')}\n \n )}\n {!isXs && !isSm && (\n \n {t('Liquidity')}\n \n )}\n \n {tokensForList.slice(0, tokensShown).map((token, i) => {\n return (\n // eslint-disable-next-line react/no-array-index-key\n \n handleItemClick(\n protocol === 'v1' ? `/info/token/${token.address}` : `/info/v2/token/${token.address}`\n )}\n >\n \n \n \n \n {`${token.name} (${token.symbol})`}\n \n {\n e.stopPropagation()\n addToken(token.address)\n }}\n />\n \n {!isXs && !isSm && ${formatAmount(token.priceUSD)}}\n {!isXs && !isSm && ${formatAmount(token.volumeUSD)}}\n {!isXs && !isSm && ${formatAmount(token.liquidityUSD)}}\n \n \n )\n })}\n {contentUnderTokenList()}\n {\n setTokensShown(tokensShown + 5)\n }}\n hide={tokensForList.length <= tokensShown}\n ref={showMoreRef}\n >\n {t('See more...')}\n \n\n \n \n \n {t('Pools')}\n \n {!isXs && !isSm && (\n \n {t('Volume 24H')}\n \n )}\n {!isXs && !isSm && (\n \n {t('Volume 7D')}\n \n )}\n {!isXs && !isSm && (\n \n {t('Liquidity')}\n \n )}\n \n {poolForList.slice(0, poolsShown).map((p, i) => {\n return (\n // eslint-disable-next-line react/no-array-index-key\n handleItemClick(`/info/pool/${p.address}`)} key={i}>\n \n \n \n \n {`${p.token0.symbol} / ${p.token1.symbol}`}\n \n {\n e.stopPropagation()\n addPool(p.address)\n }}\n />\n \n {!isXs && !isSm && ${formatAmount(p.volumeUSD)}}\n {!isXs && !isSm && ${formatAmount(p.volumeUSDWeek)}}\n {!isXs && !isSm && ${formatAmount(p.liquidityUSD)}}\n \n \n )\n })}\n {contentUnderPoolList()}\n {\n setPoolsShown(poolsShown + 5)\n }}\n hide={poolForList.length <= poolsShown}\n ref={showMoreRef}\n >\n {t('See more...')}\n \n \n \n \n )\n}\n\nexport default Search\n","import { Box, ButtonMenu, ButtonMenuItem, Flex } from '@pulsex/uikit'\nimport { useTranslation } from '@pulsex/localization'\nimport { useLocation } from 'react-router'\nimport { Link } from 'react-router-dom'\nimport styled from 'styled-components'\nimport Search from 'pages/Info/components/InfoSearch'\n\nconst NavWrapper = styled(Flex)`\n background: ${({ theme }) => theme.colors.gradientCardHeader};\n justify-content: space-between;\n padding: 20px 16px;\n flex-direction: column;\n gap: 8px;\n ${({ theme }) => theme.mediaQueries.sm} {\n padding: 20px 40px;\n flex-direction: row;\n }\n`\n\nconst InfoNav: React.FC> = ({ isV2 }) => {\n const { t } = useTranslation()\n const { pathname } = useLocation()\n const isPools = isV2 ? pathname.includes('/info/v2/pools') : pathname.includes('/info/pools')\n const isTokens = isV2 ? pathname.includes('/info/v2/tokens') : pathname.includes('/info/tokens')\n let activeIndex = 0\n if (isPools) {\n activeIndex = 1\n }\n if (isTokens) {\n activeIndex = 2\n }\n return (\n \n \n \n \n {t('Overview')}\n \n \n {t('Pools')}\n \n \n {t('Tokens')}\n \n \n \n \n \n \n \n )\n}\n\nexport default InfoNav\n","import { useTranslation } from '@pulsex/localization'\nimport { SubMenuItems } from '@pulsex/uikit'\nimport { useLocation } from 'react-router'\nimport InfoNav from './components/InfoNav'\n\nexport const InfoPageLayout = ({ children }) => {\n const { pathname } = useLocation()\n const isV2 = pathname.includes(`info/v2`)\n const { t } = useTranslation()\n\n return (\n <>\n \n \n {children}\n \n )\n}\n","import { Box, Text, Skeleton } from '@pulsex/uikit'\nimport dayjs from 'dayjs'\nimport { useState, useMemo, memo, useEffect } from 'react'\nimport { ChartEntry, ProtocolData } from 'state/info/types'\nimport { formatAmount } from 'utils/formatInfoNumbers'\nimport BarChart from './BarChart'\nimport LineChart from './LineChart'\n\ninterface HoverableChartProps {\n chartData: ChartEntry[] | undefined\n protocolData: ProtocolData | undefined\n currentDate: string\n valueProperty: string\n title: string\n ChartComponent: typeof BarChart | typeof LineChart\n}\n\nconst HoverableChart = ({\n chartData,\n protocolData,\n currentDate,\n valueProperty,\n title,\n ChartComponent,\n}: HoverableChartProps) => {\n const [hover, setHover] = useState()\n const [dateHover, setDateHover] = useState()\n\n // Getting latest data to display on top of chart when not hovered\n useEffect(() => {\n setHover(undefined)\n }, [protocolData])\n\n useEffect(() => {\n if (typeof hover === 'undefined' && protocolData) {\n setHover(protocolData[valueProperty])\n }\n }, [protocolData, hover, valueProperty])\n\n const formattedData = useMemo(() => {\n if (chartData) {\n return chartData.map((day) => {\n return {\n time: dayjs.unix(day.date).toDate(),\n value: day[valueProperty],\n }\n })\n }\n return []\n }, [chartData, valueProperty])\n\n return (\n \n \n {title}\n \n {Number(hover) > -1 ? ( // sometimes data is 0\n \n ${formatAmount(hover)}\n \n ) : (\n \n )}\n {dateHover ?? currentDate}\n \n \n \n \n )\n}\n\nexport default memo(HoverableChart)\n","import { useTranslation } from '@pulsex/localization'\nimport { Card, Flex, Heading } from '@pulsex/uikit'\nimport Page from 'components/Layout/Page'\nimport { useMemo } from 'react'\nimport {\n useAllTokenDataQuery,\n useProtocolChartDataQuery,\n useProtocolDataQuery,\n useProtocolTransactionsQuery,\n} from 'state/info/hooks'\nimport { TokenData } from 'state/info/types'\nimport { styled } from 'styled-components'\nimport BarChart from 'pages/Info/components/InfoCharts/BarChart'\nimport LineChart from 'pages/Info/components/InfoCharts/LineChart'\nimport PoolTable from 'pages/Info/components/InfoTables/PoolsTable'\nimport TokenTable from 'pages/Info/components/InfoTables/TokensTable'\nimport TransactionTable from 'pages/Info/components/InfoTables/TransactionsTable'\nimport HoverableChart from '../components/InfoCharts/HoverableChart'\nimport { useNonSpamPoolsData } from '../hooks/usePoolsData'\n\nexport const ChartCardsContainer = styled(Flex)`\n justify-content: space-between;\n flex-direction: column;\n width: 100%;\n padding: 0;\n gap: 1em;\n\n & > * {\n width: 100%;\n }\n\n ${({ theme }) => theme.mediaQueries.md} {\n flex-direction: row;\n } ;\n`\n\nconst Overview: React.FC<{ protocol: string }> = ({ protocol }) => {\n const {\n t,\n currentLanguage: { locale },\n } = useTranslation()\n\n const protocolData = useProtocolDataQuery(protocol)\n const chartData = useProtocolChartDataQuery(protocol)\n const transactions = useProtocolTransactionsQuery(protocol)\n\n const currentDate = useMemo(\n () => new Date().toLocaleString(locale, { month: 'short', year: 'numeric', day: 'numeric' }),\n [locale],\n )\n\n const allTokens = useAllTokenDataQuery(protocol)\n\n const formattedTokens = useMemo(() => {\n return Object.values(allTokens)\n .map((token) => token.data)\n .filter((token): token is TokenData => token?.name !== 'unknown')\n }, [allTokens])\n\n const { poolsData } = useNonSpamPoolsData(protocol)\n\n const somePoolsAreLoading = useMemo(() => {\n return poolsData.some((pool) => !pool?.token0Price)\n }, [poolsData])\n\n return (\n \n \n {t('PulseX Info & Analytics')}\n \n \n \n \n \n \n \n \n \n \n {t('Top Tokens')}\n \n \n \n {t('Top Pools')}\n \n \n \n {t('Transactions')}\n \n \n \n )\n}\n\nexport default Overview\n","import React from 'react'\nimport { ToastListener } from '@pulsex/uikit'\nimport { ChainId } from '@pulsex/chains'\nimport { Navigate, Routes, Route } from 'react-router-dom'\nimport { chains } from 'utils/wagmi'\nimport { PersistGate } from 'redux-persist/integration/react'\nimport { useAccountEventListener } from 'hooks/useAccountEventListener'\nimport useEagerConnect from 'hooks/useEagerConnect'\nimport useUserAgent from 'hooks/useUserAgent'\nimport useActiveWeb3React from 'hooks/useActiveWeb3React'\nimport { useSmartRouterManager } from 'state/user/hooks'\nimport { usePollCoreFarmData } from 'state/farms/hooks'\nimport { usePollBlockNumber } from 'state/block/hooks'\nimport { persistor } from 'state'\nimport ListsUpdater from 'state/lists/updater'\nimport MulticallUpdater from 'state/multicall/updater'\nimport TransactionUpdater from 'state/transactions/updater'\nimport { NetworkModal } from 'components/NetworkModal'\nimport AddLiquidity from 'pages/AddLiquidity'\nimport RemoveLiquidity from 'pages/RemoveLiquidity'\nimport { VersionTag } from 'components/VersionTag'\nimport NotFound from 'pages/NotFound'\nimport Farms from 'pages/Farms'\nimport Pools from 'pages/Pools'\nimport PoolFinder from 'pages/PoolFinder'\nimport Token from 'pages/Info/Tokens/TokenPage'\nimport TokensOverview from 'pages/Info/Tokens'\nimport PoolsOverview from 'pages/Info/Pools'\nimport PoolPage from './Info/Pools/PoolPage'\nimport Menu from '../components/Menu'\nimport Swap from './Swap'\nimport SmartSwap from './Swap/SmartSwap'\nimport Liquidity from './Pool'\nimport Burn from './Burn'\nimport { InfoPageLayout } from './Info'\nimport Overview from './Info/Overview'\n\nfunction GlobalHooks() {\n usePollBlockNumber()\n useEagerConnect()\n usePollCoreFarmData()\n useUserAgent()\n useAccountEventListener()\n return null\n}\n\nexport function Updaters() {\n return (\n <>\n \n {chains.map((chain) => (\n \n ))}\n \n \n )\n}\n\nexport default function App() {\n const { chainId } = useActiveWeb3React()\n const [isSmartRouter] = useSmartRouterManager()\n const SwapPage = (chainId === ChainId.PULSECHAIN || chainId === ChainId.PULSECHAIN_TESTNET)\n && isSmartRouter ? : \n return (\n <>\n \n \n \n \n \n {/* Swap / Homepage */}\n \n\n {/* Liquidity list */}\n } />\n\n {/* Add liquidity */}\n }>\n \n \n \n\n {/* Remove liquidity */}\n } />\n\n {/* Pools finder */}\n } />\n\n {/* Farms */}\n } />\n } />\n\n {/* Pools */}\n } />\n } />\n\n {/* Burn */}\n } />\n\n {/* V1 Info page */}\n \n \n \n }\n />\n \n \n \n }\n />\n \n \n \n }\n />\n \n \n \n }\n />\n \n \n \n }\n />\n\n {/* V2 Info page */}\n \n \n \n }\n />\n \n \n \n }\n />\n \n \n \n }\n />\n \n \n \n }\n />\n \n \n \n }\n />\n\n } />\n } />\n \n \n \n \n \n \n \n )\n}\n","import { PulseXTheme } from '@pulsex/uikit'\nimport { createGlobalStyle } from 'styled-components'\n\ndeclare module 'styled-components' {\n /* eslint-disable @typescript-eslint/no-empty-interface */\n export interface DefaultTheme extends PulseXTheme {}\n}\n\nconst GlobalStyle = createGlobalStyle`\n * {\n font-family: 'Roboto', sans-serif;\n }\n body {\n background-color: ${({ theme }) => theme.colors.background};\n\n img {\n height: auto;\n max-width: 100%;\n }\n }\n`\n\nexport default GlobalStyle\n","import React, { StrictMode } from 'react'\nimport ReactDOM from 'react-dom/client'\nimport { LanguageProvider } from '@pulsex/localization'\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query'\nimport { WagmiConfig } from 'wagmi'\nimport { SWRConfig } from 'swr'\nimport { Provider } from 'react-redux'\nimport { dark, ModalProvider, ResetCSS, UIKitProvider } from '@pulsex/uikit'\nimport { HashRouter } from 'react-router-dom'\nimport { ThemeProvider as NextThemeProvider } from 'next-themes'\nimport { fetchStatusMiddleware } from './hooks/useSWRContract'\nimport { wagmiConfig } from './utils/wagmi'\nimport App from './pages/App'\nimport store from './state'\nimport GlobalStyle from './style/Global'\n\nconst StyledUIKitProvider: React.FC = ({ children, ...props }) => {\n return (\n \n {children}\n \n )\n}\n\n// Create a client\nconst queryClient = new QueryClient()\n\nconst root = ReactDOM.createRoot(\n document.getElementById('root') as HTMLElement\n)\n\nroot.render(\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n)\n","/* eslint-disable no-param-reassign */\nimport { FetchStatus, TFetchStatus } from 'config/constants/types'\nimport { useEffect, useMemo } from 'react'\nimport {\n KeyedMutator,\n Middleware,\n // eslint-disable-next-line camelcase\n unstable_serialize,\n} from 'swr'\nimport { BlockingData } from 'swr/_internal'\n\ndeclare module 'swr' {\n interface SWRResponse {\n data: BlockingData extends true ? Data : Data | undefined\n error: Error | undefined\n mutate: KeyedMutator\n isValidating: boolean\n isLoading: BlockingData extends true ? false : boolean\n // Add global fetchStatus to SWRResponse\n status: TFetchStatus\n }\n}\n\nexport const fetchStatusMiddleware: Middleware = (useSWRNext) => {\n return (key, fetcher, config) => {\n const swr = useSWRNext(key, fetcher, config)\n return Object.defineProperty(swr, 'status', {\n get() {\n let status: TFetchStatus = FetchStatus.Idle\n const isDataUndefined = typeof swr.data === 'undefined'\n\n if (!swr.isValidating && !swr.error && isDataUndefined) {\n status = FetchStatus.Idle\n } else if (swr.isValidating && !swr.error && isDataUndefined) {\n status = FetchStatus.Fetching\n } else if (!isDataUndefined) {\n status = FetchStatus.Fetched\n } else if (swr.error && isDataUndefined) {\n status = FetchStatus.Failed\n }\n return status\n },\n })\n }\n}\n\nexport const immutableMiddleware: Middleware = (useSWRNext) => (key, fetcher, config) => {\n config.revalidateOnFocus = false\n config.revalidateIfStale = false\n config.revalidateOnReconnect = false\n return useSWRNext(key, fetcher, config)\n}\n\nexport const localStorageMiddleware: Middleware = (useSWRNext) => (key, fetcher, config) => {\n const swr = useSWRNext(key, fetcher, config)\n const { data } = swr\n const serializedKey = useMemo(() => unstable_serialize(key), [key])\n\n useEffect(() => {\n if (data) {\n try {\n const stringify = JSON.stringify(data)\n localStorage?.setItem(serializedKey, stringify)\n } catch (error) {\n //\n }\n }\n }, [data, serializedKey])\n\n if (!data && typeof window !== 'undefined') {\n const localStorageData = localStorage?.getItem(serializedKey)\n\n if (localStorageData) {\n try {\n return Object.defineProperty(swr, 'data', {\n value: JSON.parse(localStorageData),\n })\n } catch (error) {\n localStorage?.removeItem(serializedKey)\n }\n }\n }\n\n return Object.defineProperty(swr, 'data', {\n value: data,\n })\n}\n\n// dev only\nexport const loggerMiddleware: Middleware = (useSWRNext) => {\n return (key, fetcher, config) => {\n // Add logger to the original fetcher.\n const extendedFetcher = fetcher\n ? (...args: unknown[]) => {\n console.debug('SWR Request:', key || {})\n return fetcher(...args)\n }\n : null\n\n // Execute the hook with the new fetcher.\n return useSWRNext(key, extendedFetcher, config)\n }\n}\n","var map = {\n\t\"./369.ts\": [\n\t\t98180,\n\t\t180\n\t],\n\t\"./943.ts\": [\n\t\t63725,\n\t\t725\n\t],\n\t\"./index.ts\": [\n\t\t40754\n\t],\n\t\"./priceHelperLps/369.ts\": [\n\t\t4351\n\t],\n\t\"./priceHelperLps/943.ts\": [\n\t\t74157\n\t],\n\t\"./priceHelperLps/getFarmsPriceHelperLpFiles.ts\": [\n\t\t49873\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(() => {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = 85739;\nmodule.exports = webpackAsyncContext;","// src/chainId.ts\nvar ChainId = /* @__PURE__ */ ((ChainId2) => {\n ChainId2[ChainId2[\"PULSECHAIN\"] = 369] = \"PULSECHAIN\";\n ChainId2[ChainId2[\"PULSECHAIN_TESTNET\"] = 943] = \"PULSECHAIN_TESTNET\";\n return ChainId2;\n})(ChainId || {});\n\n// src/chainProviders.ts\nvar pulsechain = {\n id: 369,\n name: \"PulseChain\",\n network: \"pulsechain\",\n nativeCurrency: {\n decimals: 18,\n name: \"Pulse\",\n symbol: \"PLS\"\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc.pulsechain.com\"],\n webSocket: [\"wss://ws.pulsechain.com\"]\n },\n public: {\n http: [\"https://rpc.pulsechain.com\"],\n webSocket: [\"wss://ws.pulsechain.com\"]\n }\n },\n blockExplorers: {\n default: {\n name: \"Otterscan\",\n url: \"https://otter.pulsechain.com\"\n }\n },\n contracts: {\n ensRegistry: {\n address: \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\"\n },\n multicall3: {\n address: \"0xdc6ed7C2EE5ab7fd303334B34F7524Cbb463DE57\",\n blockCreated: 17235438\n }\n }\n};\nvar pulsechainTestnet = {\n id: 943,\n name: \"Testnet\",\n network: \"pulsechainTestnet\",\n testnet: true,\n nativeCurrency: {\n decimals: 18,\n name: \"Test Pulse\",\n symbol: \"tPLS\"\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc.v4.testnet.pulsechain.com\"],\n webSocket: [\"wss://ws.v4.testnet.pulsechain.com\"]\n },\n public: {\n http: [\"https://rpc.v4.testnet.pulsechain.com\"],\n webSocket: [\"wss://ws.v4.testnet.pulsechain.com\"]\n }\n },\n blockExplorers: {\n default: {\n name: \"PulseScan\",\n url: \"https://scan.v4.testnet.pulsechain.com\"\n }\n },\n contracts: {\n ensRegistry: {\n address: \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\"\n },\n multicall3: {\n address: \"0x083F559993227395009596f77496FDc48e84C69a\",\n blockCreated: 16528971\n }\n }\n};\nvar CHAINS = [pulsechain, pulsechainTestnet];\n\n// src/subgraphs.ts\nvar V1_SUBGRAPHS = {\n [369 /* PULSECHAIN */]: {\n url: \"https://graph.pulsechain.com/subgraphs/name/pulsechain/pulsex\",\n startBlock: 17235499,\n timestamp: 1683811175\n },\n [943 /* PULSECHAIN_TESTNET */]: {\n url: \"https://graph.v4.testnet.pulsechain.com/subgraphs/name/pulsechain/pulsex\",\n startBlock: 16528996,\n timestamp: 1681720119\n }\n};\nvar V2_SUBGRAPHS = {\n [369 /* PULSECHAIN */]: {\n url: \"https://graph.pulsechain.com/subgraphs/name/pulsechain/pulsexv2\",\n startBlock: 17413325,\n timestamp: 1685609745\n },\n [943 /* PULSECHAIN_TESTNET */]: {\n url: \"https://graph.v4.testnet.pulsechain.com/subgraphs/name/pulsechain/pulsexv2\",\n startBlock: 16842459,\n timestamp: 1685529339\n }\n};\nvar INFO_BY_CHAIN = {\n [369 /* PULSECHAIN */]: {\n \"v1\": V1_SUBGRAPHS[369 /* PULSECHAIN */],\n \"v2\": V2_SUBGRAPHS[369 /* PULSECHAIN */]\n },\n [943 /* PULSECHAIN_TESTNET */]: {\n \"v1\": V1_SUBGRAPHS[943 /* PULSECHAIN_TESTNET */],\n \"v2\": V2_SUBGRAPHS[943 /* PULSECHAIN_TESTNET */]\n }\n};\n\nexport { CHAINS, ChainId, INFO_BY_CHAIN, V1_SUBGRAPHS, V2_SUBGRAPHS, pulsechain, pulsechainTestnet };\n","import invariant6 from 'tiny-invariant';\nimport _Decimal from 'decimal.js-light';\nimport _Big from 'big.js';\nimport toFormat from 'toformat';\n\n// src/constants.ts\nvar TradeType = /* @__PURE__ */ ((TradeType2) => {\n TradeType2[TradeType2[\"EXACT_INPUT\"] = 0] = \"EXACT_INPUT\";\n TradeType2[TradeType2[\"EXACT_OUTPUT\"] = 1] = \"EXACT_OUTPUT\";\n return TradeType2;\n})(TradeType || {});\nvar Rounding = /* @__PURE__ */ ((Rounding2) => {\n Rounding2[Rounding2[\"ROUND_DOWN\"] = 0] = \"ROUND_DOWN\";\n Rounding2[Rounding2[\"ROUND_HALF_UP\"] = 1] = \"ROUND_HALF_UP\";\n Rounding2[Rounding2[\"ROUND_UP\"] = 2] = \"ROUND_UP\";\n return Rounding2;\n})(Rounding || {});\nvar MINIMUM_LIQUIDITY = 1000n;\nvar ZERO = 0n;\nvar ONE = 1n;\nvar TWO = 2n;\nvar THREE = 3n;\nvar FIVE = 5n;\nvar TEN = 10n;\nvar _100 = 100n;\nvar _9971 = 9971n;\nvar _10000 = 10000n;\nvar MaxUint256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\nvar VMType = /* @__PURE__ */ ((VMType3) => {\n VMType3[\"uint8\"] = \"uint8\";\n VMType3[\"uint256\"] = \"uint256\";\n return VMType3;\n})(VMType || {});\nvar VM_TYPE_MAXIMA = {\n [\"uint8\" /* uint8 */]: BigInt(\"0xff\"),\n [\"uint256\" /* uint256 */]: BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\")\n};\nvar BaseCurrency = class {\n /**\n * Constructs an instance of the base class `BaseCurrency`.\n * @param chainId the chain ID on which this currency resides\n * @param decimals decimals of the currency\n * @param symbol symbol of the currency\n * @param name of the currency\n */\n constructor(chainId, decimals, symbol, name) {\n invariant6(Number.isSafeInteger(chainId), \"CHAIN_ID\");\n invariant6(decimals >= 0 && decimals < 255 && Number.isInteger(decimals), \"DECIMALS\");\n this.chainId = chainId;\n this.decimals = decimals;\n this.symbol = symbol;\n this.name = name;\n }\n};\nvar Decimal = toFormat(_Decimal);\nvar Big = toFormat(_Big);\nvar toSignificantRounding = {\n [0 /* ROUND_DOWN */]: Decimal.ROUND_DOWN,\n [1 /* ROUND_HALF_UP */]: Decimal.ROUND_HALF_UP,\n [2 /* ROUND_UP */]: Decimal.ROUND_UP\n};\nvar toFixedRounding = {\n [0 /* ROUND_DOWN */]: 0 /* RoundDown */,\n [1 /* ROUND_HALF_UP */]: 1 /* RoundHalfUp */,\n [2 /* ROUND_UP */]: 3 /* RoundUp */\n};\nvar Fraction = class {\n constructor(numerator, denominator = 1n) {\n this.numerator = BigInt(numerator);\n this.denominator = BigInt(denominator);\n }\n static tryParseFraction(fractionish) {\n if (typeof fractionish === \"bigint\" || typeof fractionish === \"number\" || typeof fractionish === \"string\")\n return new Fraction(fractionish);\n if (\"numerator\" in fractionish && \"denominator\" in fractionish)\n return fractionish;\n throw new Error(\"Could not parse fraction\");\n }\n // performs floor division\n get quotient() {\n return this.numerator / this.denominator;\n }\n // remainder after floor division\n get remainder() {\n return new Fraction(this.numerator % this.denominator, this.denominator);\n }\n invert() {\n return new Fraction(this.denominator, this.numerator);\n }\n add(other) {\n const otherParsed = Fraction.tryParseFraction(other);\n if (this.denominator === otherParsed.denominator) {\n return new Fraction(this.numerator + otherParsed.numerator, this.denominator);\n }\n return new Fraction(\n this.numerator * otherParsed.denominator + otherParsed.numerator * this.denominator,\n this.denominator * otherParsed.denominator\n );\n }\n subtract(other) {\n const otherParsed = Fraction.tryParseFraction(other);\n if (this.denominator === otherParsed.denominator) {\n return new Fraction(this.numerator - otherParsed.numerator, this.denominator);\n }\n return new Fraction(\n this.numerator * otherParsed.denominator - otherParsed.numerator * this.denominator,\n this.denominator * otherParsed.denominator\n );\n }\n lessThan(other) {\n const otherParsed = Fraction.tryParseFraction(other);\n return this.numerator * otherParsed.denominator < otherParsed.numerator * this.denominator;\n }\n equalTo(other) {\n const otherParsed = Fraction.tryParseFraction(other);\n return this.numerator * otherParsed.denominator === otherParsed.numerator * this.denominator;\n }\n greaterThan(other) {\n const otherParsed = Fraction.tryParseFraction(other);\n return this.numerator * otherParsed.denominator > otherParsed.numerator * this.denominator;\n }\n multiply(other) {\n const otherParsed = Fraction.tryParseFraction(other);\n return new Fraction(this.numerator * otherParsed.numerator, this.denominator * otherParsed.denominator);\n }\n divide(other) {\n const otherParsed = Fraction.tryParseFraction(other);\n return new Fraction(this.numerator * otherParsed.denominator, this.denominator * otherParsed.numerator);\n }\n toSignificant(significantDigits, format = { groupSeparator: \"\" }, rounding = 1 /* ROUND_HALF_UP */) {\n invariant6(Number.isInteger(significantDigits), `${significantDigits} is not an integer.`);\n invariant6(significantDigits > 0, `${significantDigits} is not positive.`);\n Decimal.set({ precision: significantDigits + 1, rounding: toSignificantRounding[rounding] });\n const quotient = new Decimal(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(significantDigits);\n return quotient.toFormat(quotient.decimalPlaces(), format);\n }\n toFixed(decimalPlaces, format = { groupSeparator: \"\" }, rounding = 1 /* ROUND_HALF_UP */) {\n invariant6(Number.isInteger(decimalPlaces), `${decimalPlaces} is not an integer.`);\n invariant6(decimalPlaces >= 0, `${decimalPlaces} is negative.`);\n Big.DP = decimalPlaces;\n Big.RM = toFixedRounding[rounding];\n return new Big(this.numerator.toString()).div(this.denominator.toString()).toFormat(decimalPlaces, format);\n }\n /**\n * Helper method for converting any super class back to a fraction\n */\n get asFraction() {\n return new Fraction(this.numerator, this.denominator);\n }\n};\n\n// src/fractions/percent.ts\nvar ONE_HUNDRED = new Fraction(100n);\nfunction toPercent(fraction) {\n return new Percent(fraction.numerator, fraction.denominator);\n}\nvar Percent = class extends Fraction {\n constructor() {\n super(...arguments);\n /**\n * This boolean prevents a fraction from being interpreted as a Percent\n */\n this.isPercent = true;\n }\n add(other) {\n return toPercent(super.add(other));\n }\n subtract(other) {\n return toPercent(super.subtract(other));\n }\n multiply(other) {\n return toPercent(super.multiply(other));\n }\n divide(other) {\n return toPercent(super.divide(other));\n }\n toSignificant(significantDigits = 5, format, rounding) {\n return super.multiply(ONE_HUNDRED).toSignificant(significantDigits, format, rounding);\n }\n toFixed(decimalPlaces = 2, format, rounding) {\n return super.multiply(ONE_HUNDRED).toFixed(decimalPlaces, format, rounding);\n }\n};\nvar Big2 = toFormat(_Big);\nvar CurrencyAmount = class extends Fraction {\n constructor(currency, numerator, denominator) {\n super(numerator, denominator);\n invariant6(this.quotient <= MaxUint256, \"AMOUNT\");\n this.currency = currency;\n this.decimalScale = 10n ** BigInt(currency.decimals);\n }\n /**\n * Returns a new currency amount instance from the unitless amount of token, i.e. the raw amount\n * @param currency the currency in the amount\n * @param rawAmount the raw token or ether amount\n */\n static fromRawAmount(currency, rawAmount) {\n return new CurrencyAmount(currency, rawAmount);\n }\n /**\n * Construct a currency amount with a denominator that is not equal to 1\n * @param currency the currency\n * @param numerator the numerator of the fractional token amount\n * @param denominator the denominator of the fractional token amount\n */\n static fromFractionalAmount(currency, numerator, denominator) {\n return new CurrencyAmount(currency, numerator, denominator);\n }\n add(other) {\n invariant6(this.currency.equals(other.currency), \"CURRENCY\");\n const added = super.add(other);\n return CurrencyAmount.fromFractionalAmount(this.currency, added.numerator, added.denominator);\n }\n subtract(other) {\n invariant6(this.currency.equals(other.currency), \"CURRENCY\");\n const subtracted = super.subtract(other);\n return CurrencyAmount.fromFractionalAmount(this.currency, subtracted.numerator, subtracted.denominator);\n }\n multiply(other) {\n const multiplied = super.multiply(other);\n return CurrencyAmount.fromFractionalAmount(this.currency, multiplied.numerator, multiplied.denominator);\n }\n divide(other) {\n const divided = super.divide(other);\n return CurrencyAmount.fromFractionalAmount(this.currency, divided.numerator, divided.denominator);\n }\n toSignificant(significantDigits = 6, format, rounding = 0 /* ROUND_DOWN */) {\n return super.divide(this.decimalScale).toSignificant(significantDigits, format, rounding);\n }\n toFixed(decimalPlaces = this.currency.decimals, format, rounding = 0 /* ROUND_DOWN */) {\n invariant6(decimalPlaces <= this.currency.decimals, \"DECIMALS\");\n return super.divide(this.decimalScale).toFixed(decimalPlaces, format, rounding);\n }\n toExact(format = { groupSeparator: \"\" }) {\n Big2.DP = this.currency.decimals;\n return new Big2(this.quotient.toString()).div(this.decimalScale.toString()).toFormat(format);\n }\n get wrapped() {\n if (this.currency.isToken)\n return this;\n return CurrencyAmount.fromFractionalAmount(this.currency.wrapped, this.numerator, this.denominator);\n }\n};\nvar Price = class extends Fraction {\n // used to adjust the raw fraction w/r/t the decimals of the {base,quote}Token\n /**\n * Construct a price, either with the base and quote currency amount, or the\n * @param args\n */\n constructor(...args) {\n let baseCurrency;\n let quoteCurrency;\n let denominator;\n let numerator;\n if (args.length === 4) {\n [baseCurrency, quoteCurrency, denominator, numerator] = args;\n } else {\n const result = args[0].quoteAmount.divide(args[0].baseAmount);\n [baseCurrency, quoteCurrency, denominator, numerator] = [\n args[0].baseAmount.currency,\n args[0].quoteAmount.currency,\n result.denominator,\n result.numerator\n ];\n }\n super(numerator, denominator);\n this.baseCurrency = baseCurrency;\n this.quoteCurrency = quoteCurrency;\n this.scalar = new Fraction(10n ** BigInt(baseCurrency.decimals), 10n ** BigInt(quoteCurrency.decimals));\n }\n /**\n * Flip the price, switching the base and quote currency\n */\n invert() {\n return new Price(this.quoteCurrency, this.baseCurrency, this.numerator, this.denominator);\n }\n /**\n * Multiply the price by another price, returning a new price. The other price must have the same base currency as this price's quote currency\n * @param other the other price\n */\n multiply(other) {\n invariant6(this.quoteCurrency.equals(other.baseCurrency), \"TOKEN\");\n const fraction = super.multiply(other);\n return new Price(this.baseCurrency, other.quoteCurrency, fraction.denominator, fraction.numerator);\n }\n /**\n * Return the amount of quote currency corresponding to a given amount of the base currency\n * @param currencyAmount the amount of base currency to quote against the price\n */\n quote(currencyAmount) {\n invariant6(currencyAmount.currency.equals(this.baseCurrency), \"TOKEN\");\n const result = super.multiply(currencyAmount);\n return CurrencyAmount.fromFractionalAmount(this.quoteCurrency, result.numerator, result.denominator);\n }\n /**\n * Get the value scaled by decimals for formatting\n * @private\n */\n get adjustedForDecimals() {\n return super.multiply(this.scalar);\n }\n toSignificant(significantDigits = 6, format, rounding) {\n return this.adjustedForDecimals.toSignificant(significantDigits, format, rounding);\n }\n toFixed(decimalPlaces = 4, format, rounding) {\n return this.adjustedForDecimals.toFixed(decimalPlaces, format, rounding);\n }\n};\n\n// src/nativeCurrency.ts\nvar NativeCurrency = class extends BaseCurrency {\n constructor() {\n super(...arguments);\n this.isNative = true;\n this.isToken = false;\n }\n};\nvar Token = class extends BaseCurrency {\n constructor(chainId, address, decimals, symbol, name, projectLink) {\n super(chainId, decimals, symbol, name);\n this.isNative = false;\n this.isToken = true;\n this.address = address;\n this.projectLink = projectLink;\n }\n /**\n * Returns true if the two tokens are equivalent, i.e. have the same chainId and address.\n * @param other other token to compare\n */\n equals(other) {\n return other.isToken && this.chainId === other.chainId && this.address === other.address;\n }\n /**\n * Returns true if the address of this token sorts before the address of the other token\n * @param other other token to compare\n * @throws if the tokens have the same address\n * @throws if the tokens are on different chains\n */\n sortsBefore(other) {\n invariant6(this.chainId === other.chainId, \"CHAIN_IDS\");\n invariant6(this.address !== other.address, \"ADDRESSES\");\n return this.address.toLowerCase() < other.address.toLowerCase();\n }\n /**\n * Return this token, which does not need to be wrapped\n */\n get wrapped() {\n return this;\n }\n get serialize() {\n return {\n address: this.address,\n chainId: this.chainId,\n decimals: this.decimals,\n symbol: this.symbol,\n name: this.name,\n projectLink: this.projectLink\n };\n }\n};\n\n// src/errors.ts\nvar CAN_SET_PROTOTYPE = \"setPrototypeOf\" in Object;\nvar InsufficientReservesError = class extends Error {\n constructor() {\n super();\n this.isInsufficientReservesError = true;\n this.name = this.constructor.name;\n if (CAN_SET_PROTOTYPE)\n Object.setPrototypeOf(this, new.target.prototype);\n }\n};\nvar InsufficientInputAmountError = class extends Error {\n constructor() {\n super();\n this.isInsufficientInputAmountError = true;\n this.name = this.constructor.name;\n if (CAN_SET_PROTOTYPE)\n Object.setPrototypeOf(this, new.target.prototype);\n }\n};\nfunction validateVMTypeInstance(value, vmType) {\n invariant6(value >= ZERO, `${value} is not a ${vmType}.`);\n invariant6(value <= VM_TYPE_MAXIMA[vmType], `${value} is not a ${vmType}.`);\n}\nfunction sqrt(y) {\n invariant6(y >= ZERO, \"NEGATIVE\");\n let z = ZERO;\n let x;\n if (y > THREE) {\n z = y;\n x = y / TWO + ONE;\n while (x < z) {\n z = x;\n x = (y / x + x) / TWO;\n }\n } else if (y !== ZERO) {\n z = ONE;\n }\n return z;\n}\nfunction sortedInsert(items, add, maxSize, comparator) {\n invariant6(maxSize > 0, \"MAX_SIZE_ZERO\");\n invariant6(items.length <= maxSize, \"ITEMS_SIZE\");\n if (items.length === 0) {\n items.push(add);\n return null;\n } else {\n const isFull = items.length === maxSize;\n if (isFull && comparator(items[items.length - 1], add) <= 0) {\n return add;\n }\n let lo = 0, hi = items.length;\n while (lo < hi) {\n const mid = lo + hi >>> 1;\n if (comparator(items[mid], add) <= 0) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n items.splice(lo, 0, add);\n return isFull ? items.pop() : null;\n }\n}\nfunction computePriceImpact(midPrice, inputAmount, outputAmount) {\n const quotedOutputAmount = midPrice.quote(inputAmount);\n const priceImpact = quotedOutputAmount.subtract(outputAmount).divide(quotedOutputAmount);\n return new Percent(priceImpact.numerator, priceImpact.denominator);\n}\nfunction balanceComparator(balanceA, balanceB) {\n if (balanceA && balanceB) {\n return balanceA.greaterThan(balanceB) ? -1 : balanceA.equalTo(balanceB) ? 0 : 1;\n }\n if (balanceA && balanceA.greaterThan(\"0\")) {\n return -1;\n }\n if (balanceB && balanceB.greaterThan(\"0\")) {\n return 1;\n }\n return 0;\n}\nfunction getTokenComparator(balances) {\n return function sortTokens(tokenA, tokenB) {\n const balanceA = balances[tokenA.address];\n const balanceB = balances[tokenB.address];\n const balanceComp = balanceComparator(balanceA, balanceB);\n if (balanceComp !== 0)\n return balanceComp;\n if (tokenA.symbol && tokenB.symbol) {\n return tokenA.symbol.toLowerCase() < tokenB.symbol.toLowerCase() ? -1 : 1;\n }\n return tokenA.symbol ? -1 : tokenB.symbol ? -1 : 0;\n };\n}\n\nexport { BaseCurrency, CurrencyAmount, FIVE, Fraction, InsufficientInputAmountError, InsufficientReservesError, MINIMUM_LIQUIDITY, MaxUint256, NativeCurrency, ONE, Percent, Price, Rounding, TEN, THREE, TWO, Token, TradeType, VMType, VM_TYPE_MAXIMA, ZERO, _100, _10000, _9971, computePriceImpact, getTokenComparator, sortedInsert, sqrt, validateVMTypeInstance };\n","import { ChainId, pulsechain, pulsechainTestnet } from '@pulsex/chains';\nimport { Percent, Token, Price, ZERO, InsufficientReservesError, _9971, _10000, CurrencyAmount, InsufficientInputAmountError, ONE, sqrt, MINIMUM_LIQUIDITY, TradeType, computePriceImpact, Fraction, sortedInsert, NativeCurrency, FIVE } from '@pulsex/swap-sdk-core';\nexport * from '@pulsex/swap-sdk-core';\nimport { createPublicClient, http, getAddress, keccak256, encodePacked, getContract, toBytes, pad, isBytes, slice, concat } from 'viem';\nimport invariant2 from 'tiny-invariant';\n\n// src/constants.ts\nfunction validateAndParseAddress(address) {\n try {\n const checksummedAddress = getAddress(address);\n return checksummedAddress;\n } catch (error) {\n invariant2(false, `${address} is not a valid address.`);\n }\n}\n\n// src/entities/token.ts\nvar ERC20Token = class extends Token {\n constructor(chainId, address, decimals, symbol, name, projectLink) {\n super(chainId, validateAndParseAddress(address), decimals, symbol, name, projectLink);\n }\n};\n\n// src/constants.ts\nvar ZERO_PERCENT = new Percent(\"0\");\nvar ONE_HUNDRED_PERCENT = new Percent(\"1\");\nvar FACTORY_ADDRESS_V1 = \"0x1715a3E4A142d8b698131108995174F37aEBA10D\";\nvar FACTORY_ADDRESS_V2 = \"0x29eA7545DEf87022BAdc76323F373EA1e707C523\";\nvar TESTNET_FACTORY_ADDRESS_V1 = \"0xFf0538782D122d3112F75dc7121F61562261c0f7\";\nvar TESTNET_FACTORY_ADDRESS_V2 = \"0x3B53e9270d0210214B9c242eb16C252474c5be01\";\nvar INIT_CODE_HASH_V1 = \"0x59fffffddd756cba9095128e53f3291a6ba38b21e3df744936e7289326555d62\";\nvar INIT_CODE_HASH_V2 = \"0x5dff1ac2d132f5ac2841294c6e9fc0ebafae8d447fac7996ef21c21112f411f1\";\nvar FACTORY_ADDRESS_MAP_V1 = {\n [ChainId.PULSECHAIN]: FACTORY_ADDRESS_V1,\n [ChainId.PULSECHAIN_TESTNET]: TESTNET_FACTORY_ADDRESS_V1\n};\nvar FACTORY_ADDRESS_MAP_V2 = {\n [ChainId.PULSECHAIN]: FACTORY_ADDRESS_V2,\n [ChainId.PULSECHAIN_TESTNET]: TESTNET_FACTORY_ADDRESS_V2\n};\nvar INIT_CODE_HASH_MAP_V1 = {\n [ChainId.PULSECHAIN]: INIT_CODE_HASH_V1,\n [ChainId.PULSECHAIN_TESTNET]: INIT_CODE_HASH_V1\n};\nvar INIT_CODE_HASH_MAP_V2 = {\n [ChainId.PULSECHAIN]: INIT_CODE_HASH_V2,\n [ChainId.PULSECHAIN_TESTNET]: INIT_CODE_HASH_V2\n};\nvar WPLS = {\n [ChainId.PULSECHAIN]: new ERC20Token(\n ChainId.PULSECHAIN,\n \"0xA1077a294dDE1B09bB078844df40758a5D0f9a27\",\n 18,\n \"WPLS\",\n \"Wrapped Pulse\",\n \"https://weth.io\"\n ),\n [ChainId.PULSECHAIN_TESTNET]: new ERC20Token(\n ChainId.PULSECHAIN_TESTNET,\n \"0x70499adEBB11Efd915E3b69E700c331778628707\",\n 18,\n \"WPLS\",\n \"Wrapped Pulse\",\n \"https://weth.io\"\n )\n};\nvar WNATIVE = {\n [ChainId.PULSECHAIN]: WPLS[ChainId.PULSECHAIN],\n [ChainId.PULSECHAIN_TESTNET]: WPLS[ChainId.PULSECHAIN_TESTNET]\n};\nvar NATIVE = {\n [ChainId.PULSECHAIN]: { name: \"Pulse\", symbol: \"PLS\", decimals: 18 },\n [ChainId.PULSECHAIN_TESTNET]: { name: \"Pulse\", symbol: \"tPLS\", decimals: 18 }\n};\n\n// src/trade.ts\nfunction isTradeBetter(tradeA, tradeB, minimumDelta = ZERO_PERCENT) {\n if (tradeA && !tradeB)\n return false;\n if (tradeB && !tradeA)\n return true;\n if (!tradeA || !tradeB)\n return void 0;\n if (tradeA.tradeType !== tradeB.tradeType || !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency)) {\n throw new Error(\"Trades are not comparable\");\n }\n if (minimumDelta.equalTo(ZERO_PERCENT)) {\n return tradeA.executionPrice.lessThan(tradeB.executionPrice);\n }\n return tradeA.executionPrice.asFraction.multiply(minimumDelta.add(ONE_HUNDRED_PERCENT)).lessThan(tradeB.executionPrice);\n}\nvar PAIR_ADDRESS_CACHE = {};\nvar composeKey = (token0, token1, protocol) => `${token0.chainId}-${token0.address}-${token1.address}-${protocol}`;\nfunction getCreate2Address(from_, salt_, initCodeHash) {\n const from = toBytes(getAddress(from_));\n const salt = pad(isBytes(salt_) ? salt_ : toBytes(salt_), {\n size: 32\n });\n return getAddress(slice(keccak256(concat([toBytes(\"0xff\"), from, salt, toBytes(initCodeHash)])), 12));\n}\nvar computePairAddress = ({\n factoryAddress,\n tokenA,\n tokenB\n}) => {\n const [token0, token1] = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA];\n const protocol = factoryAddress === FACTORY_ADDRESS_MAP_V1[token0.chainId] ? \"V1\" : \"V2\";\n const key = composeKey(token0, token1, protocol);\n if (PAIR_ADDRESS_CACHE?.[key] === void 0) {\n PAIR_ADDRESS_CACHE = {\n ...PAIR_ADDRESS_CACHE,\n [key]: getCreate2Address(\n factoryAddress,\n keccak256(encodePacked([\"address\", \"address\"], [token0.address, token1.address])),\n protocol === \"V1\" ? INIT_CODE_HASH_MAP_V1[token0.chainId] : INIT_CODE_HASH_MAP_V2[token0.chainId]\n )\n };\n }\n return PAIR_ADDRESS_CACHE[key];\n};\nvar PairV1 = class {\n static getAddress(tokenA, tokenB) {\n return computePairAddress({\n factoryAddress: FACTORY_ADDRESS_MAP_V1[tokenA.chainId],\n tokenA,\n tokenB\n });\n }\n constructor(currencyAmountA, tokenAmountB) {\n const tokenAmounts = currencyAmountA.currency.sortsBefore(tokenAmountB.currency) ? [currencyAmountA, tokenAmountB] : [tokenAmountB, currencyAmountA];\n this.liquidityToken = new ERC20Token(\n tokenAmounts[0].currency.chainId,\n PairV1.getAddress(tokenAmounts[0].currency, tokenAmounts[1].currency),\n 18,\n \"PLP\",\n \"PulseX LP\"\n );\n this.tokenAmounts = tokenAmounts;\n }\n /**\n * Returns true if the token is either token0 or token1\n * @param token to check\n */\n involvesToken(token) {\n return token.equals(this.token0) || token.equals(this.token1);\n }\n /**\n * Returns the current mid price of the pair in terms of token0, i.e. the ratio of reserve1 to reserve0\n */\n get token0Price() {\n const result = this.tokenAmounts[1].divide(this.tokenAmounts[0]);\n return new Price(this.token0, this.token1, result.denominator, result.numerator);\n }\n /**\n * Returns the current mid price of the pair in terms of token1, i.e. the ratio of reserve0 to reserve1\n */\n get token1Price() {\n const result = this.tokenAmounts[0].divide(this.tokenAmounts[1]);\n return new Price(this.token1, this.token0, result.denominator, result.numerator);\n }\n /**\n * Return the price of the given token in terms of the other token in the pair.\n * @param token token to return price of\n */\n priceOf(token) {\n invariant2(this.involvesToken(token), \"TOKEN\");\n return token.equals(this.token0) ? this.token0Price : this.token1Price;\n }\n /**\n * Returns the chain ID of the tokens in the pair.\n */\n get chainId() {\n return this.token0.chainId;\n }\n get token0() {\n return this.tokenAmounts[0].currency;\n }\n get token1() {\n return this.tokenAmounts[1].currency;\n }\n get reserve0() {\n return this.tokenAmounts[0];\n }\n get reserve1() {\n return this.tokenAmounts[1];\n }\n reserveOf(token) {\n invariant2(this.involvesToken(token), \"TOKEN\");\n return token.equals(this.token0) ? this.reserve0 : this.reserve1;\n }\n getOutputAmount(inputAmount) {\n invariant2(this.involvesToken(inputAmount.currency), \"TOKEN\");\n if (this.reserve0.quotient === ZERO || this.reserve1.quotient === ZERO) {\n throw new InsufficientReservesError();\n }\n const inputReserve = this.reserveOf(inputAmount.currency);\n const outputReserve = this.reserveOf(inputAmount.currency.equals(this.token0) ? this.token1 : this.token0);\n const inputAmountWithFee = inputAmount.quotient * _9971;\n const numerator = inputAmountWithFee * outputReserve.quotient;\n const denominator = inputReserve.quotient * _10000 + inputAmountWithFee;\n const outputAmount = CurrencyAmount.fromRawAmount(\n inputAmount.currency.equals(this.token0) ? this.token1 : this.token0,\n numerator / denominator\n );\n if (outputAmount.quotient === ZERO) {\n throw new InsufficientInputAmountError();\n }\n return [outputAmount, new PairV1(inputReserve.add(inputAmount), outputReserve.subtract(outputAmount))];\n }\n getInputAmount(outputAmount) {\n invariant2(this.involvesToken(outputAmount.currency), \"TOKEN\");\n if (this.reserve0.quotient === ZERO || this.reserve1.quotient === ZERO || outputAmount.quotient >= this.reserveOf(outputAmount.currency).quotient) {\n throw new InsufficientReservesError();\n }\n const outputReserve = this.reserveOf(outputAmount.currency);\n const inputReserve = this.reserveOf(outputAmount.currency.equals(this.token0) ? this.token1 : this.token0);\n const numerator = inputReserve.quotient * outputAmount.quotient * _10000;\n const denominator = (outputReserve.quotient - outputAmount.quotient) * _9971;\n const inputAmount = CurrencyAmount.fromRawAmount(\n outputAmount.currency.equals(this.token0) ? this.token1 : this.token0,\n numerator / denominator + ONE\n );\n return [inputAmount, new PairV1(inputReserve.add(inputAmount), outputReserve.subtract(outputAmount))];\n }\n getLiquidityMinted(totalSupply, tokenAmountA, tokenAmountB) {\n invariant2(totalSupply.currency.equals(this.liquidityToken), \"LIQUIDITY\");\n const tokenAmounts = tokenAmountA.currency.sortsBefore(tokenAmountB.currency) ? [tokenAmountA, tokenAmountB] : [tokenAmountB, tokenAmountA];\n invariant2(tokenAmounts[0].currency.equals(this.token0) && tokenAmounts[1].currency.equals(this.token1), \"TOKEN\");\n let liquidity;\n if (totalSupply.quotient === ZERO) {\n liquidity = sqrt(tokenAmounts[0].quotient * tokenAmounts[1].quotient) - MINIMUM_LIQUIDITY;\n } else {\n const amount0 = tokenAmounts[0].quotient * totalSupply.quotient / this.reserve0.quotient;\n const amount1 = tokenAmounts[1].quotient * totalSupply.quotient / this.reserve1.quotient;\n liquidity = amount0 <= amount1 ? amount0 : amount1;\n }\n if (!(liquidity > ZERO)) {\n throw new InsufficientInputAmountError();\n }\n return CurrencyAmount.fromRawAmount(this.liquidityToken, liquidity);\n }\n getLiquidityValue(token, totalSupply, liquidity, feeOn = false, kLast) {\n invariant2(this.involvesToken(token), \"TOKEN\");\n invariant2(totalSupply.currency.equals(this.liquidityToken), \"TOTAL_SUPPLY\");\n invariant2(liquidity.currency.equals(this.liquidityToken), \"LIQUIDITY\");\n invariant2(liquidity.quotient <= totalSupply.quotient, \"LIQUIDITY\");\n let totalSupplyAdjusted;\n if (!feeOn) {\n totalSupplyAdjusted = totalSupply;\n } else {\n invariant2(!!kLast, \"K_LAST\");\n const kLastParsed = BigInt(kLast);\n if (!(kLastParsed === ZERO)) {\n const rootK = sqrt(this.reserve0.quotient * this.reserve1.quotient);\n const rootKLast = sqrt(kLastParsed);\n if (rootK > rootKLast) {\n const numerator = totalSupply.quotient * (rootK - rootKLast);\n const denominator = rootK * FIVE + rootKLast;\n const feeLiquidity = numerator / denominator;\n totalSupplyAdjusted = totalSupply.add(CurrencyAmount.fromRawAmount(this.liquidityToken, feeLiquidity));\n } else {\n totalSupplyAdjusted = totalSupply;\n }\n } else {\n totalSupplyAdjusted = totalSupply;\n }\n }\n return CurrencyAmount.fromRawAmount(\n token,\n liquidity.quotient * this.reserveOf(token).quotient / totalSupplyAdjusted.quotient\n );\n }\n};\nvar PairV2 = class {\n static getAddress(tokenA, tokenB) {\n return computePairAddress({\n factoryAddress: FACTORY_ADDRESS_MAP_V2[tokenA.chainId],\n tokenA,\n tokenB\n });\n }\n constructor(currencyAmountA, tokenAmountB) {\n const tokenAmounts = currencyAmountA.currency.sortsBefore(tokenAmountB.currency) ? [currencyAmountA, tokenAmountB] : [tokenAmountB, currencyAmountA];\n this.liquidityToken = new ERC20Token(\n tokenAmounts[0].currency.chainId,\n PairV2.getAddress(tokenAmounts[0].currency, tokenAmounts[1].currency),\n 18,\n \"PLP\",\n \"PulseX LP\"\n );\n this.tokenAmounts = tokenAmounts;\n }\n /**\n * Returns true if the token is either token0 or token1\n * @param token to check\n */\n involvesToken(token) {\n return token.equals(this.token0) || token.equals(this.token1);\n }\n /**\n * Returns the current mid price of the pair in terms of token0, i.e. the ratio of reserve1 to reserve0\n */\n get token0Price() {\n const result = this.tokenAmounts[1].divide(this.tokenAmounts[0]);\n return new Price(this.token0, this.token1, result.denominator, result.numerator);\n }\n /**\n * Returns the current mid price of the pair in terms of token1, i.e. the ratio of reserve0 to reserve1\n */\n get token1Price() {\n const result = this.tokenAmounts[0].divide(this.tokenAmounts[1]);\n return new Price(this.token1, this.token0, result.denominator, result.numerator);\n }\n /**\n * Return the price of the given token in terms of the other token in the pair.\n * @param token token to return price of\n */\n priceOf(token) {\n invariant2(this.involvesToken(token), \"TOKEN\");\n return token.equals(this.token0) ? this.token0Price : this.token1Price;\n }\n /**\n * Returns the chain ID of the tokens in the pair.\n */\n get chainId() {\n return this.token0.chainId;\n }\n get token0() {\n return this.tokenAmounts[0].currency;\n }\n get token1() {\n return this.tokenAmounts[1].currency;\n }\n get reserve0() {\n return this.tokenAmounts[0];\n }\n get reserve1() {\n return this.tokenAmounts[1];\n }\n reserveOf(token) {\n invariant2(this.involvesToken(token), \"TOKEN\");\n return token.equals(this.token0) ? this.reserve0 : this.reserve1;\n }\n getOutputAmount(inputAmount) {\n invariant2(this.involvesToken(inputAmount.currency), \"TOKEN\");\n if (this.reserve0.quotient === ZERO || this.reserve1.quotient === ZERO) {\n throw new InsufficientReservesError();\n }\n const inputReserve = this.reserveOf(inputAmount.currency);\n const outputReserve = this.reserveOf(inputAmount.currency.equals(this.token0) ? this.token1 : this.token0);\n const inputAmountWithFee = inputAmount.quotient * _9971;\n const numerator = inputAmountWithFee * outputReserve.quotient;\n const denominator = inputReserve.quotient * _10000 + inputAmountWithFee;\n const outputAmount = CurrencyAmount.fromRawAmount(\n inputAmount.currency.equals(this.token0) ? this.token1 : this.token0,\n numerator / denominator\n );\n if (outputAmount.quotient === ZERO) {\n throw new InsufficientInputAmountError();\n }\n return [outputAmount, new PairV2(inputReserve.add(inputAmount), outputReserve.subtract(outputAmount))];\n }\n getInputAmount(outputAmount) {\n invariant2(this.involvesToken(outputAmount.currency), \"TOKEN\");\n if (this.reserve0.quotient === ZERO || this.reserve1.quotient === ZERO || outputAmount.quotient >= this.reserveOf(outputAmount.currency).quotient) {\n throw new InsufficientReservesError();\n }\n const outputReserve = this.reserveOf(outputAmount.currency);\n const inputReserve = this.reserveOf(outputAmount.currency.equals(this.token0) ? this.token1 : this.token0);\n const numerator = inputReserve.quotient * outputAmount.quotient * _10000;\n const denominator = (outputReserve.quotient - outputAmount.quotient) * _9971;\n const inputAmount = CurrencyAmount.fromRawAmount(\n outputAmount.currency.equals(this.token0) ? this.token1 : this.token0,\n numerator / denominator + ONE\n );\n return [inputAmount, new PairV2(inputReserve.add(inputAmount), outputReserve.subtract(outputAmount))];\n }\n getLiquidityMinted(totalSupply, tokenAmountA, tokenAmountB) {\n invariant2(totalSupply.currency.equals(this.liquidityToken), \"LIQUIDITY\");\n const tokenAmounts = tokenAmountA.currency.sortsBefore(tokenAmountB.currency) ? [tokenAmountA, tokenAmountB] : [tokenAmountB, tokenAmountA];\n invariant2(tokenAmounts[0].currency.equals(this.token0) && tokenAmounts[1].currency.equals(this.token1), \"TOKEN\");\n let liquidity;\n if (totalSupply.quotient === ZERO) {\n liquidity = sqrt(tokenAmounts[0].quotient * tokenAmounts[1].quotient) - MINIMUM_LIQUIDITY;\n } else {\n const amount0 = tokenAmounts[0].quotient * totalSupply.quotient / this.reserve0.quotient;\n const amount1 = tokenAmounts[1].quotient * totalSupply.quotient / this.reserve1.quotient;\n liquidity = amount0 <= amount1 ? amount0 : amount1;\n }\n if (!(liquidity > ZERO)) {\n throw new InsufficientInputAmountError();\n }\n return CurrencyAmount.fromRawAmount(this.liquidityToken, liquidity);\n }\n getLiquidityValue(token, totalSupply, liquidity, feeOn = false, kLast) {\n invariant2(this.involvesToken(token), \"TOKEN\");\n invariant2(totalSupply.currency.equals(this.liquidityToken), \"TOTAL_SUPPLY\");\n invariant2(liquidity.currency.equals(this.liquidityToken), \"LIQUIDITY\");\n invariant2(liquidity.quotient <= totalSupply.quotient, \"LIQUIDITY\");\n let totalSupplyAdjusted;\n if (!feeOn) {\n totalSupplyAdjusted = totalSupply;\n } else {\n invariant2(!!kLast, \"K_LAST\");\n const kLastParsed = BigInt(kLast);\n if (!(kLastParsed === ZERO)) {\n const rootK = sqrt(this.reserve0.quotient * this.reserve1.quotient);\n const rootKLast = sqrt(kLastParsed);\n if (rootK > rootKLast) {\n const numerator = totalSupply.quotient * (rootK - rootKLast);\n const denominator = rootK * FIVE + rootKLast;\n const feeLiquidity = numerator / denominator;\n totalSupplyAdjusted = totalSupply.add(CurrencyAmount.fromRawAmount(this.liquidityToken, feeLiquidity));\n } else {\n totalSupplyAdjusted = totalSupply;\n }\n } else {\n totalSupplyAdjusted = totalSupply;\n }\n }\n return CurrencyAmount.fromRawAmount(\n token,\n liquidity.quotient * this.reserveOf(token).quotient / totalSupplyAdjusted.quotient\n );\n }\n};\nvar RouteV1 = class {\n constructor(pairs, input, output) {\n this._midPrice = null;\n invariant2(pairs.length > 0, \"PAIRS\");\n const chainId = pairs[0].chainId;\n invariant2(\n pairs.every((pair) => pair.chainId === chainId),\n \"CHAIN_IDS\"\n );\n const wrappedInput = input.wrapped;\n invariant2(pairs[0].involvesToken(wrappedInput), \"INPUT\");\n invariant2(typeof output === \"undefined\" || pairs[pairs.length - 1].involvesToken(output.wrapped), \"OUTPUT\");\n const path = [wrappedInput];\n for (const [i, pair] of pairs.entries()) {\n const currentInput = path[i];\n invariant2(currentInput.equals(pair.token0) || currentInput.equals(pair.token1), \"PATH\");\n const output2 = currentInput.equals(pair.token0) ? pair.token1 : pair.token0;\n path.push(output2);\n }\n this.pairs = pairs;\n this.path = path;\n this.input = input;\n this.output = output;\n }\n get midPrice() {\n if (this._midPrice !== null)\n return this._midPrice;\n const prices = [];\n for (const [i, pair] of this.pairs.entries()) {\n prices.push(\n this.path[i].equals(pair.token0) ? new Price(pair.reserve0.currency, pair.reserve1.currency, pair.reserve0.quotient, pair.reserve1.quotient) : new Price(pair.reserve1.currency, pair.reserve0.currency, pair.reserve1.quotient, pair.reserve0.quotient)\n );\n }\n const reduced = prices.slice(1).reduce((accumulator, currentValue) => accumulator.multiply(currentValue), prices[0]);\n return this._midPrice = new Price(this.input, this.output, reduced.denominator, reduced.numerator);\n }\n get chainId() {\n return this.pairs[0].chainId;\n }\n};\nvar RouteV2 = class {\n constructor(pairs, input, output) {\n this._midPrice = null;\n invariant2(pairs.length > 0, \"PAIRS\");\n const chainId = pairs[0].chainId;\n invariant2(\n pairs.every((pair) => pair.chainId === chainId),\n \"CHAIN_IDS\"\n );\n const wrappedInput = input.wrapped;\n invariant2(pairs[0].involvesToken(wrappedInput), \"INPUT\");\n invariant2(typeof output === \"undefined\" || pairs[pairs.length - 1].involvesToken(output.wrapped), \"OUTPUT\");\n const path = [wrappedInput];\n for (const [i, pair] of pairs.entries()) {\n const currentInput = path[i];\n invariant2(currentInput.equals(pair.token0) || currentInput.equals(pair.token1), \"PATH\");\n const output2 = currentInput.equals(pair.token0) ? pair.token1 : pair.token0;\n path.push(output2);\n }\n this.pairs = pairs;\n this.path = path;\n this.input = input;\n this.output = output;\n }\n get midPrice() {\n if (this._midPrice !== null)\n return this._midPrice;\n const prices = [];\n for (const [i, pair] of this.pairs.entries()) {\n prices.push(\n this.path[i].equals(pair.token0) ? new Price(pair.reserve0.currency, pair.reserve1.currency, pair.reserve0.quotient, pair.reserve1.quotient) : new Price(pair.reserve1.currency, pair.reserve0.currency, pair.reserve1.quotient, pair.reserve0.quotient)\n );\n }\n const reduced = prices.slice(1).reduce((accumulator, currentValue) => accumulator.multiply(currentValue), prices[0]);\n return this._midPrice = new Price(this.input, this.output, reduced.denominator, reduced.numerator);\n }\n get chainId() {\n return this.pairs[0].chainId;\n }\n};\nfunction inputOutputComparator(a, b) {\n invariant2(a.inputAmount.currency.equals(b.inputAmount.currency), \"INPUT_CURRENCY\");\n invariant2(a.outputAmount.currency.equals(b.outputAmount.currency), \"OUTPUT_CURRENCY\");\n if (a.outputAmount.equalTo(b.outputAmount)) {\n if (a.inputAmount.equalTo(b.inputAmount)) {\n return 0;\n }\n if (a.inputAmount.lessThan(b.inputAmount)) {\n return -1;\n }\n return 1;\n }\n if (a.outputAmount.lessThan(b.outputAmount)) {\n return 1;\n }\n return -1;\n}\nfunction tradeComparator(a, b) {\n const ioComp = inputOutputComparator(a, b);\n if (ioComp !== 0) {\n return ioComp;\n }\n if (a.priceImpact.lessThan(b.priceImpact)) {\n return -1;\n }\n if (a.priceImpact.greaterThan(b.priceImpact)) {\n return 1;\n }\n return a.route.path.length - b.route.path.length;\n}\nvar TradeV1 = class {\n /**\n * Constructs an exact in trade with the given amount in and route\n * @param route route of the exact in trade\n * @param amountIn the amount being passed in\n */\n static exactIn(route, amountIn) {\n return new TradeV1(route, amountIn, TradeType.EXACT_INPUT);\n }\n /**\n * Constructs an exact out trade with the given amount out and route\n * @param route route of the exact out trade\n * @param amountOut the amount returned by the trade\n */\n static exactOut(route, amountOut) {\n return new TradeV1(route, amountOut, TradeType.EXACT_OUTPUT);\n }\n constructor(route, amount, tradeType) {\n this.route = route;\n this.tradeType = tradeType;\n const tokenAmounts = new Array(route.path.length);\n if (tradeType === TradeType.EXACT_INPUT) {\n invariant2(amount.currency.equals(route.input), \"INPUT\");\n tokenAmounts[0] = amount.wrapped;\n for (let i = 0; i < route.path.length - 1; i++) {\n const pair = route.pairs[i];\n const [outputAmount] = pair.getOutputAmount(tokenAmounts[i]);\n tokenAmounts[i + 1] = outputAmount;\n }\n this.inputAmount = CurrencyAmount.fromFractionalAmount(route.input, amount.numerator, amount.denominator);\n this.outputAmount = CurrencyAmount.fromFractionalAmount(\n route.output,\n tokenAmounts[tokenAmounts.length - 1].numerator,\n tokenAmounts[tokenAmounts.length - 1].denominator\n );\n } else {\n invariant2(amount.currency.equals(route.output), \"OUTPUT\");\n tokenAmounts[tokenAmounts.length - 1] = amount.wrapped;\n for (let i = route.path.length - 1; i > 0; i--) {\n const pair = route.pairs[i - 1];\n const [inputAmount] = pair.getInputAmount(tokenAmounts[i]);\n tokenAmounts[i - 1] = inputAmount;\n }\n this.inputAmount = CurrencyAmount.fromFractionalAmount(\n route.input,\n tokenAmounts[0].numerator,\n tokenAmounts[0].denominator\n );\n this.outputAmount = CurrencyAmount.fromFractionalAmount(route.output, amount.numerator, amount.denominator);\n }\n this.executionPrice = new Price(\n this.inputAmount.currency,\n this.outputAmount.currency,\n this.inputAmount.quotient,\n this.outputAmount.quotient\n );\n this.priceImpact = computePriceImpact(route.midPrice, this.inputAmount, this.outputAmount);\n }\n /**\n * Get the minimum amount that must be received from this trade for the given slippage tolerance\n * @param slippageTolerance tolerance of unfavorable slippage from the execution price of this trade\n */\n minimumAmountOut(slippageTolerance) {\n invariant2(!slippageTolerance.lessThan(ZERO), \"SLIPPAGE_TOLERANCE\");\n if (this.tradeType === TradeType.EXACT_OUTPUT) {\n return this.outputAmount;\n }\n const slippageAdjustedAmountOut = new Fraction(ONE).add(slippageTolerance).invert().multiply(this.outputAmount.quotient).quotient;\n return CurrencyAmount.fromRawAmount(this.outputAmount.currency, slippageAdjustedAmountOut);\n }\n /**\n * Get the maximum amount in that can be spent via this trade for the given slippage tolerance\n * @param slippageTolerance tolerance of unfavorable slippage from the execution price of this trade\n */\n maximumAmountIn(slippageTolerance) {\n invariant2(!slippageTolerance.lessThan(ZERO), \"SLIPPAGE_TOLERANCE\");\n if (this.tradeType === TradeType.EXACT_INPUT) {\n return this.inputAmount;\n }\n const slippageAdjustedAmountIn = new Fraction(ONE).add(slippageTolerance).multiply(this.inputAmount.quotient).quotient;\n return CurrencyAmount.fromRawAmount(this.inputAmount.currency, slippageAdjustedAmountIn);\n }\n /**\n * Given a list of pairs, and a fixed amount in, returns the top `maxNumResults` trades that go from an input token\n * amount to an output token, making at most `maxHops` hops.\n * Note this does not consider aggregation, as routes are linear. It's possible a better route exists by splitting\n * the amount in among multiple routes.\n * @param pairs the pairs to consider in finding the best trade\n * @param nextAmountIn exact amount of input currency to spend\n * @param currencyOut the desired currency out\n * @param maxNumResults maximum number of results to return\n * @param maxHops maximum number of hops a returned trade can make, e.g. 1 hop goes through a single pair\n * @param currentPairs used in recursion; the current list of pairs\n * @param currencyAmountIn used in recursion; the original value of the currencyAmountIn parameter\n * @param bestTrades used in recursion; the current list of best trades\n */\n static bestTradeExactIn(pairs, currencyAmountIn, currencyOut, { maxNumResults = 3, maxHops = 3 } = {}, currentPairs = [], nextAmountIn = currencyAmountIn, bestTrades = []) {\n invariant2(pairs.length > 0, \"PAIRS\");\n invariant2(maxHops > 0, \"MAX_HOPS\");\n invariant2(currencyAmountIn === nextAmountIn || currentPairs.length > 0, \"INVALID_RECURSION\");\n const amountIn = nextAmountIn.wrapped;\n const tokenOut = currencyOut.wrapped;\n for (let i = 0; i < pairs.length; i++) {\n const pair = pairs[i];\n if (!pair.token0.equals(amountIn.currency) && !pair.token1.equals(amountIn.currency))\n continue;\n if (pair.reserve0.equalTo(ZERO) || pair.reserve1.equalTo(ZERO))\n continue;\n let amountOut;\n try {\n ;\n [amountOut] = pair.getOutputAmount(amountIn);\n } catch (error) {\n if (error.isInsufficientInputAmountError) {\n continue;\n }\n throw error;\n }\n if (amountOut.currency.equals(tokenOut)) {\n sortedInsert(\n bestTrades,\n new TradeV1(\n new RouteV1([...currentPairs, pair], currencyAmountIn.currency, currencyOut),\n currencyAmountIn,\n TradeType.EXACT_INPUT\n ),\n maxNumResults,\n tradeComparator\n );\n } else if (maxHops > 1 && pairs.length > 1) {\n const pairsExcludingThisPair = pairs.slice(0, i).concat(pairs.slice(i + 1, pairs.length));\n TradeV1.bestTradeExactIn(\n pairsExcludingThisPair,\n currencyAmountIn,\n currencyOut,\n {\n maxNumResults,\n maxHops: maxHops - 1\n },\n [...currentPairs, pair],\n amountOut,\n bestTrades\n );\n }\n }\n return bestTrades;\n }\n /**\n * Return the execution price after accounting for slippage tolerance\n * @param slippageTolerance the allowed tolerated slippage\n */\n worstExecutionPrice(slippageTolerance) {\n return new Price(\n this.inputAmount.currency,\n this.outputAmount.currency,\n this.maximumAmountIn(slippageTolerance).quotient,\n this.minimumAmountOut(slippageTolerance).quotient\n );\n }\n /**\n * similar to the above method but instead targets a fixed output amount\n * given a list of pairs, and a fixed amount out, returns the top `maxNumResults` trades that go from an input token\n * to an output token amount, making at most `maxHops` hops\n * note this does not consider aggregation, as routes are linear. it's possible a better route exists by splitting\n * the amount in among multiple routes.\n * @param pairs the pairs to consider in finding the best trade\n * @param currencyIn the currency to spend\n * @param nextAmountOut the exact amount of currency out\n * @param maxNumResults maximum number of results to return\n * @param maxHops maximum number of hops a returned trade can make, e.g. 1 hop goes through a single pair\n * @param currentPairs used in recursion; the current list of pairs\n * @param currencyAmountOut used in recursion; the original value of the currencyAmountOut parameter\n * @param bestTrades used in recursion; the current list of best trades\n */\n static bestTradeExactOut(pairs, currencyIn, currencyAmountOut, { maxNumResults = 3, maxHops = 3 } = {}, currentPairs = [], nextAmountOut = currencyAmountOut, bestTrades = []) {\n invariant2(pairs.length > 0, \"PAIRS\");\n invariant2(maxHops > 0, \"MAX_HOPS\");\n invariant2(currencyAmountOut === nextAmountOut || currentPairs.length > 0, \"INVALID_RECURSION\");\n const amountOut = nextAmountOut.wrapped;\n const tokenIn = currencyIn.wrapped;\n for (let i = 0; i < pairs.length; i++) {\n const pair = pairs[i];\n if (!pair.token0.equals(amountOut.currency) && !pair.token1.equals(amountOut.currency))\n continue;\n if (pair.reserve0.equalTo(ZERO) || pair.reserve1.equalTo(ZERO))\n continue;\n let amountIn;\n try {\n ;\n [amountIn] = pair.getInputAmount(amountOut);\n } catch (error) {\n if (error.isInsufficientReservesError) {\n continue;\n }\n throw error;\n }\n if (amountIn.currency.equals(tokenIn)) {\n sortedInsert(\n bestTrades,\n new TradeV1(\n new RouteV1([pair, ...currentPairs], currencyIn, currencyAmountOut.currency),\n currencyAmountOut,\n TradeType.EXACT_OUTPUT\n ),\n maxNumResults,\n tradeComparator\n );\n } else if (maxHops > 1 && pairs.length > 1) {\n const pairsExcludingThisPair = pairs.slice(0, i).concat(pairs.slice(i + 1, pairs.length));\n TradeV1.bestTradeExactOut(\n pairsExcludingThisPair,\n currencyIn,\n currencyAmountOut,\n {\n maxNumResults,\n maxHops: maxHops - 1\n },\n [pair, ...currentPairs],\n amountIn,\n bestTrades\n );\n }\n }\n return bestTrades;\n }\n};\nvar TradeV2 = class {\n /**\n * Constructs an exact in trade with the given amount in and route\n * @param route route of the exact in trade\n * @param amountIn the amount being passed in\n */\n static exactIn(route, amountIn) {\n return new TradeV2(route, amountIn, TradeType.EXACT_INPUT);\n }\n /**\n * Constructs an exact out trade with the given amount out and route\n * @param route route of the exact out trade\n * @param amountOut the amount returned by the trade\n */\n static exactOut(route, amountOut) {\n return new TradeV2(route, amountOut, TradeType.EXACT_OUTPUT);\n }\n constructor(route, amount, tradeType) {\n this.route = route;\n this.tradeType = tradeType;\n const tokenAmounts = new Array(route.path.length);\n if (tradeType === TradeType.EXACT_INPUT) {\n invariant2(amount.currency.equals(route.input), \"INPUT\");\n tokenAmounts[0] = amount.wrapped;\n for (let i = 0; i < route.path.length - 1; i++) {\n const pair = route.pairs[i];\n const [outputAmount] = pair.getOutputAmount(tokenAmounts[i]);\n tokenAmounts[i + 1] = outputAmount;\n }\n this.inputAmount = CurrencyAmount.fromFractionalAmount(route.input, amount.numerator, amount.denominator);\n this.outputAmount = CurrencyAmount.fromFractionalAmount(\n route.output,\n tokenAmounts[tokenAmounts.length - 1].numerator,\n tokenAmounts[tokenAmounts.length - 1].denominator\n );\n } else {\n invariant2(amount.currency.equals(route.output), \"OUTPUT\");\n tokenAmounts[tokenAmounts.length - 1] = amount.wrapped;\n for (let i = route.path.length - 1; i > 0; i--) {\n const pair = route.pairs[i - 1];\n const [inputAmount] = pair.getInputAmount(tokenAmounts[i]);\n tokenAmounts[i - 1] = inputAmount;\n }\n this.inputAmount = CurrencyAmount.fromFractionalAmount(\n route.input,\n tokenAmounts[0].numerator,\n tokenAmounts[0].denominator\n );\n this.outputAmount = CurrencyAmount.fromFractionalAmount(route.output, amount.numerator, amount.denominator);\n }\n this.executionPrice = new Price(\n this.inputAmount.currency,\n this.outputAmount.currency,\n this.inputAmount.quotient,\n this.outputAmount.quotient\n );\n this.priceImpact = computePriceImpact(route.midPrice, this.inputAmount, this.outputAmount);\n }\n /**\n * Get the minimum amount that must be received from this trade for the given slippage tolerance\n * @param slippageTolerance tolerance of unfavorable slippage from the execution price of this trade\n */\n minimumAmountOut(slippageTolerance) {\n invariant2(!slippageTolerance.lessThan(ZERO), \"SLIPPAGE_TOLERANCE\");\n if (this.tradeType === TradeType.EXACT_OUTPUT) {\n return this.outputAmount;\n }\n const slippageAdjustedAmountOut = new Fraction(ONE).add(slippageTolerance).invert().multiply(this.outputAmount.quotient).quotient;\n return CurrencyAmount.fromRawAmount(this.outputAmount.currency, slippageAdjustedAmountOut);\n }\n /**\n * Get the maximum amount in that can be spent via this trade for the given slippage tolerance\n * @param slippageTolerance tolerance of unfavorable slippage from the execution price of this trade\n */\n maximumAmountIn(slippageTolerance) {\n invariant2(!slippageTolerance.lessThan(ZERO), \"SLIPPAGE_TOLERANCE\");\n if (this.tradeType === TradeType.EXACT_INPUT) {\n return this.inputAmount;\n }\n const slippageAdjustedAmountIn = new Fraction(ONE).add(slippageTolerance).multiply(this.inputAmount.quotient).quotient;\n return CurrencyAmount.fromRawAmount(this.inputAmount.currency, slippageAdjustedAmountIn);\n }\n /**\n * Given a list of pairs, and a fixed amount in, returns the top `maxNumResults` trades that go from an input token\n * amount to an output token, making at most `maxHops` hops.\n * Note this does not consider aggregation, as routes are linear. It's possible a better route exists by splitting\n * the amount in among multiple routes.\n * @param pairs the pairs to consider in finding the best trade\n * @param nextAmountIn exact amount of input currency to spend\n * @param currencyOut the desired currency out\n * @param maxNumResults maximum number of results to return\n * @param maxHops maximum number of hops a returned trade can make, e.g. 1 hop goes through a single pair\n * @param currentPairs used in recursion; the current list of pairs\n * @param currencyAmountIn used in recursion; the original value of the currencyAmountIn parameter\n * @param bestTrades used in recursion; the current list of best trades\n */\n static bestTradeExactIn(pairs, currencyAmountIn, currencyOut, { maxNumResults = 3, maxHops = 3 } = {}, currentPairs = [], nextAmountIn = currencyAmountIn, bestTrades = []) {\n invariant2(pairs.length > 0, \"PAIRS\");\n invariant2(maxHops > 0, \"MAX_HOPS\");\n invariant2(currencyAmountIn === nextAmountIn || currentPairs.length > 0, \"INVALID_RECURSION\");\n const amountIn = nextAmountIn.wrapped;\n const tokenOut = currencyOut.wrapped;\n for (let i = 0; i < pairs.length; i++) {\n const pair = pairs[i];\n if (!pair.token0.equals(amountIn.currency) && !pair.token1.equals(amountIn.currency))\n continue;\n if (pair.reserve0.equalTo(ZERO) || pair.reserve1.equalTo(ZERO))\n continue;\n let amountOut;\n try {\n ;\n [amountOut] = pair.getOutputAmount(amountIn);\n } catch (error) {\n if (error.isInsufficientInputAmountError) {\n continue;\n }\n throw error;\n }\n if (amountOut.currency.equals(tokenOut)) {\n sortedInsert(\n bestTrades,\n new TradeV2(\n new RouteV2([...currentPairs, pair], currencyAmountIn.currency, currencyOut),\n currencyAmountIn,\n TradeType.EXACT_INPUT\n ),\n maxNumResults,\n tradeComparator\n );\n } else if (maxHops > 1 && pairs.length > 1) {\n const pairsExcludingThisPair = pairs.slice(0, i).concat(pairs.slice(i + 1, pairs.length));\n TradeV2.bestTradeExactIn(\n pairsExcludingThisPair,\n currencyAmountIn,\n currencyOut,\n {\n maxNumResults,\n maxHops: maxHops - 1\n },\n [...currentPairs, pair],\n amountOut,\n bestTrades\n );\n }\n }\n return bestTrades;\n }\n /**\n * Return the execution price after accounting for slippage tolerance\n * @param slippageTolerance the allowed tolerated slippage\n */\n worstExecutionPrice(slippageTolerance) {\n return new Price(\n this.inputAmount.currency,\n this.outputAmount.currency,\n this.maximumAmountIn(slippageTolerance).quotient,\n this.minimumAmountOut(slippageTolerance).quotient\n );\n }\n /**\n * similar to the above method but instead targets a fixed output amount\n * given a list of pairs, and a fixed amount out, returns the top `maxNumResults` trades that go from an input token\n * to an output token amount, making at most `maxHops` hops\n * note this does not consider aggregation, as routes are linear. it's possible a better route exists by splitting\n * the amount in among multiple routes.\n * @param pairs the pairs to consider in finding the best trade\n * @param currencyIn the currency to spend\n * @param nextAmountOut the exact amount of currency out\n * @param maxNumResults maximum number of results to return\n * @param maxHops maximum number of hops a returned trade can make, e.g. 1 hop goes through a single pair\n * @param currentPairs used in recursion; the current list of pairs\n * @param currencyAmountOut used in recursion; the original value of the currencyAmountOut parameter\n * @param bestTrades used in recursion; the current list of best trades\n */\n static bestTradeExactOut(pairs, currencyIn, currencyAmountOut, { maxNumResults = 3, maxHops = 3 } = {}, currentPairs = [], nextAmountOut = currencyAmountOut, bestTrades = []) {\n invariant2(pairs.length > 0, \"PAIRS\");\n invariant2(maxHops > 0, \"MAX_HOPS\");\n invariant2(currencyAmountOut === nextAmountOut || currentPairs.length > 0, \"INVALID_RECURSION\");\n const amountOut = nextAmountOut.wrapped;\n const tokenIn = currencyIn.wrapped;\n for (let i = 0; i < pairs.length; i++) {\n const pair = pairs[i];\n if (!pair.token0.equals(amountOut.currency) && !pair.token1.equals(amountOut.currency))\n continue;\n if (pair.reserve0.equalTo(ZERO) || pair.reserve1.equalTo(ZERO))\n continue;\n let amountIn;\n try {\n ;\n [amountIn] = pair.getInputAmount(amountOut);\n } catch (error) {\n if (error.isInsufficientReservesError) {\n continue;\n }\n throw error;\n }\n if (amountIn.currency.equals(tokenIn)) {\n sortedInsert(\n bestTrades,\n new TradeV2(\n new RouteV2([pair, ...currentPairs], currencyIn, currencyAmountOut.currency),\n currencyAmountOut,\n TradeType.EXACT_OUTPUT\n ),\n maxNumResults,\n tradeComparator\n );\n } else if (maxHops > 1 && pairs.length > 1) {\n const pairsExcludingThisPair = pairs.slice(0, i).concat(pairs.slice(i + 1, pairs.length));\n TradeV2.bestTradeExactOut(\n pairsExcludingThisPair,\n currencyIn,\n currencyAmountOut,\n {\n maxNumResults,\n maxHops: maxHops - 1\n },\n [pair, ...currentPairs],\n amountIn,\n bestTrades\n );\n }\n }\n return bestTrades;\n }\n};\nvar _Native = class extends NativeCurrency {\n constructor({\n chainId,\n decimals,\n name,\n symbol\n }) {\n super(chainId, decimals, symbol, name);\n }\n get wrapped() {\n const wnative = WNATIVE[this.chainId];\n invariant2(!!wnative, \"WRAPPED\");\n return wnative;\n }\n static onChain(chainId) {\n if (chainId in this.cache) {\n return this.cache[chainId];\n }\n invariant2(!!NATIVE[chainId], \"NATIVE_CURRENCY\");\n const { decimals, name, symbol } = NATIVE[chainId];\n return this.cache[chainId] = new _Native({ chainId, decimals, symbol, name });\n }\n equals(other) {\n return other.isNative && other.chainId === this.chainId;\n }\n};\nvar Native = _Native;\nNative.cache = {};\nfunction toHex(currencyAmount) {\n return `0x${currencyAmount.quotient.toString(16)}`;\n}\nvar ZERO_HEX = \"0x0\";\nvar RouterV1 = class {\n /**\n * Cannot be constructed.\n */\n constructor() {\n }\n /**\n * Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given trade.\n * @param trade to produce call parameters for\n * @param options options for the call parameters\n */\n static swapCallParameters(trade, options) {\n const etherIn = trade.inputAmount.currency.isNative;\n const etherOut = trade.outputAmount.currency.isNative;\n invariant2(!(etherIn && etherOut), \"ETHER_IN_OUT\");\n invariant2(!(\"ttl\" in options) || options.ttl > 0, \"TTL\");\n const to = validateAndParseAddress(options.recipient);\n const amountIn = toHex(trade.maximumAmountIn(options.allowedSlippage));\n const amountOut = toHex(trade.minimumAmountOut(options.allowedSlippage));\n const path = trade.route.path.map((token) => token.address);\n const deadline = \"ttl\" in options ? `0x${(Math.floor(( new Date()).getTime() / 1e3) + options.ttl).toString(16)}` : `0x${options.deadline.toString(16)}`;\n const useFeeOnTransfer = Boolean(options.feeOnTransfer);\n let methodName;\n let args;\n let value;\n switch (trade.tradeType) {\n case TradeType.EXACT_INPUT:\n if (etherIn) {\n methodName = useFeeOnTransfer ? \"swapExactETHForTokensSupportingFeeOnTransferTokens\" : \"swapExactETHForTokens\";\n args = [amountOut, path, to, deadline];\n value = amountIn;\n } else if (etherOut) {\n methodName = useFeeOnTransfer ? \"swapExactTokensForETHSupportingFeeOnTransferTokens\" : \"swapExactTokensForETH\";\n args = [amountIn, amountOut, path, to, deadline];\n value = ZERO_HEX;\n } else {\n methodName = useFeeOnTransfer ? \"swapExactTokensForTokensSupportingFeeOnTransferTokens\" : \"swapExactTokensForTokens\";\n args = [amountIn, amountOut, path, to, deadline];\n value = ZERO_HEX;\n }\n break;\n case TradeType.EXACT_OUTPUT:\n invariant2(!useFeeOnTransfer, \"EXACT_OUT_FOT\");\n if (etherIn) {\n methodName = \"swapETHForExactTokens\";\n args = [amountOut, path, to, deadline];\n value = amountIn;\n } else if (etherOut) {\n methodName = \"swapTokensForExactETH\";\n args = [amountOut, amountIn, path, to, deadline];\n value = ZERO_HEX;\n } else {\n methodName = \"swapTokensForExactTokens\";\n args = [amountOut, amountIn, path, to, deadline];\n value = ZERO_HEX;\n }\n break;\n }\n return {\n methodName,\n args,\n value\n };\n }\n};\nvar RouterV2 = class {\n /**\n * Cannot be constructed.\n */\n constructor() {\n }\n /**\n * Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given trade.\n * @param trade to produce call parameters for\n * @param options options for the call parameters\n */\n static swapCallParameters(trade, options) {\n const etherIn = trade.inputAmount.currency.isNative;\n const etherOut = trade.outputAmount.currency.isNative;\n invariant2(!(etherIn && etherOut), \"ETHER_IN_OUT\");\n invariant2(!(\"ttl\" in options) || options.ttl > 0, \"TTL\");\n const to = validateAndParseAddress(options.recipient);\n const amountIn = toHex(trade.maximumAmountIn(options.allowedSlippage));\n const amountOut = toHex(trade.minimumAmountOut(options.allowedSlippage));\n const path = trade.route.path.map((token) => token.address);\n const deadline = \"ttl\" in options ? `0x${(Math.floor(( new Date()).getTime() / 1e3) + options.ttl).toString(16)}` : `0x${options.deadline.toString(16)}`;\n const useFeeOnTransfer = Boolean(options.feeOnTransfer);\n let methodName;\n let args;\n let value;\n switch (trade.tradeType) {\n case TradeType.EXACT_INPUT:\n if (etherIn) {\n methodName = useFeeOnTransfer ? \"swapExactETHForTokensSupportingFeeOnTransferTokens\" : \"swapExactETHForTokens\";\n args = [amountOut, path, to, deadline];\n value = amountIn;\n } else if (etherOut) {\n methodName = useFeeOnTransfer ? \"swapExactTokensForETHSupportingFeeOnTransferTokens\" : \"swapExactTokensForETH\";\n args = [amountIn, amountOut, path, to, deadline];\n value = ZERO_HEX;\n } else {\n methodName = useFeeOnTransfer ? \"swapExactTokensForTokensSupportingFeeOnTransferTokens\" : \"swapExactTokensForTokens\";\n args = [amountIn, amountOut, path, to, deadline];\n value = ZERO_HEX;\n }\n break;\n case TradeType.EXACT_OUTPUT:\n invariant2(!useFeeOnTransfer, \"EXACT_OUT_FOT\");\n if (etherIn) {\n methodName = \"swapETHForExactTokens\";\n args = [amountOut, path, to, deadline];\n value = amountIn;\n } else if (etherOut) {\n methodName = \"swapTokensForExactETH\";\n args = [amountOut, amountIn, path, to, deadline];\n value = ZERO_HEX;\n } else {\n methodName = \"swapTokensForExactTokens\";\n args = [amountOut, amountIn, path, to, deadline];\n value = ZERO_HEX;\n }\n break;\n }\n return {\n methodName,\n args,\n value\n };\n }\n};\nvar _Ether = class extends NativeCurrency {\n constructor(chainId) {\n super(chainId, 18, \"PLS\", \"Pulse\");\n }\n get wrapped() {\n const wpls = WPLS[this.chainId];\n invariant2(!!wpls, \"WRAPPED\");\n return wpls;\n }\n static onChain(chainId) {\n if (!this._etherCache[chainId]) {\n this._etherCache[chainId] = new _Ether(chainId);\n }\n return this._etherCache[chainId];\n }\n equals(other) {\n return other.isNative && other.chainId === this.chainId;\n }\n};\nvar Ether = _Ether;\nEther._etherCache = {};\n\n// src/abis/ERC20.ts\nvar erc20ABI = [\n {\n constant: true,\n inputs: [],\n name: \"decimals\",\n outputs: [{ name: \"\", type: \"uint8\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\"\n },\n {\n constant: true,\n inputs: [{ name: \"\", type: \"address\" }],\n name: \"balanceOf\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\"\n }\n];\n\n// src/abis/IPulseXPair.ts\nvar IPulseXPair = [\n {\n \"inputs\": [],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount0\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount1\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"senderOrigin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Burn\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount0\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount1\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"senderOrigin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Mint\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount0In\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount1In\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount0Out\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount1Out\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Swap\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint112\",\n \"name\": \"reserve0\",\n \"type\": \"uint112\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint112\",\n \"name\": \"reserve1\",\n \"type\": \"uint112\"\n }\n ],\n \"name\": \"Sync\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"DOMAIN_SEPARATOR\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"MINIMUM_LIQUIDITY\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"PERMIT_TYPEHASH\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"senderOrigin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"burn\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount0\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount1\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"factory\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"getReserves\",\n \"outputs\": [\n {\n \"internalType\": \"uint112\",\n \"name\": \"_reserve0\",\n \"type\": \"uint112\"\n },\n {\n \"internalType\": \"uint112\",\n \"name\": \"_reserve1\",\n \"type\": \"uint112\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"_blockTimestampLast\",\n \"type\": \"uint32\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_token0\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_token1\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"kLast\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"senderOrigin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"mint\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"liquidity\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"nonces\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"deadline\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"permit\",\n \"outputs\": [],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"price0CumulativeLast\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"price1CumulativeLast\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"skim\",\n \"outputs\": [],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount0Out\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount1Out\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"swap\",\n \"outputs\": [],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [],\n \"name\": \"sync\",\n \"outputs\": [],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"token0\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"token1\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n];\n\n// src/fetcher.ts\nvar TOKEN_DECIMALS_CACHE = {\n [ChainId.PULSECHAIN]: {}\n};\nvar pulsechainClient = createPublicClient({ chain: pulsechain, transport: http() });\nvar pulsechainClientTestnetClient = createPublicClient({ chain: pulsechainTestnet, transport: http() });\nvar getDefaultClient = (chainId) => {\n switch (chainId) {\n case ChainId.PULSECHAIN:\n return pulsechainClient;\n case ChainId.PULSECHAIN_TESTNET:\n return pulsechainClientTestnetClient;\n default:\n return pulsechainClient;\n }\n};\nvar FetcherV1 = class {\n /**\n * Cannot be constructed.\n */\n // eslint-disable-next-line no-useless-constructor,@typescript-eslint/no-empty-function\n constructor() {\n }\n /**\n * Fetch information for a given token on the given chain, using the given ethers provider.\n * @param chainId chain of the token\n * @param address address of the token on the chain\n * @param provider provider used to fetch the token\n * @param symbol symbol of the token\n * @param name optional name of the token\n */\n static async fetchTokenData(chainId, address, publicClient = getDefaultClient(chainId), symbol, name) {\n const erc20 = getContract({\n abi: erc20ABI,\n address,\n publicClient\n });\n const parsedDecimals = typeof TOKEN_DECIMALS_CACHE?.[chainId]?.[address] === \"number\" ? TOKEN_DECIMALS_CACHE[chainId][address] : await erc20.read.decimals().then((decimals) => {\n TOKEN_DECIMALS_CACHE = {\n ...TOKEN_DECIMALS_CACHE,\n [chainId]: {\n ...TOKEN_DECIMALS_CACHE?.[chainId],\n [address]: decimals\n }\n };\n return decimals;\n });\n return new Token(chainId, address, parsedDecimals, symbol, name);\n }\n /**\n * Fetches information about a pair and constructs a pair from the given two tokens.\n * @param tokenA first token\n * @param tokenB second token\n * @param provider the provider to use to fetch the data\n */\n static async fetchPairData(tokenA, tokenB, publicClient = getDefaultClient(tokenA.chainId)) {\n invariant2(tokenA.chainId === tokenB.chainId, \"CHAIN_ID\");\n const address = PairV1.getAddress(tokenA, tokenB);\n const pairContract = getContract({\n abi: IPulseXPair,\n address,\n publicClient\n });\n const [reserves0, reserves1] = await pairContract.read.getReserves();\n const balances = tokenA.sortsBefore(tokenB) ? [reserves0, reserves1] : [reserves1, reserves0];\n return new PairV1(\n CurrencyAmount.fromRawAmount(tokenA, balances[0]),\n CurrencyAmount.fromRawAmount(tokenB, balances[1])\n );\n }\n};\nvar FetcherV2 = class {\n /**\n * Cannot be constructed.\n */\n // eslint-disable-next-line no-useless-constructor,@typescript-eslint/no-empty-function\n constructor() {\n }\n /**\n * Fetch information for a given token on the given chain, using the given ethers provider.\n * @param chainId chain of the token\n * @param address address of the token on the chain\n * @param provider provider used to fetch the token\n * @param symbol symbol of the token\n * @param name optional name of the token\n */\n static async fetchTokenData(chainId, address, publicClient = getDefaultClient(chainId), symbol, name) {\n const erc20 = getContract({\n abi: erc20ABI,\n address,\n publicClient\n });\n const parsedDecimals = typeof TOKEN_DECIMALS_CACHE?.[chainId]?.[address] === \"number\" ? TOKEN_DECIMALS_CACHE[chainId][address] : await erc20.read.decimals().then((decimals) => {\n TOKEN_DECIMALS_CACHE = {\n ...TOKEN_DECIMALS_CACHE,\n [chainId]: {\n ...TOKEN_DECIMALS_CACHE?.[chainId],\n [address]: decimals\n }\n };\n return decimals;\n });\n return new Token(chainId, address, parsedDecimals, symbol, name);\n }\n /**\n * Fetches information about a pair and constructs a pair from the given two tokens.\n * @param tokenA first token\n * @param tokenB second token\n * @param provider the provider to use to fetch the data\n */\n static async fetchPairData(tokenA, tokenB, publicClient = getDefaultClient(tokenA.chainId)) {\n invariant2(tokenA.chainId === tokenB.chainId, \"CHAIN_ID\");\n const address = PairV2.getAddress(tokenA, tokenB);\n const pairContract = getContract({\n abi: IPulseXPair,\n address,\n publicClient\n });\n const [reserves0, reserves1] = await pairContract.read.getReserves();\n const balances = tokenA.sortsBefore(tokenB) ? [reserves0, reserves1] : [reserves1, reserves0];\n return new PairV2(\n CurrencyAmount.fromRawAmount(tokenA, balances[0]),\n CurrencyAmount.fromRawAmount(tokenB, balances[1])\n );\n }\n};\n\nexport { ERC20Token, Ether, FACTORY_ADDRESS_MAP_V1, FACTORY_ADDRESS_MAP_V2, FACTORY_ADDRESS_V1, FACTORY_ADDRESS_V2, FetcherV1, FetcherV2, INIT_CODE_HASH_MAP_V1, INIT_CODE_HASH_MAP_V2, INIT_CODE_HASH_V1, INIT_CODE_HASH_V2, IPulseXPair, NATIVE, Native, ONE_HUNDRED_PERCENT, PairV1, PairV2, RouteV1, RouteV2, RouterV1, RouterV2, TESTNET_FACTORY_ADDRESS_V1, TESTNET_FACTORY_ADDRESS_V2, TradeV1, TradeV2, WNATIVE, WPLS, ZERO_PERCENT, computePairAddress, inputOutputComparator, isTradeBetter, tradeComparator, validateAndParseAddress };\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\n\nexport {\n __spreadValues,\n __spreadProps,\n __async\n};\n","import { ChainId } from '@pulsex/chains';\nimport { ERC20Token, WPLS } from '@pulsex/sdk';\n\n// src/common.ts\nvar PLSX_PULSECHAIN = new ERC20Token(\n ChainId.PULSECHAIN,\n \"0x95B303987A60C71504D99Aa1b13B4DA07b0790ab\",\n 18,\n \"PLSX\",\n \"PulseX\",\n \"https://pulsex.com/\"\n);\nvar PLSX_PULSECHAIN_TESTNET = new ERC20Token(\n ChainId.PULSECHAIN_TESTNET,\n \"0x8a810ea8B121d08342E9e7696f4a9915cBE494B7\",\n 18,\n \"PLSX\",\n \"PulseX\",\n \"https://pulsex.com/\"\n);\nvar INC_PULSECHAIN = new ERC20Token(\n ChainId.PULSECHAIN,\n \"0x2fa878Ab3F87CC1C9737Fc071108F904c0B0C95d\",\n 18,\n \"INC\",\n \"Incentive\"\n);\nvar INC_PULSECHAIN_TESTNET = new ERC20Token(\n ChainId.PULSECHAIN_TESTNET,\n \"0x6eFAfcb715F385c71d8AF763E8478FeEA6faDF63\",\n 18,\n \"INC\",\n \"Incentive\"\n);\nvar eDAI_PULSECHAIN = new ERC20Token(\n ChainId.PULSECHAIN,\n \"0xefD766cCb38EaF1dfd701853BFCe31359239F305\",\n 18,\n \"DAI\",\n \"DAI from Ethereum\"\n);\nvar tDAI_PULSECHAIN_TESTNET = new ERC20Token(\n ChainId.PULSECHAIN_TESTNET,\n \"0x826e4e896CC2f5B371Cd7Bb0bd929DB3e3DB67c0\",\n 18,\n \"tDAI\",\n \"DAI Mock\"\n);\nvar PLSX = {\n [ChainId.PULSECHAIN]: PLSX_PULSECHAIN,\n [ChainId.PULSECHAIN_TESTNET]: PLSX_PULSECHAIN_TESTNET\n};\nvar STABLE_COIN = {\n [ChainId.PULSECHAIN]: eDAI_PULSECHAIN,\n [ChainId.PULSECHAIN_TESTNET]: tDAI_PULSECHAIN_TESTNET\n};\nvar INC = {\n [ChainId.PULSECHAIN]: INC_PULSECHAIN,\n [ChainId.PULSECHAIN_TESTNET]: INC_PULSECHAIN_TESTNET\n};\nvar EMPTY_LIST = {\n [ChainId.PULSECHAIN]: {},\n [ChainId.PULSECHAIN_TESTNET]: {}\n};\nfunction serializeTokens(unserializedTokens) {\n const serializedTokens = Object.keys(unserializedTokens).reduce((accum, key) => {\n return { ...accum, [key]: unserializedTokens[key].serialize };\n }, {});\n return serializedTokens;\n}\nvar plsTokens = {\n wpls: WPLS[ChainId.PULSECHAIN],\n plsx: PLSX_PULSECHAIN,\n // pls here points to the wpls contract. Wherever the currency PLS is required, conditional checks for the symbol 'PLS' can be used\n pls: new ERC20Token(\n ChainId.PULSECHAIN,\n \"0xA1077a294dDE1B09bB078844df40758a5D0f9a27\",\n 18,\n \"PLS\",\n \"PLS\",\n \"https://www.pulsechain.com/\"\n ),\n inc: new ERC20Token(\n ChainId.PULSECHAIN,\n \"0x2fa878Ab3F87CC1C9737Fc071108F904c0B0C95d\",\n 18,\n \"INC\",\n \"Incentive\",\n \"\"\n ),\n hex: new ERC20Token(\n ChainId.PULSECHAIN,\n \"0x2b591e99afE9f32eAA6214f7B7629768c40Eeb39\",\n 8,\n \"HEX\",\n \"HEX\",\n \"https://hex.com\"\n ),\n dai: new ERC20Token(\n ChainId.PULSECHAIN,\n \"0xefD766cCb38EaF1dfd701853BFCe31359239F305\",\n 18,\n \"DAI\",\n \"DAI from Ethereum\",\n \"\"\n ),\n usdc: new ERC20Token(\n ChainId.PULSECHAIN,\n \"0x15D38573d2feeb82e7ad5187aB8c1D52810B1f07\",\n 6,\n \"USDC\",\n \"USDC from Ethereum\",\n \"\"\n ),\n usdt: new ERC20Token(\n ChainId.PULSECHAIN,\n \"0x0Cb6F5a34ad42ec934882A05265A7d5F59b51A2f\",\n 6,\n \"USDT\",\n \"USDT from Ethereum\",\n \"\"\n ),\n ehex: new ERC20Token(\n ChainId.PULSECHAIN,\n \"0x57fde0a71132198BBeC939B98976993d8D89D225\",\n 8,\n \"HEX\",\n \"HEX from Ethereum\",\n \"\"\n ),\n weth: new ERC20Token(\n ChainId.PULSECHAIN,\n \"0x02DcdD04e3F455D838cd1249292C58f3B79e3C3C\",\n 18,\n \"WETH\",\n \"WETH from Ethereum\",\n \"\"\n ),\n wbtc: new ERC20Token(\n ChainId.PULSECHAIN,\n \"0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599\",\n 8,\n \"WBTC\",\n \"Wrapped BTC\",\n \"\"\n ),\n ewbtc: new ERC20Token(\n ChainId.PULSECHAIN,\n \"0xb17D901469B9208B17d916112988A3FeD19b5cA1\",\n 8,\n \"WBTC\",\n \"Wrapped BTC from Ethereum\",\n \"\"\n ),\n epepe: new ERC20Token(\n ChainId.PULSECHAIN,\n \"0x4d3AeA379b7689E0Cb722826C909Fab39E54123d\",\n 18,\n \"PEPE\",\n \"Pepe from Ethereum\",\n \"\"\n ),\n pepe: new ERC20Token(\n ChainId.PULSECHAIN,\n \"0x6982508145454Ce325dDbE47a25d4ec3d2311933\",\n 18,\n \"PEPE\",\n \"Pepe\",\n \"\"\n ),\n link: new ERC20Token(\n ChainId.PULSECHAIN,\n \"0x514910771AF9Ca656af840dff83E8264EcF986CA\",\n 18,\n \"LINK\",\n \"ChainLink Token\",\n \"\"\n ),\n elink: new ERC20Token(\n ChainId.PULSECHAIN,\n \"0xEe2D275Dbb79c7871F8C6eB2A4D0687dD85409D1\",\n 18,\n \"LINK\",\n \"ChainLink Token from Ethereum\",\n \"\"\n ),\n uni: new ERC20Token(\n ChainId.PULSECHAIN,\n \"0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984\",\n 18,\n \"UNI\",\n \"Uniswap\",\n \"\"\n ),\n euni: new ERC20Token(\n ChainId.PULSECHAIN,\n \"0x3f105121A10247DE9a92e818554DD5Fcd2063AE7\",\n 18,\n \"UNI\",\n \"Uniswap from Ethereum\",\n \"\"\n )\n};\nvar plsTestnetTokens = {\n wpls: WPLS[ChainId.PULSECHAIN_TESTNET],\n plsx: PLSX_PULSECHAIN_TESTNET,\n // pls here points to the wpls contract. Wherever the currency tPLS is required, conditional checks for the symbol 'tPLS' can be used\n pls: new ERC20Token(\n ChainId.PULSECHAIN_TESTNET,\n \"0x70499adEBB11Efd915E3b69E700c331778628707\",\n 18,\n \"tPLS\",\n \"tPLS\",\n \"https://www.pulsechain.com/\"\n ),\n inc: new ERC20Token(\n ChainId.PULSECHAIN_TESTNET,\n \"0x6eFAfcb715F385c71d8AF763E8478FeEA6faDF63\",\n 18,\n \"INC\",\n \"Incentive\",\n \"\"\n ),\n hex: new ERC20Token(\n ChainId.PULSECHAIN_TESTNET,\n \"0x2b591e99afE9f32eAA6214f7B7629768c40Eeb39\",\n 18,\n \"HEX\",\n \"HEX\",\n \"https://hex.com\"\n ),\n dai: new ERC20Token(\n ChainId.PULSECHAIN_TESTNET,\n \"0x826e4e896CC2f5B371Cd7Bb0bd929DB3e3DB67c0\",\n 18,\n \"tDAI\",\n \"DAI Mock\",\n \"\"\n )\n};\n\nexport { EMPTY_LIST, INC, INC_PULSECHAIN, INC_PULSECHAIN_TESTNET, PLSX, PLSX_PULSECHAIN, PLSX_PULSECHAIN_TESTNET, STABLE_COIN, eDAI_PULSECHAIN, plsTestnetTokens, plsTokens, serializeTokens, tDAI_PULSECHAIN_TESTNET };\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + {\"79\":\"cd6807c9\",\"112\":\"23af67ca\",\"135\":\"c55305ba\",\"180\":\"a14d9a62\",\"249\":\"1cb29aff\",\"337\":\"86548042\",\"394\":\"43efb39c\",\"440\":\"acbdad60\",\"609\":\"b17769e7\",\"645\":\"0d533ecf\",\"711\":\"1c1a1503\",\"725\":\"807fee3e\",\"802\":\"e792a02f\",\"934\":\"f4f930b6\"}[chunkId] + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"web:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"./\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkweb\"] = self[\"webpackChunkweb\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [70,781,130,667], () => (__webpack_require__(32273)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["logged","getFarmConfig","async","concat","chainId","default","filter","f","pid","error","console","getStableConfig","getFarmsPriceHelperLpFiles","ChainId","PULSECHAIN","FarmsPLSPriceHelper","PULSECHAIN_TESTNET","FarmsPLSTestnetPriceHelper","value","ref","useRef","useEffect","current","useLastUpdated","lastUpdated","setStateLastUpdated","useState","Date","now","previousLastUpdated","usePreviousValue","setLastUpdated","useCallback","isWindowVisible","document","visibilityState","useIsWindowVisible","isVisible","setIsVisible","handleVisibilityChange","addEventListener","removeEventListener","useDebounce","delay","debouncedValue","setDebouncedValue","handler","setTimeout","clearTimeout","uriToHttp","uri","_uri$match","_uri$match2","split","toLowerCase","substring","hash","match","name","useHttpLocations","useMemo","preloadImageMap","Map","useIsomorphicEffect","window","useLayoutEffect","useIntersectionObserver","observerRefElement","setObserverRefElement","intersectionObserverRef","isIntersecting","setIsIntersecting","IntersectionObserver","checkObserverIsIntersecting","_ref","entry","rootMargin","threshold","observe","disconnect","observerRef","useDelayedUnmount","isMounted","delayTime","shouldRender","setShouldRender","timeoutId","useTheme","resolvedTheme","setTheme","useNextTheme","theme","useContext","StyledThemeContext","handleSwitchTheme","themeValue","Cookie","set","domain","err","isDark","isUndefinedOrNull","undefined","EN","locale","language","code","languages","Object","values","publicUrl","process","NEXT_PUBLIC_APEX_URL","LS_KEY","fetchLocale","response","fetch","ok","json","statusText","getLanguageCodeFromLS","localStorage","getItem","initialState","isFetching","currentLanguage","includesVariableRegex","RegExp","translatedTextIncludesVariable","memoize","translatedText","getRegExpForDataKey","dataKey","languageMap","LanguageContext","createContext","LanguageProvider","children","refresh","state","setState","codeFromStorage","currentLocale","prevState","fetchInitialLocales","setLanguage","has","_localStorage2","setItem","_localStorage","translate","key","data","_languageMap$get","translationSet","get","reduce","omitBy","result","dataValue","replace","toString","providerValue","t","_jsx","Provider","useTranslation","languageContext","Error","baseColors","white","failure","failure33","primary","primary0f","primary3D","primaryBright","primaryDark","success","success19","warning","warning2D","warning33","additionalColors","binance","overlay","gold","silver","bronze","lightColors","secondary","secondary80","background","backgroundDisabled","backgroundAlt","backgroundAlt2","cardBorder","contrast","dropdown","dropdownDeep","invertedContrast","input","inputSecondary","tertiary","text","text99","textDisabled","textSubtle","disabled","gradientBubblegum","gradientInverseBubblegum","gradientCardHeader","gradientBlue","gradientViolet","gradientVioletAlt","gradientGold","gradientBold","darkColors","vars","colors","light","dark","fonts","normal","mono","space","borderWidths","radii","small","card","circle","fontSizes","shadows","level1","active","danger","focus","inset","tooltip","breakpoints","xs","sm","md","lg","xl","xxl","mediaQueries","makeMediaQuery","keys","breakpoint","styles","length","article","aside","button","details","figcaption","figure","footer","header","hgroup","menu","nav","section","textarea","ul","ol","blockquote","q","body","table","mark","select","sprinkles","x","conditions","defaultCondition","conditionNames","responsiveArray","borderLeftRadius","mappings","borderRightRadius","borderTopRadius","borderBottomRadius","mt","mb","m","ml","mr","marginX","mx","marginY","my","pl","pr","pt","pb","p","paddingX","px","paddingY","py","size","display","block","defaultClass","flex","grid","inline","none","flexDirection","column","row","alignItems","center","end","baseLine","inherit","start","stretch","alignSelf","flexWrap","wrap","nowrap","flexGrow","overflow","auto","hidden","scroll","unset","overflowY","overflowX","position","absolute","fixed","relative","sticky","textAlign","left","right","justifyContent","justifyItems","justifySelf","height","screenSm","screenMd","screenLg","screenXl","marginBottom","marginLeft","marginRight","marginTop","margin","padding","maxHeight","maxWidth","minHeight","minWidth","paddingBottom","paddingLeft","paddingRight","paddingTop","fontSize","initial","boxShadow","width","zIndex","ribbon","modal","borderTop","borderRadius","borderTopLeftRadius","borderBottomRightRadius","borderTopRightRadius","borderBottomLeftRadius","gap","rowGap","columnGap","gridAutoRows","opacity","lineHeight","borderBottomColor","border","borderBottom","isolation","isolate","objectFit","contain","cover","pointerEvents","textTransform","capitalize","lowercase","uppercase","cursor","pointer","visibility","visible","whiteSpace","pre","wordBreak","wordWrap","bgc","bg","base","hover","backgroundColor","borderColor","color","outlineColor","defaultClassName","variantClassNames","true","false","showBridgeWarning","defaultVariants","compoundVariants","loading","align","removePadding","noMinHeight","getThemeValue","path","fallback","rotate","keyframes","_templateObject","_taggedTemplateLiteral","spinStyle","css","_templateObject2","Svg","styled","withConfig","shouldForwardProp","includes","_templateObject3","_ref2","_ref3","spin","defaultProps","xmlns","props","viewBox","d","Text","div","attrs","title","ellipsis","bold","_ref4","typography","layout","_ref5","_theme$colors","decorationColor","target","rel","scales","MD","SM","XS","variants","PRIMARY","SECONDARY","TERTIARY","TEXT","DANGER","SUBTLE","SUCCESS","LIGHT","scaleVariants","styleVariants","StyledButton","$isLoading","variant","prop","_decorator$background","_decorator$color","decorator","Button","startIcon","endIcon","external","className","isLoading","rest","internalProps","EXTERNAL_LINK_PROPS","isDisabled","clsx","_jsxs","_Fragment","isValidElement","cloneElement","scale","fillRule","clipRule","id","uniqueId","x1","y1","x2","y2","gradientTransform","offset","stopColor","strokeWidth","strokeLinecap","strokeLinejoin","stroke","fill","cx","cy","r","clipPath","rx","transform","y","primaryColor","secondaryColor","maskUnits","mask","strokeDasharray","ry","gradientUnits","style","mixBlendMode","ExpandableLabel","onClick","expanded","ChevronUpIcon","ChevronDownIcon","MotionBox","motion","Box","flexbox","INFO","WARNING","IconLabel","alert","Details","hashandler","CloseHandler","StyledAlert","Flex","_templateObject4","Icon","arguments","BlockIcon","ErrorIcon","CheckmarkCircleIcon","InfoIcon","getIcon","hasdescription","as","IconButton","CloseIcon","AtomBox","React","asChild","atomProps","nativeProps","properties","atomicClasses","reset","elementReset","resetStyles","sprinklesClasses","atoms","Comp","Slot","displayName","decimals","unit","prefix","strikeThrough","startFromValue","prefixProp","suffixProp","suffix","CountUp","preserveValue","duration","separator","countUpRef","textDecoration","animation","WAVES","PULSE","RECT","CIRCLE","waves","pulse","Root","VARIANT","Pulse","Waves","_templateObject5","ANIMATION","LG","Input","isSuccess","isWarning","_ref6","_ref7","_ref8","_ref9","SwitchUnitsButton","UnitContainer","StyledBalanceInput","StyledInput","placeholder","onUserInput","currencyValue","inputProps","innerRef","switchEditingUnits","pattern","inputMode","min","onChange","e","currentTarget","validity","valid","SwapVertIcon","InlineMenuContainer","ClickableElementContainer","getPortalRoot","_document$getElementB","getElementById","_options$placement","_options$offset","_options$padding","component","options","isOpen","targetElement","setTargetElement","menuElement","setMenuElement","placement","isMenuOpen","setIsMenuOpen","toggle","prev","handleClickOutside","Node","contains","attributes","usePopper","modifiers","popper","open","close","portal","renderMenu","createPortal","BaseMenu","Separator","StyledBreadcrumbs","DefaultSeparator","ChevronRightIcon","items","insertSeparators","accum","item","index","Children","toArray","child","map","StyledButtonMenu","fullWidth","activeIndex","onItemClick","isActive","InactiveButton","forwardedAs","prevMinWidth","getKey","charAt","toUpperCase","slice","getState","_window","_mql$matches","mql","matchMedia","matches","MatchBreakpointsContext","isMobile","isTablet","isDesktop","getBreakpointChecks","isXs","isSm","isMd","isLg","isXl","isXxl","MatchBreakpointsProvider","handlers","_window2","matchMediaQuery","_mql","forEach","unsubscribe","useMatchBreakpoints","matchBreakpointContext","types","alertTypeMap","alertVariants","StyledToast","Toast","toast","onRemove","ttl","timer","description","type","handleRemove","CSSTransition","nodeRef","timeout","onMouseEnter","handleMouseEnter","onMouseLeave","handleMouseLeave","Alert","StyledToastContainer","ToastContainer","toasts","stackSpacing","TransitionGroup","top","ToastsContext","ToastsProvider","setToasts","prevToasts","kebabCase","currentToasts","prevToast","toastError","toastTypes","toastInfo","toastSuccess","toastWarning","clear","remove","useToast","toastContext","ToastListener","useOnClickOutside","htmlNode","listener","event","unmountAnimation","mountAnimation","StyledOverlay","isUnmounting","BodyLock","cssText","role","DrawerContainer","content","setIsOpen","Overlay","appearAnimation","disappearAnimation","animationHandler","element","classList","add","animationVariants","animate","exit","animationMap","promotedGradient","StyledCard","borderBackground","StyledCardInner","hasCustomBorder","innerCardProps","CardBody","CardHeader","cardHeaderBackground","CardFooter","StyledCardRibbon","zIndices","variantColor","ribbonPosition","CardRibbon","getScale","Checkbox","AutoColumn","justify","isTouchDevice","navigator","maxTouchPoints","msMaxTouchPoints","Arrow","StyledTooltip","Motion","Devices","deviceActions","touchDevice","nonTouchDevice","useTooltip","trigger","arrowPadding","tooltipPadding","tooltipOffset","hideTimeout","manualVisible","avoidToStopPropagation","strategy","isInPortal","tooltipElement","setTooltipElement","arrowElement","setArrowElement","setVisible","debouncedHide","debounce","hideTooltip","stopPropagation","preventDefault","showTooltip","cancel","toggleTooltip","eventHandlers","forceUpdate","transition","arrow","AnimatedTooltip","LazyMotion","features","domAnimation","AnimatePresence","tooltipInPortal","targetRef","tooltipVisible","CopyButton","tooltipMessage","buttonColor","icon","CopyIcon","isTooltipDisplayed","setIsTooltipDisplayed","displayTooltip","handleOnClick","copyText","cb","clipboard","permissions","writeText","then","queryCommandSupported","ele","createElement","appendChild","execCommand","removeChild","tooltipTimeout","Wrapper","Address","CopyAddress","account","readOnly","DropdownContent","Container","$scrolling","Dropdown","scrolling","setScrolling","scrollEndTimer","handleScroll","throttledHandleScroll","throttle","MenuContext","linkComponent","Icons","IconModule","iconName","IconElement","DropdownMenuItem","$isActive","getTextColor","StyledDropdownMenuItemContainer","DropdownMenuDivider","hr","StyledDropdownMenu","$isBottomNav","_ref10","$isOpen","LinkStatus","_ref11","_ref12","_ref13","DropdownMenuItemType","isBottomNav","showItemsOnMobile","activeItem","setMenuOpenByIndex","setTargetRef","tooltipRef","setTooltipRef","hasItems","isMenuShow","showDropdownMenu","hideDropdownMenu","prevValue","onPointerDown","s","isMobileOnly","itemItem","INTERNAL_LINK","label","href","status","itemProps","MenuItemContent","BUTTON","EXTERNAL_LINK","IconComponent","DIVIDER","fontSizeLg","Heading","root","StyledWrapper","$height","$width","forwardRef","StyledBackgroundImage","loadingPlaceholder","src","isLoaded","setIsLoaded","Placeholder","observer","entries","img","onload","backgroundImage","observerOptions","StyledImage","alt","fallbackSrc","imgRef","setError","isSupported","_observer","_observer2","onError","Image","DEFAULT","INVERTED","StyledPrimaryImage","TokenImage","StyledSystemVariant","bottom","StyledSecondaryImage","primarySrc","secondarySrc","primaryImageProps","secondaryImageProps","secondaryImageSize","Math","floor","BackgroundImage","BunnyPlaceholder","getPadding","hasIcon","hasStartIcon","hasEndIcon","isEndIcon","MenuButton","LangSelector","currentLang","langs","setLang","dropdownPosition","buttonScale","hideLanguage","LanguageIcon","lang","next","GridLayout","Grid","BaseLayout","StyledLink","Link","to","ReactLink","LinkExternal","isPlsScan","PlsIcon","OpenNewIcon","Loading","MessageContext","WarningIcon","CheckmarkCircleFillIcon","MessageContainer","systemVariant","MessageText","ctx","NotificationDotRoot","span","Dot","show","Outer","Inner","PriceLink","a","PlsxPrice","plsxPriceUsd","showSkeleton","LogoRound","toFixed","Skeleton","scaleKeyValues","pancakeSize","travelDistance","toggleHeight","toggleWidth","pancakeThickness","pancakeTwoOffset","pancakeThreeOffset","butterTop","butterLeft","butterWidth","butterHeight","butterThickness","butterRadius","butterSmearOneTop","butterSmearOneLeft","butterSmearTwoTop","butterSmearTwoRight","property","plsxToggle","handleBackground","handleShadow","checked","styleScales","Bar","$useDark","$background","QuestionWrapper","QuestionHelper","HelpIcon","MouseoverTooltip","getCheckedScale","Radio","radio","Table","TableBox","ThemedComponent","Pre","Title","BIG_ZERO","BigNumber","BIG_ONE","BIG_TWO","BIG_TEN","getFullDecimalMultiplier","pow","getDecimalAmount","amount","times","getBalanceAmount","dividedBy","getBalanceNumber","balance","toNumber","getFullDisplayBalance","displayDecimals","stringNumber","_trimEnd","formatNumber","number","minimumFractionDigits","maximumFractionDigits","toLocaleString","formatBigInt","formatted","negative","startsWith","padStart","integer","fraction","formatUnits","BigInt","Footer","BulletList","isFarm","apr","displayApr","multiplier","linkLabel","linkHref","performanceFee","rewardIncPerSecond","isExpanded","setIsExpanded","multiplierRef","multiplierTooltip","multiplierTooltipVisible","gridRowCount","gridTemplateColumns","gridRowGap","gridTemplateRows","fee","DAYS_TO_CALCULATE_AGAINST","getInterestBreakdown","principalInUSD","earningTokenPrice","compoundFrequency","timesCompounded","aprAsDecimal","roundingDecimalsNew","round","days","principal","interestEarned","parseFloat","getApy","daysAsDecimalOfYear","apyAsDecimal","getRoi","amountEarned","amountInvested","compoundingIndexToFrequency","EditingCurrency","CalculatorMode","defaultState","controls","compounding","compoundingFrequency","activeCompoundingIndex","stakingDuration","mode","ROI_BASED_ON_PRINCIPAL","editingCurrency","USD","principalAsToken","principalAsUSD","roiUSD","roiTokens","roiPercentage","roiCalculatorReducer","action","payload","toggledCompounding","autoCompoundFrequency","PRINCIPAL_BASED_ON_ROI","currencyAfterChange","TOKEN","useRoiCalculatorReducer","stakingTokenPrice","dispatch","useReducer","merge","setPrincipalFromUSDValue","principalAsTokenBN","gt","setPrincipalFromTokenValue","principalAsUsdBN","principalAsUsdString","setStakingDuration","stakingDurationIndex","toggleCompounding","toggleEditingCurrency","setCompoundingFrequency","setCalculatorMode","modeToSet","setTargetRoi","targetRoiAsTokens","isNaN","DefaultCompoundStrategy","principalInUSDAsNumber","interestBreakdown","hasInterest","Number","roiAsUSD","principalForExpectedRoi","interest","getPrincipalForInterest","principalUSD","principalToken","MILLION","RoiCardWrapper","RoiCardInner","RoiInputContainer","RoiDisplayContainer","RoiDollarAmount","fadeOut","earningTokenSymbol","calculatorState","expectedRoi","setExpectedRoi","inputRef","onEnterEditing","roiAsString","onExitRoiEditing","CheckmarkIcon","PencilIcon","lineBreak","ArrowContainer","setKey","prevKey","prevId","parseInt","ArrowDownIcon","ArrowUpIcon","ModalHeader","ModalTitle","ModalBody","ModalCloseButton","onDismiss","ModalBackButton","onBack","ArrowBackIcon","ModalContainer","DomMax","mod","DomAnimation","StyledModalWrapper","Context","nodeId","modalNode","setModalNode","onPresent","setNodeId","closeOnOverlayClick","setCloseOnOverlayClick","animationRef","setViewportHeight","vh","innerHeight","documentElement","setProperty","handlePresent","node","newNodeId","closeOverlayClick","handleDismiss","handleOverlayDismiss","DismissableLayer","disableOutsidePointerEvents","onEscapeKeyDown","onAnimationStart","ModalV2Context","ModalV2","MODAL_SWIPE_TO_CLOSE_VELOCITY","ModalWrapper","hideCloseButton","wrapperRef","drag","dragConstraints","dragElastic","dragSnapToOrigin","onDragStart","onDragEnd","info","velocity","onDismiss_","headerPadding","bodyPadding","headerBackground","headerRightSlot","bodyAlignItems","headerBorderColor","bodyTop","context","onPointerDownCapture","updateOnPropsChange","modalId","currentModal","onPresentCallback","onDismissCallback","modalProps","oldModalProps","serialize","StyledSpacer","spacing","ThemeContext","StyledModalActions","StyledModalAction","l","i","Spacer","parseUnits","rounded","padEnd","displayBalance","isBalanceZero","balanceUnits","trimTrailZero","numberStr","splitNum","StyledTokenInput","StyledErrorMessage","max","maxAmount","symbol","onSelectMax","onPercentInput","valueUSDPrice","addLiquidityUrl","inputTitle","needEnable","percentAmount","multipliedBy","isAtPercentMax","step","Balance","isGreaterThan","percent","currentPercentAmount","isAtCurrentPercent","tokenSymbol","tokenAddress","Modal","StyledModal","ScrollableContainer","FullWidthButtonMenu","ButtonMenu","apy","stakingTokenBalance","stakingTokenSymbol","initialValue","stakingTokenDecimals","balanceInputRef","assetSymbol","editingUnit","editingValue","conversionUnit","conversionValue","DURATION","isDisableMyBalance","isFinite","lte","asset","BalanceInput","onFocus","onBalanceFocus","ButtonMenuItem","AnimatedArrow","RoiCard","RoiCalculatorFooter","Row","RowFixed","RowBetween","InputWrapper","onChangeCallback","searchText","setSearchText","debouncedOnChange","DropDownHeader","DropDownListContainer","li","_templateObject6","_ref14","getCursorStyle","getBaseThumbStyles","StyledSlider","BarBackground","BarProgress","onValueChanged","progressPercentage","isMax","progressWidth","float","PancakeIcon","PanIcon","FloatingPanIcon","$isFirstStep","$isLastStep","$isFirstPart","ChildrenWrapper","_templateObject7","StyledMenuItemContainer","$variant","StyledMenuItem","$statusColor","statusColor","itemLinkProps","StyledSubMenuItems","$isMobileOnly","MenuItem","Td","td","isShowBorderBottom","Tab","TEXTDISABLED","TEXTSUBTLE","BINANCE","FAILURE","StyledTag","outline","variantKey","themeColorKey","Tag","handleHeight","handleWidth","handleLeft","handleTop","checkedLeft","Handle","$checked","$checkedColor","$defaultColor","StyledToggle","defaultColor","checkedColor","isChecked","ViewMode","ToggleView","idPrefix","viewMode","onToggle","handleToggleCard","CARD","handleToggleTable","TABLE","CardViewIcon","ListViewIcon","BAD_SRCS","srcs","find","StyledIconContainer","activeBackgroundColor","StyledAnimatedIconComponent","hasFillIcon","fillIcon","activeColor","IconElementFill","StyledBottomNavItem","StyledBottomNavText","bottomNavItemContent","AnimatedIconComponent","fontWeight","StyledBottomNav","BottomNav","activeSubItem","menuOpenByIndex","isBottomMenuOpen","some","acc","_menuItems$find","_menuItems$find$statu","menuItems","showOnMobile","menuItem","DropdownMenu","NotificationDot","BottomNavItem","memo","MenuItems","linkProps","DesktopLogo","isAbsoluteUrl","innerLogo","LogoWithTextIcon","MobileLogo","LogoIcon","StyledNav","FixedContainer","showMenu","TopBannerContainer","BodyWrapper","userMenu","banner","globalMenu","links","subLinks","setIsMounted","useIsMounted","setShowMenu","refPrevOffset","pageYOffset","topBannerHeight","totalTopMenuHeight","currentOffset","isBottomOfPage","clientHeight","subLinksWithoutMobile","subLink","subLinksMobileOnly","SubMenuItems","LIVE","SOON","NEW","noop","PENDING","MenuIconWrapper","StyledIdenticon","NoProfileMenuIcon","WalletFilledIcon","PendingMenuIcon","RefreshIcon","WarningMenuIcon","DangerMenuIcon","iconRef","UserMenuDivider","UserMenuItem","StyledUserMenu","LabelText","Menu","recalculatePopover","accountEllipsis","update","evt","onTouchStart","MenuIcon","ResetCSS","createGlobalStyle","boxShadowActive","boxShadowSuccess","boxShadowWarning","blue","bubblegum","violet","dropShadow","siteWidth","bp","darkAlert","darkCard","darkToggle","darkNav","darkModal","darkPulseXToggle","darkRadio","darkTooltip","UIKitProvider","ThemeProvider","desktopWalletSelectionClass","promotedGradientClass","walletIconClass","walletSelectWrapperClass","Qrcode","lazy","WalletConnectorNotFoundError","WalletSwitchChainError","errorAtom","atom","selectedWalletAtom","useSelectedWallet","useAtom","MOBILE_DEFAULT_DISPLAY_COUNT","MobileModal","wallets","connectWallet","docLink","docText","selected","installedWallets","w","installed","walletsToShow","deepLink","ErrorMessage","message","WalletSelect","displayCount","wallet","showMore","setShowMore","walletDisplayCount","isImage","letterSpacing","MoreHorizontalIcon","walletLocalStorageKey","lastUsedWalletNameAtom","DesktopModal","wallets_","guide","downloadLink","qrCode","setQrCode","connectToWallet","Intro","ErrorContent","onRetry","NotInstalled","WalletModalV2","_wallets","login","lastUsedWalletName","sorted","sort","b","foundLastUsedWallet","sortWallets","setSelected","imageSources","usePreloadImages","connectorId","v","catch","onMount","preferred","Suspense","url","image","getDesktopLink","getDesktopText","verticalAlign","linkDevice","_linkDevice$desktop","desktop","_linkDevice$desktop$t","_linkDevice$desktop2","PoolCategory","FetchStatus","__async","__this","__arguments","generator","Promise","resolve","reject","fulfilled","rejected","throw","done","apply","TrustWalletConnector","InjectedConnector","constructor","chains","_options","_a","_b","super","shimDisconnect","shimChainChangedDisconnect","this","handleFailedConnect","isUserRejectedRequestError","UserRejectedRequestError","ResourceUnavailableRpcError","connect","_this","_c","_d","provider","getProvider","ConnectorNotFoundError","on","onAccountsChanged","onChainChanged","onDisconnect","emit","storage","shimDisconnectKey","getAccount","request","method","params","eth_accounts","accounts","getAddress","getChainId","unsupported","isChainUnsupported","switchChain","chain","isTrustWallet","ethereum","isTrust","providers","trustwallet","getTrustWalletProvider","config","EXPONENTIAL_AT","DECIMAL_PLACES","BASE_PULSECHAIN_SCAN_URLS","SECONDS_PER_YEAR","BASE_PULSECHAIN_SCAN_URL","DEFAULT_TOKEN_DECIMAL","DEFAULT_GAS_LIMIT","projectId","publicClient","configureChains","CHAINS","jsonRpcProvider","rpc","http","rpcUrls","batch","multicall","batchSize","wait","pollingInterval","injectedConnector","walletConnectConnector","WalletConnectConnector","showQrModal","walletConnectNoQrCodeConnector","metaMaskConnector","MetaMaskConnector","ledgerConnector","LedgerConnector","trustWalletConnector","wagmiConfig","createConfig","createStorage","_key","_value","removeItem","autoConnect","connectors","CHAIN_IDS","c","isChainSupported","isChainTestnet","_chains$find","testnet","CHAIN_QUERY_NAME","CHAIN_QUERY_NAME_TO_ID","chainName","masterChefAddresses","equalsIgnoreCase","localeCompare","sensitivity","filterFarmsByQuoteToken","farms","preferredQuoteTokens","farm","quoteToken","getFarmsPrices","nativeStableLp","_nativeStableFarm$tok","nativeStableFarm","isNativeFarm","lpAddress","address","token","stable","wNative","isNativeFirst","nativePriceUSD","tokenPriceVsQuote","BN","farmsWithPrices","quoteTokenFarm","getFarmFromTokenAddress","farmsWithTokenSymbol","quoteTokenPriceUsd","getFarmQuoteTokenPrice","tokenPriceUsd","getFarmBaseTokenPrice","quoteTokenInUsd","hasTokenPriceVsQuote","Boolean","lpTokenPrice","getLpTokenPrice","lpTotalSupply","lpTotalInQuoteToken","tokenAmountTotal","tokenPriceBusd","overallValueOfAllTokensInFarm","totalLpTokens","abi","constant","inputs","outputs","payable","stateMutability","fetchPublicFarmsData","masterChefAddress","farmCalls","flatMap","fetchFarmCalls","functionName","args","chunkSize","farmMultiCallResult","contracts","allowFailure","chunk","evmNativeStableLpMap","getTokenAmount","masterChefV2Abi","internalType","notEmpty","fetchMasterChefData","isTestnet","masterChefCalls","masterChefFarmCalls","masterChefAggregatedCalls","masterChefMultiCallResult","masterChefChunkedResultCounter","masterChefCall","lpToken","allocPoint","lastRewardTime","accIncPerShare","formatClassicFarmResponse","farmData","tokenBalanceLP","quoteTokenBalanceLP","lpTokenBalanceMC","getFarmAllocation","totalAllocPoint","_allocPoint","totalAlloc","poolWeight","isZero","getClassicFarmsDynamicData","token0Decimals","token1Decimals","quoteTokenAmountTotal","lpTokenRatio","lpTokenStakedAmount","supportedChainId","viemClients","cur","createPublicClient","transport","rank","getViemClients","updateVersion","createAction","resetUserState","toggleFarmTransactionModal","pickFarmTransactionTx","masterChefAbi","router","multiCall","masterChef","plsxLab","buyandburnV1","buyandburnV2","getAddressFromMap","getMasterChefAddress","addresses","getMulticallAddress","getPlsxLabAddress","getBuyAndBurnAddress","protocol","fetchFarmUserAllowances","farmsToFetch","proxyAddress","lpContractAddress","erc20ABI","lpBalance","toJSON","fetchFarmUserTokenBalances","tokenBalance","fetchFarmUserStakedBalances","stakedBalance","fetchFarmUserEarnings","multiCallChainId","farmFetcher","earnings","fetchFarms","poolLength","incPerSecond","fetchMasterChefV2Data","regularIncPerSecond","formatEther","farmsWithPrice","poolInfos","lpDataResults","all","lpData","farmsData","_poolInfos$index","_poolInfos$index2","farmV2FetchFarms","fetchInitialFarmsData","createAsyncThunk","farmDataList","userData","allowance","fetchFarmsPublicDataAsync","pids","farmsCanFetch","farmConfig","priceHelperLpsConfig","fetchFarmPublicDataPkg","condition","arg","loadingKeys","stringify","typePrefix","debug","fetchFarmUserDataAsync","_state$farms$poolLeng","client","readContract","fetchMasterChefFarmPoolLength","userFarmAllowances","userFarmTokenBalances","userStakedBalances","userFarmEarnings","_","getNormalFarmsStakeValue","serializeLoadingKey","meta","farmsSlice","createSlice","loadArchivedFarmsData","userDataLoaded","reducers","extraReducers","builder","addCase","farmPayload","farmPayloadPidMap","keyBy","liveFarmData","userDataMap","userDataEl","addMatcher","isAnyOf","pending","livePools","pools","livePools2","pools2","SUPPORTED_CHAIN_IDS","POOLS_CONFIG_BY_CHAIN","getPoolsConfig","isPoolsSupported","plsxLabAbi","fetchPoolsBlockLimits","poolsConfig","poolInfo","poolConfig","contractAddress","poolId","poolInfoResult","startTime","endTime","fetchPoolsTotalStaking","poolsBalanceOf","stakingToken","poolsTotalStaked","totalStaked","getPoolsFactory","getNonPlsPools","pool","getPlsPools","fetchPoolsAllowance","nonPlsPools","fromPairs","allowances","fetchUserBalances","plsPools","calls","tokenBalancesRaw","tokenBalances","plsBalance","getBalance","fetchUserStakeBalances","userInfo","_hex","fetchUserPendingRewards","res","WrappedTokenInfo","Token","tokenInfo","logoURI","projectLink","deserializeToken","serializedToken","VersionUpgrade","VersionUpgrade2","getVersionUpgrade","major","minor","patch","createFilterToken","search","isAddress","lowerSearchParts","matchesSearch","sParts","s_","every","sp","endsWith","transformUserData","pendingReward","transformProfileRequirement","profileRequirement","required","thresholdPoints","transformPool","stakingLimit","userLimitEnd","startTimestamp","earningToken","stakingLimitEndTimestamp","fetchPoolsPublicDataAsync","freeze","totalShares","pricePerFullShare","totalPlsxInVault","estimatedPlsxBountyReward","totalPendingPlsxHarvest","fees","callFee","withdrawalFee","withdrawalFeePeriod","userShares","plsxAtLastUserAction","lastDepositedTime","lastUserActionTime","credit","creditStartBlock","_getViemClients","timeLimits","totalStakings","getBlock","blockTag","currentTime","timestamp","prices","quoteTokenAddress","toLocaleLowerCase","getTokenPricesFromFarm","liveData","timeLimit","totalStaking","isPoolEndTimeExceeded","isPoolFinished","isFinished","stakingTokenAddress","earningTokenAddress","getPoolApr","rewardTokenPrice","tokenPerBlock","totalRewardPricePerYear","totalStakingTokenInPool","timeStamp","setPoolsPublicData","fetchPoolsStakingLimitsAsync","poolsWithStakingLimit","stakingLimits","validPools","poolStakingCalls","validPool","flat","poolStakingResultRaw","userLimitEndTime","stakingLimitRaw","fetchPoolsStakingLimits","stakingLimitData","updateUserBalance","sousId","updatePoolsUserData","field","updateUserStakedBalance","stakedBalances","updateUserPendingReward","pendingRewards","PoolsSlice","setInitialPoolConfig","allPools","setPoolPublicData","poolIndex","findIndex","setPoolUserData","livePoolsData","livePoolData","setPoolsUserData","userPoolData","actions","addTransaction","clearAllTransactions","clearAllChainTransactions","finalizeTransaction","checkedTransaction","createReducer","transactions","_transactions$chainId","_transactions$chainId2","from","approval","summary","translatableSummary","claim","txs","addedTime","_transactions$chainId3","blockNumber","tx","lastCheckedBlockNumber","_transactions$chainId4","receipt","confirmedTime","newChainId","ROUTER_ADDRESS_V1","ROUTER_ADDRESS_V2","BASES_TO_CHECK_TRADES_AGAINST","plsTokens","wpls","plsx","inc","hex","ADDITIONAL_BASES","CUSTOM_BASES","SUGGESTED_BASES","dai","usdc","weth","BASES_TO_TRACK_LIQUIDITY_FOR","PINNED_PAIRS","INITIAL_ALLOWED_SLIPPAGE","BIG_INT_ZERO","BIPS_BASE","ONE_BIPS","Percent","ZERO_PERCENT","ONE_HUNDRED_PERCENT","BASE_FEE","INPUT_FRACTION_AFTER_FEE","subtract","ALLOWED_PRICE_IMPACT_LOW","ALLOWED_PRICE_IMPACT_MEDIUM","ALLOWED_PRICE_IMPACT_HIGH","PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN","BLOCKED_PRICE_IMPACT_NON_EXPERT","MIN_PLS","BETTER_TRADE_LESS_HOPS_THRESHOLD","FAST_INTERVAL","SLOW_INTERVAL","DEFAULT_INPUT_CURRENCY","EXCHANGE_PAGE_PATHS","FarmStakedOnly","ChartViewMode","updateUserExpertMode","updateUserSingleHopOnly","updateUserSlippageTolerance","updateUserDeadline","addSerializedToken","removeSerializedToken","addSerializedPair","removeSerializedPair","muteAudio","unmuteAudio","toggleTheme","updateUserFarmStakedOnly","updateUserPoolStakedOnly","updateUserPoolsViewMode","updateUserFarmsViewMode","updateUserPredictionAcceptedRisk","updateUserPredictionChartDisclaimerShow","updateUserExpertModeAcknowledgementShow","updateUserUsernameVisibility","updateGasPrice","hidePhishingWarningBanner","setIsExchangeChartDisplayed","setChartViewMode","setSubgraphHealthIndicatorDisplayed","updateSmartRouter","currentTimestamp","getTime","pairKey","token0Address","token1Address","userExpertMode","userSingleHopOnly","userSlippageTolerance","userDeadline","tokens","pairs","audioPlay","isExchangeChartDisplayed","isSubgraphHealthIndicatorDisplayed","userChartViewMode","BASIC","userFarmStakedOnly","ON_FINISHED","userPoolStakedOnly","userPoolsViewMode","userFarmsViewMode","userPredictionAcceptedRisk","userPredictionChartDisclaimerShow","userExpertModeAcknowledgementShow","userUsernameVisibility","gasPrice","watchlistTokens","watchlistPools","hideTimestampPhishingWarningBanner","userSmartRouterMode","lastUpdateVersionTimestamp","serializedPair","token0","token1","tokenAAddress","tokenBAddress","userAcceptedRisk","userShowDisclaimer","_ref15","_ref16","showFarmTransactionModal","pickedFarmTransactionModalTx","showModal","PERSISTED_KEYS","persistConfig","whitelist","blacklist","version","persistedReducer","persistReducer","combineReducers","global","globalReducer","farmsReducer","poolsReducer","user","store","configureStore","reducer","middleware","getDefaultMiddleware","thunk","serializableCheck","ignoredActions","FLUSH","REHYDRATE","PAUSE","PERSIST","PURGE","REGISTER","save","states","preloadedState","load","disableWarnings","setupListeners","useAppDispatch","useDispatch","persistor","persistStore","clearUserStates","sessionChainIdAtom","useSessionChainId","queryChainIdAtom","useLocalNetworkChain","sessionChainId","queryChainId","useAtomValue","query","useLocation","URLSearchParams","useQuery","chainQuery","URL","location","searchParams","useActiveChainId","_chain$unsupported","localChainId","useNetwork","isNotMatched","useDeferredValue","isWrongNetwork","useAccountEventListener","connector","useAccount","setSessionChainId","navigate","useNavigate","pathname","isBloctoMobileApp","_window$ethereum","isBlocto","handleUpdateEvent","_e$chain","_e$chain$unsupported","_e$chain2","_e$chain3","createSearchParams","handleDeactiveEvent","addListener","removeListener","useEagerConnect","useConfig","connectAsync","useConnect","parent","SafeConnector","safe","useUserAgent","setAttribute","userAgent","switchNetworkLoadingAtom","useSwitchNetworkLoading","useActiveWeb3React","web3React","isConnected","isConnecting","useWeb3React","safeGetAddress","value_","getBlockExplorerLink","chainIdOverride","pulsechain","blockExplorers","getBlockExploreName","_chain$blockExplorers","calculateGasMargin","enumValues","enumObj","isStringEnum","PLSX_EXTENDED","PULSECHAIN_URLS","OFFICIAL_LISTS","UNSUPPORTED_LIST_URLS","WARNING_LIST_URLS","DEFAULT_LIST_OF_LISTS","DEFAULT_ACTIVE_LIST_URLS","MULTI_CHAIN_LIST_URLS","fetchTokenList","addList","removeList","enableList","disableList","acceptListUpdate","updateListVersion","NEW_LIST_STATE","loadingRequestId","pendingUpdate","noopStorage","EMPTY","Symbol","useFetchListCallback_default","listUrl","sendDispatch","requestId","nanoid","getTokenList","tokenList","errorMessage","lastInitializedDefaultListOfLists","byUrl","activeListUrls","listReducer","createTokenListReducer","__spreadProps","__spreadValues","push","u","lastInitializedSet","Set","newListOfListsSet","listsAtom","useListState","useListStateReady","createListsAtom","storeName","listsStorageAtom","atomWithStorage","dbName","db","localForage","k","IndexedDBStorage","defaultStateAtom","loadable","isReadyAtom","sortByListPriority","urlA","urlB","first","indexOf","MAX_SAFE_INTEGER","second","selectorActiveUrlsAtom","_get$activeListUrls","_get","selectorByUrlsAtom","_get$byUrl","_get2","activeListUrlsAtom","urls","combineTokenMapsWithDefault","lists","defaultTokenMap","listToTokenMap","DEFAULT_TOKEN_LIST","combineMaps","combineTokenMaps","allTokens","currentUrl","_lists$currentUrl","assign","EMPTY_LIST","combinedTokenMapFromActiveUrlsAtom","selectorByUrls","selectorActiveUrls","inactiveUrlAtom","combinedTokenMapFromInActiveUrlsAtom","inactiveUrl","combinedTokenMapFromOfficialsUrlsAtom","combinedTokenMapFromUnsupportedUrlsAtom","mergedTokenLists","_lists$url","_lists$url$current","_lists$url2","_lists$url2$current","mergedList","mapValues","groupBy","uniqBy","tokenInfos","UNSUPPORTED_TOKEN_LIST","listCache","WARNING_TOKEN_LIST","WeakMap","list","tokenMap","checksummedAddress","groupedTokenMap","tokenAddressMap","tokenInfoList","obj","defineProperty","useAllLists","_pickBy","_MULTI_CHAIN_LIST_URL","map1","map2","combinedMap","useActiveListUrls","_MULTI_CHAIN_LIST_URL2","useCombinedInactiveList","selectUserTokens","userAddedTokenSelector","createSelector","serializedTokensMap","_serializedTokensMap$","useUserAddedTokens","useSelector","useNativeCurrency","Native","onChain","mapWithoutUrls","newMap","useAllTokens","userAddedTokens","tokenMap_","useUnsupportedTokens","unsupportedTokensMap","useIsUserAddedToken","currency","equals","useToken","useToken_","enabled","_data$symbol","_data$name","ERC20Token","useCurrency","currencyId","_native$symbol","native","isPLS","useExchangeChartManager","isChartDisplayed","isDisplayed","useIsExpertMode","useExpertModeManager","expertMode","toggleSetExpertMode","useUserSingleHopOnly","singleHopOnly","newSingleHopOnly","useUserSlippageTolerance","slippage","serializePair","pair","usePairAdder","toV1LiquidityToken","tokenA","tokenB","PairV1","toV2LiquidityToken","PairV2","useTrackedTokenPairs","useOfficialsAndUserAddedTokens","pinnedPairs","_PINNED_PAIRS$chainId","farmPairs","useSWRImmutable","generatedPairs","_BASES_TO_TRACK_LIQUI","savedSerializedPairs","userPairs","forChain","pairId","combinedList","keyed","sortsBefore","useSmartRouterManager","isSmartRouter","toggleSetSmartRouter","EMPTY_ARRAY","useRefreshEffect","interval","effect","deps","useSWR","bind","computeRealizedPriceImpact","trade","realizedLpFeePercent","swaps","route","currentFee","multiply","swap","numerator","denominator","inputAmount","divide","routeRealizedLPFeePercent","Fraction","computeRealizedLPFeePercent","priceImpact","token2","token1AsTokenInstance","token2AsTokenInstance","String","checksummedToken1Address","checksummedToken2Address","typedValueParsed","CurrencyAmount","fromRawAmount","wrappedCurrency","isNative","WNATIVE","isToken","unwrappedToken","buyandburnAbi","getContract","signer","viemGetContract","walletClient","multicallAbi","components","pulsexPairAbi","wethAbi","useERC20","useContract","useMasterchef","useWalletClient","getMasterChefContract","usePlsxLab","getPlsxLabContract","useBuyAndBurnContract","getBuyAndBurnContract","addressOrAddressMap","useTokenContract","usePairContract","pairAddress","useMulticallContract","ADDRESS_REGEX","LOWER_HEX_REGEX","toCallKey","call","test","callData","parseCallKey","callKey","pcs","addMulticallListeners","removeMulticallListeners","fetchingMulticallResults","errorFetchingMulticallResults","updateMulticallResults","callResults","multicallReducer","_listeners$chainId","blocksPerFetch","listeners","callListeners","_listeners$chainId$ca","_listeners$chainId$ca2","_state$callResults$ch","fetchingBlockNumber","_current$fetchingBloc","_state$callResults$ch2","_state$callResults$ch3","results","_current$blockNumber","multicallReducerAtom","atomWithReducer","INVALID_RESULT","useCallsData","serializedCallKeys","_calls$filter$map$sor","_calls$filter","_calls$filter$map","JSON","callKeys","parse","_callResults$chainId","INVALID_CALL_STATE","syncing","LOADING_CALL_STATE","toCallState","callResult","latestBlockNumber","decodeFunctionResult","DEFAULT_OPTIONS","useMultipleContractSingleData","encodeFunctionData","queryClient","useQueryClient","_queryClient$getQuery3","_queryClient$getQuery4","currentBlockNumber","getQueryCache","queryKey","useSingleCallResult","contract","_queryClient$getQuery5","_queryClient$getQuery6","usePLSBalances","uncheckedAddresses","orderBy","_queryClient$getQuery","_queryClient$getQuery2","useSingleContractMultipleData","_results$i","useTokenBalancesWithLoadingIndicator","validatedTokens","_tokens$filter","validatedTokenAddresses","vt","balances","anyLoading","callState","_balances$i","useTokenBalances","useTokenBalance","useCurrencyBalances","currencies","_currencies$filter","containsNative","_currencies$some","nativeBalance","_currencies$map","useCurrencyBalance","PairState","useV1Pairs","currencyA","currencyB","msg","IPulseXPair","reserves","LOADING","INVALID","NOT_EXISTS","reserve0","reserve1","EXISTS","useV2Pairs","usePairsBothProtocols","usePairBothProtocols","useUSDCPrice","wrapped","wnative","STABLE_COIN","tokenPairs","ethPairState","ethPair","usdcPairState","usdcPair","usdcEthPairState","usdcEthPair","ethPairState2","ethPair2","usdcPairState2","usdcPair2","usdcEthPairState2","usdcEthPair2","price","priceOf","Price","ethPairETHAmount","reserveOf","ethPairETHUSDCValue","quote","quotient","ethPairETHAmount2","ethPairETHUSDCValue2","greaterThan","ethUSDCPrice","currencyEthPrice","usdcPrice","invert","ethUSDCPrice2","currencyEthPrice2","usdcPrice2","usePlsxUsdcPrice","PLSX","usePlsxUsdPrice","forceMainnet","usePriceByPairs","pairContract","getLpAddress","read","getReserves","dedupingInterval","refreshInterval","useUSDPrice","currencyAmount","stablecoinPrice","toSignificant","useAccountActiveChain","deserializeFarmUserData","deserializeFarm","lpSymbol","selectFarmByKey","cakeBnbFarm","cakePriceBusdAsString","coreFarmPIDs","usePollCoreFarmData","useFarms","deserializedFarmsData","farmSelector","useFarmUser","farmFromPidUser","makeUserFarmFromPidSelector","useLpTokenPrice","lpTokenPriceFromLpSymbol","makeLpTokenPriceFromLpSymbolSelector","farmTokenPriceInUsd","usePriceINCUsdc","_useUSDCPrice","incentivePrice","INC","usePollBlockNumber","useBlockNumber","onBlock","setQueryData","onSuccess","fetchInitialBlockTimestamp","queryFn","refetchOnMount","refetchOnWindowFocus","refetchOnReconnect","refetchInterval","useCurrentBlock","currentBlock","Updater","usePublicClient","listState","includeListUpdater","isReady","fetchList","useFetchListCallback","staleTime","NONE","PATCH","MINOR","MAJOR","waitRandom","ms","random","CancelledError","RetryableError","retry","fn","rejectCancelled","n","minWait","maxWait","completed","promise","CALL_CHUNK_SIZE","fetchChunk","minBlockNumber","resultsBlockNumber","returnData","_error$data","_error$data2","_error$data2$message","_error$message","_error$message2","half","c0","c1","debouncedListeners","multicallContract","cancellations","listeningKeys","allListeners","keyListeners","previousMin","Infinity","activeListeningKeys","unserializedOutdatedCallKeys","minDataBlockNumber","outdatedListeningKeys","serializedOutdatedCallKeys","_cancellations$curren","outdatedCallKeys","chunkedCalls","maxChunkSize","numChunks","ceil","Array","ix","chunkArray","_cancellations$curren2","_cancellations$curren3","fetchBlockNumber","firstCallKeyIndex","curr","lastCallKeyIndex","erroredCalls","_returnData$i$returnD","_error$message3","_error$message4","startLength","endLength","txHash","txChainId","truncateHash","PulseLogo","useTransactionAdder","transactionHash","useAllTransactions","pickBy","transactionDetails","useAllActiveChainTransactions","useAllChainTransactions","isTransactionRecent","newTransactionsFirst","usePendingTransactions","allTransactions","trxObjects","hasPendingTransactions","pendingNumber","fetchedTransactions","transaction","shouldCheck","waitForTransactionReceipt","blockHash","transactionIndex","ToastDescriptionWithTx","TransactionNotFoundError","TransactionReceiptNotFoundError","BlockNotFoundError","WaitForTransactionReceiptTimeoutError","SUPPORT_ONLY_PULSE","useSwitchNetworkLocal","useSwitchNetwork","setLoading","switchNetworkAsync","_switchNetworkAsync","_isLoading","switchNetwork","_switchNetwork","switchNetworkArgs","useSwitchNetworkWallet","switchNetworkLocal","isTokenPocket","reload","finally","canSwitch","_window$ethereum2","isMathWallet","useAuth","disconnectAsync","useDisconnect","findConnector","connectorID","connected","SwitchChainNotSupportedError","logout","PageNetworkSupportModal","foundChain","Message","ChainLogo","WrongNetworkModal","_chain$name","currentChain","switchText","network","FlexGap","ArrowForwardIcon","Dots","UnsupportedNetworkModal","pageSupportedChains","supportedMainnetChains","hideWrongNetworkModalAtom","NetworkModal","dismissWrongNetwork","setDismissWrongNetwork","isPLSOnlyPage","isPageNotSupported","possibleRejectMessage","isUserRejected","UnknownRpcError","_err$details","cause","transactionErrorToUserReadableMessage","_reason","_reason2","reason","_error$reason","_error$error","originalError","formatErrorMessage","join","useAllCommonPairs","bases","_BASES_TO_CHECK_TRADE","_ADDITIONAL_BASES$cha","_ADDITIONAL_BASES$cha2","_ADDITIONAL_BASES$cha3","_ADDITIONAL_BASES$cha4","basePairs","otherBase","allPairCombinations","t0","t1","tokenA_","tokenB_","customBases","customBasesA","customBasesB","allPairs","_memo$curr$liquidityT","liquidityToken","MAX_HOPS","useTradeExactIn","currencyAmountIn","currencyOut","allowedPairs","V1Pairs","V2Pairs","_TradeV1$bestTradeExa","TradeV1","bestTradeExactIn","maxHops","maxNumResults","bestTradeSoFar","_TradeV1$bestTradeExa2","currentTrade","isTradeBetter","_TradeV2$bestTradeExa","TradeV2","_TradeV2$bestTradeExa2","useIsTransactionUnsupported","currencyIn","unsupportedTokens","tokenIn","tokenOut","AutoRow","Column","ColumnCenter","StyledLogo","TokenLogo","StyledPulseLogo","CurrencyLogo","_currency$symbol","uriLocations","tokenLogoURL","getTokenLogoURL","HigherLogoWrapper","CoveredLogoWapper","sizeraw","DoubleCurrencyLogo","currency0","currency1","StyledListLogo","ListLogo","DetailsFooter","UnsupportedModal","_token$address","UnsupportedCurrencyFooter","onPresentModal","useModal","pulsexRouter02Abi","Field","selectCurrency","switchCurrencies","typeInput","replaceSwapState","setRecipient","updatePairData","updateDerivedPairData","basisPointsToPercent","num","calculateSlippageAmount","useRouterContractBothProtocols","computeRealizedLPFeePercentv2","lpFeeAmount","priceImpactWithoutFee","realizedLPFee","computeTradePriceBreakdown","range","priceImpactWithoutFeeFraction","computeSmartRouterSlippageAdjustedAmounts","allowedSlippage","pct","INPUT","maximumAmountIn","OUTPUT","minimumAmountOut","computeSlippageAdjustedAmounts","warningSeverity","lessThan","resetMintState","setProtocol","independentField","CURRENCY_A","typedValue","otherTypedValue","noLiquidity","AddLiquidityAtomContext","formAtom","useAddLiquidityFormState","Card","LightCard","LightGreyCard","GreyCard","BaseWrapper","disable","CommonBases","onSelect","selectedCurrency","StyledSVG","svg","CircleLoader","TokenSection","dim","CheckIcon","NameOverflow","ImportRow","_inactiveTokenList$ch","_inactiveTokenList$ch2","showImportView","setImportToken","inactiveTokenList","isAdded","activeTokens","useIsTokenActive","currencyKey","StyledBalanceText","FixedContentRow","toExact","CurrencyRow","isSelected","otherSelected","isOnSelectedList","defaultTokens","_defaultTokens$curren","isTokenOnList","customAdded","CurrencyList","inactiveCurrencies","onCurrencySelect","otherCurrency","fixedListRef","showETH","breakIndex","itemData","showImport","handleSelect","itemKey","FixedSizeList","itemCount","itemSize","inverted","useAllTokenBalances","comparator","getTokenComparator","swapSound","useSearchInactiveTokenLists","minResults","inactiveUrls","trim","filterToken","exactMatches","addressSet","trimmedSearchQuery","_tokenInfo$name","_tokenInfo$symbol","otherSelectedCurrency","showCommonBases","tokensToShow","fixedList","searchQuery","setSearchQuery","debouncedQuery","invertSearchOrder","searchToken","searchTokenIsAdded","toggleSetAudioMode","useAudioModeManager","_native$symbol$toLowe","_native$symbol$toLowe2","filteredQueryTokens","symbolMatch","symbolSubstrings","_token$symbol","_token$symbol2","useSortedTokensByQuery","tokenComparator","useTokenComparator","filteredSortedTokens","handleCurrencySelect","Audio","play","_inputRef$current","handleInput","_fixedList$current","checksummedInput","scrollTo","handleEnter","_filteredSortedTokens","filteredInactiveTokens","hasFilteredInactiveTokens","getCurrencyListRows","autoComplete","onKeyDown","confirmed","setConfirmed","addToken","useAddUserToken","gridGap","userSelect","CurrencyModalView","RowWrapper","hasActiveTokens","listUrlRowHTMLId","ListRow","useIsListActive","listsByUrl","activeTokensOnThisChain","handleAcceptListUpdate","handleRemoveList","confirm","handleEnableList","handleDisableList","CogIcon","Toggle","ListContainer","setModalView","setImportList","setListUrl","listUrlInput","setListUrlInput","activeCopy","setActiveCopy","validUrl","sortedLists","u1","u2","l1","l2","keyword","tempList","setTempList","addError","setAddError","isImported","handleImport","importList","textOverflow","ManageTokens","removeToken","useRemoveUserAddedToken","handleRemoveAll","isAddressValid","importToken","Manage","showLists","setShowLists","ManageLists","TextDot","ImportList","listURL","listLogoURI","listName","listTokenLength","onAddList","StyledModalContainer","StyledModalBody","CurrencySearchModal","_lists$listURL","modalView","prevView","adding","handleAddList","manage","CurrencySearch","ImportToken","NumericFormat","displayValue","setDisplayValue","thousandSeparator","allowNegative","allowLeadingZeros","val","registerToken","tokenDecimals","tokenLogo","AddToWalletTextOptions","Opera","OperaIcon","TokenPocket","TokenPocketIcon","TrustWalletIcon","MetaMask","MetamaskIcon","getWalletText","textOptions","NO_TEXT","getWalletIcon","marginTextBetweenLogo","_window2$ethereum","_window3","_window3$ethereum","iconProps","isMetaMask","isCanRegisterToken","canRegisterToken","_window4","_window4$ethereum","_window5","_window5$ethereum","isSafePal","isCoinbaseWallet","watchAsset","_connector$watchAsset","InputRow","CurrencySelectButton","LabelRow","InputPanel","CurrencyInputPanel","onMax","disableCurrencySelect","hideBalance","selectedCurrencyBalance","inputPrice","onPresentCurrencyModal","NumInput","AddToWalletButton","AppHeaderContainer","helper","backTo","protocolSelector","AppBody","useTotalSupply","_useSingleCallResult","_useSingleCallResult$","totalSupplyStr","useMintActionHandlers","useSetAtom","useAddLiquidityFormDispatch","onFieldAInput","onFieldBInput","CURRENCY_B","onChangeProtocol","useDerivedMintInfo","_currencyBalances$Fie","_currencyBalances$Fie2","dependentField","pairState","totalSupply","currencyBalances","independentAmount","tryParseAmount","dependentAmount","wrappedIndependentAmount","dependentCurrency","dependentTokenAmount","parsedAmounts","currencyAAmount","currencyBAmount","wrappedCurrencyA","liquidityMinted","tokenAmountA","tokenAmountB","getLiquidityMinted","poolTokenPercentage","_error","_error2","_currencies$Field$CUR","_currencies$Field$CUR2","FixedHeightRow","MinimalPositionCard","showUnwrapped","userPoolBalance","totalPoolTokens","token0Deposited","token1Deposited","getLiquidityValue","FullPositionCard","_pair$token","_pair$token2","AddIcon","ConnectorNames","walletsConfig","createQrCode","isMetamaskInstalled","_window$ethereum2$pro","WalletConnect","Injected","_window$ethereum3","isOpera","_window$ethereum4","isBraveWallet","_window$ethereum5","isRabby","Ledger","MiniProgramConnector","getWeb3Provider","ready","bn","cbList","onCallbackIdList","postMessage","finalId","miniProgram","languageList","injected","useActiveHandle","handleActive","useActive","log","showToast","main","Fragment","setOpen","createWallets","hasInjected","handleClick","__NEZHA_BRIDGE__","Trans","useCallWithGasPrice","callWithGasPrice","methodName","methodArgs","overrides","gas","gas_","overrides_","estimateContractGas","writeContract","owner","spender","refetch","ApprovalState","useApproveCallback","amountToApprove","_amountToApprove$curr","addToTransaction","targetAmount","currentAllowance","useTokenAllowance","pendingApproval","useHasPendingApproval","setPending","isPendingError","setIsPendingError","approvalState","_amountToApprove$curr2","APPROVED","NOT_APPROVED","UNKNOWN","tokenContract","approve","_amountToApprove$quot","overrideAmountApprove","useExact","estimatedGas","estimateGas","MaxUint256","_amountToApprove$curr3","_overrideAmountApprov","_amountToApprove$curr4","approveCallback","revokeCallback","useTransactionDeadline","blockTimestamp","useCurrentBlockTimestamp","maxAmountSpend","_currencyAmount$curre","StyledPage","$removePadding","$noMinHeight","_price$toSignificant","_currencies$Field$CUR3","_currencies$Field$CUR4","_price$invert$toSigni","_price$invert","_currencies$Field$CUR5","_currencies$Field$CUR6","_currencies$Field$CUR7","_currencies$Field$CUR8","assetA","assetB","Section","ConfirmedIcon","ConfirmationPendingContent","pendingText","Spinner2","TransactionSubmittedContent","currencyToAdd","ConfirmationModalContent","bottomContent","topContent","TransactionErrorContent","customOnDismiss","attemptingTxn","_parsedAmounts$Field$","_parsedAmounts$Field$2","onAdd","liquidityErrorMessage","modalHeader","modalBottom","ConfirmAddModalBottom","confirmationContent","TransactionConfirmationModal","useCurrencySelectRoute","_PLSX$chainId$address","_PLSX$chainId","_STABLE_COIN$chainId","currencyIdA","currencyIdB","useParams","handleCurrencyASelect","currencyA_","newCurrencyIdA","handleCurrencyBSelect","currencyB_","newCurrencyIdB","AddLiquidity","_parsedAmounts$Field$3","_parsedAmounts$Field$4","_parsedAmounts$Field$5","_parsedAmounts$Field$6","_currencies$Field$CUR9","_currencies$Field$CUR10","initialProtocol","addPair","oneCurrencyIsWPLS","WPLS","prevInitialProtocol","isValid","setLiquidityState","deadline","formattedAmounts","_parsedAmounts$depend","_parsedAmounts$depend2","maxAmounts","accumulator","atMaxAmounts","_maxAmounts$field","_parsedAmounts$field","equalTo","routerAddress","approvalA","approveACallback","approvalB","approveBCallback","routerContract","_estimate$then","parsedAmountA","parsedAmountB","amountsMin","estimate","_wrapped$address","_ref$wrapped","tokenBIsNative","addLiquidityETH","write","_currencyA$wrapped$ad","_currencyA$wrapped","_currencyB$wrapped$ad","_currencyB$wrapped","addLiquidity","estimatedGasLimit","gasLimit","symbolA","amountA","symbolB","amountB","handleDismissConfirmation","addIsUnsupported","onPresentAddLiquidityModal_","ConfirmAddLiquidityModal","onPresentAddLiquidityModal","Page","AppHeader","subtitle","_maxAmounts$Field$CUR","_maxAmounts$Field$CUR2","showMaxButton","_maxAmounts$Field$CUR3","_maxAmounts$Field$CUR4","PoolPriceBar","ConnectWalletButton","splitSignature","signature","bytes","toBytes","toHex","LIQUIDITY_PERCENT","RemoveLiquidityAtomContext","useRemoveLiquidityFormState","useBurnActionHandlers","useRemoveLiquidityFormDispatch","signatureData","_currencyA$symbol","_currencyB$symbol","LIQUIDITY","BorderCard","RemoveLiquidity","_useCurrency","_useCurrency2","_parsedAmounts$Field$7","_pair$liquidityToken","_parsedAmounts$Field$10","_parsedAmounts$Field$11","_parsedAmounts$Field$12","_parsedAmounts$Field$13","_currencyA$symbol2","_currencyB$symbol2","_currencyA$symbol3","_currencyB$symbol3","signTypedDataAsync","useSignTypedData","_pair$liquidityToken$","relevantTokenBalances","userLiquidity","liquidityValueA","liquidityValueB","liquidityValues","percentToRemove","liquidityValue","useDerivedBurnInfo","_onUserInput","showDetailed","setShowDetailed","atMaxAmount","pairContractRead","setSignatureData","onLiquidityInput","onCurrencyAInput","onCurrencyBInput","liquidityPercentChangeCallback","oneCurrencyIsPLS","handleSelectCurrencyA","handleSelectCurrencyB","innerLiquidityPercentage","setInnerLiquidityPercentage","debouncedMs","inner","setInner","onChangeInner","newValue","useDebouncedChangeHandler","onPresentRemoveLiquidity","ConfirmLiquidityModal","currencyAmountA","currencyAmountB","liquidityAmount","currencyBIsETH","oneCurrencyIsETH","methodNames","methodSafeGasEstimate","safeGasEstimate","_parsedAmounts$Field$8","_parsedAmounts$Field$9","Slider","nonce","nonces","verifyingContract","primaryType","EIP712Domain","Permit","VersionTag","packageJson","StyledContainer","StyledNotFound","NotFound","Latinise","latin_map","τ","Τ","latinise","ApyLabelContainer","FarmApyButton","hideButton","strikethrough","handleClickButton","CalculateIcon","CoreTag","VerifiedIcon","DualTag","ManualPoolTag","VoteNowTag","VoteIcon","SoonTag","TimerIcon","ClosedTag","CommunityTag","CommunityIcon","VotedTag","ProtocolTag","StyledLinkExternal","DetailsSection","scanAddressLink","infoAddress","removed","totalValueFormatted","lpLabel","isCommunity","auctionHostingEndDate","alignLinksToRight","month","day","year","quoteTokenSymbol","pendingFarmLength","onClickLoadingIcon","formatLpBalance","stakedBalanceBigNumber","lt","ROUND_DOWN","eq","AnnualRoiContainer","AnnualRoiDisplay","tokenName","lpPrice","incPrice","enablePendingTx","onConfirm","handleApprove","setVal","valUSDPrice","setValUSDPrice","pendingTx","setPendingTx","showRoiCalculator","setShowRoiCalculator","fullBalance","lpTokensToStake","fullBalanceNumber","usdToStake","annualRoi","annualRoiAsNumber","formattedAnnualRoi","handleChange","inputVal","USDPrice","handleSelectMax","handlePercentInput","totalAmount","RoiCalculatorModal","plus","ModalInput","ModalActions","AutoRenewIcon","valNumber","Label","ContentContainer","Amount","userDataReady","ArrowIcon","$toggled","actionPanelToggled","LiquidityWrapper","liquidity","displayLiquidity","ReferenceElement","MultiplierWrapper","displayMultiplier","tooltipContent","TokenWrapper","rawStakedBalance","pairContainer","ActionContainer","ActionTitles","ActionContent","IconButtonWrapper","StyledActionContainer","earningsUsd","handleHarvest","CellLayout","Earned","Liquidity","Multiplier","FarmTokenInfo","FarmTableHarvestAction","AccountNotConnect","StakeComponent","isStakeReady","onPresentDeposit","StakeActionDataNotReady","EnableStakeAction","StakedActionComponent","disabledMinusButton","disabledPlusButton","onPresentWithdraw","MinusIcon","MobileColumnSchema","sortable","DesktopColumnSchema","userBalanceInFarm","onPresentApyModal","FarmWidget","wplsAddress","firstPart","secondPart","AprWrapper","lpRewardsApr","originalValue","liquidityUrlPathParts","getLiquidityUrlPathParts","ApyButton","getImageUrlFromToken","TokenPairImage","primaryToken","secondaryToken","UIKitTokenPairImage","viemClientsPublicNodes","public","parseError","BaseError","useCatchTxError","waitForTransaction","opts","usePublicNodeWaitForTransaction","txResponseLoading","setTxResponseLoading","handleNormalError","handleTxError","fetchWithCatchTxError","callTx","fetchTxResponse","useApproveFarm","lpContract","onApprove","masterChefContract","handleStake","deposit","stakeFarm","onStake","handleUnstake","withdraw","unstakeFarm","onUnstake","StakedContainer","onDone","useStakeFarms","useUnstakeFarms","useStakedActions","isApproved","_WNATIVE$chainId","_NATIVE$chainId","NATIVE","_WNATIVE$chainId2","_NATIVE$chainId2","farmPid","harvestFarm","onReward","HarvestActionContainer","useHarvestFarm","earningsBigNumber","expandAnimation","collapseAnimation","StakeContainer","_templateObject8","InfoContainer","_templateObject9","ValueContainer","_templateObject10","ValueWrapper","_templateObject11","blockExplorerLink","Apr","HarvestAction","StakedAction","cells","Farm","earned","CellInner","StyledTr","tr","initialActivity","hasSetInitialValue","hasStakedAmount","actionPanelExpanded","setActionPanelExpanded","shouldRenderChild","toggleActionPanel","isSmallerScreen","tableSchema","columnNames","columnIndex","colSpan","ActionPanel","StyledTableBorder","TableWrapper","StyledTable","TableBody","tbody","TableContainer","ScrollButtonContainer","tableWrapperEl","useSearchParams","columns","original","getFarmEarnings","existingEarnings","boosted","_farm$userData","_farm$userData$proxy","proxyEarnings","proxy","sortedRows","lowercaseQuery","getDisplayApr","incRewardsApr","generateRow","newRow","_createElement","scrollToTop","scrollIntoView","behavior","FarmTypesWrapper","StyledItemRow","ToggleWrapper","FarmTypesFilter","v1FarmOnly","handleSetV1FarmOnly","v2FarmOnly","handleSetV2FarmOnly","farmTypesEnableCount","handleSetFarmTypesEnableCount","menuRef","InlineMenu","handleMenuClick","TradeIcon","FarmTabButtons","hasStakeInFinishedFarms","previousValue","rawEarningsBalance","earningsUSDC","Action","StakeAction","FarmCardInnerContainer","ExpandingWrapper","showExpandableSection","setShowExpandableSection","earnLabel","isPromotedFarm","CardHeading","CardActionsContainer","ExpandableSectionButton","ControlContainer","LabelWrapper","FilterContainer","ViewControls","Farms","farmsLP","_query","setQuery","normalizedUrlSearch","setViewMode","useUserFarmsViewMode","sortOption","chosenFarmsLength","isArchived","isInactive","usePollFarmsWithUserData","farmsConfig","farmToFetch","stakedOnly","setStakedOnly","setUserFarmStakedOnly","farmStakedOnly","TRUE","FALSE","useUserFarmStakedOnly","setV1FarmOnly","setV2FarmOnly","setFarmTypesEnableCount","activeFarms","isArchivedPid","inactiveFarms","archivedFarms","stakedOnlyFarms","stakedInactiveFarms","stakedArchivedFarms","farmsList","farmsToDisplay","farmsToDisplayWithAPR","totalLiquidity","incentiveRewardsApr","getFarmApr","incentivePriceUsd","poolLiquidityUsd","farmAddress","INC_PER_SECOND","NaN","incentiveRewardsAprAsNumber","lpAprs","numberOfFarmsVisible","setNumberOfFarmsVisible","chosenFarms","chosenFs","chosenFarmsMemoized","sortFarms","farmsCurrentlyVisible","cardLayout","FarmCard","PageHeader","SearchInput","FlexLayout","useFetchUserPools","fetchPoolsUserDataAsync","stakingTokenBalances","usePools","usePoolsWithVault","poolsWithoutAutoVault","apyModalLink","getPoolTimeInfo","endTimestamp","shouldShowSecondCountdown","secondsUntilStart","secondsRemaining","hasPoolStarted","secondsToDisplay","ExpandedWrapper","ExpandedFooter","poolContractAddress","isMetaMaskInScope","daysout","hoursout","minutesout","totalStakedTargetRef","totalStakedTooltip","totalStakedTooltipVisible","gte","ExpandableButtonWrapper","defaultExpanded","PoolCardHeaderTitle","subTitle","useApprovePool","plsxLabContract","updateUserAllowance","stakingTokenContract","isUsingPls","poolStakePls","enableEmergencyWithdraw","emergencyWithdraw","poolEmergencyUnstake","poolUnstake","units","isPlsPool","isRemovingStake","useStakePool","useUnstakePool","stakeAmount","setStakeAmount","hasReachedStakeLimit","setHasReachedStakedLimit","setPercent","getCalculatedStakingLimit","fullDecimalStakeAmount","userNotEnoughToken","usdValueStaked","formattedUsdValueStaked","getTokenLink","handleChangePercent","sliderPercent","percentageOfStakingMax","amountToStake","convertedInput","percentage","valueLabel","PercentageButton","isStaked","stakedTokenBalance","stakedTokenDollarBalance","onPresentTokenRequired","NotEnoughTokensModal","onPresentStake","StakeModal","onPresentUnstake","reachStakingLimit","sousChefContract","harvestPoolPls","harvestPool","formattedBalance","earningsDollarValue","isCompoundPool","useHarvestPool","shouldCompound","setShouldCompound","earningTokenBalance","earningTokenDollarBalance","hasEarnings","onPresentCollect","CollectModal","InlineText","harvest","poolCategory","needsApproval","HarvestActions","ApprovalAction","StakeActions","accountHasStakedBalance","isPLSXPool","PoolCardHeader","isStaking","AprRow","CardActions","handleToggle","hasStakeInFinishedPools","isExact","viewModeToggle","liveOrFinishedSwitch","BaseCell","CellContent","StyledCell","showStakedTag","showSubtitle","AprLabelContainer","showIcon","openRoiModal","labelText","toggled","isFullLayout","totalStakedBalance","renderBlocks","isLoadingBlockData","showLoading","isAutoVault","actionTitle","handlePoolApprove","pendingPoolTx","isNotVaultAndHasStake","stakingLimitEnd","StyledActionPanel","InfoSection","poolStakingTokenBalance","maxStakeRow","MaxStakeRow","secondsRow","aprRow","totalStakedRow","Harvest","Stake","StyledRow","isLargerScreen","setExpanded","shouldRenderActionPanel","toggleExpanded","NameCell","AprCell","EarningsCell","TotalStakedCell","EndsInCell","ExpandActionCell","PoolRow","CardLayout","PoolControls","Pools","useUserPoolStakedOnly","useUserPoolsViewMode","numberOfPoolsVisible","setNumberOfPoolsVisible","chosenPoolsLength","finishedPools","openPools","partition","stakedOnlyFinishedPools","stakedOnlyOpenPools","useFetchPublicPoolsData","fetchPoolsDataWithFarms","poolsCurrentlyVisible","showFinishedPools","chosenPools","poolsToSort","_pool$totalStaked","sortPools","PoolCard","tableLayout","PoolsTable","PoolTabButtons","Fields","PoolFinder","activeField","setActiveField","TOKEN1","setCurrency0","setCurrency1","validPairNoLiquidity","hasPosition","TOKEN0","prerequisiteMessage","srcFailedLoading","LogoLoader","DoubleCurrencyWrapper","address0","address1","formatAmount","notation","displayThreshold","tokenPrecision","isInteger","_value$toFixed$match","getFirstThreeNonZeroDecimals","precision","amountWithPrecision","Intl","NumberFormat","useGrouping","format","isNegative","abs","HoverIcon","StarFillIcon","StarLineIcon","infoClientWithChain","INFO_BY_CHAIN","GraphQLClient","TOTAL_FEE","LP_HOLDERS_FEE","PCS_V2_START","ONE_DAY_UNIX","ONE_HOUR_SECONDS","ITEMS_PER_INFO_TABLE_PAGE","TOKEN_BLACKLIST","TransactionType","mapMints","mint","MINT","sender","token0Symbol","token1Symbol","amountUSD","amountToken0","amount0","amountToken1","amount1","mapBurns","burn","BURN","mapSwaps","SWAP","amount0In","amount0Out","amount1In","amount1Out","mapDayData","tokenDayData","date","volumeUSD","dailyVolumeUSD","liquidityUSD","totalLiquidityUSD","mapPairDayData","pairDayData","reserveUSD","fetchChartData","getEntityDayDatas","_firstAvailableDayDat","_firstAvailableDayDat2","chartEntries","skip","allFound","fetchError","formattedDayDatas","dayData","firstAvailableDayData","dayOrdinal","latestLiquidityUSD","dayjs","unix","getPoolChartData","gql","pairDayDatas","getAmountChange","valueNow","valueBefore","getPercentChange","getChangeForPeriod","valueOnePeriodAgo","valueTwoPeriodsAgo","currentPeriodAmount","previousPeriodAmount","getDeltaTimestamps","startOf","fetchTopPools","timestamp24hAgo","POOL_AT_BLOCK","blockString","addressesString","fetchPoolData","block24h","block48h","block7d","block14d","poolAddresses","promises","gqlQuery","parsePoolData","poolData","token0Price","token1Price","fetchAllPoolDataWithAddress","blocks","fetchDataPromises","formattedPoolData","formattedPoolData24h","formattedPoolData48h","formattedPoolData7d","formattedPoolData14d","_current$timestamp","oneDay","twoDays","week","twoWeeks","volumeUSDChange","volumeUSDWeek","volumeUSDChangeWeek","liquidityUSDChange","liquidityToken0","liquidityToken1","totalFees24h","totalFees7d","lpFees24h","lpFees7d","lpApr7d","getLpFeesAndApr","fetchAllPoolData","fetchTopPoolAddresses","POOL_TRANSACTIONS","mints","burns","PULSEX_DAY_DATAS","getOverviewChartData","pulsexDayDatas","SNAPSHOT_BASE_URL","NEXT_PUBLIC_SNAPSHOT_BASE_URL","BLOCKS_CLIENT","BLOCKS_CLIENT_TESTNET","QUOTING_API","BLOCKS_CLIENT_WITH_CHAIN","graphQLClient","variables","race","multiQuery","queryConstructor","subqueries","endpoint","skipCount","fetchedData","subqueriesSlice","requestWithTimeout","blocksQueryConstructor","getBlocksFromTimestamps","timestamps","sortDirection","getBlockSubqueries","useBlockFromTimeStampQuery","timestampsString","timestampsArray","getOverviewData","formatPulseXFactoryResponse","rawPulseXFactory","totalTransactions","totalVolumeUSD","GLOBAL_TRANSACTIONS","getTokenChartData","tokenDayDatas","POOLS_FOR_TOKEN","asToken0","asToken1","priceQueryConstructor","time","getPriceSubqueries","tokenPrices","priceKey","_prices$priceKey","derivedPLS","priceUSD","tokenPriceIndex","tokenPrice","_prices$priceKey$plsP","_prices$priceKey2","plsPrice","sortedTokenPrices","formattedHistory","high","low","fetchTopTokens","TOKEN_AT_BLOCK","fetchTokenData","tokenAddresses","parseTokenData","tokenData","derivedUSD","tradeVolumeUSD","fetchAllTokenDataByAddresses","parsed","parsed24","parsed48","parsed7d","parsed14d","liquidityUSDOneDayAgo","priceUSDOneDay","priceUSDWeek","priceUSDChange","priceUSDChangeWeek","txCount","exists","fetchAllTokenData","fetchTokenAddresses","TOKEN_TRANSACTIONS","mints0","mintsAs0","mints1","mintsAs1","burns0","burnsAs0","burns1","burnsAs1","swaps0","swapsAs0","swaps1","swapsAs1","QUERY_SETTINGS_IMMUTABLE","QUERY_SETTINGS_WITHOUT_INTERVAL_REFETCH","retryDelay","QUERY_SETTINGS_INTERVAL_REFETCH","keepPreviousData","useProtocolDataQuery","t24","t48","block24","block48","protocolData","_block24$number2","_block48$number2","_data$pulseXFactories2","_data24$pulseXFactori2","_data48$pulseXFactori2","data24","data48","overviewData","pulseXFactories","overviewData24","overviewData48","txCountChange","fetchProtocolData","useProtocolChartDataQuery","chartData","fetchGlobalChartData","usePoolDatasQuery","t24h","t48h","t7d","t14d","_data$address","usePoolChartDataQuery","_data$data","fetchPoolChartData","usePoolTransactionsQuery","_data$data2","fetchPoolTransactions","useAllTokenDataQuery","useTokenDatasQuery","withSettings","fetcher","addressGroup","allData","tokensWithData","_allData$a","usePoolsForTokenQuery","_data$addresses","fetchPoolsForToken","useTokenPriceDataQuery","timeWindow","_data$data4","fetchTokenPriceData","ClickableColumnHeader","PageButtons","Break","ResponsiveGrid","LinkWrapper","SORT_FIELD","LoadingRow","TableLoader","DataRow","poolDatas","sortField","setSortField","setSortDirection","page","setPage","maxPage","setMaxPage","extraPages","sortedPools","handleSort","newField","relativeTime","RadioGroup","loadingRow","abs0","abs1","outputTokenSymbol","inputTokenSymbol","toNow","txFilter","setTxFilter","sortedTransactions","toBeAbsList","firstField","secondField","filteredTransactions","handleFilter","newFilter","listV1","defaultTokenAndPoolListV1","listV2","defaultTokenAndPoolListV2","createDefaultTokenAndPoolList","tokensAtomV1","tokensAtomV2","_listsV1$chainId$toke","_listsV1$chainId","_listsV1$chainId$pool","_listsV1$chainId2","_listsV2$chainId$toke","_listsV2$chainId","_listsV2$chainId$pool","_listsV2$chainId2","listsV1","setListsV1","listsV2","setListsV2","v1","savedTokens","newToken","savedPools","addPool","newPool","removePool","v2","preserveAspectRatio","strokeDashoffset","attributeName","dur","begin","stdDeviation","in","keyTimes","repeatCount","LoadingText","LoadingIndicator","BarChartLoader","BarChartLoaderSVG","LineChartLoader","LineChartLoaderSVG","CandleChartLoader","CandleChartLoaderSVG","useChartCallbacks","setHoverValue","setHoverDate","onMouseMove","isTooltipActive","activePayload","ResponsiveContainer","AreaChart","stopOpacity","XAxis","axisLine","tickLine","tickFormatter","toLocaleDateString","minTickGap","YAxis","tickCount","orientation","tick","dx","Tooltip","contentStyle","Area","CustomBar","BarChart","shape","TabToggle","TabToggleGroup","setValue","setLabel","chartRef","chartCreated","setChart","handleResize","_chartRef$current","parentElement","resize","clientWidth","timeScale","fitContent","scrollToPosition","isClient","_chartRef$current2","chart","createChart","ColorType","Solid","textColor","fontFamily","rightPriceScale","scaleMargins","borderVisible","secondsVisible","tickMarkFormatter","unixTime","watermark","horzLines","vertLines","crosshair","horzLine","labelVisible","vertLine","labelBackgroundColor","series","addCandlestickSeries","upColor","downColor","borderDownColor","borderUpColor","wickDownColor","wickUpColor","setData","applyOptions","subscribeCrosshairMove","param","point","hour","minute","timeZone","seriesData","ChartView","tokenPriceData","view","setView","VOLUME","hoverValue","hoverDate","currentDate","formattedTvlData","toDate","formattedVolumeData","PRICE","getLatestValueDisplay","valueToDisplay","_formattedVolumeData","_formattedTvlData","LineChart","CandleChart","ContentLayout","DEFAULT_TIME_WINDOW","routeAddress","useTokenDataQuery","_allTokenData$find","poolsForToken","useTokenTransactionsQuery","_data$data5","fetchTokenTransactions","useTokenChartDataQuery","_data$data3","fetchTokenChartData","priceData","adjustedPriceData","useInfoUserSavedTokensAndPools","Breadcrumbs","SaveIcon","ChartCard","PoolTable","TransactionTable","ResponsiveLogo","MAX_ITEMS","tokenDatas","maxItems","sortedTokens","CardWrapper","TopMoverCard","ScrollableRow","DataCard","topPriceIncrease","increaseRef","moveLeftRef","scrollInterval","setInterval","scrollLeft","scrollWidth","clearInterval","_entry$data","formattedTokens","watchListTokens","TokenTable","TopTokenMovers","usePoolsData","allPoolData","useAllPoolDataQuery","poolsData","useNonSpamPoolsData","rawPoolsData","others","diff","TokenButton","LockedTokensContainer","showWeeklyData","setShowWeeklyData","hasSmallDifference","totalFees","InnerContainer","SpeechBubble","setShowWarning","warningTextAsParts","warningTextComponent","SwapIcon","EarnIcon","MoreIcon","hideSubNav","forcePulseChain","useContractRead","watch","fetchStatus","_nativeBalance$data","hasLowNativeBalance","useBalance","wNativeToken","wNativeBalance","wNativeFetchStatus","plsxBalance","plsxFetchStatus","useGetPlsxBalance","isFetched","handleLogout","TxnIcon","Summary","TxnLink","renderIcon","txn","_txn$receipt","_txn$receipt2","_txn$summary","TransactionsContainer","trxDetails","isEmpty","useAllSortedRecentTransactions","hasTransactions","handleClearAll","_chains$find$name","chainIdNumber","TransactionRow","WalletView","LOW_NATIVE_BALANCE","parseEther","UIKitModalHeader","Tabs","TabsComponent","initialView","WALLET_INFO","newIndex","WRONG_NETWORK","WalletInfo","switchView","TRANSACTIONS","WalletTransactions","WalletWrongNetwork","onPresentWalletModal","UserMenuItems","WalletModal","onPresentTransactionModal","WalletUserMenuItem","LogoutIcon","UserMenu","userMenuText","setUserMenuText","userMenuVariable","jazzicon","UIKitUserMenu","WrapType","NOT_APPLICABLE","wrapType","useWrapCallback","inputCurrency","outputCurrency","wethContract","useWETHContract","sufficientBalance","WRAP","execute","txReceipt","inputError","UNWRAP","ADDRESS_ZERO","TICK_SPACINGS","NEGATIVE_ONE","ZERO","ONE","Q96","Q192","MAX_FEE","computePoolAddress","factoryAddress","initCodeHashManualOverride","from_","salt_","initCodeHash","salt","pad","isBytes","keccak256","getCreate2Address","encodeAbiParameters","parseAbiParameters","LiquidityMath","addDelta","FullMath","mulDivRoundingUp","product","MaxUint160","multiplyIn256","SqrtPriceMath","getAmount0Delta","sqrtRatioAX96","sqrtRatioBX96","roundUp","numerator1","numerator2","getAmount1Delta","getNextSqrtPriceFromInput","sqrtPX96","amountIn","zeroForOne","invariant9","getNextSqrtPriceFromAmount0RoundingUp","getNextSqrtPriceFromAmount1RoundingDown","getNextSqrtPriceFromOutput","amountOut","product2","denominator2","SwapMath","computeSwapStep","sqrtRatioCurrentX96","sqrtRatioTargetX96","amountRemaining","feePips","returnValues","exactIn","amountRemainingLessFee","sqrtRatioNextX96","feeAmount","TWO","POWERS_OF_2","mulShift","mulBy","Q32","_TickMath","getSqrtRatioAtTick","MIN_TICK","MAX_TICK","absTick","ratio","getTickAtSqrtRatio","sqrtRatioX96","MIN_SQRT_RATIO","MAX_SQRT_RATIO","sqrtRatioX128","msb","power","mostSignificantBit","log_2","log_sqrt10001","tickLow","tickHigh","TickMath","_NoTickDataProvider","getTick","_tick","ERROR_MESSAGE","nextInitializedTickWithinOneWord","_lte","_tickSpacing","NoTickDataProvider","tickComparator","TickList","validateList","ticks","tickSpacing","liquidityNet","isSorted","isBelowSmallest","isAtOrAboveLargest","binarySearch","nextInitializedTick","compressed","minimum","index2","nextInitializedTick2","maximum","countInitializedTicksCrossed","tickBefore","tickAfter","beforeIndex","afterIndex","Tick","liquidityGross","TickListDataProvider","ticksMapped","NO_TICK_DATA_PROVIDER_DEFAULT","Pool","factoryAddressOverride","tickCurrent","tickDataProvider","isArray","involvesToken","_this$_token0Price","_token0Price","_this$_token1Price","_token1Price","getOutputAmount","sqrtPriceLimitX96","amountCalculated","outputAmount","outputToken","getInputAmount","amountSpecifiedRemaining","inputToken","amountSpecified","exactInput","sqrtPriceX96","sqrtPriceStartX96","tickNext","initialized","sqrtPriceNextX96","maxLiquidityForAmount0Imprecise","intermediate","maxLiquidityForAmount0Precise","maxLiquidityForAmount1","maxLiquidityForAmounts","useFullPrecision","maxLiquidityForAmount0","liquidity0","liquidity1","encodeSqrtRatioX96","ratioX192","sqrt","tickToPrice","baseToken","Price$1","PositionMath","getToken0Amount","tickLower","tickUpper","getToken1Amount","Position","_token0Amount","_token1Amount","_mintAmounts","token0PriceLower","token0PriceUpper","ratiosAfterSlippage","slippageTolerance","priceLower","asFraction","Percent$1","priceUpper","sqrtRatioX96Lower","sqrtRatioX96Upper","mintAmountsWithSlippage","poolLower","poolUpper","positionThatWillBeCreated","fromAmounts","mintAmounts","burnAmountsWithSlippage","fromAmount0","fromAmount1","bigintIsh","encodeRouteToPath","exactOutput","firstInputToken","path2","types2","encodePacked","reverse","_Multicall","encodeMulticall","calldatas","ABI","Multicall","_SelfPermit","encodePermit","expiry","SelfPermit","_Payments","encodeFeeBips","encodeUnwrapWETH9","amountMinimum","recipient","feeOptions","validateAndParseAddress","feeBips","feeRecipient","encodeSweepToken","encodeRefundETH","Payments","MaxUint128","isMint","_NonfungiblePositionManager","encodeCreate","createCallParameters","calldata","addCallParameters","amount0Desired","amount1Desired","minimumAmounts","amount0Min","amount1Min","createPool","token0Permit","token1Permit","tokenId","useNative","wrappedValue","encodeCollect","involvesETH","expectedCurrencyOwed0","expectedCurrencyOwed1","amount0Max","amount1Max","ethAmount","tokenAmount","collectCallParameters","removeCallParameters","partialPosition","liquidityPercentage","permit","collectOptions","burnToken","safeTransferFromParameters","NonfungiblePositionManager","SwapQuoter","quoteCallParameters","tradeType","singleHop","quoteAmount","swapAbi","useQuoterV2","V2ABI","V1ABI","_options$sqrtPriceLim","baseQuoteParams","tokenPath","v2QuoteParams","TradeType$1","EXACT_INPUT","v1QuoteParams","tradeTypeFunctionName","EXACT_OUTPUT","_Staker","encodeClaim","incentiveKey","_options$amount","_encodeIncentiveKey","rewardToken","collectRewards","incentiveKeys","withdrawToken","withdrawOptions","claimOptions","encodeDeposit","INCENTIVE_KEY_ABI","refundee","Staker","_SwapRouter","swapCallParameters","trades","sampleTrade","ZERO_IN","ZERO_OUT","totalAmountOut","sum","mustRefund","TradeType","inputIsNative","outputIsNative","routerMustCustody","totalValue","inputTokenPermit","_options$sqrtPriceLim2","exactInputSingleParams","amountOutMinimum","_options$sqrtPriceLim3","exactOutputSingleParams","amountInMaximum","exactInputParams","exactOutputParams","MULTICALL_ADDRESS","DEFAULT_GAS_LIMIT_BY_CHAIN","DEFAULT_GAS_BUFFER","DEFAULT_GAS_BUFFER_BY_CHAIN","iMulticallABI","getMulticallContract","getDefaultGasLimit","gasLimitOnChain","getDefaultGasBuffer","gasBufferOnChain","getGasLimit","gasLimitInput","maxGasLimit","maxGasLimitInput","gasBuffer","gasBufferInput","gasLimitOverride","toBigInt","gasLeft","getGasLimitOnChain","getBlockConflictTolerance","BLOCK_CONFLICT_TOLERANCE","DEFAULT_BLOCK_CONFLICT_TOLERANCE","multicallByGasLimit","dropUnexecutedCalls","chunks","callRequest","gasCostLimit","singleGasLimit","currentChunk","warn","blockConflictTolerance","callReturns","minBlock","maxBlock","simulate","multicallWithGasLimitation","lastSuccessIndex","successIndex","gasUsed","formatCallReturn","remainingCalls","remainingResults","nextBlockNumber","NodeJSCache","nodeCache","addStream","_stream","addSerializers","_serializers","_simple","reopenFileStreams","level","levels","_name","trace","fatal","_event","_listener","once","off","removeAllListeners","setMaxListeners","_n","getMaxListeners","rawListeners","listenerCount","prependListener","prependOnceListener","eventNames","CachingGasStationProvider","gasPriceProvider","cache","GAS_KEY","getGasPrice","cachedGasPrice","gasPriceWei","IMetric","metric","putDimensions","dimensions","putMetric","CachingTokenListProvider","tokenCache","CACHE_KEY","chainToTokenInfos","_16","chainId2","chainSymbolToTokenInfo","chainAddressToTokenInfo","fromTokenListURI","tokenListURI","buildTokenList","axios3","fromTokenList","tokenProvider","getTokens","_addresses","addressToToken","symbolToToken","getTokenByAddress","getTokenBySymbol","getAllTokens","_symbol","buildToken","cacheKey","cachedToken","PULSEX_QUOTER_ADDRESSES","PULSEX_SWAP_ROUTER_ADDRESSES","TOKEN_VALIDATOR_ADDRESSES","QUOTER_V2_ADDRESSES","CurrencyAmount$1","V1_SUPPORTED","V2_SUPPORTED","WRAPPED_NATIVE_CURRENCY","_ExtendedEther","Ether","_this$_cachedExtended","_cachedExtendedEther","ExtendedEther","MSG_SENDER","ADDRESS_THIS","_ApproveAndCall","encodeApproveMax","encodeApproveMaxMinusOne","encodeApproveZeroThenMax","encodeApproveZeroThenMaxMinusOne","encodeCallPositionManager","invariant3","encodedMulticall","encodeAddLiquidity","minimalPosition","addLiquidityOptions","encodeApprove","approvalType","ApproveAndCall","_MulticallExtended","validation","previousBlockhash","bytes32","validateAndParseBytes32","MulticallExtended","_PaymentsExtended","encodePull","encodeWrapETH","PaymentsExtended","MixedRouteSDK","output","_midPrice","allOnSameChain","wrappedInput","currentInputToken","nextToken","midPrice","nextInput","price2","tradeComparator","total","MixedRouteTrade","_inputAmount","totalInputFromRoutes","_outputAmount","totalOutputFromRoutes","executionPrice","_this$_executionPrice","_executionPrice","_priceImpact","spotOutputAmount","fromRoute","amounts","outputAmount2","fromFractionalAmount","routes","fromRoutes","populatedRoutes","createUncheckedTrade","constructorArguments","createUncheckedTradeWithMultipleRoutes","numPools","poolAddressSet","slippageAdjustedAmountOut","worstExecutionPrice","currentPools","nextAmountIn","bestTrades","isInsufficientInputAmountError","sortedInsert","poolsExcludingThisPool","RouteV1","RouteV1$1","v1Route","RouteV2","RouteV2$1","v2Route","MixedRoute","mixedRoute","Trade","v1Routes","v2Routes","mixedRoutes","routev1","routev2","_this$_executionPrice2","slippageAdjustedAmountIn","populatedV1Routes","populatedV2Routes","populatedMixedRoutes","v1Trade","v2Trade","mixedRouteTrade","partitionMixedRouteByProtocol","getOutputOfPools","ZERO3","REFUND_ETH_PRICE_IMPACT_THRESHOLD","encodeV1Swap","performAggregatedSlippageCheck","encodeV2Swap","encodeMixedRouteSwap","mixedRouteIsAllV1","route2","sections","isLastSectionInRoute","newRouteOriginal","newRoute","encodeSwaps","isSwapAndAdd","individualTrades","numberOfTrades","numberOfTrades2","quoteAmountOut","totalAmountIn","riskOfPartialFill","deadlineOrPreviousBlockhash","swapAndAddCallParameters","tokenInApprovalType","tokenOutApprovalType","totalAmountSwapped","outputTokenPermit","positionAmountIn","positionAmountOut","getPositionAmounts","amountOutRemaining","v3TradeWithHighPriceImpact","currencyAmount0","currencyAmount1","SwapRouter","routeToString","routeStr","poolFeePath","routeAmountsToString","routeAmounts","total2","routeStrings","portion","poolToString","erc20Abi","eUSDC_PULSECHAIN","eUSDT_PULSECHAIN","eWBTC_PULSECHAIN","eDAI_PULSECHAIN","PLSX_PULSECHAIN","eHEX_PULSECHAIN","HEX_PULSECHAIN","INC_PULSECHAIN","WETH_PULSECHAIN","PLSX_TESTNET","INC_TESTNET","HEX_TESTNET","tDAI_TESTNET","TokenProvider","multicall2Provider","getTokenSymbol","providerConfig","callSameFunctionOnMultipleContracts","bytes32Abi","bytes32SymbolCall","error2","getTokenDecimals","uniq","symbolsResult","decimalsResult","symbols","symbolResult","decimalResult","decimal","CACHE_SEED_TOKENS","eUSDC","eUSDT","eDAI","eWBTC","eHEX","HEX","WETH","tDAI","CachingTokenProviderWithFallback","primaryTokenProvider","fallbackTokenProvider","seedTokens","addressesToFindInPrimary","addressesToFindInSecondary","primaryTokenAccessor","secondaryTokenAccessor","IGasPriceProvider","EIP1559GasPriceProvider","priorityFeePercentile","blocksToConsider","feeHistoryRaw","getFeeHistory","blockCount","rewardPercentiles","feeHistory","baseFeePerGas","gasUsedRatio","oldestBlock","reward","nextBlockBaseFeePerGas","averagePriorityFeePerGas","feeHistoryReadable","tokenValidatorAbi","DEFAULT_ALLOWLIST","TokenValidatorProvider","tokenValidationCache","tokenValidatorAddress","gasLimitPerCall","amountToFlashBorrow","allowList","BASES","validateTokens","tokenAddressToToken","addressesRaw","tokenToResult","functionParams","multicallResult","callSameFunctionOnContractWithMultipleParams","additionalConfig","gasLimitPerCallOverride","resultWrapper","validationResult","getValidationByToken","pulsexPairABI","V2PoolProvider","retryOptions","retries","minTimeout","maxTimeout","POOL_ADDRESS_CACHE","getPools","sortedTokenPairs","sortedPoolAddresses","tokenPair","poolAddress","getPoolAddress","reservesResults","getPoolsData","poolAddressToPool","invalidPools","reservesResult","token02","token12","_ref17","poolStrs","getPool","getPoolByAddress","getAllPools","cachedAddress","retry7","V1PoolProvider","_ref18","buildTrade","tokenInCurrency","tokenOutCurrency","v1RouteAmounts","routeAmount","v2RouteAmounts","mixedRouteAmounts","amountCurrency","quoteCurrency","UNSUPPORTED_TOKENS","tags","keywords","V1Route","V2Route","MixedRoute2","usdGasTokensByChain","IV1GasModelFactory","IV2GasModelFactory","IOnChainGasModelFactory","getBestSwapRoute","percents","routesWithValidQuotes","routeType","routingConfig","forceMixedRoutes","quotes","percentToQuotes","routeWithValidQuote","swapRoute","by","percentToSortedQuotes","routeQuotes","routeQuoteA","routeQuoteB","quoteCompFn","sumFn","currencyAmounts","bestQuote","bestSwap","bestSwapsPerSplit","FixedReverseHeap","minSplits","maxSplits","forceCrossProtocol","routeWithQuote","queue","Queue","enqueue","curRoutes","percentIndex","remainingPercent","special","splits","startedSplit","top5","consume","onQueue","layer","dequeue","percentA","candidateRoutesA","routeWithQuoteA","findFirstRouteNotUsingUsedPools","remainingPercentNew","curRoutesNew","quoteNew","postSplitNow","quoteGasAdjusted","quoteAdjustedForGas","estimatedGasUsed","gasEstimate","usdToken","usdTokenDecimals","estimatedGasUsedUSDs","decimalsDiff","gasCostInUSD","estimatedGasUsedUSD","normalizedUsdToken","routeUSDGasEstimates","estimatedGasUsedQuoteToken","gasCostInToken","routeWithQuotes","routeAmountA","routeAmountB","getBestSwapRouteBy","rq","missingAmount","numSplits","estimatedGasUSD","estimatedGasToken","usedRoutes","candidateRouteQuotes","usedPoolAddresses","protocolsSet","usedProtocols","routeQuote","calculateRatioAmountIn","optimalRatio","inputTokenPrice","inputBalance","outputBalance","amountToSwapRaw","getV1NativePool","poolProvider","getV2NativePool","getHighestLiquidityV1andV2USDPool","poolProviderV1","poolProviderV2","usdTokens","usdPools","poolsRawV1","poolsV1","maxPoolV1","poolsRawV2","poolsV2","maxPoolV2","BASE_SWAP_COST","COST_PER_EXTRA_HOP","V2HeuristicGasModelFactory","buildGasModel","_ref19","usdPool2","getHighestLiquidityUSDPool","estimateGasCost","gasCostInEth","gasUse","ethPool","getEthPool","usdPool","ethTokenPrice","gasCostInTermsOfQuoteToken","ethTokenPriceBase","baseCurrency","ethTokenPriceQuote","ethTokenPriceUSDPool","gasCostInTermsOfUSD","usdT1","usdT2","gasCostInEthToken","hops","totalGasCostWei","poolsRaw","MixedRouteHeuristicGasModelFactory","_ref20","v1poolProvider","V1poolProvider","v2poolProvider","V2poolProvider","nativeCurrency","totalGasCostNativeCurrency","baseGasUse","nativeV1Pool","nativeV2Pool","nativePool","nativeTokenPrice","nativeTokenPriceBase","nativeTokenPriceQuote","nativeTokenPriceUSDPool","gasCostInNativeToken","baseGasCostWei","BASE_SWAP_COST2","COST_PER_EXTRA_HOP2","V1HeuristicGasModelFactory","_ref21","BaseQuoter","blockedTokenListProvider","tokenValidatorProvider","getRoutesThenQuotes","gasModel","getRoutes","routesResult","getQuotes","candidatePools","applyTokenValidatorToPools","isInvalidFn","tokenValidationResults","token0Validation","token1Validation","token0Invalid","token1Invalid","V1RouteWithValidQuote2","_ref22","rawQuote","v1PoolProvider","V2RouteWithValidQuote2","_ref23","v2PoolProvider","MixedRouteWithValidQuote2","_ref24","mixedRouteGasModel","computeAllRoutes","buildRoute","_routes$","poolsUsed","computeRoutes","tokenIn2","tokenOut2","currentRoute","poolsUsed2","_previousTokenOut","curPool","previousTokenOut","currentTokenOut","pop","baseTokensByChain","getV1CandidatePools","_ref25","_baseTokensByChain$ch","subgraphProvider","v1PoolSelection","topN","topNDirectSwaps","topNTokenInOut","topNSecondHop","topNWithEachBaseToken","topNWithBaseToken","tokenInAddress","tokenOutAddress","beforeSubgraphPools","allPoolsRaw","filteredPools","token0InBlocklist","token1InBlocklist","subgraphPoolsSorted","sortBy","tokenListPool","reserve","poolAddressesSoFar","addToAddressSet","baseTokens","topByBaseWithTokenIn","subgraphPool","topByBaseWithTokenOut","topByDirectSwapPool","supply","wethAddress","topByEthQuoteTokenPool","topByTVL","topByTVLUsingTokenIn","topByTVLUsingTokenOut","topByTVLUsingTokenInSecondHops","secondHopId","topByTVLUsingTokenOutSecondHops","subgraphPools","compact","tokenAccessor","printV1SubgraphPool","_tokenAccessor$getTok","_tokenAccessor$getTok2","_tokenAccessor$getTok3","_tokenAccessor$getTok4","top2DirectSwap","top2EthQuotePool","tokenPairsRaw","beforePoolsLoad","poolAccessor","selections","getV2CandidatePools","_ref26","_baseTokensByChain$ch2","v2PoolSelection","printV2SubgraphPool","_tokenAccessor$getTok5","_tokenAccessor$getTok6","_tokenAccessor$getTok7","_tokenAccessor$getTok8","V1Quoter","v1SubgraphProvider","v1QuoteProvider","v1GasModelFactory","tokenValidation","maxSwapsPerPath","computeAllV1Routes","_routingConfig","_gasModel","quoteFn","getQuotesManyExactIn","getQuotesManyExactOut","beforeQuotes","routesWithQuotes","v1GasModel","_ref28","amountQuote","V2Quoter","v2SubgraphProvider","v2QuoteProvider","v2GasModelFactory","computeAllV2Routes","v2GasModel","_ref29","MixedQuoter","onChainQuoteProvider","V1poolAccessor","V2poolAccessor","mixedRouteCandidatePools","_ref27","v1subgraphProvider","v2subgraphProvider","V1subgraphPools","V1candidatePools","V2subgraphPools","V2candidatePools","V2topByTVLPoolIds","V2topByTVLSortedPools","V1sortedPools","buildV2Pools","V2subgraphPool","V1subgraphPool","v2reserveUSD","v1reserveUSD","V1tokenPairsRaw","V1tokenPairs","V2tokenPairsRaw","V2tokenPairs","buildPoolsBySelection","getMixedRouteCandidatePools","parts","computeAllMixedRoutes","_ref30","AlphaRouter","_ref31","mixedRouteGasModelFactory","swapRouterProvider","simulator","routeCachingProvider","UniswapMulticallProvider","CachingV1PoolProvider","ID_TO_CHAIN_ID","NodeCache","stdTTL","useClones","V1QuoteProvider","OnChainQuoteProvider","multicallChunk","quoteMinSuccessRate","CachingV2PoolProvider","V2QuoteProvider","V1SubgraphProviderWithFallBacks","StaticV1SubgraphProvider","V2SubgraphProviderWithFallBacks","StaticV2SubgraphProvider","gasPriceProviderInstance","OnChainGasPriceProvider","LegacyGasPriceProvider","SwapRouterProvider","v1Quoter","v2Quoter","mixedQuoter","routeToRatio","token0Balance","token1Balance","swapAndAddConfig","swapAndAddOptions","distributionPercent","preSwapOptimalRatio","calculateOptimalRatio","methodParameters","postSwapTargetPool","exchangeRate","ratioAchieved","maxIterations","amountToSwap","protocols","inputBalanceUpdated","outputBalanceUpdated","newRatio","absoluteValue","ratioErrorTolerance","iterationN","buildSwapAndAddMethodParameters","initialBalanceTokenIn","initialBalanceTokenOut","preLiquidityPosition","swapConfig","_partialRoutingConfig","_this$routeCachingPro","partialRoutingConfig","determineCurrencyInOutFromTradeType","getBlockNumberPromise","getGasPriceWei","getGasModels","cacheMode","getCacheMode","cachedRoutes","_this$routeCachingPro2","getCachedRoute","tradeTypeStr","tokenPairSymbolTradeTypeChainId","swapRouteFromCachePromise","getSwapRouteFromCache","swapRouteFromChainPromise","getSwapRouteFromChain","swapRouteFromCache","swapRouteFromChain","swapRouteRaw","quoteDiff","quoteGasAdjustedDiff","gasUsedDiff","_cachedRoutes","quoteFromChain","quoteFromCache","quoteGasAdjustedFromChain","quoteGasAdjustedFromCache","gasUsedFromChain","gasUsedFromCache","routesFromChain","routesFromCache","originalAmount","routesToCache","CachedRoutes","fromRoutesWithValidQuotes","setCachedRoute","buildSwapMethodParameters","fromAddress","beforeSimulate","swapRouteWithSimulation","protocolsCovered","cachedBlockNumber","quoteBlockNumber","quotePromises","percentsSet","mixedRoutesFromCache","cachedRoute","getQuotesResults","allRoutesWithValidQuotes","quoteResult","getAmountDistribution","noProtocolsSpecified","v1ProtocolSpecified","v2ProtocolSpecified","v1SupportedInChain","v2SupportedInChain","shouldQueryMixedProtocol","mixedProtocolAllowed","allCandidatePools","getQuoteResult","bestSwapRoute","emitPoolSelectionMetrics","beforeGasTimestamp","amountToken","beforeGasModel","mixedRouteGasModelPromise","swapAndAddParameters","swapOptions","addLiquidityConfig","finalBalanceTokenIn","finalBalanceTokenOut","approvalTypes","getApprovalType","approvalTokenIn","approvalTokenOut","allPoolsBySelection","poolAddressesUsed","poolsBySelection","topNSelection","topNUsed","hasV1Route","hasV2Route","hasMixedRoute","upperSqrtRatioX96","lowerSqrtRatioX96","repeat","userHasSufficientBalance","neededBalance","balanceOf","numeratorAbs","denominatorAbs","attempt","getBlockNumber","IMulticallProvider","erc20Abi2","results2","result2","hexToString","_additionalConfig$gas","functionParam","gasUsedForSuccess","approxGasUsedPerSuccessCall","stats","percentile","callMultipleFunctionsOnSameContract","_additionalConfig$gas2","functionNames","DEFAULT_EIP_1559_SUPPORTED_CHAINS","eip1559GasPriceProvider","legacyGasPriceProvider","eipChains","pulsexQuoterAbi","quoterV2Abi","BlockConflictError","SuccessRateError","ProviderBlockHeaderError","ProviderTimeoutError","ProviderGasError","batchParams","gasErrorFailureOverride","successRateFailureOverrides","blockNumberConfig","baseBlockOffset","rollback","quoterAddressOverride","getQuoterAddress","useMixedRouteQuoter","quoterAddress","amountIns","getQuotesManyData","_providerConfig","_providerConfig$block3","validateRoutes","originalBlockNumber","encodedRoute","encodeMixedRouteToPath","normalizedChunk","inputsChunked","quoteStates","inputChunk","haveRetriedForSuccessRate","haveRetriedForBlockHeader","blockHeaderRetryAttemptNumber","haveIncrementedBlockHeaderFailureCounter","blockHeaderRolledBack","haveRetriedForBlockConflictError","haveRetriedForOutOfGas","haveRetriedForTimeout","haveRetriedForUnknownReason","finalAttemptNumber","expectedCallsMade","totalCallsMade","quoteResults","_bail","attemptNumber","failed","partitionQuotes","quoteState","idx","inputs2","successRateError","validateSuccessRate","successfulQuoteStates","failedQuoteStates","pendingQuoteStates","retryAll","validateBlockNumbers","reasonForFailureStr","failedQuoteState","rollbackBlockOffset","attemptsBeforeRollback","normalizedChunk2","inputsChunked2","routesQuotes","processQuoteResults","successfulQuotes","failedQuotes","quotesResultsByRoute","debugFailedQuotes","quoteResults2","amountStr","failedQuotesByRoute","failedFlat","f2","amounts2","totalCalls","blockNumbers","uniqBlocks","allResults","numResults","successRate","pulsexSwapRouterAbi","tokenInAmount","tokenOutAmount","_tx$results$","_tx$results$2","CachedRoute","_ref32","_ref33","blocksToLive","notExpired","POOL_KEY","poolsToGetTokenPairs","poolsToGetAddresses","cachedPool","poolsFound","amountOuts","debugStrs","amountQuotes","insufficientInputAmountErrorCount","insufficientReservesErrorCount","outputAmountNew","InsufficientInputAmountError","InsufficientReservesError","_ref34","_ref35","fallbacks","BASES_TO_CHECK_TRADES_AGAINST2","_ref36","_ref37","Protocol","invariant","V1RouteSDK","V1","V2RouteSDK","V2","MIXED","V1TradeSDK","V2TradeSDK","MixedRouteTradeSDK","TradeState","InterfaceTrade","gasUseEstimateUSD","parsedTokenIn","parseToken","parsedTokenOut","rawAmountIn","rawAmountOut","routeProtocol","getRouteProtocol","genericPoolPairParser","parsePairV1","parsePairV2","transformSwapRoute","routeResponse","subRoute","amnt","qt","curRoute","nextPool","edgeAmountIn","edgeAmountOut","amountDecimals","quoteDecimals","quoteGasAdjustedDecimals","gasUseEstimateQuote","gasUseEstimateQuoteDecimals","gasUseEstimate","routeString","REVALIDATE_AFTER","CLIENT_PARAMS","QUERY_TIMEOUT","QUERY_RETRY_COUNT","fetchQuote","deferQuotient","qs","amountRaw","controller","AbortController","abort","signal","deferedAmount","getClientSideQuote","DOMException","useAutorouterTrade","autoRevalidate","_useStablecoinAmountF","isSyncing","isError","deferredChainId","deferredIdentifierIn","deferredIdentifierOut","deferredTradeType","isPlaceholderData","isPending","placeholderData","isStale","useQuoter","fiatValue","parsedForDecimals","tryParseCurrencyAmount","useStablecoinAmountFromFiatValue","otherAmount","NO_ROUTE_FOUND","_route$filter$map","_route$filter$map2","_route$filter$map3","transformRoutesToTrade","SYNCING","VALID","useBestTrade","routingAPITrade","useIsWrapping","ENS_NAME_REGEX","useGetENSAddressByName","ensNameOrAddress","recipientENSAddress","useEnsAddress","useParsedQueryString","substr","parseArrays","ignoreQueryPrefix","parsedQueryString","getTimeWindowChange","lineChartData","_lineChartData$find$v","_lineChartData$find","firstValue","changeValue","MIN_VALUE_DISPLAYED","changePercentage","isChangePositive","getTokenAddress","lowerCaseAddress","pairDataById","derivedPairDataById","inputCurrencyId","outputCurrencyId","otherField","pairData","swapReducerAtom","normalizeDerivedChartData","_data$token1DerivedUS","_data$token1DerivedUS2","token0DerivedUSD","token1DerivedUSDEntryMap","token1DerivedUSD","token0DerivedUSDEntry","token1DerivedUSDEntry","token0Id","token1Id","getTVL","getDerivedPricesQueryConstructor","PairDataTimeWindowEnum","PROTOCOL","SWAP_INFO_BY_CHAIN","V1_SUBGRAPHS","V2_SUBGRAPHS","getTokenBestTvlProtocol","infos","allSettled","bestProtocol","bestTVL","totalValueLocked","getTokenDerivedUSDCPrices","rawPrices","getDerivedPrices","protocol0","protocol1","DAY","WEEK","MONTH","YEAR","getInterval","endTimestampUnix","getSkipDaysToStart","useSwapState","useSwapActionHandlers","onCurrencySelection","onSwitchTokens","onChangeRecipient","BAD_RECIPIENT_ADDRESSES","involvesAddress","useSingleTokenSwapInfo","baseAmount","useDerivedSwapInfo","isExactIn","parsedAmount","bestTradeExactOut","currencyAmountOut","_TradeV1$bestTradeExa3","_TradeV1$bestTradeExa4","_TradeV2$bestTradeExa3","_TradeV2$bestTradeExa4","useTradeExactOut","_inputError5","_inputError6","formattedTo","_inputError7","_inputError8","slippageAdjustedAmounts","balanceIn","parseIndependentFieldURLParameter","urlParam","queryParametersToSwapState","parsedQs","nativeSymbol","defaultOutputCurrency","validatedRecipient","exactAmount","exactField","useDefaultsFromURLSearch","setResult","useFetchPairPrices","currentSwapPrice","normalizedDerivedPairData","fetchDerivedPriceData","activeToken","pairPrice","normalizeDerivedPairDataByActiveToken","hasSwapPrice","SlippageError","DeadlineError","inputRegex","SlippageTabs","setUserSlippageTolerance","setTtl","useUserTransactionTTL","slippageInput","setSlippageInput","deadlineInput","setDeadlineInput","slippageInputIsValid","deadlineInputIsValid","slippageError","deadlineError","RiskyLow","RiskyHigh","InvalidInput","parseCustomSlippage","valueAsIntFromRoundedFloat","parseCustomDeadline","valueAsInt","onBlur","setShowConfirmExpertModal","setShowExpertModeAcknowledgement","toggleExpertMode","isRememberChecked","setIsRememberChecked","prompt","showConfirmExpertModal","showExpertModeAcknowledgement","showAcknowledgement","useUserExpertModeAcknowledgementShow","setSingleHopOnly","ExpertModal","TransactionSettings","handleExpertModeToggle","onPresentSettingsModal","SettingsModal","getActiveSubMenuItem","_menuItem$items$filte","activeSubMenuItems","subMenuItem","pulsexPriceUsd","showWarning","activeMenuItem","menuConfig","getActiveMenuItem","activeSubMenuItem","UikitMenu","GlobalSettings","TestnetWarningBanner","buyCakeLabel","StyledAnchor","StyledBridgeButton","BridgeButton","useRefreshBlockNumber","setFetch","refreshBlockNumber","mutate","useSWRConfig","ContainerRow","InputContainer","AddressInputPanel","debounceEnsName","withoutSpaces","autoCorrect","autoCapitalize","spellCheck","ArrowWrapper","clickable","ErrorText","severity","TruncatedText","SwapCallbackErrorInner","SwapCallbackErrorInnerAlertTriangle","SwapCallbackError","SwapShowAcceptChanges","FormattedPriceImpact","SwapModalFooterContainer","SwapModalFooter","_slippageAdjustedAmou","_slippageAdjustedAmou2","_trade$executionPrice","_trade$executionPrice2","_slippageAdjustedAmou3","_slippageAdjustedAmou4","_slippageAdjustedAmou5","_slippageAdjustedAmou6","swapErrorMessage","disabledConfirm","showAcceptChanges","onAcceptChanges","tradeInfoText","estimatedText","transactionRevertText","truncatedRecipient","recipientInfoText","recipientSentToText","postSentToText","StyledHeaderRow","SwapModalHeader","priceImpactSeverity","alignContent","_trade$inputAmount$to","_trade$inputAmount","_trade$inputAmount$cu","_trade$inputAmount2","_trade$inputAmount2$c","_trade$outputAmount$t","_trade$outputAmount","_trade$outputAmount$c","_trade$outputAmount2","_trade$outputAmount2$","originalTrade","tradeB","tradeA","isLastItem","AnimatedDropdown","useResizeObserver","useSpring","mass","tension","friction","clamp","animated","willChange","TradePrice","_price$baseCurrency","_price$quoteCurrency","_price$quoteCurrency2","_price$baseCurrency2","showInverted","setShowInverted","formattedPrice","flipPrice","StyledDetailsRow","RotatingArrow","TradeSummary","showDetails","setShowDetails","showRoute","SwapRoute","AdvancedSwapDetails","confirmPriceImpactWithoutFee","confirmWord","word","Grouping","Circle","CircleRow","Connector","prevConfirmed","ProgressCircles","steps","hexNumberString","SwapCallbackState","TransactionRejectedError","useSwapCallback","recipientAddress","swapCalls","swapMethods","RouterV1","feeOnTransfer","RouterV2","parameters","useSwapCallArguments","callback","estimatedCalls","gasError","bestCallOption","el","errorCalls","firstNoErrorCall","inputSymbol","outputSymbol","recipientAddressText","withRecipient","translatableWithRecipient","plsWarningTokens","safemoon","shouldShowSwapWarning","swapCurrency","SwapWarningTokens","warningToken","onCancel","handleContinueClick","isConfirmed","setIsConfirmed","preventClickHandler","querySelectorAll","Acknowledgement","useWarningImport","swapWarningCurrency","setSwapWarningCurrency","loadedInputCurrency","loadedOutputCurrency","urlLoadedTokens","_filter","loadedTokenList","importTokensNotInDefault","onPresentSwapWarningModal","SwapWarningModal","onPresentImportTokenWarningModal","ImportTokenWarningModal","swapWarningHandler","currencyInput","showSwapWarning","StyledPriceChart","$isExpanded","$isFullWidthContainer","isChartExpanded","$isDark","wordSpacing","formatOptions","dateFormattingByTimewindow","gradient1","gradient2","getChartColors","dateFormatting","hide","formatter","tooltipValue","BasicChart","_pairPrices","setTimeWindow","pairPrices","changePercentageToCurrent","changeValueToCurrent","isChangePositiveToCurrent","lastItem","copyPairPrices","chartHeight","NoChartAvailable","TokenDisplay","SwapLineChart","ChartButton","$active","setIsChartExpanded","isFullWidthContainer","chartView","setChartView","chartViewMode","useExchangeChartViewManager","SyncAltIcon","LineGraphIcon","currentIsExpanded","ShrinkIcon","ExpandIcon","_inputCurrency$wrappe","_outputCurrency$wrapp","_WNATIVE$inputCurrenc","_WNATIVE$outputCurren","isPairReversed","setIsPairReversed","togglePairReversed","prePairReversed","PlsWplsNotice","PriceChart","StyledSwapContainer","StyledInputCurrencyWrapper","CurrencyInputContainer","ColoredIconButton","setIsChartDisplayed","toggleChartDisplayed","currentIsChartDisplayed","SwitchIconButton","Swap","_parsedAmounts$indepe","_parsedAmounts$indepe2","_parsedAmounts$indepe3","_currencies$Field$INP","_currencies$Field$INP2","setSearch","userChartPreference","setUserChartPreference","useRefreshBlockNumberID","warningSwapHandler","isExpertMode","swapInputError","onWrap","wrapInputError","showWrap","singleTokenPrice","handleTypeInput","handleTypeOutput","tradeToConfirm","setSwapState","userHasSpecifiedInputOutput","noRoute","useApproveCallbackFromTrade","approvalSubmitted","setApprovalSubmitted","maxAmountInput","atMaxAmountInput","swapCallback","swapCallbackError","showApproveFlow","handleConfirmDismiss","handleSwap","handleAcceptChanges","handleMaxInput","newCurrency","currentInputCurrencyId","currentOutputCurrencyId","isInput","oldCurrencyId","otherCurrencyId","newCurrencyId","handleInputSelect","handleOutputSelect","swapIsUnsupported","onPresentConfirmModal","ConfirmSwapModal","hasAmount","onRefreshPrice","PriceChartContainer","$isChartExpanded","CurrencyInputHeader","ArrowUpDownIcon","ProgressSteps","BottomDrawer","PRECISION","formatFraction","ApprovalTypes","MAX","MAX_MINUS_ONE","ZERO_THEN_MAX","ZERO_THEN_MAX_MINUS_ONE","V1Trade","V2Trade","NOT_REQUIRED","allowedSlippageRaw","recipientAddressOrName","swapRouterAddress","sendTransactionAsync","useSendTransaction","hexToBigInt","useSendSwapTransaction","loadingAnimation","LoadingRows","loadingOpacityMixin","$loading","LoadingOpacityContainer","expectedOutputAmount","GasWrapper","StyledGasIcon","GasIcon","TooltipContainer","GasEstimateBadge","_trade$gasUseEstimate","formattedGasPriceString","Badge","RouteContainerRow","RouteRow","PoolBadge","DottedLine","DotColor","DotLineIcon","OpaqueBadge","ProtocolBadge","MixedProtocolBadge","BadgeText","RoutingDiagram","Route","protocolVersion","tokenInfo0","tokenInfo1","StyledAutoRouterIcon","AutoRouterIcon","StyledAutoRouterLabel","AutoRouterLogo","AutoRouterLabel","fixedOpen","OpenCloseIcon","_trade$swaps","V1_PROTOCOL","V2_PROTOCOL","getTokenPath","rotate360","StyledPolling","StyledPollingDot","Spinner","SwapDetailsDropdown","disableHover","SwapModalFooterV2","SwapModalHeaderV2","SmartSwap","tradeState","_v2Trade$trade","_inputError","_inputError2","_inputError3","_inputError4","useSmartRouterDerivedSwapInfo","routeNotFound","routeIsLoading","routeIsSyncing","fiatValueTradeInput","fiatValueTradeOutput","stablecoinPriceImpact","fiatValueInput","fiatValueOutput","computeFiatValuePriceImpact","useSlippageAdjustedAmounts","marketPriceImpact","largerPriceImpact","ConfirmSwapModalV2","showDetailsDropdown","Body","FILTER","selectedTypeIndex","setSelectedTypeIndex","ALL","v1Pairs","v1Loading","trackedTokenPairs","tokenPairsWithLiquidityTokens","liquidityTokens","tpwlt","v1PairsBalances","fetchingV1PairBalances","liquidityTokensWithBalances","_v1PairsBalances$liqu","v1IsLoading","useV1PairsByAccount","v2Pairs","v2Loading","v2PairsBalances","fetchingV2PairBalances","_v2PairsBalances$liqu","v2IsLoading","useV2PairsByAccount","v1PairsSection","v2PairsSection","mainSection","resultSection","SWR_SETTINGS","errorRetryCount","errorRetryInterval","POOL_FILTER_SETTINGS","ChartCardsContainer","StyledCheckbox","ITEMS_PER_PAGE","_useUSDCPrice2","lp","handleCheck","calculateUSD","handleReset","setIsChecked","tok0","pr0","tok1","pr1","calc","tok0balance","tok1balance","tok0Value","tok1Value","USDValue","click","sortedLps","Burn","setReset","setChecked","selectedUSD","setSelectedUSD","plsxPrice","plsxPriceBN","usePLSUsdcPrice","buyandburn","lpList","plsUSDValue","lpListV1","lpListV2","testnetLpListV1","testnetLpListV2","fetchLpList","lpInfoCalls","callsChunck","resp","chunked","flatten","blockTimestampLast","totalBurned","burnedPLSX","fetchBuyAndBurnPairs","totalPLSXBurned","tokensArray0","tokensArray1","convertLps","updatedList","splice","updatedCout","TOKEN_SEARCH","POOL_SEARCH","getIds","entityArrays","ids","entities","currentTokenArray","entity","useFetchSearchResults","searchString","searchResults","setSearchResults","searchStringTooShort","tokenIds","asAddress","asSymbol","asName","as0","as1","tokenDatasFull","poolDatasFull","tokensLoading","poolsLoading","Blackout","HoverText","HoverRowLink","OptionButton","tokenIncludesSearchTerm","showMoreRef","debouncedSearchTerm","tokensShown","setTokensShown","poolsShown","setPoolsShown","handleOutsideClick","menuClick","inputCLick","showMoreClick","querySelector","handleItemClick","watchListTokenData","watchListTokenLoading","watchListPoolData","watchListPoolLoading","showWatchlist","setShowWatchlist","tokensForList","poolForList","poolIncludesSearchTerm","contentUnderTokenList","noTokensFound","noWatchlistTokens","showMessage","noTokensMessage","contentUnderPoolList","noPoolsFound","noWatchlistPools","noPoolsMessage","NavWrapper","isV2","Search","InfoPageLayout","InfoNav","HoverableChart","valueProperty","ChartComponent","setHover","dateHover","setDateHover","formattedData","fetchTopTransactions","useProtocolTransactionsQuery","somePoolsAreLoading","GlobalHooks","Updaters","ListsUpdater","TransactionUpdater","MulticallUpdater","App","SwapPage","PersistGate","Routes","Overview","TokensOverview","PoolsOverview","PoolPage","Navigate","GlobalStyle","StyledUIKitProvider","QueryClient","ReactDOM","render","StrictMode","QueryClientProvider","HashRouter","WagmiConfig","NextThemeProvider","forcedTheme","SWRConfig","use","useSWRNext","swr","isDataUndefined","isValidating","ModalProvider","webpackAsyncContext","req","__webpack_require__","o","module","exports","ChainId2","webSocket","ensRegistry","multicall3","blockCreated","pulsechainTestnet","startBlock","TradeType2","MINIMUM_LIQUIDITY","THREE","FIVE","_9971","_10000","BaseCurrency","invariant6","isSafeInteger","Decimal","toFormat","_Decimal","Big","_Big","toSignificantRounding","ROUND_HALF_UP","ROUND_UP","toFixedRounding","tryParseFraction","fractionish","remainder","other","otherParsed","significantDigits","groupSeparator","rounding","toSignificantDigits","decimalPlaces","DP","RM","ONE_HUNDRED","toPercent","isPercent","Big2","decimalScale","rawAmount","added","subtracted","multiplied","divided","_len","scalar","adjustedForDecimals","NativeCurrency","CAN_SET_PROTOTYPE","isInsufficientReservesError","setPrototypeOf","prototype","z","maxSize","isFull","lo","hi","mid","computePriceImpact","quotedOutputAmount","balanceComp","balanceA","balanceB","balanceComparator","invariant2","INIT_CODE_HASH_V1","INIT_CODE_HASH_V2","FACTORY_ADDRESS_MAP_V1","FACTORY_ADDRESS_MAP_V2","INIT_CODE_HASH_MAP_V1","INIT_CODE_HASH_MAP_V2","minimumDelta","PAIR_ADDRESS_CACHE","computePairAddress","_PAIR_ADDRESS_CACHE","composeKey","tokenAmounts","inputReserve","outputReserve","inputAmountWithFee","totalSupplyAdjusted","feeOn","kLast","kLastParsed","rootK","rootKLast","feeLiquidity","currentInput","output2","reduced","currentValue","ioComp","inputOutputComparator","exactOut","currentPairs","pairsExcludingThisPair","nextAmountOut","_Native","ZERO_HEX","etherIn","etherOut","useFeeOnTransfer","_Ether","_etherCache","__defProp","__defProps","defineProperties","__getOwnPropDescs","getOwnPropertyDescriptors","__getOwnPropSymbols","getOwnPropertySymbols","__hasOwnProp","hasOwnProperty","__propIsEnum","propertyIsEnumerable","__defNormalProp","enumerable","configurable","writable","PLSX_PULSECHAIN_TESTNET","INC_PULSECHAIN_TESTNET","tDAI_PULSECHAIN_TESTNET","pls","usdt","ehex","wbtc","ewbtc","epepe","pepe","link","elink","uni","euni","plsTestnetTokens","__webpack_module_cache__","moduleId","cachedModule","loaded","__webpack_modules__","amdO","deferred","O","chunkIds","priority","notFulfilled","j","getter","__esModule","leafPrototypes","getProto","getPrototypeOf","ns","create","def","getOwnPropertyNames","definition","chunkId","miniCssF","g","globalThis","Function","inProgress","dataWebpackPrefix","script","needAttach","scripts","getElementsByTagName","getAttribute","charset","nc","onScriptComplete","onerror","doneFns","parentNode","head","toStringTag","nmd","paths","installedChunks","installedChunkData","errorType","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""}