@rango-dev/widget-embedded 0.1.10-next.87 → 0.1.10-next.89

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"widget-embedded.cjs.development.js","sources":["../src/constants/navigationRoutes.ts","../src/constants/numbers.ts","../src/utils/common.ts","../src/utils/routing.ts","../src/store/selectors.ts","../src/services/httpService.ts","../src/constants/swapSettings.ts","../src/store/meta.ts","../src/store/settings.ts","../src/utils/numbers.ts","../src/utils/wallets.ts","../src/utils/swap.ts","../src/store/bestRoute.ts","../src/constants/searchParams.ts","../src/store/ui.ts","../src/components/UpdateUrl.tsx","../src/components/HeaderButtons.tsx","../src/components/Header.tsx","../src/store/wallets.ts","../src/components/TokenInfo.tsx","../src/components/BottomLogo.tsx","../src/components/SwitchFromAndTo.tsx","../src/components/Footer.tsx","../src/constants/errors.ts","../src/pages/Home.tsx","../src/components/AppRouter.tsx","../src/components/ChangeSlippageButton.tsx","../src/components/warnings/HighSlippageWarning.tsx","../src/components/warnings/ConfirmSwapExtraMessages.tsx","../src/hooks/useNavigateBack.ts","../src/store/confirmSwap.ts","../src/components/warnings/MinRequiredSlippage.tsx","../src/components/ConfirmSwapErrors.tsx","../src/components/warnings/BalanceWarnings.tsx","../src/components/ConfirmSwapWarnings.tsx","../src/pages/ConfirmSwapPage.tsx","../src/utils/queue.ts","../src/pages/HistoryPage.tsx","../src/pages/LiquiditySourcesPage.tsx","../src/pages/SelectChainPage.tsx","../src/pages/SelectTokenPage.tsx","../src/pages/SettingsPage.tsx","../src/pages/WalletsPage.tsx","../src/pages/ConfirmWalletsPage.tsx","../src/hooks/useCopyToClipboard.ts","../src/pages/SwapDetailsPage.tsx","../src/components/AppRoutes.tsx","../src/components/Layout.tsx","../src/globalStyles.ts","../src/hooks/useTheme.ts","../src/lib.tsx"],"sourcesContent":["export const navigationRoutes = {\n home: '/',\n fromChain: '/from-chain',\n fromToken: '/from-token',\n toChain: '/to-chain',\n toToken: '/to-token',\n settings: '/settings',\n liquiditySources: '/settings/liquidity-sources',\n swaps: '/swaps',\n wallets: '/wallets',\n confirmSwap: '/confirm-swap',\n confirmWallets: '/confirm-wallets',\n swapDetails: '/swaps/:requestId',\n};\n","import BigNumber from 'bignumber.js';\n\nexport const ZERO = new BigNumber(0);\n","export function removeDuplicateFrom<T>(array: T[]): T[] {\n return Array.from(new Set(array));\n}\n\nexport function areEqual(array1: (number | string)[], array2: (number | string)[]) {\n return array1.length === array2.length && array1.every((v, i) => v === array2[i]);\n}\n","import {\n SimulationAssetAndAmount,\n SimulationValidationStatus,\n} from '@rango-dev/ui/dist/types/swaps';\nimport BigNumber from 'bignumber.js';\nimport { BestRouteResponse } from 'rango-sdk';\nimport { areEqual } from './common';\nimport { SelectedWallet } from './wallets';\n\nexport const getBestRouteToTokenUsdPrice = (\n bestRoute: BestRouteResponse | null,\n): number | null | undefined =>\n bestRoute?.result?.swaps[bestRoute?.result?.swaps.length - 1].to.usdPrice;\n\nexport function isNumberOfSwapsChanged(route1: BestRouteResponse, route2: BestRouteResponse) {\n const route1Swaps = route1.result?.swaps || [];\n const route2Swaps = route2.result?.swaps || [];\n return route1Swaps.length !== route2Swaps.length;\n}\n\nexport function isRouteSwappersUpdated(route1: BestRouteResponse, route2: BestRouteResponse) {\n const route1Swappers = route1.result?.swaps.map((swap) => swap.swapperId) || [];\n const route2Swappers = route2.result?.swaps.map((swap) => swap.swapperId) || [];\n return !areEqual(route1Swappers, route2Swappers);\n}\n\nexport function isRouteInternalCoinsUpdated(route1: BestRouteResponse, route2: BestRouteResponse) {\n const route1InternalCoins = route1.result?.swaps.map((swap) => swap.to.symbol) || [];\n const route2InternalCoins = route2.result?.swaps.map((swap) => swap.to.symbol) || [];\n return !areEqual(route1InternalCoins, route2InternalCoins);\n}\n\nexport const isRouteChanged = (route1: BestRouteResponse, route2: BestRouteResponse): boolean => {\n return (\n isNumberOfSwapsChanged(route1, route2) ||\n isRouteSwappersUpdated(route1, route2) ||\n isRouteInternalCoinsUpdated(route1, route2)\n );\n};\n\nexport const outToRatioHasWarning = (fromUsdValue: BigNumber | null, outToInRatio: BigNumber | 0) =>\n (parseInt(outToInRatio?.toFixed(2) || '0') <= -10 &&\n (fromUsdValue === null || fromUsdValue.gte(new BigNumber(200)))) ||\n (parseInt(outToInRatio?.toFixed(2) || '0') <= -5 &&\n (fromUsdValue === null || fromUsdValue.gte(new BigNumber(1000))));\n\nexport const getRequiredBalanceOfWallet = (\n selectedWallet: SelectedWallet,\n fee: SimulationValidationStatus[] | null,\n): SimulationAssetAndAmount[] | null => {\n if (fee === null) return null;\n const relatedFeeStatus = fee\n ?.find((item) => item.blockchain === selectedWallet.chain)\n ?.wallets.find(\n (wallet) => wallet.address?.toLowerCase() === selectedWallet.address.toLowerCase(),\n );\n if (!relatedFeeStatus) return null;\n return relatedFeeStatus.requiredAssets;\n};\n","import { StoreApi, UseBoundStore } from 'zustand';\n\ntype State = object;\n\ntype WithSelectors<S> = S extends { getState: () => infer T }\n ? S & { use: { [K in keyof T]: () => T[K] } }\n : never;\n\nconst createSelectors = <S extends UseBoundStore<StoreApi<State>>>(_store: S) => {\n let store = _store as WithSelectors<typeof _store>;\n store.use = {};\n for (let k of Object.keys(store.getState())) {\n (store.use as any)[k] = () => store((s) => s[k as keyof typeof s]);\n }\n\n return store;\n};\n\nexport default createSelectors;\n","import { RangoClient } from 'rango-sdk';\n\nexport const httpService = new RangoClient(process.env.REACT_API_KEY as string);\n","export const SLIPPAGES = [0.5, 1, 3, 5, 8, 13, 20];\n\nexport const DEFAULT_SLIPPAGE = 1;\n\nexport const HIGH_SLIPPAGE = 5;\n\nexport const MAX_SLIPPAGE = 100;\n\nexport const MIN_SLIPPGAE = 0;\n","import { create } from 'zustand';\nimport { MetaResponse } from 'rango-sdk';\nimport { httpService } from '../services/httpService';\nimport createSelectors from './selectors';\nimport { removeDuplicateFrom } from '../utils/common';\n\nexport type LoadingStatus = 'loading' | 'success' | 'failed';\n\nexport interface MetaState {\n meta: MetaResponse;\n loadingStatus: LoadingStatus;\n fetchMeta: () => Promise<void>;\n}\n\nexport const useMetaStore = createSelectors(\n create<MetaState>()((set) => ({\n meta: { blockchains: [], popularTokens: [], swappers: [], tokens: [] },\n loadingStatus: 'loading',\n fetchMeta: async () => {\n try {\n const response = await httpService.getAllMetadata();\n const chainThatHasTokenInMetaResponse = removeDuplicateFrom(\n response.tokens.map((t) => t.blockchain),\n );\n const enabledChains = response.blockchains.filter(\n (chain) => chain.enabled && chainThatHasTokenInMetaResponse.includes(chain.name),\n );\n response.blockchains = enabledChains.sort((a, b) => a.sort - b.sort);\n set({ meta: response, loadingStatus: 'success' });\n } catch (error) {\n set({ loadingStatus: 'failed' });\n }\n },\n })),\n);\n","import { create } from 'zustand';\nimport { persist, subscribeWithSelector } from 'zustand/middleware';\nimport { DEFAULT_SLIPPAGE } from '../constants/swapSettings';\nimport { removeDuplicateFrom } from '../utils/common';\nimport { useMetaStore } from './meta';\nimport createSelectors from './selectors';\n\ntype Theme = 'auto' | 'dark' | 'light';\n\ninterface Settings {\n slippage: number;\n customSlippage: number | null;\n infiniteApprove: boolean;\n disabledLiquiditySources: string[];\n theme: Theme;\n setSlippage: (slippage: number) => void;\n setCustomSlippage: (customSlippage: number | null) => void;\n toggleInfiniteApprove: () => void;\n toggleLiquiditySource: (name: string) => void;\n setTheme: (theme: Theme) => void;\n toggleAllLiquiditySources: () => void;\n}\n\nexport const useSettingsStore = createSelectors(\n create<Settings>()(\n persist(\n subscribeWithSelector((set) => ({\n slippage: DEFAULT_SLIPPAGE,\n customSlippage: null,\n infiniteApprove: false,\n disabledLiquiditySources: [],\n theme: 'auto',\n setSlippage: (slippage) =>\n set(() => ({\n slippage: slippage,\n })),\n setCustomSlippage: (customSlippage) =>\n set(() => ({\n customSlippage: customSlippage,\n })),\n toggleAllLiquiditySources: () =>\n set((state) => {\n const { swappers } = useMetaStore.getState().meta;\n const swappersGroup = removeDuplicateFrom(\n swappers.map((swapper) => swapper.swapperGroup)\n );\n\n if (swappersGroup.length === state.disabledLiquiditySources.length)\n return { disabledLiquiditySources: [] };\n else {\n return {\n disabledLiquiditySources: swappersGroup,\n };\n }\n }),\n toggleInfiniteApprove: () =>\n set((state) => ({\n infiniteApprove: !state.infiniteApprove,\n })),\n toggleLiquiditySource: (name) =>\n set((state) => {\n if (state.disabledLiquiditySources.includes(name))\n return {\n disabledLiquiditySources: state.disabledLiquiditySources.filter(\n (liquiditySource) => liquiditySource != name\n ),\n };\n else\n return {\n disabledLiquiditySources:\n state.disabledLiquiditySources.concat(name),\n };\n }),\n setTheme: (theme) =>\n set(() => ({\n theme,\n })),\n })),\n {\n name: 'user-settings',\n }\n )\n )\n);\n","import { BigNumber } from 'bignumber.js';\nimport { BestRouteResponse } from 'rango-sdk';\n\nexport const percentToString = (p: number, fractions = 0): string => (p * 100).toFixed(fractions);\nexport const secondsToString = (s: number): string => {\n const seconds = (s % 60).toString().padStart(2, '0');\n const minutes = parseInt((s / 60).toString())\n .toString()\n .padStart(2, '0');\n return `${minutes}:${seconds}`;\n};\n\nexport const numberToString = (\n number: BigNumber | string | null,\n minDecimals: number | null = null,\n maxDecimals: number | null = null,\n): string => {\n if (number === null) return '';\n if (number === '') return '';\n const n = new BigNumber(number);\n const roundingMode = 1;\n let maxI = 1000;\n for (let i = 0; i < 60; i++) {\n if (new BigNumber(n.toFixed(i, roundingMode)).eq(n)) {\n maxI = i;\n break;\n }\n }\n\n if (n.gte(10000)) return n.toFormat(0, roundingMode);\n if (n.gte(1000))\n return n.toFormat(\n Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 1))),\n roundingMode,\n );\n if (n.gte(100))\n return n.toFormat(\n Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 1))),\n roundingMode,\n );\n if (n.gte(1))\n return n.toFormat(\n Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 2))),\n roundingMode,\n );\n if (n.gte(0.01))\n return n.toFormat(\n Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 4))),\n roundingMode,\n );\n for (let i = minDecimals || 4; i < 17; i++)\n if (n.gte(Math.pow(10, -i)))\n return n.toFormat(\n Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, i))),\n roundingMode,\n );\n if (n.isEqualTo(0)) return '0';\n\n return n.toFormat(\n Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 8))),\n roundingMode,\n );\n};\n\nexport const convertBigNumberToHex = (value: BigNumber, decimals: number): string => {\n return '0x' + value.shiftedBy(decimals).toString(16);\n};\n\nexport const uint8ArrayToHex = (buffer: Uint8Array): string => {\n // buffer is an ArrayBuffer\n return [...buffer].map((x) => x.toString(16).padStart(2, '0')).join('');\n};\n\nexport function dollarToConciseString(num: number | undefined): string {\n if (!num) return '-';\n if (num < 1) return ' < 1$';\n if (num < 1000) return numberToString(new BigNumber(num)) + '$';\n if (num < 10_000) return parseInt((num / 100).toString()) / 10 + 'K';\n if (num < 1_000_000) return parseInt((num / 1000).toString()) + 'K';\n if (num < 100_000_000) return parseInt((num / 100000).toString()) / 10 + 'M';\n return parseInt((num / 1000000).toString()) + 'M';\n}\n\nexport function removeExtraDecimals(num: string, maxDecimals: number): string {\n try {\n if (!num.includes('.')) return num;\n const [b, f] = num.split('.');\n if (f && f.length > maxDecimals) {\n return `${b}.${f.substring(0, maxDecimals)}`;\n }\n return num;\n } catch (e) {\n return num;\n }\n}\n\nexport const totalArrivalTime = (data: BestRouteResponse | null) =>\n data?.result?.swaps?.reduce((a, b) => a + b.estimatedTimeInSeconds, 0) || 0;\n\nexport const rawFees = (data: BestRouteResponse): string =>\n (\n data?.result?.swaps?.flatMap((s) => s.fee.map((f) => ({ swapperId: s.swapperId, fee: f }))) ||\n []\n )\n .reduce((partialSum, a) => partialSum + parseFloat(a.fee.amount), 0)\n .toFixed(3);\n\nexport const decimalNumber = (number = '0', toFixed: number) => parseFloat(number).toFixed(toFixed);\n\nexport const containsText = (text: string, searchText: string) =>\n text.toLowerCase().indexOf(searchText.toLowerCase()) > -1;\n","import {\n getCosmosExperimentalChainInfo,\n isEvmAddress,\n KEPLR_COMPATIBLE_WALLETS,\n Network,\n WalletInfo,\n WalletState,\n WalletType,\n isCosmosBlockchain,\n} from '@rango-dev/wallets-shared';\n\nimport {\n WalletInfo as ModalWalletInfo,\n WalletState as WalletStatus,\n SelectableWallet,\n} from '@rango-dev/ui';\nimport {\n BestRouteResponse,\n BlockchainMeta,\n Token,\n WalletDetail,\n} from 'rango-sdk';\nimport { readAccountAddress } from '@rango-dev/wallets-core';\nimport { Account, Balance, TokenBalance } from '../store/wallets';\nimport { numberToString } from './numbers';\nimport BigNumber from 'bignumber.js';\nimport { TokenWithBalance } from '../pages/SelectTokenPage';\nimport { ZERO } from '../constants/numbers';\n\nexport function getStateWallet(state: WalletState): WalletStatus {\n switch (true) {\n case state.connected:\n return WalletStatus.CONNECTED;\n case state.connecting:\n return WalletStatus.CONNECTING;\n case !state.installed:\n return WalletStatus.NOT_INSTALLED;\n default:\n return WalletStatus.DISCONNECTED;\n }\n}\n\nexport const excludedWallets = [\n WalletType.UNKNOWN,\n WalletType.TERRA_STATION,\n WalletType.LEAP,\n];\n\nexport function getlistWallet(\n getState: (type: WalletType) => WalletState,\n getWalletInfo: (type: WalletType) => WalletInfo,\n list: WalletType[]\n): ModalWalletInfo[] {\n const excludedWallets = [\n WalletType.UNKNOWN,\n WalletType.TERRA_STATION,\n WalletType.LEAP,\n ];\n\n return list\n .filter((wallet) => !excludedWallets.includes(wallet))\n .map((type) => {\n const { name, img: image, installLink } = getWalletInfo(type);\n const state = getStateWallet(getState(type));\n return {\n name,\n image,\n installLink,\n state,\n type,\n };\n });\n}\n\nexport function walletAndSupportedChainsNames(\n supportedChains: BlockchainMeta[]\n): Network[] | null {\n if (!supportedChains) return null;\n let walletAndSupportedChainsNames: Network[] = [];\n walletAndSupportedChainsNames = supportedChains.map(\n (blockchainMeta) => blockchainMeta.name as Network\n );\n\n return walletAndSupportedChainsNames;\n}\n\nexport function prepareAccountsForWalletStore(\n wallet: WalletType,\n accounts: string[],\n evmBasedChains: string[],\n supportedChainNames: Network[] | null\n): Account[] {\n const result: Account[] = [];\n\n function addAccount(network: Network, address: string) {\n const newAccount: Account = {\n address,\n chain: network,\n walletType: wallet,\n };\n\n result.push(newAccount);\n }\n\n const supportedChains = supportedChainNames || [];\n\n accounts.forEach((account) => {\n const { address, network } = readAccountAddress(account);\n\n const hasLimitation = supportedChains.length > 0;\n const isSupported = supportedChains.includes(network);\n const isUnknown = network === Network.Unknown;\n const notSupportedNetworkByWallet =\n hasLimitation && !isSupported && !isUnknown;\n\n // Here we check given `network` is not supported by wallet\n // And also the network is known.\n if (notSupportedNetworkByWallet) return;\n\n // In some cases we can handle unknown network by checking its address\n // pattern and act on it.\n // Example: showing our evm compatible netwrok when the uknown network is evem.\n // Otherwise, we stop executing this function.\n const isUknownAndEvmBased =\n network === Network.Unknown && isEvmAddress(address);\n if (isUnknown && !isUknownAndEvmBased) return;\n\n const isEvmBasedChain = evmBasedChains.includes(network);\n\n // If it's an evm network, we will add the address to all the evm chains.\n if (isEvmBasedChain || isUknownAndEvmBased) {\n // all evm chains are not supported in wallets, so we are adding\n // only to those that are supported by wallet.\n const evmChainsSupportedByWallet = supportedChains.filter((chain) =>\n evmBasedChains.includes(chain)\n );\n\n evmChainsSupportedByWallet.forEach((network) => {\n // EVM addresses are not case sensetive.\n // Some wallets like Binance-chain return some letters in uppercase which produces bugs in our wallet state.\n addAccount(network, address.toLowerCase());\n });\n } else {\n addAccount(network, address);\n }\n });\n\n return result;\n}\n\nexport function getRequiredChains(route: BestRouteResponse | null) {\n const wallets: string[] = [];\n\n route?.result?.swaps.forEach((swap) => {\n const currentStepFromBlockchain = swap.from.blockchain;\n const currentStepToBlockchain = swap.to.blockchain;\n let lastAddedWallet = wallets[wallets.length - 1];\n if (currentStepFromBlockchain != lastAddedWallet)\n wallets.push(currentStepFromBlockchain);\n lastAddedWallet = wallets[wallets.length - 1];\n if (currentStepToBlockchain != lastAddedWallet)\n wallets.push(currentStepToBlockchain);\n });\n return wallets;\n}\n\nexport interface SelectedWallet extends Account {}\ntype Blockchain = { name: string; accounts: Balance[] };\n\nexport function getSelectableWallets(\n accounts: Account[],\n selectedWallets: SelectedWallet[],\n getWalletInfo: (type: WalletType) => WalletInfo\n): SelectableWallet[] {\n const connectedWallets: SelectableWallet[] = accounts.map((account) => ({\n address: account.address,\n walletType: account.walletType,\n chain: account.chain,\n image: getWalletInfo(account.walletType).img,\n name: getWalletInfo(account.walletType).name,\n selected: !!selectedWallets.find(\n (wallet) =>\n wallet.chain === account.chain &&\n wallet.walletType === account.walletType\n ),\n }));\n\n return connectedWallets;\n}\n\nexport function getBalanceFromWallet(\n balances: Balance[],\n chain: string,\n symbol: string,\n address: string | null\n): TokenBalance | null {\n if (balances.length === 0) return null;\n\n const selectedChainBalances = balances.filter(\n (balance) => balance.chain === chain\n );\n if (selectedChainBalances.length === 0) return null;\n\n return (\n selectedChainBalances\n .map(\n (a) =>\n a.balances?.find(\n (bl) =>\n (address !== null && bl.address === address) ||\n (address === null &&\n bl.address === address &&\n bl.symbol === symbol)\n ) || null\n )\n .filter((b) => b !== null)\n .sort(\n (a, b) => parseFloat(b?.amount || '0') - parseFloat(a?.amount || '1')\n )\n .find(() => true) || null\n );\n}\n\nexport function isAccountAndBalanceMatched(account: Account, balance: Balance) {\n return (\n account.address === balance.address &&\n account.chain === balance.chain &&\n account.walletType === balance.walletType\n );\n}\n\nexport function makeBalanceFor(\n account: Account,\n retrivedBalance: WalletDetail,\n tokens: Token[]\n): Balance {\n const {\n address,\n blockChain: chain,\n explorerUrl,\n balances = [],\n } = retrivedBalance;\n return {\n address,\n chain,\n loading: false,\n error: false,\n explorerUrl,\n walletType: account.walletType,\n balances:\n balances?.map((tokenBalance) => ({\n chain,\n symbol: tokenBalance.asset.symbol,\n ticker: tokenBalance.asset.symbol,\n address: tokenBalance.asset.address || null,\n rawAmount: tokenBalance.amount.amount,\n decimal: tokenBalance.amount.decimals,\n amount: new BigNumber(tokenBalance.amount.amount)\n .shiftedBy(-tokenBalance.amount.decimals)\n .toFixed(),\n logo: '',\n usdPrice:\n getUsdPrice(\n chain,\n tokenBalance.asset.symbol,\n tokenBalance.asset.address,\n tokens\n ) || null,\n })) || [],\n };\n}\n\nexport function resetBalanceState(balance: Balance): Balance {\n return { ...balance, loading: false, error: true };\n}\n\nexport const calculateWalletUsdValue = (balance: Balance[]) => {\n const uniqueAccountAddresses = new Set<string | null>();\n const uniqueBalane: Balance[] = balance?.reduce(\n (acc: Balance[], current: Balance) => {\n return acc.findIndex(\n (i) => i.address === current.address && i.chain === current.chain\n ) === -1\n ? [...acc, current]\n : acc;\n },\n []\n );\n\n const modifiedWalletBlockchains = uniqueBalane?.map((chain) => {\n const modifiedWalletBlockchain: Blockchain = {\n name: chain.chain,\n accounts: [],\n };\n if (!uniqueAccountAddresses.has(chain.address)) {\n uniqueAccountAddresses.add(chain.address);\n }\n uniqueAccountAddresses.forEach((accountAddress) => {\n if (chain.address === accountAddress)\n modifiedWalletBlockchain.accounts.push(chain);\n });\n return modifiedWalletBlockchain;\n });\n const total = numberToString(\n modifiedWalletBlockchains\n ?.flatMap((b) => b.accounts)\n ?.flatMap((a) => a?.balances)\n ?.map((b) =>\n new BigNumber(b?.amount || ZERO).multipliedBy(b?.usdPrice || 0)\n )\n ?.reduce((a, b) => a.plus(b), ZERO) || ZERO\n ).toString();\n\n return numberWithThousandSeperator(total);\n};\n\nfunction numberWithThousandSeperator(number: string | number): string {\n var parts = number.toString().split('.');\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n return parts.join('.');\n}\n\nexport const sortedTokens = (\n tokens: TokenWithBalance[],\n position: 'from' | 'to',\n balance: Balance[]\n): TokenWithBalance[] => {\n if (!tokens) return [];\n const walletSymbols = new Set(\n (balance || [])\n .flatMap((a) => a.balances || [])\n .filter((b) => (new BigNumber(b?.rawAmount) || ZERO).gt(0))\n .map((b) => `${b?.chain}.${b?.symbol}.${b?.address}`)\n );\n let sortedList = [\n ...tokens.filter(\n (t) => !t.address && walletSymbols.size && position === 'to'\n ),\n ...tokens\n .filter(\n (t) =>\n !(position === 'to' && !t.address) &&\n walletSymbols.has(`${t.blockchain}.${t.symbol}.${t.address}`)\n )\n .sort((tokenA, tokenB) => compareBalance(tokenA, tokenB, balance)),\n ...tokens.filter(\n (t) =>\n !walletSymbols.has(`${t.blockchain}.${t.symbol}.${t.address}`) &&\n !t.address &&\n (!walletSymbols.size || position === 'from')\n ),\n ...tokens.filter(\n (t) =>\n !walletSymbols.has(`${t.blockchain}.${t.symbol}.${t.address}`) &&\n t.address &&\n !t.isSecondaryCoin\n ),\n ...tokens.filter(\n (t) =>\n !walletSymbols.has(`${t.blockchain}.${t.symbol}.${t.address}`) &&\n t.isSecondaryCoin\n ),\n ];\n\n return sortedList;\n};\n\nconst compareBalance = (\n tokenA: TokenWithBalance,\n tokenB: TokenWithBalance,\n wallet: Balance[]\n): number => {\n if (!tokenA.usdPrice || !tokenB.usdPrice) return 0;\n\n const tokenAUsdValue = new BigNumber(\n getBalanceFromWallet(\n wallet,\n tokenA.blockchain,\n tokenA.symbol,\n tokenA.address\n )?.amount || ZERO\n ).multipliedBy(tokenA.usdPrice);\n const tokenBUsdValue = new BigNumber(\n getBalanceFromWallet(\n wallet,\n tokenB.blockchain,\n tokenB.symbol,\n tokenB.address\n )?.amount || ZERO\n ).multipliedBy(tokenB.usdPrice);\n if (tokenAUsdValue.gt(tokenBUsdValue)) return -1;\n return 1;\n};\n\nexport const getUsdPrice = (\n blockchain: string,\n symbol: string,\n address: string | null,\n allTokens: Token[]\n): number | null => {\n const token = allTokens?.find(\n (t) =>\n t.blockchain === blockchain &&\n t.symbol?.toUpperCase() === symbol?.toUpperCase() &&\n t.address === address\n );\n return token?.usdPrice || null;\n};\nexport const isExperimentalChain = (\n blockchains: BlockchainMeta[],\n wallet: string\n): boolean => {\n const cosmosExperimentalChainInfo = getCosmosExperimentalChainInfo(\n Object.entries(blockchains)\n .map(([, blockchainMeta]) => blockchainMeta)\n .filter(isCosmosBlockchain)\n );\n return cosmosExperimentalChainInfo && !!cosmosExperimentalChainInfo[wallet];\n};\n\nexport const getKeplrCompatibleConnectedWallets = (\n selectableWallets: SelectableWallet[]\n): WalletType[] => {\n const connectedWalletTypes = new Set(\n selectableWallets.map((a: any) => a.walletType.toString())\n );\n\n return KEPLR_COMPATIBLE_WALLETS.filter((compatibleWallet) =>\n connectedWalletTypes.has(compatibleWallet)\n );\n};\n","import { PendingSwap } from '@rango-dev/ui/dist/containers/History/types';\nimport {\n WalletTypeAndAddress,\n SwapSavedSettings,\n} from '@rango-dev/ui/dist/types/swaps';\nimport BigNumber from 'bignumber.js';\nimport {\n BestRouteRequest,\n BestRouteResponse,\n RecommendedSlippage,\n SwapResult,\n MetaResponse,\n Token,\n} from 'rango-sdk';\nimport { Account } from '../store/wallets';\nimport { ZERO } from '../constants/numbers';\nimport { numberToString } from './numbers';\nimport { WalletType } from '@rango-dev/wallets-shared';\nimport { getRequiredBalanceOfWallet } from './routing';\nimport { getRequiredChains, SelectedWallet } from './wallets';\nimport { SwapButtonState } from '../types';\nimport { LoadingStatus } from '../store/meta';\n\nexport function getOutputRatio(\n inputUsdValue: BigNumber,\n outputUsdValue: BigNumber\n) {\n if (inputUsdValue.lte(ZERO) || outputUsdValue.lte(ZERO)) return 0;\n return outputUsdValue.div(inputUsdValue).minus(1).multipliedBy(100);\n}\n\nexport function outputRatioHasWarning(\n inputUsdValue: BigNumber,\n outputRatio: BigNumber | 0\n) {\n return (\n (parseInt(outputRatio.toFixed(2) || '0') <= -10 &&\n inputUsdValue.gte(new BigNumber(400))) ||\n (parseInt(outputRatio.toFixed(2) || '0') <= -5 &&\n inputUsdValue.gte(new BigNumber(1000)))\n );\n}\n\nexport function hasLimitError(bestRoute: BestRouteResponse | null): boolean {\n return (\n (bestRoute?.result?.swaps || []).filter((swap) => {\n const minimum = !!swap.fromAmountMinValue\n ? new BigNumber(swap.fromAmountMinValue)\n : null;\n const maximum = !!swap.fromAmountMaxValue\n ? new BigNumber(swap.fromAmountMaxValue)\n : null;\n const isExclusive = swap.fromAmountRestrictionType === 'EXCLUSIVE';\n if (isExclusive) {\n return minimum?.gte(swap.fromAmount) || maximum?.lte(swap.fromAmount);\n } else {\n return minimum?.gt(swap.fromAmount) || maximum?.lt(swap.fromAmount);\n }\n }).length > 0\n );\n}\n\nexport function LimitErrorMessage(bestRoute: BestRouteResponse | null): {\n swap: SwapResult | null;\n fromAmountRangeError: string;\n recommendation: string;\n} {\n if (!bestRoute)\n return { swap: null, fromAmountRangeError: '', recommendation: '' };\n const swap = (bestRoute?.result?.swaps || []).filter((swap) => {\n const minimum = !!swap.fromAmountMinValue\n ? new BigNumber(swap.fromAmountMinValue)\n : null;\n const maximum = !!swap.fromAmountMaxValue\n ? new BigNumber(swap.fromAmountMaxValue)\n : null;\n const isExclusive = swap.fromAmountRestrictionType === 'EXCLUSIVE';\n if (isExclusive) {\n return minimum?.gte(swap.fromAmount) || maximum?.lte(swap.fromAmount);\n } else {\n return minimum?.gt(swap.fromAmount) || maximum?.lt(swap.fromAmount);\n }\n })[0];\n if (!swap)\n return { swap: null, fromAmountRangeError: '', recommendation: '' };\n const minimum = !!swap.fromAmountMinValue\n ? new BigNumber(swap.fromAmountMinValue)\n : null;\n const maximum = !!swap.fromAmountMaxValue\n ? new BigNumber(swap.fromAmountMaxValue)\n : null;\n const isExclusive = swap.fromAmountRestrictionType === 'EXCLUSIVE';\n\n let fromAmountRangeError = '';\n let recommendation = '';\n if (!isExclusive && !!minimum && minimum.gt(swap.fromAmount)) {\n fromAmountRangeError = `Required: >= ${numberToString(minimum)} ${\n swap.from.symbol\n }`;\n recommendation = 'Increase your swap amount';\n } else if (isExclusive && !!minimum && minimum.gte(swap.fromAmount)) {\n fromAmountRangeError = `Required: > ${numberToString(minimum)} ${\n swap.from.symbol\n }`;\n recommendation = 'Increase your swap amount';\n }\n\n if (!isExclusive && !!maximum && maximum.lt(swap.fromAmount)) {\n fromAmountRangeError = `Required: <= ${numberToString(maximum)} ${\n swap.from.symbol\n }`;\n recommendation = 'Decrease your swap amount';\n } else if (isExclusive && !!maximum && maximum.lte(swap.fromAmount)) {\n fromAmountRangeError = `Required: < ${numberToString(maximum)} ${\n swap.from.symbol\n }`;\n recommendation = 'Decrease your swap amount';\n }\n\n return { swap, fromAmountRangeError, recommendation };\n}\n\nexport function getSwapButtonState(\n loadingMetaStatus: LoadingStatus,\n accounts: Account[],\n loading: boolean,\n bestRoute: BestRouteResponse | null,\n hasLimitError: boolean,\n highValueLoss: boolean,\n priceImpactCanNotBeComputed: boolean,\n needsToWarnEthOnPath: boolean\n): SwapButtonState {\n if (loadingMetaStatus !== 'success')\n return { title: 'Connect Wallet', disabled: true };\n if (accounts.length == 0) return { title: 'Connect Wallet', disabled: false };\n if (loading) return { title: 'Finding Best Route...', disabled: true };\n else if (!bestRoute) return { title: 'Swap', disabled: true };\n else if (hasLimitError) return { title: 'Limit Error', disabled: true };\n else if (highValueLoss)\n return { title: 'Price impact is too high!', disabled: true };\n else if (priceImpactCanNotBeComputed)\n return {\n title: 'USD price is unknown, price impact might be high!',\n disabled: false,\n hasWarning: true,\n };\n else if (needsToWarnEthOnPath)\n return {\n title: 'The route goes through Ethereum. Continue?',\n disabled: false,\n hasWarning: true,\n };\n else return { title: 'Swap', disabled: false };\n}\n\nexport function canComputePriceImpact(\n bestRoute: BestRouteResponse | null,\n inputAmount: string,\n inputUsdValue: BigNumber,\n outputUsdValue: BigNumber\n) {\n return !(\n (inputUsdValue.lte(ZERO) || outputUsdValue.lte(ZERO)) &&\n !!bestRoute?.result &&\n !!inputAmount &&\n inputAmount !== '0' &&\n parseFloat(inputAmount || '0') !== 0 &&\n !!bestRoute.result\n );\n}\n\nexport function calculatePendingSwap(\n inputAmount: string,\n bestRoute: BestRouteResponse,\n wallets: { [p: string]: WalletTypeAndAddress },\n settings: Omit<SwapSavedSettings, 'disabledSwappersIds'>,\n validateBalanceOrFee: boolean,\n meta: MetaResponse\n): PendingSwap {\n const simulationResult = bestRoute.result;\n if (!simulationResult) throw Error('Simulation result should not be null');\n\n return {\n creationTime: new Date().getTime().toString(),\n finishTime: null,\n requestId: bestRoute.requestId || '',\n inputAmount: inputAmount,\n wallets,\n status: 'running',\n isPaused: false,\n extraMessage: null,\n extraMessageSeverity: null,\n extraMessageDetail: null,\n extraMessageErrorCode: null,\n networkStatusExtraMessage: null,\n networkStatusExtraMessageDetail: null,\n lastNotificationTime: null,\n //@ts-ignore\n settings: settings,\n simulationResult: simulationResult,\n validateBalanceOrFee,\n steps:\n bestRoute.result?.swaps?.map((swap, index) => {\n const swapper = meta.swappers.find(\n (swapper) => swapper.id === swap.swapperId\n );\n const swapperType = swapper?.types[0];\n const fromBlockchain = meta.blockchains.find(\n (blockchain) => blockchain.name === swap.from.blockchain\n );\n const toBlockchain = meta.blockchains.find(\n (blockchain) => blockchain.name === swap.to.blockchain\n );\n return {\n id: index + 1,\n fromBlockchain: swap.from.blockchain,\n fromSymbol: swap.from.symbol,\n fromSymbolAddress: swap.from.address,\n fromDecimals: swap.from.decimals,\n fromAmountPrecision: swap.fromAmountPrecision,\n fromAmountMinValue: swap.fromAmountMinValue,\n fromAmountMaxValue: swap.fromAmountMaxValue,\n toBlockchain: swap.to.blockchain,\n fromLogo: swap.from.logo,\n toSymbol: swap.to.symbol,\n toSymbolAddress: swap.to.address,\n toDecimals: swap.to.decimals,\n toLogo: swap.to.logo,\n startTransactionTime: new Date().getTime(),\n swapperId: swap.swapperId,\n feeInUsd: numberToString(getUsdFeeOfStep(swap, meta.tokens), null, 2),\n expectedOutputAmountHumanReadable: swap.toAmount,\n outputAmount: '',\n status: 'created',\n networkStatus: null,\n executedTransactionId: null,\n externalTransactionId: null,\n explorerUrl: null,\n trackingCode: null,\n cosmosTransaction: null,\n solanaTransaction: null,\n starknetTransaction: null,\n starknetApprovalTransaction: null,\n tronTransaction: null,\n tronApprovalTransaction: null,\n evmTransaction: null,\n evmApprovalTransaction: null,\n transferTransaction: null,\n diagnosisUrl: null,\n internalSteps: null,\n fromBlockchainLogo: fromBlockchain.logo,\n toBlockchainLogo: toBlockchain.logo,\n swapperLogo: swapper?.logo,\n swapperType: swapperType,\n };\n }) || [],\n };\n}\n\nexport function requiredWallets(route: BestRouteResponse | null) {\n const wallets: string[] = [];\n\n route?.result?.swaps.forEach((swap) => {\n const currentStepFromBlockchain = swap.from.blockchain;\n const currentStepToBlockchain = swap.to.blockchain;\n let lastAddedWallet = wallets[wallets.length - 1];\n if (currentStepFromBlockchain != lastAddedWallet)\n wallets.push(currentStepFromBlockchain);\n lastAddedWallet = wallets[wallets.length - 1];\n if (currentStepToBlockchain != lastAddedWallet)\n wallets.push(currentStepToBlockchain);\n });\n return wallets;\n}\n\nexport const getUsdPrice = (\n blockchain: string,\n symbol: string,\n address: string | null,\n allTokens: Token[]\n): number | null => {\n const token = allTokens?.find(\n (t) =>\n t.blockchain === blockchain &&\n t.symbol?.toUpperCase() === symbol?.toUpperCase() &&\n t.address === address\n );\n return token?.usdPrice || null;\n};\n\nfunction getUsdFeeOfStep(step: SwapResult, allTokens: Token[]): BigNumber {\n let totalFeeInUsd = ZERO;\n for (let i = 0; i < step.fee.length; i++) {\n const fee = step.fee[i];\n if (fee.expenseType === 'DECREASE_FROM_OUTPUT') continue;\n\n const unitPrice = getUsdPrice(\n fee.asset.blockchain,\n fee.asset.symbol,\n fee.asset.address,\n allTokens\n );\n totalFeeInUsd = totalFeeInUsd.plus(\n new BigNumber(fee.amount).multipliedBy(unitPrice || 0)\n );\n }\n\n return totalFeeInUsd;\n}\n\nexport function getTotalFeeInUsd(\n bestRoute: BestRouteResponse | null,\n allTokens: Token[]\n): BigNumber | null {\n return (\n bestRoute?.result?.swaps.reduce(\n (totalFee: BigNumber, step) =>\n totalFee.plus(getUsdFeeOfStep(step, allTokens)),\n ZERO\n ) || null\n );\n}\n\nexport function hasHighFee(totalFeeInUsd: BigNumber | null) {\n if (!totalFeeInUsd) return false;\n return !totalFeeInUsd.lt(new BigNumber(30));\n}\n\nexport function hasSlippageError(\n slippages: (RecommendedSlippage | null)[] | undefined\n) {\n return (slippages?.filter((s) => !!s?.error)?.length || 0) > 0;\n}\n\nexport function getMinRequiredSlippage(route: BestRouteResponse) {\n const slippages = route.result?.swaps.map(\n (slippage) => slippage.recommendedSlippage\n );\n return (\n slippages\n ?.map((s) => s?.slippage || 0)\n ?.filter((s) => s > 0)\n ?.sort((a, b) => b - a)\n ?.find(() => true) || null\n );\n}\n\nexport function hasProperSlippage(\n userSlippage: string,\n minRequiredSlippage: number | null\n) {\n if (!minRequiredSlippage) return true;\n return parseFloat(userSlippage) > minRequiredSlippage;\n}\n\nexport function hasEnoughBalance(\n route: BestRouteResponse,\n selectedWallets: SelectedWallet[]\n) {\n const fee = route.validationStatus;\n\n if (fee === null || fee.length === 0) return true;\n\n for (const wallet of selectedWallets) {\n const requiredAssets = getRequiredBalanceOfWallet(wallet, fee);\n if (!requiredAssets) continue;\n\n const enoughBalanceInWallet = requiredAssets\n .map((asset) => asset.ok)\n .reduce((previous, current) => previous && current);\n if (!enoughBalanceInWallet) return false;\n }\n\n return true;\n}\n\nexport function hasEnoughBalanceAndProperSlippage(\n route: BestRouteResponse,\n selectedWallets: SelectedWallet[],\n userSlippage: string,\n minRequiredSlippage: number | null\n): boolean {\n return (\n hasEnoughBalance(route, selectedWallets) &&\n hasProperSlippage(userSlippage, minRequiredSlippage)\n );\n}\n\nexport function createBestRouteRequestBody(\n fromToken: Token,\n toToken: Token,\n inputAmount: string,\n wallets: Account[],\n selectedWallets: SelectedWallet[],\n disabledLiquiditySources: string[],\n slippage: number,\n checkPrerequisites: boolean\n): BestRouteRequest {\n const selectedWalletsMap = selectedWallets.reduce(\n (\n selectedWalletsMap: BestRouteRequest['selectedWallets'],\n selectedWallet\n ) => (\n (selectedWalletsMap[selectedWallet.chain] = selectedWallet.address),\n selectedWalletsMap\n ),\n {}\n );\n\n const connectedWallets: BestRouteRequest['connectedWallets'] = [];\n\n wallets.forEach((wallet) => {\n const chainAndAccounts = connectedWallets.find(\n (connectedWallet) => connectedWallet.blockchain === wallet.chain\n );\n if (!!chainAndAccounts) chainAndAccounts.addresses.push(wallet.address);\n else\n connectedWallets.push({\n blockchain: wallet.chain,\n addresses: [wallet.address],\n });\n });\n\n const requestBody: BestRouteRequest = {\n amount: inputAmount.toString(),\n checkPrerequisites,\n from: {\n address: fromToken.address,\n blockchain: fromToken.blockchain,\n symbol: fromToken.symbol,\n },\n to: {\n address: toToken.address,\n blockchain: toToken.blockchain,\n symbol: toToken.symbol,\n },\n connectedWallets,\n selectedWallets: selectedWalletsMap,\n swapperGroups: disabledLiquiditySources,\n swappersGroupsExclude: true,\n //@ts-ignore\n slippage: slippage.toString(),\n };\n\n return requestBody;\n}\n\nexport function getWalletsForNewSwap(selectedWallets: SelectedWallet[]) {\n const wallets = selectedWallets.reduce(\n (\n selectedWalletsMap: {\n [p: string]: { address: string; walletType: WalletType };\n },\n selectedWallet\n ) => (\n (selectedWalletsMap[selectedWallet.chain] = {\n address: selectedWallet.address,\n walletType: selectedWallet.walletType,\n }),\n selectedWalletsMap\n ),\n {}\n );\n\n return wallets;\n}\n\nexport function getRouteOutputAmount(route: BestRouteResponse) {\n return route.result?.outputAmount || null;\n}\n\nexport function getPercentageChange(\n oldValue: string | number,\n newValue: string | number\n) {\n return new BigNumber(newValue)\n .div(new BigNumber(oldValue))\n .minus(1)\n .multipliedBy(100);\n}\n\nexport function isOutputAmountChangedALot(\n oldRoute: BestRouteResponse,\n newRoute: BestRouteResponse\n) {\n const oldOutputAmount = getRouteOutputAmount(oldRoute);\n const newOutputAmount = getRouteOutputAmount(newRoute);\n if (!oldOutputAmount || !newOutputAmount) return false;\n const percentageChange = getPercentageChange(\n oldOutputAmount,\n newOutputAmount\n );\n\n return percentageChange.toNumber() <= -1;\n}\n\nexport function getBalanceWarnings(\n route: BestRouteResponse,\n selectedWallets: SelectedWallet[]\n) {\n const fee = route.validationStatus;\n const requiredWallets = getRequiredChains(route);\n const walletsSortedByRequiredWallets = selectedWallets.sort(\n (selectedWallet1, selectedWallet2) =>\n requiredWallets.indexOf(selectedWallet1.chain) -\n requiredWallets.indexOf(selectedWallet2.chain)\n );\n return walletsSortedByRequiredWallets\n .flatMap((wallet) => getRequiredBalanceOfWallet(wallet, fee) || [])\n .filter((asset) => !asset.ok)\n .map((asset) => {\n const symbol = asset.asset.symbol;\n const currentAmount = numberToString(\n new BigNumber(asset.currentAmount.amount).shiftedBy(\n -asset.currentAmount.decimals\n ),\n 8\n );\n const requiredAmount = numberToString(\n new BigNumber(asset.requiredAmount.amount).shiftedBy(\n -asset.requiredAmount.decimals\n ),\n 8\n );\n let reason = '';\n if (asset.reason === 'FEE') reason = ' for network fee';\n if (asset.reason === 'INPUT_ASSET') reason = ' for swap';\n if (asset.reason === 'FEE_AND_INPUT_ASSET')\n reason = ' for input and network fee';\n const warningMessage = `Needs ≈ ${requiredAmount} ${symbol}${reason}, but you have ${currentAmount} ${symbol} in your ${asset.asset.blockchain} wallet.`;\n return warningMessage;\n });\n}\n","import { BestRouteResponse, BlockchainMeta } from 'rango-sdk';\nimport { Token } from 'rango-sdk';\nimport { create } from 'zustand';\nimport BigNumber from 'bignumber.js';\nimport { ZERO } from '../constants/numbers';\nimport { getBestRouteToTokenUsdPrice } from '../utils/routing';\nimport createSelectors from './selectors';\nimport { subscribeWithSelector } from 'zustand/middleware';\nimport { httpService } from '../services/httpService';\nimport { useSettingsStore } from './settings';\nimport { createBestRouteRequestBody } from '../utils/swap';\n\nconst getUsdValue = (token: Token | null, amount: string) =>\n new BigNumber(amount || ZERO).multipliedBy(token?.usdPrice || 0);\n\ninterface RouteState {\n fromChain: BlockchainMeta | null;\n toChain: BlockchainMeta | null;\n inputAmount: string;\n inputUsdValue: BigNumber;\n outputAmount: BigNumber | null;\n outputUsdValue: BigNumber;\n fromToken: Token | null;\n toToken: Token | null;\n loading: boolean;\n error: string;\n setFromChain: (chain: BlockchainMeta | null) => void;\n setToChain: (chian: BlockchainMeta | null) => void;\n setFromToken: (token: Token | null) => void;\n setToToken: (token: Token | null) => void;\n setInputAmount: (amount: string) => void;\n bestRoute: BestRouteResponse | null;\n setBestRoute: (bestRoute: BestRouteResponse | null) => void;\n}\n\nexport const useBestRouteStore = createSelectors(\n create<RouteState>()(\n subscribeWithSelector((set) => ({\n fromChain: null,\n fromToken: null,\n inputAmount: '',\n outputAmount: null,\n inputUsdValue: new BigNumber(0),\n outputUsdValue: new BigNumber(0),\n toChain: null,\n toToken: null,\n bestRoute: null,\n loading: false,\n error: '',\n setBestRoute: (bestRoute) =>\n set((state) => {\n let outputAmount: BigNumber | null = null;\n let outputUsdValue: BigNumber = ZERO;\n if (!!bestRoute) {\n outputAmount = !!bestRoute.result?.outputAmount\n ? new BigNumber(bestRoute.result?.outputAmount)\n : null;\n outputUsdValue = new BigNumber(outputAmount || ZERO).multipliedBy(\n getBestRouteToTokenUsdPrice(bestRoute) ||\n state.toToken?.usdPrice ||\n 0\n );\n }\n return {\n bestRoute,\n ...(!!bestRoute && {\n outputAmount,\n outputUsdValue,\n }),\n };\n }),\n setFromChain: (chain) =>\n set(() => ({\n fromChain: chain,\n })),\n setFromToken: (token) =>\n set((state) => ({\n fromToken: token,\n ...(!!state.inputAmount && {\n inputUsdValue: getUsdValue(token, state.inputAmount),\n }),\n })),\n setToChain: (chain) =>\n set(() => ({\n toChain: chain,\n })),\n setToToken: (token) =>\n set(() => ({\n toToken: token,\n })),\n setInputAmount: (amount) =>\n set((state) => ({\n inputAmount: amount,\n ...(!!state.fromToken && {\n inputUsdValue: getUsdValue(state.fromToken, amount),\n }),\n })),\n }))\n )\n);\n\nconst bestRoute = (\n bestRouteStore: typeof useBestRouteStore,\n settingsStore: typeof useSettingsStore\n) => {\n let abortController: AbortController | null = null;\n const fetchBestRoute = () => {\n const { fromToken, toToken, inputAmount } = bestRouteStore.getState();\n const { slippage, customSlippage, disabledLiquiditySources } =\n settingsStore.getState();\n if (!fromToken || !toToken || !inputAmount) return;\n abortController?.abort();\n abortController = new AbortController();\n const userSlippage = customSlippage | slippage;\n const requestBody = createBestRouteRequestBody(\n fromToken,\n toToken,\n inputAmount,\n [],\n [],\n disabledLiquiditySources,\n userSlippage,\n false\n );\n bestRouteStore.setState({ loading: true, bestRoute: null });\n httpService\n .getBestRoute(requestBody, {\n signal: abortController.signal,\n })\n .then((res) => {\n const { setBestRoute } = bestRouteStore.getState();\n setBestRoute(res);\n bestRouteStore.setState({ loading: false });\n abortController = null;\n })\n .catch((error) => {\n if (error.code === 'ERR_CANCELED') return;\n bestRouteStore.setState({\n error: error.message,\n loading: false,\n });\n });\n };\n\n useBestRouteStore.subscribe(\n (state) => ({\n fromChain: state.fromChain,\n fromToken: state.fromToken,\n toChain: state.toChain,\n toToken: state.toToken,\n inputAmount: state.inputAmount,\n }),\n\n fetchBestRoute.bind(null),\n {\n equalityFn: (prevState, state) => {\n if (\n prevState.fromChain?.name !== state.fromChain?.name ||\n prevState.toChain?.name !== state.toChain?.name ||\n prevState.fromToken?.symbol !== state.fromToken?.symbol ||\n prevState.toToken?.symbol !== state.toToken?.symbol ||\n prevState.fromToken?.blockchain !== state.fromToken?.blockchain ||\n prevState.toToken?.blockchain !== state.toToken?.blockchain ||\n prevState.fromToken?.address !== state.fromToken?.address ||\n prevState.toToken?.address !== state.toToken?.address ||\n prevState.inputAmount !== state.inputAmount\n )\n return false;\n else return true;\n },\n }\n );\n\n useSettingsStore.subscribe(\n (state) => ({\n slippage: state.slippage,\n customSlippage: state.customSlippage,\n disabledLiquiditySources: state.disabledLiquiditySources,\n }),\n fetchBestRoute.bind(null),\n {\n equalityFn: (prevState, state) => {\n if (\n prevState.slippage !== state.slippage ||\n prevState.customSlippage !== state.customSlippage ||\n prevState.disabledLiquiditySources.length !==\n state.disabledLiquiditySources.length\n )\n return false;\n else return true;\n },\n }\n );\n\n return { fetchBestRoute };\n};\n\nexport const { fetchBestRoute } = bestRoute(\n useBestRouteStore,\n useSettingsStore\n);\n","export enum SearchParams {\n 'FROM_CHAIN' = 'fromChain',\n 'FROM_TOKEN' = 'fromToken',\n 'TO_CHAIN' = 'toChain',\n 'TO_TOKEN' = 'toToken',\n 'FROM_AMOUNT' = 'fromAmount',\n}\n","import { create } from 'zustand';\nimport createSelectors from './selectors';\n\ninterface UiState {\n connectWalletsButtonDisabled: boolean;\n selectedSwapRequestId: string | null;\n toggleConnectWalletsButton: () => void;\n setSelectedSwap: (requestId: string | null) => void;\n}\n\nexport const useUiStore = createSelectors(\n create<UiState>()((set) => ({\n connectWalletsButtonDisabled: false,\n selectedSwapRequestId: null,\n toggleConnectWalletsButton: () =>\n set((state) => ({\n connectWalletsButtonDisabled: !state.connectWalletsButtonDisabled,\n })),\n setSelectedSwap: (requestId) => set({ selectedSwapRequestId: requestId }),\n }))\n);\n","import { Token } from 'rango-sdk';\nimport { useEffect, useRef } from 'react';\nimport {\n createSearchParams,\n useLocation,\n useSearchParams,\n} from 'react-router-dom';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useMetaStore } from '../store/meta';\nimport { SearchParams } from '../constants/searchParams';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useUiStore } from '../store/ui';\n\nfunction searchParamsToToken(\n tokens: Token[],\n searchParams: string | null\n): Token | null {\n return (\n tokens.find((token) => {\n const symbolAndAddress = searchParams?.split('--');\n if (symbolAndAddress?.length === 1)\n return token.symbol === symbolAndAddress[0] && token.address === null;\n return (\n token.symbol === symbolAndAddress?.[0] &&\n token.address === symbolAndAddress?.[1]\n );\n }) || null\n );\n}\n\nexport function UpdateUrl() {\n const firstRender = useRef(true);\n const [searchParams, setSearchParams] = useSearchParams();\n const location = useLocation();\n const firstRenderSearchParams = useRef(location.search);\n const searchParamsRef = useRef<Record<string, string>>({});\n const fromChain = useBestRouteStore.use.fromChain();\n const toChain = useBestRouteStore.use.toChain();\n const fromToken = useBestRouteStore.use.fromToken();\n const toToken = useBestRouteStore.use.toToken();\n const setFromChain = useBestRouteStore.use.setFromChain();\n const setFromToken = useBestRouteStore.use.setFromToken();\n const setToChain = useBestRouteStore.use.setToChain();\n const setToToken = useBestRouteStore.use.setToToken();\n const inputAmount = useBestRouteStore.use.inputAmount();\n const setInputAmount = useBestRouteStore.use.setInputAmount();\n const loadingStatus = useMetaStore.use.loadingStatus();\n const { blockchains, tokens } = useMetaStore.use.meta();\n const setSelectedSwap = useUiStore.use.setSelectedSwap();\n\n useEffect(() => {\n const params: Record<string, string> = {};\n createSearchParams(firstRenderSearchParams.current).forEach(\n (value, key) => {\n params[key] = value;\n }\n );\n searchParamsRef.current = params;\n const requestId =\n location.pathname.split(navigationRoutes.swaps + '/')[1] || null;\n if (requestId) setSelectedSwap(requestId);\n }, []);\n\n useEffect(() => {\n let fromChainString = '',\n fromTokenString = '',\n toChainString = '',\n toTokenString = '',\n fromAmount = '';\n if (\n loadingStatus !== 'success' &&\n ![navigationRoutes.confirmWallets, navigationRoutes.confirmSwap].includes(\n location.pathname\n )\n ) {\n fromChainString = searchParamsRef.current[SearchParams.FROM_CHAIN];\n fromTokenString = searchParamsRef.current[SearchParams.FROM_TOKEN];\n toChainString = searchParamsRef.current[SearchParams.TO_CHAIN];\n toTokenString = searchParamsRef.current[SearchParams.TO_TOKEN];\n fromAmount = searchParamsRef.current[SearchParams.FROM_AMOUNT];\n setSearchParams(\n {\n ...(fromChainString && {\n [SearchParams.FROM_CHAIN]: fromChainString,\n }),\n ...(fromTokenString && {\n [SearchParams.FROM_TOKEN]: fromTokenString,\n }),\n ...(toChainString && { [SearchParams.TO_CHAIN]: toChainString }),\n ...(toTokenString && { [SearchParams.TO_TOKEN]: toTokenString }),\n ...(fromAmount && {\n [SearchParams.FROM_AMOUNT]: fromAmount.toString(),\n }),\n },\n { replace: true }\n );\n }\n if (!firstRender.current) {\n let fromChainString = '',\n fromTokenString = '',\n toChainString = '',\n toTokenString = '',\n fromAmount = '';\n if (loadingStatus !== 'success') {\n fromChainString = searchParamsRef.current[SearchParams.FROM_CHAIN];\n fromTokenString = searchParamsRef.current[SearchParams.FROM_TOKEN];\n toChainString = searchParamsRef.current[SearchParams.TO_CHAIN];\n toTokenString = searchParamsRef.current[SearchParams.TO_TOKEN];\n fromAmount = searchParamsRef.current[SearchParams.FROM_AMOUNT];\n } else {\n if (location.state === 'redirect') return;\n fromChainString = fromChain?.name || '';\n fromTokenString =\n (fromToken?.symbol || '') +\n (fromToken?.address ? `--${fromToken?.address}` : '');\n toChainString = toChain?.name || '';\n toTokenString =\n (toToken?.symbol || '') +\n (toToken?.address ? `--${toToken?.address}` : '');\n fromAmount = inputAmount;\n\n setSearchParams(\n {\n ...(fromChainString && {\n [SearchParams.FROM_CHAIN]: fromChainString,\n }),\n ...(fromTokenString && {\n [SearchParams.FROM_TOKEN]: fromTokenString,\n }),\n ...(toChainString && { [SearchParams.TO_CHAIN]: toChainString }),\n ...(toTokenString && { [SearchParams.TO_TOKEN]: toTokenString }),\n ...(fromAmount && {\n [SearchParams.FROM_AMOUNT]: fromAmount.toString(),\n }),\n },\n { replace: true }\n );\n }\n }\n firstRender.current = false;\n }, [location.pathname, inputAmount]);\n\n useEffect(() => {\n if (loadingStatus === 'success') {\n const fronChainString = searchParams.get(SearchParams.FROM_CHAIN);\n const fromTokenString = searchParams.get(SearchParams.FROM_TOKEN);\n const toChainString = searchParams.get(SearchParams.TO_CHAIN);\n const toTokenString = searchParams.get(SearchParams.TO_TOKEN);\n const fromAmount = searchParams.get(SearchParams.FROM_AMOUNT);\n const fromChain = blockchains.find(\n (blockchain) => blockchain.name === fronChainString\n );\n const fromToken = searchParamsToToken(tokens, fromTokenString);\n const toChain = blockchains.find(\n (blockchain) => blockchain.name === toChainString\n );\n const toToken = searchParamsToToken(tokens, toTokenString);\n if (!!fromChain) {\n setFromChain(fromChain);\n if (!!fromToken) setFromToken(fromToken);\n }\n if (!!toChain) {\n setToChain(toChain);\n if (!!toToken) setToToken(toToken);\n }\n if (fromAmount) setInputAmount(fromAmount);\n }\n }, [loadingStatus]);\n\n return null;\n}\n","import React from 'react';\nimport {\n SettingsIcon,\n Tooltip,\n styled,\n Button,\n HistoryIcon,\n RetryIcon,\n} from '@rango-dev/ui';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { PropTypes } from './Header';\n\nconst ButtonsContainer = styled('div', {\n display: 'flex',\n});\n\nexport function HeaderButtons(props: PropTypes) {\n const { onClickRefresh } = props;\n const navigate = useNavigate();\n\n return (\n <ButtonsContainer>\n <Tooltip content=\"Retry\">\n <Button variant=\"ghost\" onClick={onClickRefresh}>\n <RetryIcon size={28} />\n </Button>\n </Tooltip>\n <Tooltip content=\"Transactions History\">\n <Button\n variant=\"ghost\"\n onClick={() => navigate(navigationRoutes.swaps)}\n >\n <HistoryIcon size={24} />\n </Button>\n </Tooltip>\n <Tooltip content=\"Settings\">\n <Button\n variant=\"ghost\"\n onClick={() => navigate(navigationRoutes.settings)}\n >\n <SettingsIcon size={24} />\n </Button>\n </Tooltip>\n </ButtonsContainer>\n );\n}\n","import React from 'react';\nimport { styled, Typography } from '@rango-dev/ui';\nimport { HeaderButtons } from './HeaderButtons';\n\nexport const HeaderContainer = styled('div', {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n width: '100%',\n padding: '$16 0',\n});\n\nexport interface PropTypes {\n onClickRefresh: () => void;\n}\n\nexport function Header(props: PropTypes) {\n const { onClickRefresh } = props;\n return (\n <HeaderContainer>\n <Typography variant=\"h4\">SWAP</Typography>\n <HeaderButtons onClickRefresh={onClickRefresh} />\n </HeaderContainer>\n );\n}\n","import { SelectableWallet } from '@rango-dev/ui';\nimport { WalletType } from '@rango-dev/wallets-shared';\nimport { create } from 'zustand';\nimport { subscribeWithSelector } from 'zustand/middleware';\nimport { httpService } from '../services/httpService';\nimport {\n getRequiredChains,\n isAccountAndBalanceMatched,\n makeBalanceFor,\n resetBalanceState,\n SelectedWallet,\n} from '../utils/wallets';\nimport { useBestRouteStore } from './bestRoute';\nimport { useMetaStore } from './meta';\nimport createSelectors from './selectors';\n\nexport interface Account {\n chain: string;\n address: string;\n walletType: WalletType;\n}\n\nexport type TokenBalance = {\n chain: string;\n symbol: string;\n ticker: string;\n address: string | null;\n rawAmount: string;\n decimal: number | null;\n amount: string;\n logo: string | null;\n usdPrice: number | null;\n};\n\nexport interface Balance {\n balances: TokenBalance[] | null;\n address: string;\n chain: string;\n loading: boolean;\n walletType: WalletType;\n error: boolean;\n explorerUrl: string | null;\n}\n\ninterface WalletsStore {\n accounts: Account[];\n balances: Balance[];\n selectedWallets: SelectedWallet[];\n connectWallet: (accounts: Account[]) => void;\n disconnectWallet: (walletType: WalletType) => void;\n initSelectedWallets: () => void;\n setSelectedWallet: (wallet: SelectableWallet) => void;\n}\n\nexport const useWalletsStore = createSelectors(\n create<WalletsStore>()(\n subscribeWithSelector((set) => ({\n accounts: [],\n balances: [],\n selectedWallets: [],\n connectWallet: (accounts) => {\n const tokens = useMetaStore.getState().meta.tokens;\n\n set((state) => ({\n accounts: state.accounts.concat(accounts),\n balances: state.balances.concat(\n accounts.map((account) => ({\n balances: [],\n address: account.address,\n chain: account.chain,\n loading: true,\n walletType: account.walletType,\n error: false,\n explorerUrl: null,\n }))\n ),\n }));\n accounts.forEach(async (account) => {\n try {\n const response = await httpService.getWalletsDetails([\n { address: account.address, blockchain: account.chain },\n ]);\n const retrivedBalance = response.wallets[0];\n if (retrivedBalance) {\n set((state) => ({\n balances: state.balances.map((balance) => {\n return isAccountAndBalanceMatched(account, balance)\n ? makeBalanceFor(account, retrivedBalance, tokens)\n : balance;\n }),\n }));\n } else throw new Error('Wallet not found');\n } catch (error) {\n set((state) => ({\n balances: state.balances.map((balance) => {\n return isAccountAndBalanceMatched(account, balance)\n ? resetBalanceState(balance)\n : balance;\n }),\n }));\n }\n });\n },\n disconnectWallet: (walletType) => {\n set((state) => ({\n accounts: state.accounts.filter(\n (account) => account.walletType !== walletType\n ),\n balances: state.balances.filter(\n (balance) => balance.walletType !== walletType\n ),\n selectedWallets: state.selectedWallets.filter(\n (wallet) => wallet.walletType != walletType\n ),\n }));\n },\n initSelectedWallets: () =>\n set((state) => {\n const requiredChains = getRequiredChains(\n useBestRouteStore.getState().bestRoute\n );\n const connectedWallets = state.accounts;\n const selectedWallets: SelectedWallet[] = [];\n requiredChains.forEach((chain) => {\n const anyWalletSelected = !!state.selectedWallets.find(\n (wallet) => wallet.chain === chain\n );\n if (!anyWalletSelected) {\n const firstWalletWithMatchedChain = connectedWallets.find(\n (wallet) => wallet.chain === chain\n );\n if (!!firstWalletWithMatchedChain)\n selectedWallets.push({\n address: firstWalletWithMatchedChain.address,\n chain: firstWalletWithMatchedChain.chain,\n walletType: firstWalletWithMatchedChain.walletType,\n });\n }\n });\n return {\n selectedWallets: state.selectedWallets.concat(selectedWallets),\n };\n }),\n setSelectedWallet: (wallet) =>\n set((state) => ({\n selectedWallets: state.selectedWallets\n .filter((selectedWallet) => selectedWallet.chain !== wallet.chain)\n .concat({\n chain: wallet.chain,\n address: wallet.address,\n walletType: wallet.walletType,\n }),\n })),\n }))\n )\n);\n","import React from 'react';\nimport { AngleDownIcon, Button, InfoCircleIcon, styled, TextField, Typography } from '@rango-dev/ui';\nimport { useMetaStore } from '../store/meta';\nimport { BlockchainMeta, Token } from 'rango-sdk';\nimport { useNavigate } from 'react-router-dom';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { numberToString } from '../utils/numbers';\nimport BigNumber from 'bignumber.js';\nimport { getBalanceFromWallet } from '../utils/wallets';\nimport { useWalletsStore } from '../store/wallets';\n\ntype PropTypes = (\n | { type: 'From'; inputAmount: string; onAmountChange: (amount: string) => void }\n | {\n type: 'To';\n outputAmount: BigNumber | null;\n outputUsdValue: BigNumber | null;\n }\n) & { chain: BlockchainMeta | null; token: Token | null };\n\nconst Box = styled('div', {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n});\n\nconst Container = styled('div', {\n boxSizing: 'border-box',\n backgroundColor: '$neutrals300',\n borderRadius: '$5',\n padding: '$8 0',\n\n '.form': {\n display: 'flex',\n width: '100%',\n padding: '$8 $16',\n },\n});\n\nconst StyledImage = styled('img', {\n width: '$24',\n maxHeight: '$24',\n});\n\nconst Options = styled('div', {\n display: 'flex',\n justifyContent: 'flex-end',\n padding: '0 $8',\n});\n\nconst ImagePlaceholder = styled('span', {\n width: '24px',\n height: '24px',\n backgroundColor: '$neutrals300',\n borderRadius: '99999px',\n});\n\nconst OutputContainer = styled('div', {\n height: '$48',\n borderRadius: '$5',\n flexGrow: 1,\n width: '70%',\n backgroundColor: '$background',\n border: '1px solid transparent',\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n paddingLeft: '$8',\n paddingRight: '$8',\n});\n\nexport function TokenInfo(props: PropTypes) {\n const { type, chain, token } = props;\n const loadingStatus = useMetaStore.use.loadingStatus();\n const fromChain = useBestRouteStore.use.fromChain();\n const toChain = useBestRouteStore.use.toChain();\n const inputUsdValue = useBestRouteStore.use.inputUsdValue();\n const fromToken = useBestRouteStore.use.fromToken();\n const setInputAmount = useBestRouteStore.use.setInputAmount();\n const bestRoute = useBestRouteStore.use.bestRoute();\n const inputAmount = useBestRouteStore.use.inputAmount();\n const balances = useWalletsStore.use.balances();\n const navigate = useNavigate();\n\n const tokenBalance =\n !!fromChain && !!fromToken\n ? numberToString(\n getBalanceFromWallet(balances, fromChain?.name, fromToken?.symbol, fromToken?.address)\n ?.amount || '0',\n 8,\n )\n : '0';\n\n const tokenBalanceReal =\n !!fromChain && !!fromToken\n ? numberToString(\n getBalanceFromWallet(balances, fromChain?.name, fromToken?.symbol, fromToken?.address)\n ?.amount || '0',\n getBalanceFromWallet(balances, fromChain?.name, fromToken?.symbol, fromToken?.address)\n ?.decimal,\n )\n : '0';\n\n const ItemSuffix = (\n <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center' }}>\n {loadingStatus === 'failed' && <InfoCircleIcon color=\"error\" size={24} />}\n <AngleDownIcon />\n </div>\n );\n\n return (\n <Box>\n <div>\n <Typography variant=\"body2\">{type}</Typography>\n </div>\n <Container>\n {props.type === 'From' && (\n <Options>\n <div\n className=\"balance\"\n onClick={() => {\n if (tokenBalance !== '0') setInputAmount(tokenBalanceReal.split(',').join(''));\n }}>\n <Button variant=\"ghost\" size=\"small\">\n <Typography variant=\"body2\">{`Max: ${tokenBalance} ${\n fromToken?.symbol || ''\n }`}</Typography>\n </Button>\n </div>\n </Options>\n )}\n <div className=\"form\">\n <Button\n onClick={() => {\n navigate(`/${props.type.toLowerCase()}-chain`);\n }}\n variant=\"outlined\"\n disabled={loadingStatus === 'failed'}\n loading={loadingStatus === 'loading'}\n prefix={\n loadingStatus === 'success' && chain ? (\n <StyledImage src={chain.logo} />\n ) : (\n <ImagePlaceholder />\n )\n }\n suffix={ItemSuffix}\n align=\"start\"\n size=\"large\"\n style={{ marginRight: '.5rem' }}>\n {loadingStatus === 'success' && chain ? chain.displayName : 'Chain'}\n </Button>\n <Button\n onClick={() => {\n navigate(`/${props.type.toLowerCase()}-token`);\n }}\n variant=\"outlined\"\n disabled={\n loadingStatus === 'failed' ||\n (type === 'From' && !fromChain) ||\n (type === 'To' && !toChain)\n }\n loading={loadingStatus === 'loading'}\n prefix={\n loadingStatus === 'success' && token ? (\n <StyledImage src={token.image} />\n ) : (\n <ImagePlaceholder />\n )\n }\n suffix={ItemSuffix}\n size=\"large\"\n align=\"start\"\n style={{ marginRight: '.5rem' }}>\n {loadingStatus === 'success' && token ? token.symbol : 'Token'}\n </Button>\n {props.type === 'From' ? (\n <TextField\n type=\"number\"\n size=\"large\"\n autoFocus\n placeholder=\"0\"\n style={{\n width: '70%',\n position: 'relative',\n backgroundColor: '$background !important',\n }}\n suffix={\n <span style={{ position: 'absolute', right: '4px', bottom: '2px' }}>\n <Typography variant=\"caption\">{`$${numberToString(inputUsdValue)}`}</Typography>\n </span>\n }\n value={props.inputAmount || ''}\n onChange={\n props.type === 'From'\n ? (event) => {\n props.onAmountChange(event.target.value);\n }\n : undefined\n }\n />\n ) : (\n <OutputContainer>\n <Typography variant=\"body1\">\n {bestRoute ? `≈ ${numberToString(props.outputAmount)}` : inputAmount ? '?' : '0'}\n </Typography>\n <span style={{ position: 'absolute', right: '4px', bottom: '2px' }}>\n <Typography variant=\"caption\">{`$${numberToString(\n props.outputUsdValue,\n )}`}</Typography>\n </span>\n </OutputContainer>\n )}\n </div>\n </Container>\n </Box>\n );\n}\n","import React from 'react';\nimport { styled } from '@rango-dev/ui/src/theme';\nimport { Typography } from '@rango-dev/ui';\n\nconst Container = styled('div', {\n display: 'flex',\n width: '100%',\n justifyContent: 'end',\n alignItems: 'center',\n paddingTop: '$16',\n});\n\nconst Logo = styled('svg', {\n fill: '$foreground',\n width: '$24',\n margin: '0 $8 0 $16',\n});\n\nconst StyledAnchor = styled('a', {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n textDecoration: 'none',\n});\n\nexport function BottomLogo() {\n return (\n <Container>\n <Typography variant=\"caption\">Powered By</Typography>\n <StyledAnchor href=\"https://rango.exchange\" target=\"_blank\">\n <Logo xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 33.68 29\">\n <defs></defs>\n <g id=\"Layer_2\" data-name=\"Layer 2\">\n <g id=\"Layer_1-2\" data-name=\"Layer 1\">\n <path d=\"M33.68,18.05A17.93,17.93,0,0,0,28.34,5.29,18.31,18.31,0,0,0,15.45,0H13.54V7.41L6.07,0H.69L9.83,9.07H0V11A17.93,17.93,0,0,0,5.34,23.71,18.32,18.32,0,0,0,18.24,29h1.9V21.59l7.38,7.31h5.39l-9-9h9.82ZM17.37,16.16H12.49a1.93,1.93,0,0,0-1.35.55,1.89,1.89,0,0,0-.56,1.34,1.85,1.85,0,0,0,.56,1.33,1.93,1.93,0,0,0,1.35.55h3.84V25.1A14.43,14.43,0,0,1,8,21a14.21,14.21,0,0,1-4.1-8.2H21.2a1.86,1.86,0,0,0,.74-.13,1.92,1.92,0,0,0,.64-.4,2,2,0,0,0,.43-.62,1.88,1.88,0,0,0,0-1.47,2,2,0,0,0-.43-.62,1.92,1.92,0,0,0-.64-.4,1.86,1.86,0,0,0-.74-.13H17.35V3.9A14.43,14.43,0,0,1,25.64,8a14.19,14.19,0,0,1,4.11,8.2Zm2.12-5.27a1.43,1.43,0,0,1,.26-.83,1.52,1.52,0,0,1,.67-.56,1.55,1.55,0,0,1,.88-.08,1.51,1.51,0,0,1,.77.4,1.54,1.54,0,0,1,.42.77,1.41,1.41,0,0,1-.09.86,1.47,1.47,0,0,1-.55.68,1.56,1.56,0,0,1-.84.25,1.52,1.52,0,0,1-1.52-1.49Z\" />\n <path d=\"M21.7,11.57a.68.68,0,0,0-.12-.38.64.64,0,0,0-.31-.25.68.68,0,0,0-.75.15.61.61,0,0,0-.19.35.62.62,0,0,0,0,.4.67.67,0,0,0,.25.3.69.69,0,0,0,.39.12.7.7,0,0,0,.49-.2A.68.68,0,0,0,21.7,11.57Z\" />\n </g>\n </g>\n </Logo>\n <Typography variant=\"body2\">RANGO</Typography>\n </StyledAnchor>\n </Container>\n );\n}\n","import { useEffect, useRef } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { SearchParams } from '../constants/searchParams';\nimport { useBestRouteStore } from '../store/bestRoute';\n\nexport function SwithFromAndTo({ count }: { count: number }) {\n const firstRender = useRef(true);\n const [searchParams, setSearchParams] = useSearchParams();\n const outputAmount = useBestRouteStore.use.outputAmount();\n\n useEffect(() => {\n if (!firstRender.current) {\n const fromChainString = searchParams.get(SearchParams.FROM_CHAIN);\n const fromTokenString = searchParams.get(SearchParams.FROM_TOKEN);\n const toChainString = searchParams.get(SearchParams.TO_CHAIN);\n const toTokenString = searchParams.get(SearchParams.TO_TOKEN);\n setSearchParams({\n ...(toChainString && { [SearchParams.FROM_CHAIN]: toChainString }),\n ...(toTokenString && { [SearchParams.FROM_TOKEN]: toTokenString }),\n ...(fromChainString && { [SearchParams.TO_CHAIN]: fromChainString }),\n ...(fromTokenString && { [SearchParams.TO_TOKEN]: fromTokenString }),\n ...(outputAmount && { [SearchParams.FROM_AMOUNT]: outputAmount.toString() }),\n });\n } else {\n firstRender.current = false;\n }\n }, [count]);\n\n return null;\n}\n","import { styled } from '@rango-dev/ui';\n\nexport const Footer = styled('div', {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n paddingTop: '$16',\n});\n","export const errorMessages = {\n genericServerError: 'Error connecting server, please reload the app and try again',\n};\n","import {\n Alert,\n BestRoute,\n Button,\n styled,\n Typography,\n VerticalSwapIcon,\n} from '@rango-dev/ui';\nimport React, { useState } from 'react';\nimport { useInRouterContext, useNavigate } from 'react-router-dom';\nimport { Header } from '../components/Header';\nimport { TokenInfo } from '../components/TokenInfo';\nimport { fetchBestRoute, useBestRouteStore } from '../store/bestRoute';\nimport { BottomLogo } from '../components/BottomLogo';\nimport { SwithFromAndTo } from '../components/SwitchFromAndTo';\nimport { Footer } from '../components/Footer';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useMetaStore } from '../store/meta';\nimport { useWalletsStore } from '../store/wallets';\nimport { errorMessages } from '../constants/errors';\nimport {\n getSwapButtonState,\n getOutputRatio,\n hasLimitError,\n outputRatioHasWarning,\n canComputePriceImpact,\n LimitErrorMessage,\n getTotalFeeInUsd,\n hasHighFee,\n} from '../utils/swap';\nimport {\n numberToString,\n secondsToString,\n totalArrivalTime,\n} from '../utils/numbers';\n\nconst Container = styled('div', {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n});\n\nconst SwitchButtonContainer = styled('div', {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n position: 'relative',\n top: '11px',\n});\n\nconst BestRouteContainer = styled('div', {\n width: '100%',\n paddingTop: '$16',\n});\n\nconst Alerts = styled('div', {\n width: '100%',\n paddingTop: '$16',\n});\n\nexport function Home() {\n const waningMessage = '';\n const isRouterInContext = useInRouterContext();\n const navigate = useNavigate();\n const [count, setCount] = useState(0);\n const fromChain = useBestRouteStore.use.fromChain();\n const fromToken = useBestRouteStore.use.fromToken();\n const toChain = useBestRouteStore.use.toChain();\n const toToken = useBestRouteStore.use.toToken();\n const setFromChain = useBestRouteStore.use.setFromChain();\n const setFromToken = useBestRouteStore.use.setFromToken();\n const setToChain = useBestRouteStore.use.setToChain();\n const setToToken = useBestRouteStore.use.setToToken();\n const inputUsdValue = useBestRouteStore.use.inputUsdValue();\n const inputAmount = useBestRouteStore.use.inputAmount();\n const setInputAmount = useBestRouteStore.use.setInputAmount();\n const outputAmount = useBestRouteStore.use.outputAmount();\n const outputUsdValue = useBestRouteStore.use.outputUsdValue();\n const bestRoute = useBestRouteStore.use.bestRoute();\n const tokens = useMetaStore.use.meta().tokens;\n const fetchingBestRoute = useBestRouteStore.use.loading();\n const bestRouteError = useBestRouteStore.use.error();\n\n const loadingMetaStatus = useMetaStore.use.loadingStatus();\n const accounts = useWalletsStore.use.accounts();\n\n const swithFromAndTo = () => {\n setFromChain(toChain);\n setFromToken(toToken);\n setToChain(fromChain);\n setToToken(fromToken);\n setInputAmount(outputAmount?.toString() || '');\n setCount((prev) => prev + 1);\n };\n\n const errorMessage =\n loadingMetaStatus === 'failed'\n ? errorMessages.genericServerError\n : bestRouteError;\n\n const needsToWarnEthOnPath = false;\n\n const showBestRoute =\n inputAmount && (!!bestRoute || fetchingBestRoute || bestRouteError);\n\n const outToInRatio = getOutputRatio(inputUsdValue, outputUsdValue);\n\n const highValueLoss = outputRatioHasWarning(inputUsdValue, outToInRatio);\n\n const { fromAmountRangeError, recommendation, swap } =\n LimitErrorMessage(bestRoute);\n\n const priceImpactCanNotBeComputed = !canComputePriceImpact(\n bestRoute,\n inputAmount,\n inputUsdValue,\n outputUsdValue\n );\n\n const swapButtonState = getSwapButtonState(\n loadingMetaStatus,\n accounts,\n fetchingBestRoute,\n bestRoute,\n hasLimitError(bestRoute),\n highValueLoss,\n priceImpactCanNotBeComputed,\n needsToWarnEthOnPath\n );\n\n const totalFeeInUsd = getTotalFeeInUsd(bestRoute, tokens);\n\n const highFee = hasHighFee(totalFeeInUsd);\n\n return (\n <Container>\n <Header onClickRefresh={fetchBestRoute} />\n <TokenInfo\n type=\"From\"\n chain={fromChain}\n token={fromToken}\n onAmountChange={setInputAmount}\n inputAmount={inputAmount}\n />\n <SwitchButtonContainer>\n <Button variant=\"ghost\" onClick={swithFromAndTo}>\n <VerticalSwapIcon size={36} />\n {isRouterInContext && <SwithFromAndTo count={count} />}\n </Button>\n </SwitchButtonContainer>\n <TokenInfo\n type=\"To\"\n chain={toChain}\n token={toToken}\n outputAmount={outputAmount}\n outputUsdValue={outputUsdValue}\n />\n {showBestRoute && (\n <BestRouteContainer>\n <BestRoute\n error={bestRouteError}\n loading={fetchingBestRoute}\n data={bestRoute}\n totalFee={numberToString(totalFeeInUsd, 0, 2)}\n feeWarning={highFee}\n totalTime={secondsToString(totalArrivalTime(bestRoute))}\n />\n </BestRouteContainer>\n )}\n {(errorMessage || waningMessage || hasLimitError(bestRoute)) && (\n <Alerts>\n {errorMessage && (\n <Alert type=\"error\">\n {<Typography variant=\"body2\">{errorMessage}</Typography>}\n </Alert>\n )}\n {hasLimitError(bestRoute) && (\n <Alert type=\"error\" title={`${swap?.swapperId} Limit`}>\n <>\n <Typography variant=\"body2\">{fromAmountRangeError}</Typography>\n <br />\n <Typography variant=\"body2\">\n Yours: {numberToString(swap?.fromAmount || null)}\n {swap?.from.symbol}\n </Typography>\n <br />\n <Typography variant=\"body2\">{recommendation}</Typography>\n </>\n </Alert>\n )}\n {waningMessage && (\n <Alert type=\"warning\">\n <Typography variant=\"body2\">{waningMessage}</Typography>\n </Alert>\n )}\n </Alerts>\n )}\n <Footer>\n <Button\n type=\"primary\"\n align=\"grow\"\n size=\"large\"\n disabled={swapButtonState.disabled}\n onClick={() => {\n if (swapButtonState.title === 'Connect Wallet')\n navigate(navigationRoutes.wallets);\n else {\n navigate(navigationRoutes.confirmWallets, { replace: true });\n }\n }}\n >\n {swapButtonState.title}\n </Button>\n <BottomLogo />\n </Footer>\n </Container>\n );\n}\n","import React, { PropsWithChildren, useEffect, useRef } from 'react';\nimport {\n MemoryRouter,\n useInRouterContext,\n useLocation,\n useNavigate,\n} from 'react-router';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { UpdateUrl } from './UpdateUrl';\nimport { Home } from '../pages/Home';\n\nconst Route: React.FC = (props: PropsWithChildren) => {\n const location = useLocation();\n const navigate = useNavigate();\n const ref = useRef(true);\n\n useEffect(() => {\n if (\n [navigationRoutes.confirmWallets, navigationRoutes.confirmSwap].includes(\n location.pathname\n ) &&\n ref.current\n )\n navigate(navigationRoutes.home + location.search, { state: 'redirect' });\n\n ref.current = false;\n }, []);\n\n if (\n [navigationRoutes.confirmWallets, navigationRoutes.confirmSwap].includes(\n location.pathname\n ) &&\n ref.current\n )\n return <Home />;\n\n return <> {props.children}</>;\n};\n\nexport function AppRouter({ children }: PropsWithChildren) {\n const isRouterInContext = useInRouterContext();\n const Router = isRouterInContext ? Route : MemoryRouter;\n\n return (\n <>\n <Router>{children}</Router>\n {isRouterInContext && <UpdateUrl />}\n </>\n );\n}\n","import React from 'react';\nimport { Button, styled } from '@rango-dev/ui';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\n\nconst StyledButton = styled(Button, {\n marginTop: '$8',\n});\n\nexport function ChangeSlippageButton() {\n const navigate = useNavigate();\n\n return (\n <StyledButton\n type=\"primary\"\n variant=\"contained\"\n size=\"small\"\n onClick={navigate.bind(null, navigationRoutes.settings)}\n >\n Change Slippage\n </StyledButton>\n );\n}\n","import { Alert, Typography } from '@rango-dev/ui';\nimport React from 'react';\nimport { ChangeSlippageButton } from '../ChangeSlippageButton';\n\ninterface PropTypes {\n selectedSlippage: number;\n}\n\nexport function HighSlippageWarning(props: PropTypes) {\n const { selectedSlippage } = props;\n\n return (\n <Alert type=\"warning\">\n <Typography variant=\"body2\">\n slippage is high=&gt; Caution, your slippage is high (=\n {selectedSlippage}). Your trade may be front run.\n <ChangeSlippageButton />\n </Typography>\n </Alert>\n );\n}\n","import React from 'react';\nimport { HIGH_SLIPPAGE } from '../../constants/swapSettings';\nimport { HighSlippageWarning } from './HighSlippageWarning';\n\ninterface PropTypes {\n selectedSlippage: number;\n}\n\nexport function ConfirmSwapExtraMessages(props: PropTypes) {\n const { selectedSlippage } = props;\n const highSlippage = selectedSlippage >= HIGH_SLIPPAGE;\n\n return <>{highSlippage && <HighSlippageWarning selectedSlippage={selectedSlippage} />}</>;\n}\n","import { useInRouterContext, useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\n\nexport function useNavigateBack() {\n const isRouterInContext = useInRouterContext();\n const navigate = useNavigate();\n\n navigationRoutes;\n\n const navigateBackFrom = (currentRoute: string) => {\n if (\n !isRouterInContext ||\n (window.history.state && window.history.state.idx > 0)\n )\n navigate(-1);\n else {\n if (\n [\n navigationRoutes.fromChain,\n navigationRoutes.fromToken,\n navigationRoutes.toChain,\n navigationRoutes.toToken,\n navigationRoutes.settings,\n navigationRoutes.wallets,\n navigationRoutes.swaps,\n navigationRoutes.confirmWallets,\n ].includes(currentRoute)\n )\n navigate(navigationRoutes.home, { replace: true });\n else if (currentRoute === navigationRoutes.liquiditySources)\n navigate(navigationRoutes.settings, { replace: true });\n else if (currentRoute === navigationRoutes.swapDetails)\n navigate(navigationRoutes.swaps, { replace: true });\n else if (currentRoute === navigationRoutes.confirmSwap)\n navigate(navigationRoutes.confirmWallets, { replace: true });\n }\n };\n\n return { navigateBackFrom };\n}\n","import BigNumber from 'bignumber.js';\nimport { create } from 'zustand';\nimport { shallow } from 'zustand/shallow';\nimport { subscribeWithSelector } from 'zustand/middleware';\nimport { httpService } from '../services/httpService';\nimport { PendingSwapSettings } from '../types';\nimport { numberToString } from '../utils/numbers';\nimport {\n isRouteChanged,\n isNumberOfSwapsChanged,\n isRouteSwappersUpdated,\n isRouteInternalCoinsUpdated,\n} from '../utils/routing';\nimport {\n createBestRouteRequestBody,\n getOutputRatio,\n outputRatioHasWarning,\n isOutputAmountChangedALot,\n getRouteOutputAmount,\n getPercentageChange,\n getBalanceWarnings,\n getMinRequiredSlippage,\n hasProperSlippage,\n calculatePendingSwap,\n getWalletsForNewSwap,\n} from '../utils/swap';\nimport { useBestRouteStore } from './bestRoute';\nimport { useMetaStore } from './meta';\nimport createSelectors from './selectors';\nimport { useSettingsStore } from './settings';\nimport { useWalletsStore } from './wallets';\nimport { PendingSwap } from '@rango-dev/ui/dist/containers/History/types';\n\ninterface ConfirmSwapState {\n loading: boolean;\n errors: ConfirmSwapError[];\n warnings: ConfirmSwapWarnings[];\n proceedAnyway: boolean;\n}\n\nexport const useConfirmSwapStore = createSelectors(\n create<ConfirmSwapState>()(\n subscribeWithSelector(() => ({\n loading: false,\n errors: [],\n warnings: [],\n proceedAnyway: false,\n }))\n )\n);\n\nexport enum ConfirmSwapErrorTypes {\n NO_ROUTE,\n ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS,\n REQUEST_FAILED,\n INSUFFICIENT_SLIPPAGE,\n}\n\nexport type ConfirmSwapError =\n | {\n type: ConfirmSwapErrorTypes.REQUEST_FAILED;\n status?: number;\n }\n | {\n type: ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE;\n minRequiredSlippage: number;\n }\n | {\n type: Exclude<\n ConfirmSwapErrorTypes,\n | ConfirmSwapErrorTypes.REQUEST_FAILED\n | ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE\n >;\n };\n\nexport type ConfirmSwapWarnings =\n | {\n type: ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED;\n newOutputAmount: string;\n percentageChange: string;\n }\n | { type: ConfirmSwapWarningTypes.INSUFFICIENT_BALANCE; messages: string[] }\n | {\n type: Exclude<\n ConfirmSwapWarningTypes,\n | ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED\n | ConfirmSwapWarningTypes.INSUFFICIENT_BALANCE\n >;\n };\n\nexport enum ConfirmSwapWarningTypes {\n ROUTE_UPDATED,\n ROUTE_SWAPPERS_UPDATED,\n ROUTE_COINS_UPDATED,\n ROUTE_AND_OUTPUT_AMOUNT_UPDATED,\n INSUFFICIENT_BALANCE,\n}\n\nexport const confirmSwap = async (): Promise<PendingSwap | undefined> => {\n const {\n fromToken,\n toToken,\n inputAmount,\n bestRoute: initialRoute,\n inputUsdValue,\n setBestRoute,\n } = useBestRouteStore.getState();\n const { accounts, selectedWallets } = useWalletsStore.getState();\n const { proceedAnyway } = useConfirmSwapStore.getState();\n const { disabledLiquiditySources, slippage, customSlippage } =\n useSettingsStore.getState();\n const { meta } = useMetaStore.getState();\n\n const userSlippage = customSlippage || slippage;\n\n if (!fromToken || !toToken || !inputAmount || !initialRoute) return;\n\n if (proceedAnyway!) {\n const swapSettings: PendingSwapSettings = {\n slippage: userSlippage.toString(),\n disabledSwappersGroups: disabledLiquiditySources,\n };\n\n const newSwap = calculatePendingSwap(\n inputAmount.toString(),\n initialRoute,\n getWalletsForNewSwap(selectedWallets),\n swapSettings,\n false,\n meta\n );\n\n console.log('new swap:', newSwap);\n\n // queueManager?.create('swap', { swapDetails: newSwap });\n\n useConfirmSwapStore.setState({\n errors: [],\n warnings: [],\n proceedAnyway: false,\n });\n\n return newSwap;\n }\n\n let abortController: AbortController | null = new AbortController();\n\n useConfirmSwapStore.setState({ loading: true });\n\n const requestBody = createBestRouteRequestBody(\n fromToken,\n toToken,\n inputAmount,\n accounts,\n selectedWallets,\n disabledLiquiditySources,\n userSlippage,\n true\n );\n const unsubscribeFromBestRouteStore = useBestRouteStore.subscribe(\n (state) => state.bestRoute,\n () => {\n abortController.abort();\n },\n { equalityFn: shallow }\n );\n const unsubscribeFromWalletsStore = useWalletsStore.subscribe(\n (state) => state.selectedWallets,\n () => {\n abortController?.abort();\n },\n {\n equalityFn: (prevState, state) => {\n const selectedWalletsChanged = !state.every(\n (wallet) =>\n !!prevState.find(\n (prevWallet) =>\n wallet.address === prevWallet.address &&\n wallet.chain === prevWallet.chain\n )\n );\n\n if (selectedWalletsChanged) return false;\n else return true;\n },\n }\n );\n\n const newSwap: PendingSwap | undefined | void = await httpService\n .getBestRoute(requestBody, { signal: abortController.signal })\n .then((confiremedRoute) => {\n useConfirmSwapStore.setState({ loading: false });\n\n if (\n !confiremedRoute.result ||\n !new BigNumber(confiremedRoute.requestAmount).isEqualTo(\n new BigNumber(inputAmount || '-1')\n )\n ) {\n useConfirmSwapStore.setState((prevState) => ({\n errors: prevState.errors.concat({\n type: ConfirmSwapErrorTypes.NO_ROUTE,\n }),\n }));\n return undefined;\n }\n\n const confirmSwap: Partial<ConfirmSwapState> = {\n loading: false,\n errors: [],\n warnings: [],\n proceedAnyway,\n };\n\n const routeChanged = isRouteChanged(initialRoute, confiremedRoute!);\n\n if (routeChanged) {\n setBestRoute(confiremedRoute);\n const newRouteOutputUsdValue = new BigNumber(\n confiremedRoute.result?.outputAmount || '0'\n ).multipliedBy(toToken.usdPrice || 0);\n\n const outputRatio = getOutputRatio(\n inputUsdValue,\n newRouteOutputUsdValue\n );\n const highValueLoss = outputRatioHasWarning(inputUsdValue, outputRatio);\n\n if (isNumberOfSwapsChanged(initialRoute, confiremedRoute))\n confirmSwap.warnings.push({\n type: ConfirmSwapWarningTypes.ROUTE_UPDATED,\n });\n else if (isRouteSwappersUpdated(initialRoute, confiremedRoute))\n confirmSwap.warnings.push({\n type: ConfirmSwapWarningTypes.ROUTE_SWAPPERS_UPDATED,\n });\n else isRouteInternalCoinsUpdated(initialRoute, confiremedRoute);\n confirmSwap.warnings.push({\n type: ConfirmSwapWarningTypes.ROUTE_COINS_UPDATED,\n });\n if (highValueLoss)\n confirmSwap.errors.push({\n type: ConfirmSwapErrorTypes.ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS,\n });\n else if (isOutputAmountChangedALot(initialRoute, confiremedRoute))\n confirmSwap.warnings.push({\n type: ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED,\n newOutputAmount: numberToString(\n getRouteOutputAmount(confiremedRoute)\n ),\n percentageChange: numberToString(\n getPercentageChange(\n getRouteOutputAmount(initialRoute),\n getRouteOutputAmount(confiremedRoute)\n ),\n null,\n 2\n ),\n });\n }\n\n const balanceWarnings = getBalanceWarnings(\n confiremedRoute,\n selectedWallets\n );\n const enoughBalance = balanceWarnings.length === 0;\n\n if (!enoughBalance)\n confirmSwap.warnings.push({\n type: ConfirmSwapWarningTypes.INSUFFICIENT_BALANCE,\n messages: balanceWarnings,\n });\n\n const minRequiredSlippage = getMinRequiredSlippage(initialRoute);\n\n if (!hasProperSlippage(userSlippage.toString(), minRequiredSlippage))\n confirmSwap.errors.push({\n type: ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE,\n minRequiredSlippage,\n });\n\n const noErrors = confirmSwap.errors.length === 0;\n const noWarnings = confirmSwap.warnings.length === 0;\n\n if (\n (noErrors || (!noErrors && proceedAnyway)) &&\n (noWarnings || (!noWarnings && proceedAnyway))\n ) {\n const swapSettings: PendingSwapSettings = {\n slippage: userSlippage.toString(),\n disabledSwappersGroups: disabledLiquiditySources,\n };\n\n const newSwap = calculatePendingSwap(\n inputAmount.toString(),\n confiremedRoute,\n getWalletsForNewSwap(selectedWallets),\n swapSettings,\n false,\n meta\n );\n\n console.log('new swap:', newSwap);\n return newSwap;\n } else if (!proceedAnyway) {\n confirmSwap.proceedAnyway = true;\n useConfirmSwapStore.setState(confirmSwap);\n }\n return undefined;\n })\n .then((result) => {\n abortController = null;\n unsubscribeFromBestRouteStore();\n unsubscribeFromWalletsStore();\n return result;\n })\n .catch((error) => {\n abortController = null;\n if (error.code === 'ERR_CANCELED') {\n useConfirmSwapStore.setState({\n errors: [],\n warnings: [],\n loading: false,\n proceedAnyway: false,\n });\n unsubscribeFromBestRouteStore();\n unsubscribeFromWalletsStore();\n }\n\n const status = error.response?.status;\n\n useConfirmSwapStore.setState((prevState) => ({\n loading: false,\n errors: prevState.errors.concat({\n type: ConfirmSwapErrorTypes.REQUEST_FAILED,\n status,\n }),\n }));\n });\n\n return newSwap || undefined;\n};\n","import { Typography } from '@rango-dev/ui';\nimport React from 'react';\nimport { ChangeSlippageButton } from '../ChangeSlippageButton';\n\ninterface PropTypes {\n minRequiredSlippage: number | null;\n}\n\nexport function MinRequiredSlippage({ minRequiredSlippage }: PropTypes) {\n return (\n <Typography variant=\"body2\">\n slippage is low =&gt; We recommend you to increase slippage to at least\n {minRequiredSlippage}\n for this route.\n <ChangeSlippageButton />\n </Typography>\n );\n}\n","import React from 'react';\nimport { Typography } from '@rango-dev/ui';\nimport { ConfirmSwapError, ConfirmSwapErrorTypes } from '../store/confirmSwap';\nimport { MinRequiredSlippage } from './warnings/MinRequiredSlippage';\n\nexport function ConfirmSwapErrors(errors: ConfirmSwapError[]) {\n return errors.flatMap((error) => {\n switch (error.type) {\n case ConfirmSwapErrorTypes.NO_ROUTE:\n return (\n <Typography variant=\"body2\">\n No routes found. Please try again later.\n </Typography>\n );\n case ConfirmSwapErrorTypes.REQUEST_FAILED:\n return (\n <Typography variant=\"body2\">{`Failed to confirm swap ${\n error.status ? `'status': ${error.status})` : ''\n }, please try again.`}</Typography>\n );\n\n case ConfirmSwapErrorTypes.ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS:\n return (\n <Typography variant=\"body2\">\n Route updated and price impact is too high, try again later!\n </Typography>\n );\n case ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE:\n return (\n <MinRequiredSlippage\n minRequiredSlippage={error.minRequiredSlippage}\n />\n );\n default:\n return [];\n }\n });\n}\n","import { Typography } from '@rango-dev/ui';\nimport React from 'react';\n\ninterface PropTypes {\n messages: string[];\n}\n\nexport function BalanceWarnings({ messages }: PropTypes) {\n return (\n <div>\n {messages.map((warning) => (\n <Typography variant=\"body2\">{warning}</Typography>\n ))}\n </div>\n );\n}\n","import React from 'react';\nimport { Typography } from '@rango-dev/ui';\nimport {\n ConfirmSwapWarnings,\n ConfirmSwapWarningTypes,\n} from '../store/confirmSwap';\nimport { BalanceWarnings } from './warnings/BalanceWarnings';\n\nexport function ConfirmSwapWarnings(warnings: ConfirmSwapWarnings[]) {\n return warnings.flatMap((warning) => {\n switch (warning.type) {\n case ConfirmSwapWarningTypes.ROUTE_UPDATED:\n return <Typography variant=\"body2\">Route has been updated.</Typography>;\n case ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED:\n return (\n <Typography variant=\"body2\">{`Output amount changed to ${warning.newOutputAmount} \n (${warning.percentageChange}% change).`}</Typography>\n );\n\n case ConfirmSwapWarningTypes.ROUTE_SWAPPERS_UPDATED:\n return (\n <Typography variant=\"body2\">\n Route swappers has been updated.\n </Typography>\n );\n case ConfirmSwapWarningTypes.ROUTE_COINS_UPDATED:\n return (\n <Typography variant=\"body2\">\n Route internal coins has been updated.\n </Typography>\n );\n case ConfirmSwapWarningTypes.INSUFFICIENT_BALANCE:\n return <BalanceWarnings messages={warning.messages} />;\n default:\n return [];\n }\n });\n}\n","import React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { ConfirmSwap } from '@rango-dev/ui';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useSettingsStore } from '../store/settings';\nimport { ConfirmSwapExtraMessages } from '../components/warnings/ConfirmSwapExtraMessages';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { confirmSwap, useConfirmSwapStore } from '../store/confirmSwap';\nimport { ConfirmSwapErrors } from '../components/ConfirmSwapErrors';\nimport { ConfirmSwapWarnings } from '../components/ConfirmSwapWarnings';\nimport { useManager } from '@rango-dev/queue-manager-react';\nimport { useUiStore } from '../store/ui';\n\nexport function ConfirmSwapPage() {\n const setSelectedSwap = useUiStore.use.setSelectedSwap();\n const { navigateBackFrom } = useNavigateBack();\n const { manager } = useManager();\n const navigate = useNavigate();\n\n const bestRoute = useBestRouteStore.use.bestRoute();\n\n const loading = useConfirmSwapStore.use.loading();\n const warnings = useConfirmSwapStore.use.warnings();\n const errors = useConfirmSwapStore.use.errors();\n const slippage = useSettingsStore.use.slippage();\n const customSlippage = useSettingsStore.use.customSlippage();\n const selectedSlippage = customSlippage || slippage;\n\n return (\n <ConfirmSwap\n onConfirm={() => {\n confirmSwap().then((swap) => {\n if (swap) {\n manager?.create('swap', { swapDetails: swap });\n setSelectedSwap(swap.requestId);\n navigate(navigationRoutes.swaps + `/${swap.requestId}`, {\n replace: true,\n });\n }\n });\n }}\n onBack={navigateBackFrom.bind(null, navigationRoutes.confirmSwap)}\n bestRoute={bestRoute}\n loading={loading}\n errors={ConfirmSwapErrors(errors)}\n warnings={ConfirmSwapWarnings(warnings)}\n extraMessages={\n <ConfirmSwapExtraMessages selectedSlippage={selectedSlippage} />\n }\n confirmButtonTitle={\n warnings.length > 0 || errors.length > 0\n ? 'Proceed anyway!'\n : 'Confirm swap!'\n }\n confirmButtonDisabled={errors.length > 0}\n />\n );\n}\n","import { Manager } from '@rango-dev/queue-manager-core';\nimport {\n PendingSwapWithQueueID,\n SwapStorage,\n} from '@rango-dev/queue-manager-rango-preset';\n\nexport const getPendingSwaps = (manager: Manager | undefined) => {\n const result: PendingSwapWithQueueID[] = [];\n\n manager?.getAll().forEach((q, id) => {\n const storage = q.list.getStorage() as SwapStorage;\n\n if (storage?.swapDetails) {\n result.push({\n id,\n swap: storage?.swapDetails,\n });\n }\n });\n\n return result.sort(\n (a, b) => Number(b.swap.creationTime) - Number(a.swap.creationTime)\n );\n};\n","import { History } from '@rango-dev/ui';\nimport { useManager } from '@rango-dev/queue-manager-react';\nimport React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { getPendingSwaps } from '../utils/queue';\nimport { useUiStore } from '../store/ui';\n\nexport function HistoryPage() {\n const setSelectedSwap = useUiStore.use.setSelectedSwap();\n const navigate = useNavigate();\n const { navigateBackFrom } = useNavigateBack();\n const { manager } = useManager();\n const pendingSwaps = getPendingSwaps(manager).map(({ swap }) => swap);\n\n return (\n <History\n //todo: move PendingSwap type to rango-types\n //@ts-ignore\n list={pendingSwaps}\n onSwapClick={(requestId) => {\n setSelectedSwap(requestId);\n navigate(navigationRoutes.swaps + `/${requestId}`);\n }}\n onBack={navigateBackFrom.bind(null, navigationRoutes.swaps)}\n />\n );\n}\n","import { LiquiditySourcesSelector } from '@rango-dev/ui';\nimport React from 'react';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { useMetaStore } from '../store/meta';\nimport { useSettingsStore } from '../store/settings';\nimport { removeDuplicateFrom } from '../utils/common';\n\nexport function LiquiditySourcePage() {\n const { swappers } = useMetaStore.use.meta();\n const toggleLiquiditySource = useSettingsStore.use.toggleLiquiditySource();\n const disabledLiquiditySources =\n useSettingsStore.use.disabledLiquiditySources();\n const toggleAllLiquiditySources =\n useSettingsStore.use.toggleAllLiquiditySources();\n\n const { navigateBackFrom } = useNavigateBack();\n\n const uniqueSwappersGroups: Array<{\n title: string;\n logo: string;\n type: 'BRIDGE' | 'AGGREGATOR' | 'DEX';\n selected: boolean;\n }> = [];\n removeDuplicateFrom(swappers.map((s) => s.swapperGroup))\n .map((swapperGroup) => {\n return swappers.find((s) => s.swapperGroup === swapperGroup);\n })\n .find((s) => {\n if (s) {\n for (const type of s.types) {\n uniqueSwappersGroups.push({\n title: s.swapperGroup,\n logo: s.logo,\n type,\n selected: !disabledLiquiditySources.includes(s.swapperGroup),\n });\n }\n }\n });\n\n return (\n <LiquiditySourcesSelector\n toggleAll={toggleAllLiquiditySources}\n list={uniqueSwappersGroups}\n onChange={(liquiditySource) =>\n toggleLiquiditySource(liquiditySource.title)\n }\n onBack={navigateBackFrom.bind(null, navigationRoutes.liquiditySources)}\n />\n );\n}\n","import React from 'react';\nimport { BlockchainSelector } from '@rango-dev/ui';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useMetaStore } from '../store/meta';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { navigationRoutes } from '../constants/navigationRoutes';\n\ninterface PropTypes {\n type: 'from' | 'to';\n}\n\nexport function SelectChainPage(props: PropTypes) {\n const { type } = props;\n\n const { blockchains } = useMetaStore.use.meta();\n const loadingStatus = useMetaStore.use.loadingStatus();\n const fromChain = useBestRouteStore.use.fromChain();\n const toChain = useBestRouteStore.use.toChain();\n const setFromChain = useBestRouteStore.use.setFromChain();\n const setToChain = useBestRouteStore.use.setToChain();\n const setFromToken = useBestRouteStore.use.setFromToken();\n const setToToken = useBestRouteStore.use.setToToken();\n\n const { navigateBackFrom } = useNavigateBack();\n\n return (\n <BlockchainSelector\n type={type === 'from' ? 'Source' : 'Destination'}\n list={blockchains}\n selected={type === 'from' ? fromChain : toChain}\n loadingStatus={loadingStatus}\n onChange={(chain) => {\n if (type === 'from') setFromChain(chain);\n else setToChain(chain);\n if (type === 'from' && fromChain?.name != chain.name)\n setFromToken(null);\n if (type === 'to' && toChain?.name != chain.name) setToToken(null);\n navigateBackFrom(navigationRoutes.fromChain);\n }}\n onBack={navigateBackFrom.bind(null, navigationRoutes.fromChain)}\n />\n );\n}\n","import React from 'react';\nimport { TokenSelector } from '@rango-dev/ui';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useMetaStore } from '../store/meta';\nimport { Token } from 'rango-sdk';\nimport { numberToString } from '../utils/numbers';\nimport BigNumber from 'bignumber.js';\nimport { getBalanceFromWallet } from '../utils/wallets';\nimport { useWalletsStore } from '../store/wallets';\nimport { sortedTokens } from '../utils/wallets';\nimport { ZERO } from '../constants/numbers';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { navigationRoutes } from '../constants/navigationRoutes';\n\ninterface PropTypes {\n type: 'from' | 'to';\n}\n\nexport interface TokenWithBalance extends Token {\n balance?: {\n amount: string;\n usdValue: string;\n };\n}\n\nexport function SelectTokenPage(props: PropTypes) {\n const { type } = props;\n const { navigateBackFrom } = useNavigateBack();\n\n const { tokens } = useMetaStore.use.meta();\n const fromChain = useBestRouteStore.use.fromChain();\n const toChain = useBestRouteStore.use.toChain();\n const fromToken = useBestRouteStore.use.fromToken();\n const toToken = useBestRouteStore.use.toToken();\n const setFromToken = useBestRouteStore.use.setFromToken();\n const setToToken = useBestRouteStore.use.setToToken();\n\n const balance = useWalletsStore.use.balances();\n\n const tokenWithSelectedChain = tokens.filter((token) => {\n if (type === 'from') return token.blockchain === fromChain?.name;\n return token.blockchain === toChain?.name;\n });\n\n const TokensWithBalance: TokenWithBalance[] = tokenWithSelectedChain.map(\n (token) => {\n const tokenAmount = numberToString(\n new BigNumber(\n getBalanceFromWallet(\n balance,\n token.blockchain,\n token.symbol,\n token.address\n )?.amount || ZERO\n )\n );\n\n let tokenUsdValue = '';\n if (token.usdPrice)\n tokenUsdValue = numberToString(\n new BigNumber(\n getBalanceFromWallet(\n balance,\n token.blockchain,\n token.symbol,\n token.address\n )?.amount || ZERO\n ).multipliedBy(token.usdPrice)\n );\n return {\n ...token,\n balance: {\n amount: tokenAmount !== '0' ? tokenAmount : '',\n usdValue: tokenUsdValue !== '0' ? tokenUsdValue : '',\n },\n };\n }\n );\n\n const sortedTokenList = sortedTokens(TokensWithBalance, type, balance);\n\n return (\n <TokenSelector\n type={type === 'from' ? 'Source' : 'Destination'}\n list={sortedTokenList}\n selected={type === 'from' ? fromToken : toToken}\n onChange={(token) => {\n if (type === 'from') setFromToken(token);\n else setToToken(token);\n navigateBackFrom(navigationRoutes.fromToken);\n }}\n onBack={navigateBackFrom.bind(null, navigationRoutes.fromToken)}\n />\n );\n}\n","import React from 'react';\nimport { Settings } from '@rango-dev/ui';\nimport { useSettingsStore } from '../store/settings';\nimport { useMetaStore } from '../store/meta';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { removeDuplicateFrom } from '../utils/common';\nimport {\n MAX_SLIPPAGE,\n MIN_SLIPPGAE,\n SLIPPAGES,\n} from '../constants/swapSettings';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\n\nexport function SettingsPage() {\n const slippage = useSettingsStore.use.slippage();\n const setSlippage = useSettingsStore.use.setSlippage();\n const disabledLiquiditySources =\n useSettingsStore.use.disabledLiquiditySources();\n const customSlippage = useSettingsStore.use.customSlippage();\n const setCustomSlippage = useSettingsStore.use.setCustomSlippage();\n const theme = useSettingsStore.use.theme();\n const setTheme = useSettingsStore.use.setTheme();\n const { swappers } = useMetaStore.use.meta();\n const navigate = useNavigate();\n const { navigateBackFrom } = useNavigateBack();\n\n const infiniteApprove = useSettingsStore.use.infiniteApprove();\n const toggleInfiniteApprove = useSettingsStore.use.toggleInfiniteApprove();\n const uniqueSwappersGroups: Array<{\n title: string;\n logo: string;\n type: 'BRIDGE' | 'AGGREGATOR' | 'DEX';\n selected: boolean;\n }> = [];\n removeDuplicateFrom(swappers.map(s => s.swapperGroup))\n .map(swapperGroup => {\n return swappers.find(s => s.swapperGroup === swapperGroup);\n })\n .find(s => {\n if (s) {\n for (const type of s.types) {\n uniqueSwappersGroups.push({\n title: s.swapperGroup,\n logo: s.logo,\n type,\n selected: !disabledLiquiditySources.includes(s.swapperGroup),\n });\n }\n }\n });\n\n return (\n <Settings\n slippages={SLIPPAGES}\n selectedSlippage={slippage}\n onSlippageChange={slippage => setSlippage(slippage)}\n liquiditySources={uniqueSwappersGroups}\n selectedLiquiditySources={uniqueSwappersGroups.filter((s) => s.selected)}\n onLiquiditySourcesClick={navigate.bind(\n null,\n navigationRoutes.liquiditySources\n )}\n onBack={navigateBackFrom.bind(null, navigationRoutes.settings)}\n customSlippage={customSlippage || NaN}\n onCustomSlippageChange={setCustomSlippage}\n minSlippage={MIN_SLIPPGAE}\n maxSlippage={MAX_SLIPPAGE}\n selectedTheme={theme}\n onThemeChange={setTheme}\n infiniteApprove={infiniteApprove}\n toggleInfiniteApprove={toggleInfiniteApprove}\n />\n );\n}\n","import {\n Alert,\n SecondaryPage,\n styled,\n Wallet,\n Typography,\n} from '@rango-dev/ui';\nimport React, { useEffect, useState } from 'react';\nimport { getlistWallet } from '../utils/wallets';\nimport { WalletType } from '@rango-dev/wallets-shared';\nimport { useWallets } from '@rango-dev/wallets-core';\nimport { useUiStore } from '../store/ui';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { navigationRoutes } from '../constants/navigationRoutes';\n\nconst ListContainer = styled('div', {\n display: 'grid',\n gap: '.5rem',\n gridTemplateColumns: ' repeat(2, minmax(0, 1fr))',\n height: '450px',\n alignContent: 'baseline',\n padding: '0 0.5rem',\n});\n\nconst AlertContainer = styled('div', {\n paddingBottom: '$16',\n});\nexport function WalletsPage() {\n const { navigateBackFrom } = useNavigateBack();\n const { state, disconnect, getWalletInfo, connect } = useWallets();\n const wallets = getlistWallet(\n state,\n getWalletInfo,\n Object.values(WalletType)\n );\n const [walletErrorMessage, setWalletErrorMessage] = useState('');\n const toggleConnectWalletsButton =\n useUiStore.use.toggleConnectWalletsButton();\n\n const onSelectWallet = async (type: WalletType) => {\n const wallet = state(type);\n try {\n if (walletErrorMessage) setWalletErrorMessage('');\n if (wallet.connected) {\n await disconnect(type);\n } else {\n await connect(type);\n }\n } catch (e) {\n setWalletErrorMessage('Error: ' + e.message);\n }\n };\n\n useEffect(() => {\n toggleConnectWalletsButton();\n return () => toggleConnectWalletsButton();\n }, []);\n\n return (\n <SecondaryPage\n title=\"Select Wallet\"\n textField={false}\n onBack={navigateBackFrom.bind(null, navigationRoutes.wallets)}\n >\n <>\n {walletErrorMessage && (\n <AlertContainer>\n <Alert type=\"error\">\n <Typography variant=\"body2\">{walletErrorMessage}</Typography>\n </Alert>\n </AlertContainer>\n )}\n <ListContainer>\n {wallets.map((info, index) => (\n <Wallet {...info} key={index} onClick={onSelectWallet} />\n ))}\n </ListContainer>\n </>\n </SecondaryPage>\n );\n}\n","import React, { useEffect } from 'react';\nimport { ConfirmWallets } from '@rango-dev/ui';\nimport { useNavigate } from 'react-router-dom';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useWalletsStore } from '../store/wallets';\nimport { useWallets } from '@rango-dev/wallets-core';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport {\n getKeplrCompatibleConnectedWallets,\n getRequiredChains,\n getSelectableWallets,\n isExperimentalChain,\n} from '../utils/wallets';\nimport { requiredWallets } from '../utils/swap';\nimport { decimalNumber } from '../utils/numbers';\nimport { useMetaStore } from '../store/meta';\nimport { Network, WalletType } from '@rango-dev/wallets-shared';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\n\nexport function ConfirmWalletsPage() {\n const navigate = useNavigate();\n const { navigateBackFrom } = useNavigateBack();\n const bestRoute = useBestRouteStore.use.bestRoute();\n\n const { blockchains } = useMetaStore.use.meta();\n const accounts = useWalletsStore.use.accounts();\n const selectedWallets = useWalletsStore.use.selectedWallets();\n const initSelectedWallets = useWalletsStore.use.initSelectedWallets();\n const setSelectedWallet = useWalletsStore.use.setSelectedWallet();\n\n const { getWalletInfo, connect } = useWallets();\n const confirmDisabled = !requiredWallets(bestRoute).every((chain) =>\n selectedWallets.map((wallet) => wallet.chain).includes(chain)\n );\n\n const firstStep = bestRoute?.result?.swaps[0];\n const lastStep =\n bestRoute?.result?.swaps[bestRoute?.result?.swaps.length - 1];\n\n const fromAmount = decimalNumber(firstStep?.fromAmount, 3);\n const toAmount = decimalNumber(lastStep?.toAmount, 3);\n useEffect(() => {\n initSelectedWallets();\n }, []);\n\n const selectableWallets = getSelectableWallets(\n accounts,\n selectedWallets,\n getWalletInfo\n );\n\n const handleConnectChain = (wallet: string) => {\n const network = wallet as Network;\n getKeplrCompatibleConnectedWallets(selectableWallets).forEach(\n (compatibleWallet: WalletType) => connect?.(compatibleWallet, network)\n );\n };\n\n return (\n <ConfirmWallets\n requiredWallets={getRequiredChains(bestRoute)}\n selectableWallets={selectableWallets}\n onBack={navigateBackFrom.bind(null, navigationRoutes.confirmWallets)}\n swap={bestRoute!}\n fromAmount={fromAmount}\n toAmount={toAmount}\n onConfirm={() =>\n navigate(navigationRoutes.confirmSwap, { replace: true })\n }\n onChange={(wallet) => setSelectedWallet(wallet)}\n confirmDisabled={confirmDisabled}\n handleConnectChain={(wallet) => handleConnectChain(wallet)}\n isExperimentalChain={(wallet) =>\n getKeplrCompatibleConnectedWallets(selectableWallets).length > 0\n ? isExperimentalChain(blockchains, wallet)\n : false\n }\n />\n );\n}\n","import React from 'react';\nimport copy from 'copy-to-clipboard';\n\nexport default function useCopyToClipboard(resetInterval?: number) {\n const [isCopied, setCopied] = React.useState(false);\n\n const handleCopy = React.useCallback((text: string | number) => {\n copy(text.toString());\n setCopied(true);\n }, []);\n\n React.useEffect(() => {\n let timeout: NodeJS.Timeout;\n if (isCopied && resetInterval) {\n timeout = setTimeout(() => setCopied(false), resetInterval);\n }\n return () => {\n clearTimeout(timeout);\n };\n }, [isCopied, resetInterval]);\n\n return [isCopied, handleCopy] as const;\n}\n","import React from 'react';\nimport { useManager } from '@rango-dev/queue-manager-react';\nimport { SwapHistory } from '@rango-dev/ui';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { getPendingSwaps } from '../utils/queue';\nimport { useUiStore } from '../store/ui';\nimport useCopyToClipboard from '../hooks/useCopyToClipboard';\n\nexport function SwapDetailsPage() {\n const selectedSwapRequestId = useUiStore.use.selectedSwapRequestId();\n const { navigateBackFrom } = useNavigateBack();\n const { manager } = useManager();\n const [isCopied, handleCopy] = useCopyToClipboard(2000);\n\n const pendingSwaps = getPendingSwaps(manager);\n const selectedSwap = pendingSwaps.find(\n ({ swap }) => swap.requestId === selectedSwapRequestId\n )?.swap;\n\n return (\n <SwapHistory\n onBack={navigateBackFrom.bind(null, navigationRoutes.swapDetails)}\n //todo: move PendingSwap type to rango-types\n //@ts-ignore\n pendingSwap={selectedSwap}\n onCopy={handleCopy}\n isCopied={isCopied}\n //todo: implement swap cancellation (move queueManager logic to queueManager/rango-preset)\n onCancel={(requestId) => console.log(requestId)}\n />\n );\n}\n","import React from 'react';\nimport { useRoutes } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { ConfirmSwapPage } from '../pages/ConfirmSwapPage';\nimport { HistoryPage } from '../pages/HistoryPage';\nimport { Home } from '../pages/Home';\nimport { LiquiditySourcePage } from '../pages/LiquiditySourcesPage';\nimport { SelectChainPage } from '../pages/SelectChainPage';\nimport { SelectTokenPage } from '../pages/SelectTokenPage';\nimport { SettingsPage } from '../pages/SettingsPage';\nimport { WalletsPage } from '../pages/WalletsPage';\nimport { ConfirmWalletsPage } from '../pages/ConfirmWalletsPage';\nimport { SwapDetailsPage } from '../pages/SwapDetailsPage';\n\nexport const AppRoutes = () =>\n useRoutes([\n { path: navigationRoutes.home, element: <Home /> },\n {\n path: navigationRoutes.fromChain,\n element: <SelectChainPage type=\"from\" />,\n },\n { path: navigationRoutes.toChain, element: <SelectChainPage type=\"to\" /> },\n {\n path: navigationRoutes.fromToken + '/*',\n element: <SelectTokenPage type=\"from\" />,\n },\n { path: navigationRoutes.toToken, element: <SelectTokenPage type=\"to\" /> },\n { path: navigationRoutes.settings, element: <SettingsPage /> },\n {\n path: navigationRoutes.liquiditySources,\n element: <LiquiditySourcePage />,\n },\n { path: navigationRoutes.swaps, element: <HistoryPage /> },\n {\n path: navigationRoutes.swapDetails,\n element: <SwapDetailsPage />,\n },\n { path: navigationRoutes.wallets, element: <WalletsPage /> },\n { path: navigationRoutes.confirmSwap, element: <ConfirmSwapPage /> },\n { path: navigationRoutes.confirmWallets, element: <ConfirmWalletsPage /> },\n ]);\n","import { Button, AddWalletIcon, Typography, styled } from '@rango-dev/ui';\nimport React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { useWallets } from '@rango-dev/wallets-core';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useUiStore } from '../store/ui';\nimport { AppRoutes } from './AppRoutes';\nimport { useWalletsStore } from '../store/wallets';\nimport {\n calculateWalletUsdValue,\n getSelectableWallets,\n} from '../utils/wallets';\nimport { removeDuplicateFrom } from '../utils/common';\n\nconst Header = styled('div', {\n display: 'flex',\n width: '100%',\n justifyContent: 'end',\n});\n\nconst WalletImage = styled('img', {\n width: '$24',\n height: '$24',\n marginLeft: -15,\n marginRight: '$6',\n borderRadius: '99999px',\n});\n\nexport function Layout() {\n const navigate = useNavigate();\n const { balances, accounts, selectedWallets } = useWalletsStore();\n const { getWalletInfo } = useWallets();\n const connectedWalletsImages = removeDuplicateFrom(\n getSelectableWallets(accounts, selectedWallets, getWalletInfo).map(\n (w) => w.image\n )\n );\n\n const totalBalance = calculateWalletUsdValue(balances);\n const connectWalletsButtonDisabled =\n useUiStore.use.connectWalletsButtonDisabled();\n\n return (\n <>\n <Header>\n <Button\n size=\"small\"\n suffix={<AddWalletIcon size={20} />}\n variant=\"ghost\"\n flexContent\n onClick={() => {\n if (!connectWalletsButtonDisabled)\n navigate(navigationRoutes.wallets);\n }}\n >\n {connectedWalletsImages?.length ? (\n connectedWalletsImages.map((walletImage, index) => (\n <WalletImage key={index} src={walletImage} />\n ))\n ) : (\n <></>\n )}\n <Typography variant=\"body2\">\n {!accounts?.length ? 'Connect Wallet' : `$${totalBalance || 0}`}\n </Typography>\n </Button>\n </Header>\n <AppRoutes />\n </>\n );\n}\n","import { globalCss } from '@rango-dev/ui';\n\nexport const globalStyles = globalCss({\n '*': {\n '&::-webkit-scrollbar': { width: '$8' },\n '&::-webkit-scrollbar-thumb': {\n backgroundColor: '$neutrals400',\n },\n '&::-webkit-scrollbar-thumb:hover': {\n backgroundColor: '$neutrals500',\n },\n '&::-webkit-scrollbar-track': {\n backgroundColor: '$neutrals300',\n },\n },\n});\n","import { lightTheme, darkTheme } from '@rango-dev/ui';\nimport { useState, useEffect } from 'react';\nimport { useMetaStore } from '../store/meta';\nimport { useSettingsStore } from '../store/settings';\n\nexport function useTheme() {\n const theme = useSettingsStore.use.theme();\n const fetchMeta = useMetaStore.use.fetchMeta();\n\n const [OSTheme, setOSTheme] = useState(lightTheme);\n useEffect(() => {\n (async () => {\n await fetchMeta();\n })();\n\n const switchTheme = (event: MediaQueryListEvent) => {\n if (event.matches) setOSTheme(darkTheme);\n else setOSTheme(lightTheme);\n };\n\n if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n setOSTheme(darkTheme);\n }\n\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', switchTheme);\n return () => {\n window.matchMedia('(prefers-color-scheme: dark)').removeEventListener('change', switchTheme);\n };\n }, []);\n\n const getActiveTheme = () => {\n if (theme === 'auto') return OSTheme;\n else return theme === 'dark' ? darkTheme : lightTheme;\n };\n\n return { activeTheme: getActiveTheme() };\n}\n","import { SwapContainer } from '@rango-dev/ui';\nimport React from 'react';\nimport { AppRouter } from './components/AppRouter';\nimport { useMetaStore } from './store/meta';\nimport { Events, Provider } from '@rango-dev/wallets-core';\nimport { allProviders } from '@rango-dev/provider-all';\nimport { EventHandler } from '@rango-dev/wallets-core/dist/wallet';\nimport { Network } from '@rango-dev/wallets-shared';\nimport {\n prepareAccountsForWalletStore,\n walletAndSupportedChainsNames,\n} from './utils/wallets';\nimport { useWalletsStore } from './store/wallets';\nimport { Layout } from './components/Layout';\nimport { globalStyles } from './globalStyles';\nimport { useTheme } from './hooks/useTheme';\nimport { isEvmBlockchain } from 'rango-sdk';\n\nconst providers = allProviders();\n\nexport const SwapBox: React.FC = () => {\n globalStyles();\n const { activeTheme } = useTheme();\n const { blockchains } = useMetaStore.use.meta();\n const disconnectWallet = useWalletsStore.use.disconnectWallet();\n const connectWallet = useWalletsStore.use.connectWallet();\n const evmBasedChainNames = blockchains\n .filter(isEvmBlockchain)\n .map((chain) => chain.name);\n\n const onUpdateState: EventHandler = (type, event, value, supportedChains) => {\n if (event === Events.ACCOUNTS) {\n if (value) {\n const supportedChainNames: Network[] | null =\n //@ts-ignore\n walletAndSupportedChainsNames(supportedChains);\n const data = prepareAccountsForWalletStore(\n type,\n value,\n evmBasedChainNames,\n supportedChainNames\n );\n connectWallet(data);\n } else {\n disconnectWallet(type);\n }\n }\n };\n\n return (\n <Provider\n allBlockChains={blockchains}\n providers={providers}\n onUpdateState={onUpdateState}\n >\n <div id=\"pageContainer\" className={activeTheme}>\n <SwapContainer>\n <AppRouter>\n <Layout />\n </AppRouter>\n </SwapContainer>\n </div>\n </Provider>\n );\n};\n"],"names":["navigationRoutes","home","fromChain","fromToken","toChain","toToken","settings","liquiditySources","swaps","wallets","confirmSwap","confirmWallets","swapDetails","ZERO","BigNumber","removeDuplicateFrom","array","Array","from","Set","areEqual","array1","array2","length","every","v","i","getBestRouteToTokenUsdPrice","bestRoute","result","to","usdPrice","isNumberOfSwapsChanged","route1","route2","route1Swaps","route2Swaps","isRouteSwappersUpdated","route1Swappers","map","swap","swapperId","route2Swappers","isRouteInternalCoinsUpdated","route1InternalCoins","symbol","route2InternalCoins","isRouteChanged","getRequiredBalanceOfWallet","selectedWallet","fee","relatedFeeStatus","find","item","blockchain","chain","wallet","address","toLowerCase","requiredAssets","createSelectors","_store","store","use","k","Object","keys","getState","s","httpService","RangoClient","process","env","REACT_API_KEY","SLIPPAGES","DEFAULT_SLIPPAGE","HIGH_SLIPPAGE","MAX_SLIPPAGE","MIN_SLIPPGAE","useMetaStore","create","set","meta","blockchains","popularTokens","swappers","tokens","loadingStatus","fetchMeta","response","getAllMetadata","chainThatHasTokenInMetaResponse","t","enabledChains","filter","enabled","includes","name","sort","a","b","error","useSettingsStore","persist","subscribeWithSelector","slippage","customSlippage","infiniteApprove","disabledLiquiditySources","theme","setSlippage","setCustomSlippage","toggleAllLiquiditySources","state","swappersGroup","swapper","swapperGroup","toggleInfiniteApprove","toggleLiquiditySource","liquiditySource","concat","setTheme","secondsToString","seconds","toString","padStart","minutes","parseInt","numberToString","number","minDecimals","maxDecimals","n","roundingMode","maxI","toFixed","eq","gte","toFormat","Math","min","max","pow","isEqualTo","totalArrivalTime","data","reduce","estimatedTimeInSeconds","decimalNumber","parseFloat","getStateWallet","connected","WalletStatus","CONNECTED","connecting","CONNECTING","installed","NOT_INSTALLED","DISCONNECTED","getlistWallet","getWalletInfo","list","excludedWallets","WalletType","UNKNOWN","TERRA_STATION","LEAP","type","img","image","installLink","walletAndSupportedChainsNames","supportedChains","blockchainMeta","prepareAccountsForWalletStore","accounts","evmBasedChains","supportedChainNames","addAccount","network","newAccount","walletType","push","forEach","account","readAccountAddress","hasLimitation","isSupported","isUnknown","Network","Unknown","notSupportedNetworkByWallet","isUknownAndEvmBased","isEvmAddress","isEvmBasedChain","evmChainsSupportedByWallet","getRequiredChains","route","currentStepFromBlockchain","currentStepToBlockchain","lastAddedWallet","getSelectableWallets","selectedWallets","connectedWallets","selected","getBalanceFromWallet","balances","selectedChainBalances","balance","bl","amount","isAccountAndBalanceMatched","makeBalanceFor","retrivedBalance","blockChain","explorerUrl","loading","tokenBalance","asset","ticker","rawAmount","decimal","decimals","shiftedBy","logo","getUsdPrice","resetBalanceState","calculateWalletUsdValue","uniqueAccountAddresses","uniqueBalane","acc","current","findIndex","modifiedWalletBlockchains","modifiedWalletBlockchain","has","add","accountAddress","total","flatMap","multipliedBy","plus","numberWithThousandSeperator","parts","split","replace","join","sortedTokens","position","walletSymbols","gt","sortedList","size","tokenA","tokenB","compareBalance","isSecondaryCoin","tokenAUsdValue","tokenBUsdValue","allTokens","token","toUpperCase","isExperimentalChain","cosmosExperimentalChainInfo","getCosmosExperimentalChainInfo","entries","_ref","isCosmosBlockchain","getKeplrCompatibleConnectedWallets","selectableWallets","connectedWalletTypes","KEPLR_COMPATIBLE_WALLETS","compatibleWallet","getOutputRatio","inputUsdValue","outputUsdValue","lte","div","minus","outputRatioHasWarning","outputRatio","hasLimitError","minimum","fromAmountMinValue","maximum","fromAmountMaxValue","isExclusive","fromAmountRestrictionType","fromAmount","lt","LimitErrorMessage","fromAmountRangeError","recommendation","getSwapButtonState","loadingMetaStatus","highValueLoss","priceImpactCanNotBeComputed","needsToWarnEthOnPath","title","disabled","hasWarning","canComputePriceImpact","inputAmount","calculatePendingSwap","validateBalanceOrFee","simulationResult","Error","creationTime","Date","getTime","finishTime","requestId","status","isPaused","extraMessage","extraMessageSeverity","extraMessageDetail","extraMessageErrorCode","networkStatusExtraMessage","networkStatusExtraMessageDetail","lastNotificationTime","steps","index","id","swapperType","types","fromBlockchain","toBlockchain","fromSymbol","fromSymbolAddress","fromDecimals","fromAmountPrecision","fromLogo","toSymbol","toSymbolAddress","toDecimals","toLogo","startTransactionTime","feeInUsd","getUsdFeeOfStep","expectedOutputAmountHumanReadable","toAmount","outputAmount","networkStatus","executedTransactionId","externalTransactionId","trackingCode","cosmosTransaction","solanaTransaction","starknetTransaction","starknetApprovalTransaction","tronTransaction","tronApprovalTransaction","evmTransaction","evmApprovalTransaction","transferTransaction","diagnosisUrl","internalSteps","fromBlockchainLogo","toBlockchainLogo","swapperLogo","requiredWallets","step","totalFeeInUsd","expenseType","unitPrice","getTotalFeeInUsd","totalFee","hasHighFee","getMinRequiredSlippage","slippages","recommendedSlippage","hasProperSlippage","userSlippage","minRequiredSlippage","createBestRouteRequestBody","checkPrerequisites","selectedWalletsMap","chainAndAccounts","connectedWallet","addresses","requestBody","swapperGroups","swappersGroupsExclude","getWalletsForNewSwap","getRouteOutputAmount","getPercentageChange","oldValue","newValue","isOutputAmountChangedALot","oldRoute","newRoute","oldOutputAmount","newOutputAmount","percentageChange","toNumber","getBalanceWarnings","validationStatus","walletsSortedByRequiredWallets","selectedWallet1","selectedWallet2","indexOf","ok","currentAmount","requiredAmount","reason","warningMessage","getUsdValue","useBestRouteStore","setBestRoute","setFromChain","setFromToken","setToChain","setToToken","setInputAmount","bestRouteStore","settingsStore","abortController","fetchBestRoute","abort","AbortController","setState","getBestRoute","signal","then","res","catch","code","message","subscribe","bind","equalityFn","prevState","SearchParams","useUiStore","connectWalletsButtonDisabled","selectedSwapRequestId","toggleConnectWalletsButton","setSelectedSwap","searchParamsToToken","searchParams","symbolAndAddress","UpdateUrl","firstRender","useRef","setSearchParams","useSearchParams","location","useLocation","firstRenderSearchParams","search","searchParamsRef","useEffect","params","createSearchParams","value","key","pathname","fromChainString","fromTokenString","toChainString","toTokenString","FROM_CHAIN","FROM_TOKEN","TO_CHAIN","TO_TOKEN","FROM_AMOUNT","fronChainString","get","ButtonsContainer","styled","display","HeaderButtons","props","onClickRefresh","navigate","useNavigate","React","Tooltip","content","Button","variant","onClick","RetryIcon","HistoryIcon","SettingsIcon","HeaderContainer","justifyContent","alignItems","width","padding","Header","Typography","useWalletsStore","connectWallet","getWalletsDetails","disconnectWallet","initSelectedWallets","requiredChains","anyWalletSelected","firstWalletWithMatchedChain","setSelectedWallet","Box","flexDirection","Container","boxSizing","backgroundColor","borderRadius","StyledImage","maxHeight","Options","ImagePlaceholder","height","OutputContainer","flexGrow","border","paddingLeft","paddingRight","TokenInfo","tokenBalanceReal","ItemSuffix","style","InfoCircleIcon","color","AngleDownIcon","className","prefix","src","suffix","align","marginRight","displayName","TextField","autoFocus","placeholder","right","bottom","onChange","event","onAmountChange","target","undefined","paddingTop","Logo","fill","margin","StyledAnchor","textDecoration","BottomLogo","href","xmlns","viewBox","d","SwithFromAndTo","count","Footer","errorMessages","genericServerError","SwitchButtonContainer","top","BestRouteContainer","Alerts","Home","waningMessage","isRouterInContext","useInRouterContext","setCount","useState","fetchingBestRoute","bestRouteError","swithFromAndTo","prev","errorMessage","showBestRoute","outToInRatio","swapButtonState","highFee","VerticalSwapIcon","BestRoute","feeWarning","totalTime","Alert","Route","ref","children","AppRouter","Router","MemoryRouter","StyledButton","marginTop","ChangeSlippageButton","HighSlippageWarning","selectedSlippage","ConfirmSwapExtraMessages","highSlippage","useNavigateBack","navigateBackFrom","currentRoute","window","history","idx","useConfirmSwapStore","errors","warnings","proceedAnyway","ConfirmSwapErrorTypes","ConfirmSwapWarningTypes","initialRoute","swapSettings","disabledSwappersGroups","newSwap","console","log","unsubscribeFromBestRouteStore","shallow","unsubscribeFromWalletsStore","selectedWalletsChanged","prevWallet","confiremedRoute","requestAmount","NO_ROUTE","routeChanged","newRouteOutputUsdValue","ROUTE_UPDATED","ROUTE_SWAPPERS_UPDATED","ROUTE_COINS_UPDATED","ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS","ROUTE_AND_OUTPUT_AMOUNT_UPDATED","balanceWarnings","enoughBalance","INSUFFICIENT_BALANCE","messages","INSUFFICIENT_SLIPPAGE","noErrors","noWarnings","REQUEST_FAILED","MinRequiredSlippage","ConfirmSwapErrors","BalanceWarnings","warning","ConfirmSwapWarnings","ConfirmSwapPage","manager","useManager","ConfirmSwap","onConfirm","onBack","extraMessages","confirmButtonTitle","confirmButtonDisabled","getPendingSwaps","getAll","q","storage","getStorage","Number","HistoryPage","pendingSwaps","History","onSwapClick","LiquiditySourcePage","uniqueSwappersGroups","LiquiditySourcesSelector","toggleAll","SelectChainPage","BlockchainSelector","SelectTokenPage","tokenWithSelectedChain","TokensWithBalance","tokenAmount","tokenUsdValue","usdValue","sortedTokenList","TokenSelector","SettingsPage","Settings","onSlippageChange","selectedLiquiditySources","onLiquiditySourcesClick","NaN","onCustomSlippageChange","minSlippage","maxSlippage","selectedTheme","onThemeChange","ListContainer","gap","gridTemplateColumns","alignContent","AlertContainer","paddingBottom","WalletsPage","disconnect","connect","useWallets","values","walletErrorMessage","setWalletErrorMessage","onSelectWallet","e","SecondaryPage","textField","info","Wallet","ConfirmWalletsPage","confirmDisabled","firstStep","lastStep","handleConnectChain","ConfirmWallets","useCopyToClipboard","resetInterval","isCopied","setCopied","handleCopy","useCallback","text","copy","timeout","setTimeout","clearTimeout","SwapDetailsPage","selectedSwap","SwapHistory","pendingSwap","onCopy","onCancel","AppRoutes","useRoutes","path","element","WalletImage","marginLeft","Layout","connectedWalletsImages","w","totalBalance","AddWalletIcon","flexContent","walletImage","globalStyles","globalCss","useTheme","OSTheme","setOSTheme","lightTheme","switchTheme","matches","darkTheme","matchMedia","addEventListener","removeEventListener","getActiveTheme","activeTheme","providers","allProviders","SwapBox","evmBasedChainNames","isEvmBlockchain","onUpdateState","Events","ACCOUNTS","Provider","allBlockChains","SwapContainer"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAO,MAAMA,gBAAgB,GAAG;EAC9BC,IAAI,EAAE,GAAG;EACTC,SAAS,EAAE,aAAa;EACxBC,SAAS,EAAE,aAAa;EACxBC,OAAO,EAAE,WAAW;EACpBC,OAAO,EAAE,WAAW;EACpBC,QAAQ,EAAE,WAAW;EACrBC,gBAAgB,EAAE,6BAA6B;EAC/CC,KAAK,EAAE,QAAQ;EACfC,OAAO,EAAE,UAAU;EACnBC,WAAW,EAAE,eAAe;EAC5BC,cAAc,EAAE,kBAAkB;EAClCC,WAAW,EAAE;CACd;;ACXM,MAAMC,IAAI,gBAAG,IAAIC,kBAAS,CAAC,CAAC,CAAC;;SCFpBC,mBAAmBA,CAAIC,KAAU;EAC/C,OAAOC,KAAK,CAACC,IAAI,CAAC,IAAIC,GAAG,CAACH,KAAK,CAAC,CAAC;AACnC;AAEA,SAAgBI,QAAQA,CAACC,MAA2B,EAAEC,MAA2B;EAC/E,OAAOD,MAAM,CAACE,MAAM,KAAKD,MAAM,CAACC,MAAM,IAAIF,MAAM,CAACG,KAAK,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,KAAKH,MAAM,CAACI,CAAC,CAAC,CAAC;AACnF;;ACGO,MAAMC,2BAA2B,GACtCC,SAAmC,IAEnCA,SAAS,EAAEC,MAAM,EAAErB,KAAK,CAACoB,SAAS,EAAEC,MAAM,EAAErB,KAAK,CAACe,MAAM,GAAG,CAAC,CAAC,CAACO,EAAE,CAACC,QAAQ;AAE3E,SAAgBC,sBAAsBA,CAACC,MAAyB,EAAEC,MAAyB;EACzF,MAAMC,WAAW,GAAGF,MAAM,CAACJ,MAAM,EAAErB,KAAK,IAAI,EAAE;EAC9C,MAAM4B,WAAW,GAAGF,MAAM,CAACL,MAAM,EAAErB,KAAK,IAAI,EAAE;EAC9C,OAAO2B,WAAW,CAACZ,MAAM,KAAKa,WAAW,CAACb,MAAM;AAClD;AAEA,SAAgBc,sBAAsBA,CAACJ,MAAyB,EAAEC,MAAyB;EACzF,MAAMI,cAAc,GAAGL,MAAM,CAACJ,MAAM,EAAErB,KAAK,CAAC+B,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAACC,SAAS,CAAC,IAAI,EAAE;EAC/E,MAAMC,cAAc,GAAGR,MAAM,CAACL,MAAM,EAAErB,KAAK,CAAC+B,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAACC,SAAS,CAAC,IAAI,EAAE;EAC/E,OAAO,CAACrB,QAAQ,CAACkB,cAAc,EAAEI,cAAc,CAAC;AAClD;AAEA,SAAgBC,2BAA2BA,CAACV,MAAyB,EAAEC,MAAyB;EAC9F,MAAMU,mBAAmB,GAAGX,MAAM,CAACJ,MAAM,EAAErB,KAAK,CAAC+B,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAACV,EAAE,CAACe,MAAM,CAAC,IAAI,EAAE;EACpF,MAAMC,mBAAmB,GAAGZ,MAAM,CAACL,MAAM,EAAErB,KAAK,CAAC+B,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAACV,EAAE,CAACe,MAAM,CAAC,IAAI,EAAE;EACpF,OAAO,CAACzB,QAAQ,CAACwB,mBAAmB,EAAEE,mBAAmB,CAAC;AAC5D;AAEA,AAAO,MAAMC,cAAc,GAAGA,CAACd,MAAyB,EAAEC,MAAyB;EACjF,OACEF,sBAAsB,CAACC,MAAM,EAAEC,MAAM,CAAC,IACtCG,sBAAsB,CAACJ,MAAM,EAAEC,MAAM,CAAC,IACtCS,2BAA2B,CAACV,MAAM,EAAEC,MAAM,CAAC;AAE/C,CAAC;AAED,AAMO,MAAMc,0BAA0B,GAAGA,CACxCC,cAA8B,EAC9BC,GAAwC;EAExC,IAAIA,GAAG,KAAK,IAAI,EAAE,OAAO,IAAI;EAC7B,MAAMC,gBAAgB,GAAGD,GAAG,EACxBE,IAAI,CAAEC,IAAI,IAAKA,IAAI,CAACC,UAAU,KAAKL,cAAc,CAACM,KAAK,CAAC,EACxD9C,OAAO,CAAC2C,IAAI,CACXI,MAAM,IAAKA,MAAM,CAACC,OAAO,EAAEC,WAAW,EAAE,KAAKT,cAAc,CAACQ,OAAO,CAACC,WAAW,EAAE,CACnF;EACH,IAAI,CAACP,gBAAgB,EAAE,OAAO,IAAI;EAClC,OAAOA,gBAAgB,CAACQ,cAAc;AACxC,CAAC;;AClDD,MAAMC,eAAe,GAA8CC,MAAS;EAC1E,IAAIC,KAAK,GAAGD,MAAsC;EAClDC,KAAK,CAACC,GAAG,GAAG,EAAE;EACd,KAAK,IAAIC,CAAC,IAAIC,MAAM,CAACC,IAAI,CAACJ,KAAK,CAACK,QAAQ,EAAE,CAAC,EAAE;IAC1CL,KAAK,CAACC,GAAW,CAACC,CAAC,CAAC,GAAG,MAAMF,KAAK,CAAEM,CAAC,IAAKA,CAAC,CAACJ,CAAmB,CAAC,CAAC;;EAGpE,OAAOF,KAAK;AACd,CAAC;;ACdM,MAAMO,WAAW,gBAAG,IAAIC,oBAAW,CAACC,OAAO,CAACC,GAAG,CAACC,aAAuB,CAAC;;ACFxE,MAAMC,SAAS,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;AAElD,AAAO,MAAMC,gBAAgB,GAAG,CAAC;AAEjC,AAAO,MAAMC,aAAa,GAAG,CAAC;AAE9B,AAAO,MAAMC,YAAY,GAAG,GAAG;AAE/B,AAAO,MAAMC,YAAY,GAAG,CAAC;;ACMtB,MAAMC,YAAY,gBAAGnB,eAAe,eACzCoB,cAAM,EAAa,CAAEC,GAAG,KAAM;EAC5BC,IAAI,EAAE;IAAEC,WAAW,EAAE,EAAE;IAAEC,aAAa,EAAE,EAAE;IAAEC,QAAQ,EAAE,EAAE;IAAEC,MAAM,EAAE;GAAI;EACtEC,aAAa,EAAE,SAAS;EACxBC,SAAS,EAAE;IACT,IAAI;MACF,MAAMC,QAAQ,GAAG,MAAMpB,WAAW,CAACqB,cAAc,EAAE;MACnD,MAAMC,+BAA+B,GAAG5E,mBAAmB,CACzD0E,QAAQ,CAACH,MAAM,CAAC/C,GAAG,CAAEqD,CAAC,IAAKA,CAAC,CAACtC,UAAU,CAAC,CACzC;MACD,MAAMuC,aAAa,GAAGJ,QAAQ,CAACN,WAAW,CAACW,MAAM,CAC9CvC,KAAK,IAAKA,KAAK,CAACwC,OAAO,IAAIJ,+BAA+B,CAACK,QAAQ,CAACzC,KAAK,CAAC0C,IAAI,CAAC,CACjF;MACDR,QAAQ,CAACN,WAAW,GAAGU,aAAa,CAACK,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACD,IAAI,GAAGE,CAAC,CAACF,IAAI,CAAC;MACpEjB,GAAG,CAAC;QAAEC,IAAI,EAAEO,QAAQ;QAAEF,aAAa,EAAE;OAAW,CAAC;KAClD,CAAC,OAAOc,KAAK,EAAE;MACdpB,GAAG,CAAC;QAAEM,aAAa,EAAE;OAAU,CAAC;;;CAGrC,CAAC,CAAC,CACJ;;ACXM,MAAMe,gBAAgB,gBAAG1C,eAAe,eAC7CoB,cAAM,EAAY,eAChBuB,kBAAO,eACLC,gCAAqB,CAAEvB,GAAG,KAAM;EAC9BwB,QAAQ,EAAE9B,gBAAgB;EAC1B+B,cAAc,EAAE,IAAI;EACpBC,eAAe,EAAE,KAAK;EACtBC,wBAAwB,EAAE,EAAE;EAC5BC,KAAK,EAAE,MAAM;EACbC,WAAW,EAAGL,QAAQ,IACpBxB,GAAG,CAAC,OAAO;IACTwB,QAAQ,EAAEA;GACX,CAAC,CAAC;EACLM,iBAAiB,EAAGL,cAAc,IAChCzB,GAAG,CAAC,OAAO;IACTyB,cAAc,EAAEA;GACjB,CAAC,CAAC;EACLM,yBAAyB,EAAEA,MACzB/B,GAAG,CAAEgC,KAAK;IACR,MAAM;MAAE5B;KAAU,GAAGN,YAAY,CAACZ,QAAQ,EAAE,CAACe,IAAI;IACjD,MAAMgC,aAAa,GAAGnG,mBAAmB,CACvCsE,QAAQ,CAAC9C,GAAG,CAAE4E,OAAO,IAAKA,OAAO,CAACC,YAAY,CAAC,CAChD;IAED,IAAIF,aAAa,CAAC3F,MAAM,KAAK0F,KAAK,CAACL,wBAAwB,CAACrF,MAAM,EAChE,OAAO;MAAEqF,wBAAwB,EAAE;KAAI,CAAC,KACrC;MACH,OAAO;QACLA,wBAAwB,EAAEM;OAC3B;;GAEJ,CAAC;EACJG,qBAAqB,EAAEA,MACrBpC,GAAG,CAAEgC,KAAK,KAAM;IACdN,eAAe,EAAE,CAACM,KAAK,CAACN;GACzB,CAAC,CAAC;EACLW,qBAAqB,EAAGrB,IAAI,IAC1BhB,GAAG,CAAEgC,KAAK;IACR,IAAIA,KAAK,CAACL,wBAAwB,CAACZ,QAAQ,CAACC,IAAI,CAAC,EAC/C,OAAO;MACLW,wBAAwB,EAAEK,KAAK,CAACL,wBAAwB,CAACd,MAAM,CAC5DyB,eAAe,IAAKA,eAAe,IAAItB,IAAI;KAE/C,CAAC,KAEF,OAAO;MACLW,wBAAwB,EACtBK,KAAK,CAACL,wBAAwB,CAACY,MAAM,CAACvB,IAAI;KAC7C;GACJ,CAAC;EACJwB,QAAQ,EAAGZ,KAAK,IACd5B,GAAG,CAAC,OAAO;IACT4B;GACD,CAAC;CACL,CAAC,CAAC,EACH;EACEZ,IAAI,EAAE;CACP,CACF,CACF,CACF;;AC/EM,MAAMyB,eAAe,GAAItD,CAAS;EACvC,MAAMuD,OAAO,GAAG,CAACvD,CAAC,GAAG,EAAE,EAAEwD,QAAQ,EAAE,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EACpD,MAAMC,OAAO,GAAGC,QAAQ,CAAC,CAAC3D,CAAC,GAAG,EAAE,EAAEwD,QAAQ,EAAE,CAAC,CAC1CA,QAAQ,EAAE,CACVC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EACnB,UAAUC,WAAWH,SAAS;AAChC,CAAC;AAED,AAAO,MAAMK,cAAc,GAAG,UAC5BC,MAAiC,EACjCC,aACAC;MADAD;IAAAA,cAA6B,IAAI;;EAAA,IACjCC;IAAAA,cAA6B,IAAI;;EAEjC,IAAIF,MAAM,KAAK,IAAI,EAAE,OAAO,EAAE;EAC9B,IAAIA,MAAM,KAAK,EAAE,EAAE,OAAO,EAAE;EAC5B,MAAMG,CAAC,GAAG,IAAItH,mBAAS,CAACmH,MAAM,CAAC;EAC/B,MAAMI,YAAY,GAAG,CAAC;EACtB,IAAIC,IAAI,GAAG,IAAI;EACf,KAAK,IAAI5G,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,EAAE,EAAEA,CAAC,EAAE,EAAE;IAC3B,IAAI,IAAIZ,mBAAS,CAACsH,CAAC,CAACG,OAAO,CAAC7G,CAAC,EAAE2G,YAAY,CAAC,CAAC,CAACG,EAAE,CAACJ,CAAC,CAAC,EAAE;MACnDE,IAAI,GAAG5G,CAAC;MACR;;;EAIJ,IAAI0G,CAAC,CAACK,GAAG,CAAC,KAAK,CAAC,EAAE,OAAOL,CAAC,CAACM,QAAQ,CAAC,CAAC,EAAEL,YAAY,CAAC;EACpD,IAAID,CAAC,CAACK,GAAG,CAAC,IAAI,CAAC,EACb,OAAOL,CAAC,CAACM,QAAQ,CACfC,IAAI,CAACC,GAAG,CAACN,IAAI,EAAEK,IAAI,CAACC,GAAG,CAACT,WAAW,IAAI,GAAG,EAAEQ,IAAI,CAACE,GAAG,CAACX,WAAW,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAC3EG,YAAY,CACb;EACH,IAAID,CAAC,CAACK,GAAG,CAAC,GAAG,CAAC,EACZ,OAAOL,CAAC,CAACM,QAAQ,CACfC,IAAI,CAACC,GAAG,CAACN,IAAI,EAAEK,IAAI,CAACC,GAAG,CAACT,WAAW,IAAI,GAAG,EAAEQ,IAAI,CAACE,GAAG,CAACX,WAAW,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAC3EG,YAAY,CACb;EACH,IAAID,CAAC,CAACK,GAAG,CAAC,CAAC,CAAC,EACV,OAAOL,CAAC,CAACM,QAAQ,CACfC,IAAI,CAACC,GAAG,CAACN,IAAI,EAAEK,IAAI,CAACC,GAAG,CAACT,WAAW,IAAI,GAAG,EAAEQ,IAAI,CAACE,GAAG,CAACX,WAAW,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAC3EG,YAAY,CACb;EACH,IAAID,CAAC,CAACK,GAAG,CAAC,IAAI,CAAC,EACb,OAAOL,CAAC,CAACM,QAAQ,CACfC,IAAI,CAACC,GAAG,CAACN,IAAI,EAAEK,IAAI,CAACC,GAAG,CAACT,WAAW,IAAI,GAAG,EAAEQ,IAAI,CAACE,GAAG,CAACX,WAAW,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAC3EG,YAAY,CACb;EACH,KAAK,IAAI3G,CAAC,GAAGwG,WAAW,IAAI,CAAC,EAAExG,CAAC,GAAG,EAAE,EAAEA,CAAC,EAAE,EACxC,IAAI0G,CAAC,CAACK,GAAG,CAACE,IAAI,CAACG,GAAG,CAAC,EAAE,EAAE,CAACpH,CAAC,CAAC,CAAC,EACzB,OAAO0G,CAAC,CAACM,QAAQ,CACfC,IAAI,CAACC,GAAG,CAACN,IAAI,EAAEK,IAAI,CAACC,GAAG,CAACT,WAAW,IAAI,GAAG,EAAEQ,IAAI,CAACE,GAAG,CAACX,WAAW,IAAI,CAAC,EAAExG,CAAC,CAAC,CAAC,CAAC,EAC3E2G,YAAY,CACb;EACL,IAAID,CAAC,CAACW,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,GAAG;EAE9B,OAAOX,CAAC,CAACM,QAAQ,CACfC,IAAI,CAACC,GAAG,CAACN,IAAI,EAAEK,IAAI,CAACC,GAAG,CAACT,WAAW,IAAI,GAAG,EAAEQ,IAAI,CAACE,GAAG,CAACX,WAAW,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAC3EG,YAAY,CACb;AACH,CAAC;AAED,AAgCO,MAAMW,gBAAgB,GAAIC,IAA8B,IAC7DA,IAAI,EAAEpH,MAAM,EAAErB,KAAK,EAAE0I,MAAM,CAAC,CAAC/C,CAAC,EAAEC,CAAC,KAAKD,CAAC,GAAGC,CAAC,CAAC+C,sBAAsB,EAAE,CAAC,CAAC,IAAI,CAAC;AAE7E,AAQO,MAAMC,aAAa,GAAG,UAACnB,MAAM,EAAQM,OAAe;EAAA,IAA7BN,MAAM;IAANA,MAAM,GAAG,GAAG;;EAAA,OAAsBoB,UAAU,CAACpB,MAAM,CAAC,CAACM,OAAO,CAACA,OAAO,CAAC;AAAA;;SC9EnFe,cAAcA,CAACrC,KAAkB;EAC/C,QAAQ,IAAI;IACV,KAAKA,KAAK,CAACsC,SAAS;MAClB,OAAOC,cAAY,CAACC,SAAS;IAC/B,KAAKxC,KAAK,CAACyC,UAAU;MACnB,OAAOF,cAAY,CAACG,UAAU;IAChC,KAAK,CAAC1C,KAAK,CAAC2C,SAAS;MACnB,OAAOJ,cAAY,CAACK,aAAa;IACnC;MACE,OAAOL,cAAY,CAACM,YAAY;;AAEtC;AAEA,SAMgBC,aAAaA,CAC3B5F,QAA2C,EAC3C6F,aAA+C,EAC/CC,IAAkB;EAElB,MAAMC,eAAe,GAAG,CACtBC,wBAAU,CAACC,OAAO,EAClBD,wBAAU,CAACE,aAAa,EACxBF,wBAAU,CAACG,IAAI,CAChB;EAED,OAAOL,IAAI,CACRnE,MAAM,CAAEtC,MAAM,IAAK,CAAC0G,eAAe,CAAClE,QAAQ,CAACxC,MAAM,CAAC,CAAC,CACrDjB,GAAG,CAAEgI,IAAI;IACR,MAAM;MAAEtE,IAAI;MAAEuE,GAAG,EAAEC,KAAK;MAAEC;KAAa,GAAGV,aAAa,CAACO,IAAI,CAAC;IAC7D,MAAMtD,KAAK,GAAGqC,cAAc,CAACnF,QAAQ,CAACoG,IAAI,CAAC,CAAC;IAC5C,OAAO;MACLtE,IAAI;MACJwE,KAAK;MACLC,WAAW;MACXzD,KAAK;MACLsD;KACD;GACF,CAAC;AACN;AAEA,SAAgBI,6BAA6BA,CAC3CC,eAAiC;EAEjC,IAAI,CAACA,eAAe,EAAE,OAAO,IAAI;EACjC,IAAID,6BAA6B,GAAc,EAAE;EACjDA,6BAA6B,GAAGC,eAAe,CAACrI,GAAG,CAChDsI,cAAc,IAAKA,cAAc,CAAC5E,IAAe,CACnD;EAED,OAAO0E,6BAA6B;AACtC;AAEA,SAAgBG,6BAA6BA,CAC3CtH,MAAkB,EAClBuH,QAAkB,EAClBC,cAAwB,EACxBC,mBAAqC;EAErC,MAAMpJ,MAAM,GAAc,EAAE;EAE5B,SAASqJ,UAAUA,CAACC,OAAgB,EAAE1H,OAAe;IACnD,MAAM2H,UAAU,GAAY;MAC1B3H,OAAO;MACPF,KAAK,EAAE4H,OAAO;MACdE,UAAU,EAAE7H;KACb;IAED3B,MAAM,CAACyJ,IAAI,CAACF,UAAU,CAAC;;EAGzB,MAAMR,eAAe,GAAGK,mBAAmB,IAAI,EAAE;EAEjDF,QAAQ,CAACQ,OAAO,CAAEC,OAAO;IACvB,MAAM;MAAE/H,OAAO;MAAE0H;KAAS,GAAGM,8BAAkB,CAACD,OAAO,CAAC;IAExD,MAAME,aAAa,GAAGd,eAAe,CAACrJ,MAAM,GAAG,CAAC;IAChD,MAAMoK,WAAW,GAAGf,eAAe,CAAC5E,QAAQ,CAACmF,OAAO,CAAC;IACrD,MAAMS,SAAS,GAAGT,OAAO,KAAKU,qBAAO,CAACC,OAAO;IAC7C,MAAMC,2BAA2B,GAC/BL,aAAa,IAAI,CAACC,WAAW,IAAI,CAACC,SAAS;;;IAI7C,IAAIG,2BAA2B,EAAE;;;;;IAMjC,MAAMC,mBAAmB,GACvBb,OAAO,KAAKU,qBAAO,CAACC,OAAO,IAAIG,0BAAY,CAACxI,OAAO,CAAC;IACtD,IAAImI,SAAS,IAAI,CAACI,mBAAmB,EAAE;IAEvC,MAAME,eAAe,GAAGlB,cAAc,CAAChF,QAAQ,CAACmF,OAAO,CAAC;;IAGxD,IAAIe,eAAe,IAAIF,mBAAmB,EAAE;;;MAG1C,MAAMG,0BAA0B,GAAGvB,eAAe,CAAC9E,MAAM,CAAEvC,KAAK,IAC9DyH,cAAc,CAAChF,QAAQ,CAACzC,KAAK,CAAC,CAC/B;MAED4I,0BAA0B,CAACZ,OAAO,CAAEJ,OAAO;;;QAGzCD,UAAU,CAACC,OAAO,EAAE1H,OAAO,CAACC,WAAW,EAAE,CAAC;OAC3C,CAAC;KACH,MAAM;MACLwH,UAAU,CAACC,OAAO,EAAE1H,OAAO,CAAC;;GAE/B,CAAC;EAEF,OAAO5B,MAAM;AACf;AAEA,SAAgBuK,iBAAiBA,CAACC,KAA+B;EAC/D,MAAM5L,OAAO,GAAa,EAAE;EAE5B4L,KAAK,EAAExK,MAAM,EAAErB,KAAK,CAAC+K,OAAO,CAAE/I,IAAI;IAChC,MAAM8J,yBAAyB,GAAG9J,IAAI,CAACtB,IAAI,CAACoC,UAAU;IACtD,MAAMiJ,uBAAuB,GAAG/J,IAAI,CAACV,EAAE,CAACwB,UAAU;IAClD,IAAIkJ,eAAe,GAAG/L,OAAO,CAACA,OAAO,CAACc,MAAM,GAAG,CAAC,CAAC;IACjD,IAAI+K,yBAAyB,IAAIE,eAAe,EAC9C/L,OAAO,CAAC6K,IAAI,CAACgB,yBAAyB,CAAC;IACzCE,eAAe,GAAG/L,OAAO,CAACA,OAAO,CAACc,MAAM,GAAG,CAAC,CAAC;IAC7C,IAAIgL,uBAAuB,IAAIC,eAAe,EAC5C/L,OAAO,CAAC6K,IAAI,CAACiB,uBAAuB,CAAC;GACxC,CAAC;EACF,OAAO9L,OAAO;AAChB;AAKA,SAAgBgM,oBAAoBA,CAClC1B,QAAmB,EACnB2B,eAAiC,EACjC1C,aAA+C;EAE/C,MAAM2C,gBAAgB,GAAuB5B,QAAQ,CAACxI,GAAG,CAAEiJ,OAAO,KAAM;IACtE/H,OAAO,EAAE+H,OAAO,CAAC/H,OAAO;IACxB4H,UAAU,EAAEG,OAAO,CAACH,UAAU;IAC9B9H,KAAK,EAAEiI,OAAO,CAACjI,KAAK;IACpBkH,KAAK,EAAET,aAAa,CAACwB,OAAO,CAACH,UAAU,CAAC,CAACb,GAAG;IAC5CvE,IAAI,EAAE+D,aAAa,CAACwB,OAAO,CAACH,UAAU,CAAC,CAACpF,IAAI;IAC5C2G,QAAQ,EAAE,CAAC,CAACF,eAAe,CAACtJ,IAAI,CAC7BI,MAAM,IACLA,MAAM,CAACD,KAAK,KAAKiI,OAAO,CAACjI,KAAK,IAC9BC,MAAM,CAAC6H,UAAU,KAAKG,OAAO,CAACH,UAAU;GAE7C,CAAC,CAAC;EAEH,OAAOsB,gBAAgB;AACzB;AAEA,SAAgBE,oBAAoBA,CAClCC,QAAmB,EACnBvJ,KAAa,EACbV,MAAc,EACdY,OAAsB;EAEtB,IAAIqJ,QAAQ,CAACvL,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;EAEtC,MAAMwL,qBAAqB,GAAGD,QAAQ,CAAChH,MAAM,CAC1CkH,OAAO,IAAKA,OAAO,CAACzJ,KAAK,KAAKA,KAAK,CACrC;EACD,IAAIwJ,qBAAqB,CAACxL,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;EAEnD,OACEwL,qBAAqB,CAClBxK,GAAG,CACD4D,CAAC,IACAA,CAAC,CAAC2G,QAAQ,EAAE1J,IAAI,CACb6J,EAAE,IACAxJ,OAAO,KAAK,IAAI,IAAIwJ,EAAE,CAACxJ,OAAO,KAAKA,OAAO,IAC1CA,OAAO,KAAK,IAAI,IACfwJ,EAAE,CAACxJ,OAAO,KAAKA,OAAO,IACtBwJ,EAAE,CAACpK,MAAM,KAAKA,MAAO,CAC1B,IAAI,IAAI,CACZ,CACAiD,MAAM,CAAEM,CAAC,IAAKA,CAAC,KAAK,IAAI,CAAC,CACzBF,IAAI,CACH,CAACC,CAAC,EAAEC,CAAC,KAAKiD,UAAU,CAACjD,CAAC,EAAE8G,MAAM,IAAI,GAAG,CAAC,GAAG7D,UAAU,CAAClD,CAAC,EAAE+G,MAAM,IAAI,GAAG,CAAC,CACtE,CACA9J,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI;AAE/B;AAEA,SAAgB+J,0BAA0BA,CAAC3B,OAAgB,EAAEwB,OAAgB;EAC3E,OACExB,OAAO,CAAC/H,OAAO,KAAKuJ,OAAO,CAACvJ,OAAO,IACnC+H,OAAO,CAACjI,KAAK,KAAKyJ,OAAO,CAACzJ,KAAK,IAC/BiI,OAAO,CAACH,UAAU,KAAK2B,OAAO,CAAC3B,UAAU;AAE7C;AAEA,SAAgB+B,cAAcA,CAC5B5B,OAAgB,EAChB6B,eAA6B,EAC7B/H,MAAe;EAEf,MAAM;IACJ7B,OAAO;IACP6J,UAAU,EAAE/J,KAAK;IACjBgK,WAAW;IACXT,QAAQ,GAAG;GACZ,GAAGO,eAAe;EACnB,OAAO;IACL5J,OAAO;IACPF,KAAK;IACLiK,OAAO,EAAE,KAAK;IACdnH,KAAK,EAAE,KAAK;IACZkH,WAAW;IACXlC,UAAU,EAAEG,OAAO,CAACH,UAAU;IAC9ByB,QAAQ,EACNA,QAAQ,EAAEvK,GAAG,CAAEkL,YAAY,KAAM;MAC/BlK,KAAK;MACLV,MAAM,EAAE4K,YAAY,CAACC,KAAK,CAAC7K,MAAM;MACjC8K,MAAM,EAAEF,YAAY,CAACC,KAAK,CAAC7K,MAAM;MACjCY,OAAO,EAAEgK,YAAY,CAACC,KAAK,CAACjK,OAAO,IAAI,IAAI;MAC3CmK,SAAS,EAAEH,YAAY,CAACP,MAAM,CAACA,MAAM;MACrCW,OAAO,EAAEJ,YAAY,CAACP,MAAM,CAACY,QAAQ;MACrCZ,MAAM,EAAE,IAAIpM,kBAAS,CAAC2M,YAAY,CAACP,MAAM,CAACA,MAAM,CAAC,CAC9Ca,SAAS,CAAC,CAACN,YAAY,CAACP,MAAM,CAACY,QAAQ,CAAC,CACxCvF,OAAO,EAAE;MACZyF,IAAI,EAAE,EAAE;MACRjM,QAAQ,EACNkM,WAAW,CACT1K,KAAK,EACLkK,YAAY,CAACC,KAAK,CAAC7K,MAAM,EACzB4K,YAAY,CAACC,KAAK,CAACjK,OAAO,EAC1B6B,MAAM,CACP,IAAI;KACR,CAAC,CAAC,IAAI;GACV;AACH;AAEA,SAAgB4I,iBAAiBA,CAAClB,OAAgB;EAChD,OAAO;IAAE,GAAGA,OAAO;IAAEQ,OAAO,EAAE,KAAK;IAAEnH,KAAK,EAAE;GAAM;AACpD;AAEA,AAAO,MAAM8H,uBAAuB,GAAInB,OAAkB;EACxD,MAAMoB,sBAAsB,GAAG,IAAIjN,GAAG,EAAiB;EACvD,MAAMkN,YAAY,GAAcrB,OAAO,EAAE9D,MAAM,CAC7C,CAACoF,GAAc,EAAEC,OAAgB;IAC/B,OAAOD,GAAG,CAACE,SAAS,CACjB9M,CAAC,IAAKA,CAAC,CAAC+B,OAAO,KAAK8K,OAAO,CAAC9K,OAAO,IAAI/B,CAAC,CAAC6B,KAAK,KAAKgL,OAAO,CAAChL,KAAK,CAClE,KAAK,CAAC,CAAC,GACJ,CAAC,GAAG+K,GAAG,EAAEC,OAAO,CAAC,GACjBD,GAAG;GACR,EACD,EAAE,CACH;EAED,MAAMG,yBAAyB,GAAGJ,YAAY,EAAE9L,GAAG,CAAEgB,KAAK;IACxD,MAAMmL,wBAAwB,GAAe;MAC3CzI,IAAI,EAAE1C,KAAK,CAACA,KAAK;MACjBwH,QAAQ,EAAE;KACX;IACD,IAAI,CAACqD,sBAAsB,CAACO,GAAG,CAACpL,KAAK,CAACE,OAAO,CAAC,EAAE;MAC9C2K,sBAAsB,CAACQ,GAAG,CAACrL,KAAK,CAACE,OAAO,CAAC;;IAE3C2K,sBAAsB,CAAC7C,OAAO,CAAEsD,cAAc;MAC5C,IAAItL,KAAK,CAACE,OAAO,KAAKoL,cAAc,EAClCH,wBAAwB,CAAC3D,QAAQ,CAACO,IAAI,CAAC/H,KAAK,CAAC;KAChD,CAAC;IACF,OAAOmL,wBAAwB;GAChC,CAAC;EACF,MAAMI,KAAK,GAAG9G,cAAc,CAC1ByG,yBAAyB,EACrBM,OAAO,CAAE3I,CAAC,IAAKA,CAAC,CAAC2E,QAAQ,CAAC,EAC1BgE,OAAO,CAAE5I,CAAC,IAAKA,CAAC,EAAE2G,QAAQ,CAAC,EAC3BvK,GAAG,CAAE6D,CAAC,IACN,IAAItF,kBAAS,CAACsF,CAAC,EAAE8G,MAAM,IAAIrM,IAAI,CAAC,CAACmO,YAAY,CAAC5I,CAAC,EAAErE,QAAQ,IAAI,CAAC,CAAC,CAChE,EACCmH,MAAM,CAAC,CAAC/C,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAAC8I,IAAI,CAAC7I,CAAC,CAAC,EAAEvF,IAAI,CAAC,IAAIA,IAAI,CAC9C,CAAC+G,QAAQ,EAAE;EAEZ,OAAOsH,2BAA2B,CAACJ,KAAK,CAAC;AAC3C,CAAC;AAED,SAASI,2BAA2BA,CAACjH,MAAuB;EAC1D,IAAIkH,KAAK,GAAGlH,MAAM,CAACL,QAAQ,EAAE,CAACwH,KAAK,CAAC,GAAG,CAAC;EACxCD,KAAK,CAAC,CAAC,CAAC,GAAGA,KAAK,CAAC,CAAC,CAAC,CAACE,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC;EACzD,OAAOF,KAAK,CAACG,IAAI,CAAC,GAAG,CAAC;AACxB;AAEA,AAAO,MAAMC,YAAY,GAAGA,CAC1BjK,MAA0B,EAC1BkK,QAAuB,EACvBxC,OAAkB;EAElB,IAAI,CAAC1H,MAAM,EAAE,OAAO,EAAE;EACtB,MAAMmK,aAAa,GAAG,IAAItO,GAAG,CAC3B,CAAC6L,OAAO,IAAI,EAAE,EACX+B,OAAO,CAAE5I,CAAC,IAAKA,CAAC,CAAC2G,QAAQ,IAAI,EAAE,CAAC,CAChChH,MAAM,CAAEM,CAAC,IAAK,CAAC,IAAItF,kBAAS,CAACsF,CAAC,EAAEwH,SAAS,CAAC,IAAI/M,IAAI,EAAE6O,EAAE,CAAC,CAAC,CAAC,CAAC,CAC1DnN,GAAG,CAAE6D,CAAC,OAAQA,CAAC,EAAE7C,SAAS6C,CAAC,EAAEvD,UAAUuD,CAAC,EAAE3C,SAAS,CAAC,CACxD;EACD,IAAIkM,UAAU,GAAG,CACf,GAAGrK,MAAM,CAACQ,MAAM,CACbF,CAAC,IAAK,CAACA,CAAC,CAACnC,OAAO,IAAIgM,aAAa,CAACG,IAAI,IAAIJ,QAAQ,KAAK,IAAI,CAC7D,EACD,GAAGlK,MAAM,CACNQ,MAAM,CACJF,CAAC,IACA,EAAE4J,QAAQ,KAAK,IAAI,IAAI,CAAC5J,CAAC,CAACnC,OAAO,CAAC,IAClCgM,aAAa,CAACd,GAAG,IAAI/I,CAAC,CAACtC,cAAcsC,CAAC,CAAC/C,UAAU+C,CAAC,CAACnC,SAAS,CAAC,CAChE,CACAyC,IAAI,CAAC,CAAC2J,MAAM,EAAEC,MAAM,KAAKC,cAAc,CAACF,MAAM,EAAEC,MAAM,EAAE9C,OAAO,CAAC,CAAC,EACpE,GAAG1H,MAAM,CAACQ,MAAM,CACbF,CAAC,IACA,CAAC6J,aAAa,CAACd,GAAG,IAAI/I,CAAC,CAACtC,cAAcsC,CAAC,CAAC/C,UAAU+C,CAAC,CAACnC,SAAS,CAAC,IAC9D,CAACmC,CAAC,CAACnC,OAAO,KACT,CAACgM,aAAa,CAACG,IAAI,IAAIJ,QAAQ,KAAK,MAAM,CAAC,CAC/C,EACD,GAAGlK,MAAM,CAACQ,MAAM,CACbF,CAAC,IACA,CAAC6J,aAAa,CAACd,GAAG,IAAI/I,CAAC,CAACtC,cAAcsC,CAAC,CAAC/C,UAAU+C,CAAC,CAACnC,SAAS,CAAC,IAC9DmC,CAAC,CAACnC,OAAO,IACT,CAACmC,CAAC,CAACoK,eAAe,CACrB,EACD,GAAG1K,MAAM,CAACQ,MAAM,CACbF,CAAC,IACA,CAAC6J,aAAa,CAACd,GAAG,IAAI/I,CAAC,CAACtC,cAAcsC,CAAC,CAAC/C,UAAU+C,CAAC,CAACnC,SAAS,CAAC,IAC9DmC,CAAC,CAACoK,eAAe,CACpB,CACF;EAED,OAAOL,UAAU;AACnB,CAAC;AAED,MAAMI,cAAc,GAAGA,CACrBF,MAAwB,EACxBC,MAAwB,EACxBtM,MAAiB;EAEjB,IAAI,CAACqM,MAAM,CAAC9N,QAAQ,IAAI,CAAC+N,MAAM,CAAC/N,QAAQ,EAAE,OAAO,CAAC;EAElD,MAAMkO,cAAc,GAAG,IAAInP,kBAAS,CAClC+L,oBAAoB,CAClBrJ,MAAM,EACNqM,MAAM,CAACvM,UAAU,EACjBuM,MAAM,CAAChN,MAAM,EACbgN,MAAM,CAACpM,OAAO,CACf,EAAEyJ,MAAM,IAAIrM,IAAI,CAClB,CAACmO,YAAY,CAACa,MAAM,CAAC9N,QAAQ,CAAC;EAC/B,MAAMmO,cAAc,GAAG,IAAIpP,kBAAS,CAClC+L,oBAAoB,CAClBrJ,MAAM,EACNsM,MAAM,CAACxM,UAAU,EACjBwM,MAAM,CAACjN,MAAM,EACbiN,MAAM,CAACrM,OAAO,CACf,EAAEyJ,MAAM,IAAIrM,IAAI,CAClB,CAACmO,YAAY,CAACc,MAAM,CAAC/N,QAAQ,CAAC;EAC/B,IAAIkO,cAAc,CAACP,EAAE,CAACQ,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;EAChD,OAAO,CAAC;AACV,CAAC;AAED,AAAO,MAAMjC,WAAW,GAAGA,CACzB3K,UAAkB,EAClBT,MAAc,EACdY,OAAsB,EACtB0M,SAAkB;EAElB,MAAMC,KAAK,GAAGD,SAAS,EAAE/M,IAAI,CAC1BwC,CAAC,IACAA,CAAC,CAACtC,UAAU,KAAKA,UAAU,IAC3BsC,CAAC,CAAC/C,MAAM,EAAEwN,WAAW,EAAE,KAAKxN,MAAM,EAAEwN,WAAW,EAAE,IACjDzK,CAAC,CAACnC,OAAO,KAAKA,OAAO,CACxB;EACD,OAAO2M,KAAK,EAAErO,QAAQ,IAAI,IAAI;AAChC,CAAC;AACD,AAAO,MAAMuO,mBAAmB,GAAGA,CACjCnL,WAA6B,EAC7B3B,MAAc;EAEd,MAAM+M,2BAA2B,GAAGC,4CAA8B,CAChEvM,MAAM,CAACwM,OAAO,CAACtL,WAAW,CAAC,CACxB5C,GAAG,CAACmO,IAAA;IAAA,IAAC,GAAG7F,cAAc,CAAC,GAAA6F,IAAA;IAAA,OAAK7F,cAAc;IAAC,CAC3C/E,MAAM,CAAC6K,gCAAkB,CAAC,CAC9B;EACD,OAAOJ,2BAA2B,IAAI,CAAC,CAACA,2BAA2B,CAAC/M,MAAM,CAAC;AAC7E,CAAC;AAED,AAAO,MAAMoN,kCAAkC,GAC7CC,iBAAqC;EAErC,MAAMC,oBAAoB,GAAG,IAAI3P,GAAG,CAClC0P,iBAAiB,CAACtO,GAAG,CAAE4D,CAAM,IAAKA,CAAC,CAACkF,UAAU,CAACzD,QAAQ,EAAE,CAAC,CAC3D;EAED,OAAOmJ,sCAAwB,CAACjL,MAAM,CAAEkL,gBAAgB,IACtDF,oBAAoB,CAACnC,GAAG,CAACqC,gBAAgB,CAAC,CAC3C;AACH,CAAC;;SCvZeC,cAAcA,CAC5BC,aAAwB,EACxBC,cAAyB;EAEzB,IAAID,aAAa,CAACE,GAAG,CAACvQ,IAAI,CAAC,IAAIsQ,cAAc,CAACC,GAAG,CAACvQ,IAAI,CAAC,EAAE,OAAO,CAAC;EACjE,OAAOsQ,cAAc,CAACE,GAAG,CAACH,aAAa,CAAC,CAACI,KAAK,CAAC,CAAC,CAAC,CAACtC,YAAY,CAAC,GAAG,CAAC;AACrE;AAEA,SAAgBuC,qBAAqBA,CACnCL,aAAwB,EACxBM,WAA0B;EAE1B,OACGzJ,QAAQ,CAACyJ,WAAW,CAACjJ,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,IAC7C2I,aAAa,CAACzI,GAAG,CAAC,IAAI3H,kBAAS,CAAC,GAAG,CAAC,CAAC,IACtCiH,QAAQ,CAACyJ,WAAW,CAACjJ,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,IAC5C2I,aAAa,CAACzI,GAAG,CAAC,IAAI3H,kBAAS,CAAC,IAAI,CAAC,CAAE;AAE7C;AAEA,SAAgB2Q,aAAaA,CAAC7P,SAAmC;EAC/D,OACE,CAACA,SAAS,EAAEC,MAAM,EAAErB,KAAK,IAAI,EAAE,EAAEsF,MAAM,CAAEtD,IAAI;IAC3C,MAAMkP,OAAO,GAAG,CAAC,CAAClP,IAAI,CAACmP,kBAAkB,GACrC,IAAI7Q,kBAAS,CAAC0B,IAAI,CAACmP,kBAAkB,CAAC,GACtC,IAAI;IACR,MAAMC,OAAO,GAAG,CAAC,CAACpP,IAAI,CAACqP,kBAAkB,GACrC,IAAI/Q,kBAAS,CAAC0B,IAAI,CAACqP,kBAAkB,CAAC,GACtC,IAAI;IACR,MAAMC,WAAW,GAAGtP,IAAI,CAACuP,yBAAyB,KAAK,WAAW;IAClE,IAAID,WAAW,EAAE;MACf,OAAOJ,OAAO,EAAEjJ,GAAG,CAACjG,IAAI,CAACwP,UAAU,CAAC,IAAIJ,OAAO,EAAER,GAAG,CAAC5O,IAAI,CAACwP,UAAU,CAAC;KACtE,MAAM;MACL,OAAON,OAAO,EAAEhC,EAAE,CAAClN,IAAI,CAACwP,UAAU,CAAC,IAAIJ,OAAO,EAAEK,EAAE,CAACzP,IAAI,CAACwP,UAAU,CAAC;;GAEtE,CAAC,CAACzQ,MAAM,GAAG,CAAC;AAEjB;AAEA,SAAgB2Q,iBAAiBA,CAACtQ,SAAmC;EAKnE,IAAI,CAACA,SAAS,EACZ,OAAO;IAAEY,IAAI,EAAE,IAAI;IAAE2P,oBAAoB,EAAE,EAAE;IAAEC,cAAc,EAAE;GAAI;EACrE,MAAM5P,IAAI,GAAG,CAACZ,SAAS,EAAEC,MAAM,EAAErB,KAAK,IAAI,EAAE,EAAEsF,MAAM,CAAEtD,IAAI;IACxD,MAAMkP,OAAO,GAAG,CAAC,CAAClP,IAAI,CAACmP,kBAAkB,GACrC,IAAI7Q,kBAAS,CAAC0B,IAAI,CAACmP,kBAAkB,CAAC,GACtC,IAAI;IACR,MAAMC,OAAO,GAAG,CAAC,CAACpP,IAAI,CAACqP,kBAAkB,GACrC,IAAI/Q,kBAAS,CAAC0B,IAAI,CAACqP,kBAAkB,CAAC,GACtC,IAAI;IACR,MAAMC,WAAW,GAAGtP,IAAI,CAACuP,yBAAyB,KAAK,WAAW;IAClE,IAAID,WAAW,EAAE;MACf,OAAOJ,OAAO,EAAEjJ,GAAG,CAACjG,IAAI,CAACwP,UAAU,CAAC,IAAIJ,OAAO,EAAER,GAAG,CAAC5O,IAAI,CAACwP,UAAU,CAAC;KACtE,MAAM;MACL,OAAON,OAAO,EAAEhC,EAAE,CAAClN,IAAI,CAACwP,UAAU,CAAC,IAAIJ,OAAO,EAAEK,EAAE,CAACzP,IAAI,CAACwP,UAAU,CAAC;;GAEtE,CAAC,CAAC,CAAC,CAAC;EACL,IAAI,CAACxP,IAAI,EACP,OAAO;IAAEA,IAAI,EAAE,IAAI;IAAE2P,oBAAoB,EAAE,EAAE;IAAEC,cAAc,EAAE;GAAI;EACrE,MAAMV,OAAO,GAAG,CAAC,CAAClP,IAAI,CAACmP,kBAAkB,GACrC,IAAI7Q,kBAAS,CAAC0B,IAAI,CAACmP,kBAAkB,CAAC,GACtC,IAAI;EACR,MAAMC,OAAO,GAAG,CAAC,CAACpP,IAAI,CAACqP,kBAAkB,GACrC,IAAI/Q,kBAAS,CAAC0B,IAAI,CAACqP,kBAAkB,CAAC,GACtC,IAAI;EACR,MAAMC,WAAW,GAAGtP,IAAI,CAACuP,yBAAyB,KAAK,WAAW;EAElE,IAAII,oBAAoB,GAAG,EAAE;EAC7B,IAAIC,cAAc,GAAG,EAAE;EACvB,IAAI,CAACN,WAAW,IAAI,CAAC,CAACJ,OAAO,IAAIA,OAAO,CAAChC,EAAE,CAAClN,IAAI,CAACwP,UAAU,CAAC,EAAE;IAC5DG,oBAAoB,mBAAmBnK,cAAc,CAAC0J,OAAO,KAC3DlP,IAAI,CAACtB,IAAI,CAAC2B,QACV;IACFuP,cAAc,GAAG,2BAA2B;GAC7C,MAAM,IAAIN,WAAW,IAAI,CAAC,CAACJ,OAAO,IAAIA,OAAO,CAACjJ,GAAG,CAACjG,IAAI,CAACwP,UAAU,CAAC,EAAE;IACnEG,oBAAoB,kBAAkBnK,cAAc,CAAC0J,OAAO,KAC1DlP,IAAI,CAACtB,IAAI,CAAC2B,QACV;IACFuP,cAAc,GAAG,2BAA2B;;EAG9C,IAAI,CAACN,WAAW,IAAI,CAAC,CAACF,OAAO,IAAIA,OAAO,CAACK,EAAE,CAACzP,IAAI,CAACwP,UAAU,CAAC,EAAE;IAC5DG,oBAAoB,mBAAmBnK,cAAc,CAAC4J,OAAO,KAC3DpP,IAAI,CAACtB,IAAI,CAAC2B,QACV;IACFuP,cAAc,GAAG,2BAA2B;GAC7C,MAAM,IAAIN,WAAW,IAAI,CAAC,CAACF,OAAO,IAAIA,OAAO,CAACR,GAAG,CAAC5O,IAAI,CAACwP,UAAU,CAAC,EAAE;IACnEG,oBAAoB,kBAAkBnK,cAAc,CAAC4J,OAAO,KAC1DpP,IAAI,CAACtB,IAAI,CAAC2B,QACV;IACFuP,cAAc,GAAG,2BAA2B;;EAG9C,OAAO;IAAE5P,IAAI;IAAE2P,oBAAoB;IAAEC;GAAgB;AACvD;AAEA,SAAgBC,kBAAkBA,CAChCC,iBAAgC,EAChCvH,QAAmB,EACnByC,OAAgB,EAChB5L,SAAmC,EACnC6P,aAAsB,EACtBc,aAAsB,EACtBC,2BAAoC,EACpCC,oBAA6B;EAE7B,IAAIH,iBAAiB,KAAK,SAAS,EACjC,OAAO;IAAEI,KAAK,EAAE,gBAAgB;IAAEC,QAAQ,EAAE;GAAM;EACpD,IAAI5H,QAAQ,CAACxJ,MAAM,IAAI,CAAC,EAAE,OAAO;IAAEmR,KAAK,EAAE,gBAAgB;IAAEC,QAAQ,EAAE;GAAO;EAC7E,IAAInF,OAAO,EAAE,OAAO;IAAEkF,KAAK,EAAE,uBAAuB;IAAEC,QAAQ,EAAE;GAAM,CAAC,KAClE,IAAI,CAAC/Q,SAAS,EAAE,OAAO;IAAE8Q,KAAK,EAAE,MAAM;IAAEC,QAAQ,EAAE;GAAM,CAAC,KACzD,IAAIlB,aAAa,EAAE,OAAO;IAAEiB,KAAK,EAAE,aAAa;IAAEC,QAAQ,EAAE;GAAM,CAAC,KACnE,IAAIJ,aAAa,EACpB,OAAO;IAAEG,KAAK,EAAE,2BAA2B;IAAEC,QAAQ,EAAE;GAAM,CAAC,KAC3D,IAAIH,2BAA2B,EAClC,OAAO;IACLE,KAAK,EAAE,mDAAmD;IAC1DC,QAAQ,EAAE,KAAK;IACfC,UAAU,EAAE;GACb,CAAC,KACC,IAAIH,oBAAoB,EAC3B,OAAO;IACLC,KAAK,EAAE,4CAA4C;IACnDC,QAAQ,EAAE,KAAK;IACfC,UAAU,EAAE;GACb,CAAC,KACC,OAAO;IAAEF,KAAK,EAAE,MAAM;IAAEC,QAAQ,EAAE;GAAO;AAChD;AAEA,SAAgBE,qBAAqBA,CACnCjR,SAAmC,EACnCkR,WAAmB,EACnB5B,aAAwB,EACxBC,cAAyB;EAEzB,OAAO,EACL,CAACD,aAAa,CAACE,GAAG,CAACvQ,IAAI,CAAC,IAAIsQ,cAAc,CAACC,GAAG,CAACvQ,IAAI,CAAC,KACpD,CAAC,CAACe,SAAS,EAAEC,MAAM,IACnB,CAAC,CAACiR,WAAW,IACbA,WAAW,KAAK,GAAG,IACnBzJ,UAAU,CAACyJ,WAAW,IAAI,GAAG,CAAC,KAAK,CAAC,IACpC,CAAC,CAAClR,SAAS,CAACC,MAAM,CACnB;AACH;AAEA,SAAgBkR,oBAAoBA,CAClCD,WAAmB,EACnBlR,SAA4B,EAC5BnB,OAA8C,EAC9CH,QAAwD,EACxD0S,oBAA6B,EAC7B9N,IAAkB;EAElB,MAAM+N,gBAAgB,GAAGrR,SAAS,CAACC,MAAM;EACzC,IAAI,CAACoR,gBAAgB,EAAE,MAAMC,KAAK,CAAC,sCAAsC,CAAC;EAE1E,OAAO;IACLC,YAAY,EAAE,IAAIC,IAAI,EAAE,CAACC,OAAO,EAAE,CAACzL,QAAQ,EAAE;IAC7C0L,UAAU,EAAE,IAAI;IAChBC,SAAS,EAAE3R,SAAS,CAAC2R,SAAS,IAAI,EAAE;IACpCT,WAAW,EAAEA,WAAW;IACxBrS,OAAO;IACP+S,MAAM,EAAE,SAAS;IACjBC,QAAQ,EAAE,KAAK;IACfC,YAAY,EAAE,IAAI;IAClBC,oBAAoB,EAAE,IAAI;IAC1BC,kBAAkB,EAAE,IAAI;IACxBC,qBAAqB,EAAE,IAAI;IAC3BC,yBAAyB,EAAE,IAAI;IAC/BC,+BAA+B,EAAE,IAAI;IACrCC,oBAAoB,EAAE,IAAI;;IAE1B1T,QAAQ,EAAEA,QAAQ;IAClB2S,gBAAgB,EAAEA,gBAAgB;IAClCD,oBAAoB;IACpBiB,KAAK,EACHrS,SAAS,CAACC,MAAM,EAAErB,KAAK,EAAE+B,GAAG,CAAC,CAACC,IAAI,EAAE0R,KAAK;MACvC,MAAM/M,OAAO,GAAGjC,IAAI,CAACG,QAAQ,CAACjC,IAAI,CAC/B+D,OAAO,IAAKA,OAAO,CAACgN,EAAE,KAAK3R,IAAI,CAACC,SAAS,CAC3C;MACD,MAAM2R,WAAW,GAAGjN,OAAO,EAAEkN,KAAK,CAAC,CAAC,CAAC;MACrC,MAAMC,cAAc,GAAGpP,IAAI,CAACC,WAAW,CAAC/B,IAAI,CACzCE,UAAU,IAAKA,UAAU,CAAC2C,IAAI,KAAKzD,IAAI,CAACtB,IAAI,CAACoC,UAAU,CACzD;MACD,MAAMiR,YAAY,GAAGrP,IAAI,CAACC,WAAW,CAAC/B,IAAI,CACvCE,UAAU,IAAKA,UAAU,CAAC2C,IAAI,KAAKzD,IAAI,CAACV,EAAE,CAACwB,UAAU,CACvD;MACD,OAAO;QACL6Q,EAAE,EAAED,KAAK,GAAG,CAAC;QACbI,cAAc,EAAE9R,IAAI,CAACtB,IAAI,CAACoC,UAAU;QACpCkR,UAAU,EAAEhS,IAAI,CAACtB,IAAI,CAAC2B,MAAM;QAC5B4R,iBAAiB,EAAEjS,IAAI,CAACtB,IAAI,CAACuC,OAAO;QACpCiR,YAAY,EAAElS,IAAI,CAACtB,IAAI,CAAC4M,QAAQ;QAChC6G,mBAAmB,EAAEnS,IAAI,CAACmS,mBAAmB;QAC7ChD,kBAAkB,EAAEnP,IAAI,CAACmP,kBAAkB;QAC3CE,kBAAkB,EAAErP,IAAI,CAACqP,kBAAkB;QAC3C0C,YAAY,EAAE/R,IAAI,CAACV,EAAE,CAACwB,UAAU;QAChCsR,QAAQ,EAAEpS,IAAI,CAACtB,IAAI,CAAC8M,IAAI;QACxB6G,QAAQ,EAAErS,IAAI,CAACV,EAAE,CAACe,MAAM;QACxBiS,eAAe,EAAEtS,IAAI,CAACV,EAAE,CAAC2B,OAAO;QAChCsR,UAAU,EAAEvS,IAAI,CAACV,EAAE,CAACgM,QAAQ;QAC5BkH,MAAM,EAAExS,IAAI,CAACV,EAAE,CAACkM,IAAI;QACpBiH,oBAAoB,EAAE,IAAI7B,IAAI,EAAE,CAACC,OAAO,EAAE;QAC1C5Q,SAAS,EAAED,IAAI,CAACC,SAAS;QACzByS,QAAQ,EAAElN,cAAc,CAACmN,eAAe,CAAC3S,IAAI,EAAE0C,IAAI,CAACI,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE8P,iCAAiC,EAAE5S,IAAI,CAAC6S,QAAQ;QAChDC,YAAY,EAAE,EAAE;QAChB9B,MAAM,EAAE,SAAS;QACjB+B,aAAa,EAAE,IAAI;QACnBC,qBAAqB,EAAE,IAAI;QAC3BC,qBAAqB,EAAE,IAAI;QAC3BlI,WAAW,EAAE,IAAI;QACjBmI,YAAY,EAAE,IAAI;QAClBC,iBAAiB,EAAE,IAAI;QACvBC,iBAAiB,EAAE,IAAI;QACvBC,mBAAmB,EAAE,IAAI;QACzBC,2BAA2B,EAAE,IAAI;QACjCC,eAAe,EAAE,IAAI;QACrBC,uBAAuB,EAAE,IAAI;QAC7BC,cAAc,EAAE,IAAI;QACpBC,sBAAsB,EAAE,IAAI;QAC5BC,mBAAmB,EAAE,IAAI;QACzBC,YAAY,EAAE,IAAI;QAClBC,aAAa,EAAE,IAAI;QACnBC,kBAAkB,EAAEhC,cAAc,CAACtG,IAAI;QACvCuI,gBAAgB,EAAEhC,YAAY,CAACvG,IAAI;QACnCwI,WAAW,EAAErP,OAAO,EAAE6G,IAAI;QAC1BoG,WAAW,EAAEA;OACd;KACF,CAAC,IAAI;GACT;AACH;AAEA,SAAgBqC,eAAeA,CAACpK,KAA+B;EAC7D,MAAM5L,OAAO,GAAa,EAAE;EAE5B4L,KAAK,EAAExK,MAAM,EAAErB,KAAK,CAAC+K,OAAO,CAAE/I,IAAI;IAChC,MAAM8J,yBAAyB,GAAG9J,IAAI,CAACtB,IAAI,CAACoC,UAAU;IACtD,MAAMiJ,uBAAuB,GAAG/J,IAAI,CAACV,EAAE,CAACwB,UAAU;IAClD,IAAIkJ,eAAe,GAAG/L,OAAO,CAACA,OAAO,CAACc,MAAM,GAAG,CAAC,CAAC;IACjD,IAAI+K,yBAAyB,IAAIE,eAAe,EAC9C/L,OAAO,CAAC6K,IAAI,CAACgB,yBAAyB,CAAC;IACzCE,eAAe,GAAG/L,OAAO,CAACA,OAAO,CAACc,MAAM,GAAG,CAAC,CAAC;IAC7C,IAAIgL,uBAAuB,IAAIC,eAAe,EAC5C/L,OAAO,CAAC6K,IAAI,CAACiB,uBAAuB,CAAC;GACxC,CAAC;EACF,OAAO9L,OAAO;AAChB;AAEA,AAAO,MAAMwN,aAAW,GAAGA,CACzB3K,UAAkB,EAClBT,MAAc,EACdY,OAAsB,EACtB0M,SAAkB;EAElB,MAAMC,KAAK,GAAGD,SAAS,EAAE/M,IAAI,CAC1BwC,CAAC,IACAA,CAAC,CAACtC,UAAU,KAAKA,UAAU,IAC3BsC,CAAC,CAAC/C,MAAM,EAAEwN,WAAW,EAAE,KAAKxN,MAAM,EAAEwN,WAAW,EAAE,IACjDzK,CAAC,CAACnC,OAAO,KAAKA,OAAO,CACxB;EACD,OAAO2M,KAAK,EAAErO,QAAQ,IAAI,IAAI;AAChC,CAAC;AAED,SAASoT,eAAeA,CAACuB,IAAgB,EAAEvG,SAAkB;EAC3D,IAAIwG,aAAa,GAAG9V,IAAI;EACxB,KAAK,IAAIa,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgV,IAAI,CAACxT,GAAG,CAAC3B,MAAM,EAAEG,CAAC,EAAE,EAAE;IACxC,MAAMwB,GAAG,GAAGwT,IAAI,CAACxT,GAAG,CAACxB,CAAC,CAAC;IACvB,IAAIwB,GAAG,CAAC0T,WAAW,KAAK,sBAAsB,EAAE;IAEhD,MAAMC,SAAS,GAAG5I,aAAW,CAC3B/K,GAAG,CAACwK,KAAK,CAACpK,UAAU,EACpBJ,GAAG,CAACwK,KAAK,CAAC7K,MAAM,EAChBK,GAAG,CAACwK,KAAK,CAACjK,OAAO,EACjB0M,SAAS,CACV;IACDwG,aAAa,GAAGA,aAAa,CAAC1H,IAAI,CAChC,IAAInO,kBAAS,CAACoC,GAAG,CAACgK,MAAM,CAAC,CAAC8B,YAAY,CAAC6H,SAAS,IAAI,CAAC,CAAC,CACvD;;EAGH,OAAOF,aAAa;AACtB;AAEA,SAAgBG,gBAAgBA,CAC9BlV,SAAmC,EACnCuO,SAAkB;EAElB,OACEvO,SAAS,EAAEC,MAAM,EAAErB,KAAK,CAAC0I,MAAM,CAC7B,CAAC6N,QAAmB,EAAEL,IAAI,KACxBK,QAAQ,CAAC9H,IAAI,CAACkG,eAAe,CAACuB,IAAI,EAAEvG,SAAS,CAAC,CAAC,EACjDtP,IAAI,CACL,IAAI,IAAI;AAEb;AAEA,SAAgBmW,UAAUA,CAACL,aAA+B;EACxD,IAAI,CAACA,aAAa,EAAE,OAAO,KAAK;EAChC,OAAO,CAACA,aAAa,CAAC1E,EAAE,CAAC,IAAInR,kBAAS,CAAC,EAAE,CAAC,CAAC;AAC7C;AAEA,SAMgBmW,sBAAsBA,CAAC5K,KAAwB;EAC7D,MAAM6K,SAAS,GAAG7K,KAAK,CAACxK,MAAM,EAAErB,KAAK,CAAC+B,GAAG,CACtCkE,QAAQ,IAAKA,QAAQ,CAAC0Q,mBAAmB,CAC3C;EACD,OACED,SAAS,EACL3U,GAAG,CAAE6B,CAAC,IAAKA,CAAC,EAAEqC,QAAQ,IAAI,CAAC,CAAC,EAC5BX,MAAM,CAAE1B,CAAC,IAAKA,CAAC,GAAG,CAAC,CAAC,EACpB8B,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,GAAGD,CAAC,CAAC,EACrB/C,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI;AAEhC;AAEA,SAAgBgU,iBAAiBA,CAC/BC,YAAoB,EACpBC,mBAAkC;EAElC,IAAI,CAACA,mBAAmB,EAAE,OAAO,IAAI;EACrC,OAAOjO,UAAU,CAACgO,YAAY,CAAC,GAAGC,mBAAmB;AACvD;AAEA,SAiCgBC,0BAA0BA,CACxCpX,SAAgB,EAChBE,OAAc,EACdyS,WAAmB,EACnBrS,OAAkB,EAClBiM,eAAiC,EACjC9F,wBAAkC,EAClCH,QAAgB,EAChB+Q,kBAA2B;EAE3B,MAAMC,kBAAkB,GAAG/K,eAAe,CAACxD,MAAM,CAC/C,CACEuO,kBAAuD,EACvDxU,cAAc,MAEbwU,kBAAkB,CAACxU,cAAc,CAACM,KAAK,CAAC,GAAGN,cAAc,CAACQ,OAAO,EAClEgU,kBAAkB,CACnB,EACD,EAAE,CACH;EAED,MAAM9K,gBAAgB,GAAyC,EAAE;EAEjElM,OAAO,CAAC8K,OAAO,CAAE/H,MAAM;IACrB,MAAMkU,gBAAgB,GAAG/K,gBAAgB,CAACvJ,IAAI,CAC3CuU,eAAe,IAAKA,eAAe,CAACrU,UAAU,KAAKE,MAAM,CAACD,KAAK,CACjE;IACD,IAAI,CAAC,CAACmU,gBAAgB,EAAEA,gBAAgB,CAACE,SAAS,CAACtM,IAAI,CAAC9H,MAAM,CAACC,OAAO,CAAC,CAAC,KAEtEkJ,gBAAgB,CAACrB,IAAI,CAAC;MACpBhI,UAAU,EAAEE,MAAM,CAACD,KAAK;MACxBqU,SAAS,EAAE,CAACpU,MAAM,CAACC,OAAO;KAC3B,CAAC;GACL,CAAC;EAEF,MAAMoU,WAAW,GAAqB;IACpC3K,MAAM,EAAE4F,WAAW,CAAClL,QAAQ,EAAE;IAC9B4P,kBAAkB;IAClBtW,IAAI,EAAE;MACJuC,OAAO,EAAEtD,SAAS,CAACsD,OAAO;MAC1BH,UAAU,EAAEnD,SAAS,CAACmD,UAAU;MAChCT,MAAM,EAAE1C,SAAS,CAAC0C;KACnB;IACDf,EAAE,EAAE;MACF2B,OAAO,EAAEpD,OAAO,CAACoD,OAAO;MACxBH,UAAU,EAAEjD,OAAO,CAACiD,UAAU;MAC9BT,MAAM,EAAExC,OAAO,CAACwC;KACjB;IACD8J,gBAAgB;IAChBD,eAAe,EAAE+K,kBAAkB;IACnCK,aAAa,EAAElR,wBAAwB;IACvCmR,qBAAqB,EAAE,IAAI;;IAE3BtR,QAAQ,EAAEA,QAAQ,CAACmB,QAAQ;GAC5B;EAED,OAAOiQ,WAAW;AACpB;AAEA,SAAgBG,oBAAoBA,CAACtL,eAAiC;EACpE,MAAMjM,OAAO,GAAGiM,eAAe,CAACxD,MAAM,CACpC,CACEuO,kBAEC,EACDxU,cAAc,MAEbwU,kBAAkB,CAACxU,cAAc,CAACM,KAAK,CAAC,GAAG;IAC1CE,OAAO,EAAER,cAAc,CAACQ,OAAO;IAC/B4H,UAAU,EAAEpI,cAAc,CAACoI;GAC5B,EACDoM,kBAAkB,CACnB,EACD,EAAE,CACH;EAED,OAAOhX,OAAO;AAChB;AAEA,SAAgBwX,oBAAoBA,CAAC5L,KAAwB;EAC3D,OAAOA,KAAK,CAACxK,MAAM,EAAEyT,YAAY,IAAI,IAAI;AAC3C;AAEA,SAAgB4C,mBAAmBA,CACjCC,QAAyB,EACzBC,QAAyB;EAEzB,OAAO,IAAItX,kBAAS,CAACsX,QAAQ,CAAC,CAC3B/G,GAAG,CAAC,IAAIvQ,kBAAS,CAACqX,QAAQ,CAAC,CAAC,CAC5B7G,KAAK,CAAC,CAAC,CAAC,CACRtC,YAAY,CAAC,GAAG,CAAC;AACtB;AAEA,SAAgBqJ,yBAAyBA,CACvCC,QAA2B,EAC3BC,QAA2B;EAE3B,MAAMC,eAAe,GAAGP,oBAAoB,CAACK,QAAQ,CAAC;EACtD,MAAMG,eAAe,GAAGR,oBAAoB,CAACM,QAAQ,CAAC;EACtD,IAAI,CAACC,eAAe,IAAI,CAACC,eAAe,EAAE,OAAO,KAAK;EACtD,MAAMC,gBAAgB,GAAGR,mBAAmB,CAC1CM,eAAe,EACfC,eAAe,CAChB;EAED,OAAOC,gBAAgB,CAACC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC1C;AAEA,SAAgBC,kBAAkBA,CAChCvM,KAAwB,EACxBK,eAAiC;EAEjC,MAAMxJ,GAAG,GAAGmJ,KAAK,CAACwM,gBAAgB;EAClC,MAAMpC,eAAe,GAAGrK,iBAAiB,CAACC,KAAK,CAAC;EAChD,MAAMyM,8BAA8B,GAAGpM,eAAe,CAACxG,IAAI,CACzD,CAAC6S,eAAe,EAAEC,eAAe,KAC/BvC,eAAe,CAACwC,OAAO,CAACF,eAAe,CAACxV,KAAK,CAAC,GAC9CkT,eAAe,CAACwC,OAAO,CAACD,eAAe,CAACzV,KAAK,CAAC,CACjD;EACD,OAAOuV,8BAA8B,CAClC/J,OAAO,CAAEvL,MAAM,IAAKR,0BAA0B,CAACQ,MAAM,EAAEN,GAAG,CAAC,IAAI,EAAE,CAAC,CAClE4C,MAAM,CAAE4H,KAAK,IAAK,CAACA,KAAK,CAACwL,EAAE,CAAC,CAC5B3W,GAAG,CAAEmL,KAAK;IACT,MAAM7K,MAAM,GAAG6K,KAAK,CAACA,KAAK,CAAC7K,MAAM;IACjC,MAAMsW,aAAa,GAAGnR,cAAc,CAClC,IAAIlH,kBAAS,CAAC4M,KAAK,CAACyL,aAAa,CAACjM,MAAM,CAAC,CAACa,SAAS,CACjD,CAACL,KAAK,CAACyL,aAAa,CAACrL,QAAQ,CAC9B,EACD,CAAC,CACF;IACD,MAAMsL,cAAc,GAAGpR,cAAc,CACnC,IAAIlH,kBAAS,CAAC4M,KAAK,CAAC0L,cAAc,CAAClM,MAAM,CAAC,CAACa,SAAS,CAClD,CAACL,KAAK,CAAC0L,cAAc,CAACtL,QAAQ,CAC/B,EACD,CAAC,CACF;IACD,IAAIuL,MAAM,GAAG,EAAE;IACf,IAAI3L,KAAK,CAAC2L,MAAM,KAAK,KAAK,EAAEA,MAAM,GAAG,kBAAkB;IACvD,IAAI3L,KAAK,CAAC2L,MAAM,KAAK,aAAa,EAAEA,MAAM,GAAG,WAAW;IACxD,IAAI3L,KAAK,CAAC2L,MAAM,KAAK,qBAAqB,EACxCA,MAAM,GAAG,4BAA4B;IACvC,MAAMC,cAAc,cAAcF,kBAAkBvW,SAASwW,wBAAwBF,iBAAiBtW,kBAAkB6K,KAAK,CAACA,KAAK,CAACpK,oBAAoB;IACxJ,OAAOgW,cAAc;GACtB,CAAC;AACN;;ACxgBA,MAAMC,WAAW,GAAGA,CAACnJ,KAAmB,EAAElD,MAAc,KACtD,IAAIpM,kBAAS,CAACoM,MAAM,IAAIrM,IAAI,CAAC,CAACmO,YAAY,CAACoB,KAAK,EAAErO,QAAQ,IAAI,CAAC,CAAC;AAsBlE,AAAO,MAAMyX,iBAAiB,gBAAG5V,eAAe,eAC9CoB,cAAM,EAAc,eAClBwB,gCAAqB,CAAEvB,GAAG,KAAM;EAC9B/E,SAAS,EAAE,IAAI;EACfC,SAAS,EAAE,IAAI;EACf2S,WAAW,EAAE,EAAE;EACfwC,YAAY,EAAE,IAAI;EAClBpE,aAAa,EAAE,IAAIpQ,kBAAS,CAAC,CAAC,CAAC;EAC/BqQ,cAAc,EAAE,IAAIrQ,kBAAS,CAAC,CAAC,CAAC;EAChCV,OAAO,EAAE,IAAI;EACbC,OAAO,EAAE,IAAI;EACbuB,SAAS,EAAE,IAAI;EACf4L,OAAO,EAAE,KAAK;EACdnH,KAAK,EAAE,EAAE;EACToT,YAAY,EAAG7X,SAAS,IACtBqD,GAAG,CAAEgC,KAAK;IACR,IAAIqO,YAAY,GAAqB,IAAI;IACzC,IAAInE,cAAc,GAActQ,IAAI;IACpC,IAAI,CAAC,CAACe,SAAS,EAAE;MACf0T,YAAY,GAAG,CAAC,CAAC1T,SAAS,CAACC,MAAM,EAAEyT,YAAY,GAC3C,IAAIxU,kBAAS,CAACc,SAAS,CAACC,MAAM,EAAEyT,YAAY,CAAC,GAC7C,IAAI;MACRnE,cAAc,GAAG,IAAIrQ,kBAAS,CAACwU,YAAY,IAAIzU,IAAI,CAAC,CAACmO,YAAY,CAC/DrN,2BAA2B,CAACC,SAAS,CAAC,IACpCqF,KAAK,CAAC5G,OAAO,EAAE0B,QAAQ,IACvB,CAAC,CACJ;;IAEH,OAAO;MACLH,SAAS;MACT,IAAI,CAAC,CAACA,SAAS,IAAI;QACjB0T,YAAY;QACZnE;OACD;KACF;GACF,CAAC;EACJuI,YAAY,EAAGnW,KAAK,IAClB0B,GAAG,CAAC,OAAO;IACT/E,SAAS,EAAEqD;GACZ,CAAC,CAAC;EACLoW,YAAY,EAAGvJ,KAAK,IAClBnL,GAAG,CAAEgC,KAAK,KAAM;IACd9G,SAAS,EAAEiQ,KAAK;IAChB,IAAI,CAAC,CAACnJ,KAAK,CAAC6L,WAAW,IAAI;MACzB5B,aAAa,EAAEqI,WAAW,CAACnJ,KAAK,EAAEnJ,KAAK,CAAC6L,WAAW;KACpD;GACF,CAAC,CAAC;EACL8G,UAAU,EAAGrW,KAAK,IAChB0B,GAAG,CAAC,OAAO;IACT7E,OAAO,EAAEmD;GACV,CAAC,CAAC;EACLsW,UAAU,EAAGzJ,KAAK,IAChBnL,GAAG,CAAC,OAAO;IACT5E,OAAO,EAAE+P;GACV,CAAC,CAAC;EACL0J,cAAc,EAAG5M,MAAM,IACrBjI,GAAG,CAAEgC,KAAK,KAAM;IACd6L,WAAW,EAAE5F,MAAM;IACnB,IAAI,CAAC,CAACjG,KAAK,CAAC9G,SAAS,IAAI;MACvB+Q,aAAa,EAAEqI,WAAW,CAACtS,KAAK,CAAC9G,SAAS,EAAE+M,MAAM;KACnD;GACF,CAAC;CACL,CAAC,CAAC,CACJ,CACF;AAED,MAAMtL,SAAS,GAAGA,CAChBmY,cAAwC,EACxCC,aAAsC;EAEtC,IAAIC,eAAe,GAA2B,IAAI;EAClD,MAAMC,cAAc,GAAGA;IACrB,MAAM;MAAE/Z,SAAS;MAAEE,OAAO;MAAEyS;KAAa,GAAGiH,cAAc,CAAC5V,QAAQ,EAAE;IACrE,MAAM;MAAEsC,QAAQ;MAAEC,cAAc;MAAEE;KAA0B,GAC1DoT,aAAa,CAAC7V,QAAQ,EAAE;IAC1B,IAAI,CAAChE,SAAS,IAAI,CAACE,OAAO,IAAI,CAACyS,WAAW,EAAE;IAC5CmH,eAAe,EAAEE,KAAK,EAAE;IACxBF,eAAe,GAAG,IAAIG,eAAe,EAAE;IACvC,MAAM/C,YAAY,GAAG3Q,cAAc,GAAGD,QAAQ;IAC9C,MAAMoR,WAAW,GAAGN,0BAA0B,CAC5CpX,SAAS,EACTE,OAAO,EACPyS,WAAW,EACX,EAAE,EACF,EAAE,EACFlM,wBAAwB,EACxByQ,YAAY,EACZ,KAAK,CACN;IACD0C,cAAc,CAACM,QAAQ,CAAC;MAAE7M,OAAO,EAAE,IAAI;MAAE5L,SAAS,EAAE;KAAM,CAAC;IAC3DyC,WAAW,CACRiW,YAAY,CAACzC,WAAW,EAAE;MACzB0C,MAAM,EAAEN,eAAe,CAACM;KACzB,CAAC,CACDC,IAAI,CAAEC,GAAG;MACR,MAAM;QAAEhB;OAAc,GAAGM,cAAc,CAAC5V,QAAQ,EAAE;MAClDsV,YAAY,CAACgB,GAAG,CAAC;MACjBV,cAAc,CAACM,QAAQ,CAAC;QAAE7M,OAAO,EAAE;OAAO,CAAC;MAC3CyM,eAAe,GAAG,IAAI;KACvB,CAAC,CACDS,KAAK,CAAErU,KAAK;MACX,IAAIA,KAAK,CAACsU,IAAI,KAAK,cAAc,EAAE;MACnCZ,cAAc,CAACM,QAAQ,CAAC;QACtBhU,KAAK,EAAEA,KAAK,CAACuU,OAAO;QACpBpN,OAAO,EAAE;OACV,CAAC;KACH,CAAC;GACL;EAEDgM,iBAAiB,CAACqB,SAAS,CACxB5T,KAAK,KAAM;IACV/G,SAAS,EAAE+G,KAAK,CAAC/G,SAAS;IAC1BC,SAAS,EAAE8G,KAAK,CAAC9G,SAAS;IAC1BC,OAAO,EAAE6G,KAAK,CAAC7G,OAAO;IACtBC,OAAO,EAAE4G,KAAK,CAAC5G,OAAO;IACtByS,WAAW,EAAE7L,KAAK,CAAC6L;GACpB,CAAC,EAEFoH,cAAc,CAACY,IAAI,CAAC,IAAI,CAAC,EACzB;IACEC,UAAU,EAAEA,CAACC,SAAS,EAAE/T,KAAK;MAC3B,IACE+T,SAAS,CAAC9a,SAAS,EAAE+F,IAAI,KAAKgB,KAAK,CAAC/G,SAAS,EAAE+F,IAAI,IACnD+U,SAAS,CAAC5a,OAAO,EAAE6F,IAAI,KAAKgB,KAAK,CAAC7G,OAAO,EAAE6F,IAAI,IAC/C+U,SAAS,CAAC7a,SAAS,EAAE0C,MAAM,KAAKoE,KAAK,CAAC9G,SAAS,EAAE0C,MAAM,IACvDmY,SAAS,CAAC3a,OAAO,EAAEwC,MAAM,KAAKoE,KAAK,CAAC5G,OAAO,EAAEwC,MAAM,IACnDmY,SAAS,CAAC7a,SAAS,EAAEmD,UAAU,KAAK2D,KAAK,CAAC9G,SAAS,EAAEmD,UAAU,IAC/D0X,SAAS,CAAC3a,OAAO,EAAEiD,UAAU,KAAK2D,KAAK,CAAC5G,OAAO,EAAEiD,UAAU,IAC3D0X,SAAS,CAAC7a,SAAS,EAAEsD,OAAO,KAAKwD,KAAK,CAAC9G,SAAS,EAAEsD,OAAO,IACzDuX,SAAS,CAAC3a,OAAO,EAAEoD,OAAO,KAAKwD,KAAK,CAAC5G,OAAO,EAAEoD,OAAO,IACrDuX,SAAS,CAAClI,WAAW,KAAK7L,KAAK,CAAC6L,WAAW,EAE3C,OAAO,KAAK,CAAC,KACV,OAAO,IAAI;;GAEnB,CACF;EAEDxM,gBAAgB,CAACuU,SAAS,CACvB5T,KAAK,KAAM;IACVR,QAAQ,EAAEQ,KAAK,CAACR,QAAQ;IACxBC,cAAc,EAAEO,KAAK,CAACP,cAAc;IACpCE,wBAAwB,EAAEK,KAAK,CAACL;GACjC,CAAC,EACFsT,cAAc,CAACY,IAAI,CAAC,IAAI,CAAC,EACzB;IACEC,UAAU,EAAEA,CAACC,SAAS,EAAE/T,KAAK;MAC3B,IACE+T,SAAS,CAACvU,QAAQ,KAAKQ,KAAK,CAACR,QAAQ,IACrCuU,SAAS,CAACtU,cAAc,KAAKO,KAAK,CAACP,cAAc,IACjDsU,SAAS,CAACpU,wBAAwB,CAACrF,MAAM,KACvC0F,KAAK,CAACL,wBAAwB,CAACrF,MAAM,EAEvC,OAAO,KAAK,CAAC,KACV,OAAO,IAAI;;GAEnB,CACF;EAED,OAAO;IAAE2Y;GAAgB;AAC3B,CAAC;AAED,AAAO,MAAM;EAAEA;CAAgB,gBAAGtY,SAAS,CACzC4X,iBAAiB,EACjBlT,gBAAgB,CACjB;;ACxMD,IAAY2U,YAMX;AAND,WAAYA,YAAY;EACtBA,wCAA0B;EAC1BA,wCAA0B;EAC1BA,oCAAsB;EACtBA,oCAAsB;EACtBA,0CAA4B;AAC9B,CAAC,EANWA,YAAY,KAAZA,YAAY;;ACUjB,MAAMC,UAAU,gBAAGtX,eAAe,eACvCoB,cAAM,EAAW,CAAEC,GAAG,KAAM;EAC1BkW,4BAA4B,EAAE,KAAK;EACnCC,qBAAqB,EAAE,IAAI;EAC3BC,0BAA0B,EAAEA,MAC1BpW,GAAG,CAAEgC,KAAK,KAAM;IACdkU,4BAA4B,EAAE,CAAClU,KAAK,CAACkU;GACtC,CAAC,CAAC;EACLG,eAAe,EAAG/H,SAAS,IAAKtO,GAAG,CAAC;IAAEmW,qBAAqB,EAAE7H;GAAW;CACzE,CAAC,CAAC,CACJ;;ACPD,SAASgI,mBAAmBA,CAC1BjW,MAAe,EACfkW,YAA2B;EAE3B,OACElW,MAAM,CAAClC,IAAI,CAAEgN,KAAK;IAChB,MAAMqL,gBAAgB,GAAGD,YAAY,EAAEpM,KAAK,CAAC,IAAI,CAAC;IAClD,IAAIqM,gBAAgB,EAAEla,MAAM,KAAK,CAAC,EAChC,OAAO6O,KAAK,CAACvN,MAAM,KAAK4Y,gBAAgB,CAAC,CAAC,CAAC,IAAIrL,KAAK,CAAC3M,OAAO,KAAK,IAAI;IACvE,OACE2M,KAAK,CAACvN,MAAM,KAAK4Y,gBAAgB,GAAG,CAAC,CAAC,IACtCrL,KAAK,CAAC3M,OAAO,KAAKgY,gBAAgB,GAAG,CAAC,CAAC;GAE1C,CAAC,IAAI,IAAI;AAEd;AAEA,SAAgBC,SAASA;EACvB,MAAMC,WAAW,GAAGC,YAAM,CAAC,IAAI,CAAC;EAChC,MAAM,CAACJ,YAAY,EAAEK,eAAe,CAAC,GAAGC,8BAAe,EAAE;EACzD,MAAMC,QAAQ,GAAGC,0BAAW,EAAE;EAC9B,MAAMC,uBAAuB,GAAGL,YAAM,CAACG,QAAQ,CAACG,MAAM,CAAC;EACvD,MAAMC,eAAe,GAAGP,YAAM,CAAyB,EAAE,CAAC;EAC1D,MAAM1b,SAAS,GAAGsZ,iBAAiB,CAACzV,GAAG,CAAC7D,SAAS,EAAE;EACnD,MAAME,OAAO,GAAGoZ,iBAAiB,CAACzV,GAAG,CAAC3D,OAAO,EAAE;EAC/C,MAAMD,SAAS,GAAGqZ,iBAAiB,CAACzV,GAAG,CAAC5D,SAAS,EAAE;EACnD,MAAME,OAAO,GAAGmZ,iBAAiB,CAACzV,GAAG,CAAC1D,OAAO,EAAE;EAC/C,MAAMqZ,YAAY,GAAGF,iBAAiB,CAACzV,GAAG,CAAC2V,YAAY,EAAE;EACzD,MAAMC,YAAY,GAAGH,iBAAiB,CAACzV,GAAG,CAAC4V,YAAY,EAAE;EACzD,MAAMC,UAAU,GAAGJ,iBAAiB,CAACzV,GAAG,CAAC6V,UAAU,EAAE;EACrD,MAAMC,UAAU,GAAGL,iBAAiB,CAACzV,GAAG,CAAC8V,UAAU,EAAE;EACrD,MAAM/G,WAAW,GAAG0G,iBAAiB,CAACzV,GAAG,CAAC+O,WAAW,EAAE;EACvD,MAAMgH,cAAc,GAAGN,iBAAiB,CAACzV,GAAG,CAAC+V,cAAc,EAAE;EAC7D,MAAMvU,aAAa,GAAGR,YAAY,CAAChB,GAAG,CAACwB,aAAa,EAAE;EACtD,MAAM;IAAEJ,WAAW;IAAEG;GAAQ,GAAGP,YAAY,CAAChB,GAAG,CAACmB,IAAI,EAAE;EACvD,MAAMoW,eAAe,GAAGJ,UAAU,CAACnX,GAAG,CAACuX,eAAe,EAAE;EAExDc,eAAS,CAAC;IACR,MAAMC,MAAM,GAA2B,EAAE;IACzCC,iCAAkB,CAACL,uBAAuB,CAAC1N,OAAO,CAAC,CAAChD,OAAO,CACzD,CAACgR,KAAK,EAAEC,GAAG;MACTH,MAAM,CAACG,GAAG,CAAC,GAAGD,KAAK;KACpB,CACF;IACDJ,eAAe,CAAC5N,OAAO,GAAG8N,MAAM;IAChC,MAAM9I,SAAS,GACbwI,QAAQ,CAACU,QAAQ,CAACrN,KAAK,CAACpP,gBAAgB,CAACQ,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;IAClE,IAAI+S,SAAS,EAAE+H,eAAe,CAAC/H,SAAS,CAAC;GAC1C,EAAE,EAAE,CAAC;EAEN6I,eAAS,CAAC;IACR,IAAIM,eAAe,GAAG,EAAE;MACtBC,eAAe,GAAG,EAAE;MACpBC,aAAa,GAAG,EAAE;MAClBC,aAAa,GAAG,EAAE;MAClB7K,UAAU,GAAG,EAAE;IACjB,IACEzM,aAAa,KAAK,SAAS,IAC3B,CAAC,CAACvF,gBAAgB,CAACW,cAAc,EAAEX,gBAAgB,CAACU,WAAW,CAAC,CAACsF,QAAQ,CACvE+V,QAAQ,CAACU,QAAQ,CAClB,EACD;MACAC,eAAe,GAAGP,eAAe,CAAC5N,OAAO,CAAC0M,YAAY,CAAC6B,UAAU,CAAC;MAClEH,eAAe,GAAGR,eAAe,CAAC5N,OAAO,CAAC0M,YAAY,CAAC8B,UAAU,CAAC;MAClEH,aAAa,GAAGT,eAAe,CAAC5N,OAAO,CAAC0M,YAAY,CAAC+B,QAAQ,CAAC;MAC9DH,aAAa,GAAGV,eAAe,CAAC5N,OAAO,CAAC0M,YAAY,CAACgC,QAAQ,CAAC;MAC9DjL,UAAU,GAAGmK,eAAe,CAAC5N,OAAO,CAAC0M,YAAY,CAACiC,WAAW,CAAC;MAC9DrB,eAAe,CACb;QACE,IAAIa,eAAe,IAAI;UACrB,CAACzB,YAAY,CAAC6B,UAAU,GAAGJ;SAC5B,CAAC;QACF,IAAIC,eAAe,IAAI;UACrB,CAAC1B,YAAY,CAAC8B,UAAU,GAAGJ;SAC5B,CAAC;QACF,IAAIC,aAAa,IAAI;UAAE,CAAC3B,YAAY,CAAC+B,QAAQ,GAAGJ;SAAe,CAAC;QAChE,IAAIC,aAAa,IAAI;UAAE,CAAC5B,YAAY,CAACgC,QAAQ,GAAGJ;SAAe,CAAC;QAChE,IAAI7K,UAAU,IAAI;UAChB,CAACiJ,YAAY,CAACiC,WAAW,GAAGlL,UAAU,CAACpK,QAAQ;SAChD;OACF,EACD;QAAEyH,OAAO,EAAE;OAAM,CAClB;;IAEH,IAAI,CAACsM,WAAW,CAACpN,OAAO,EAAE;MACxB,IAAImO,eAAe,GAAG,EAAE;QACtBC,eAAe,GAAG,EAAE;QACpBC,aAAa,GAAG,EAAE;QAClBC,aAAa,GAAG,EAAE;QAClB7K,UAAU,GAAG,EAAE;MACjB,IAAIzM,aAAa,KAAK,SAAS,EAAE;QAC/BmX,eAAe,GAAGP,eAAe,CAAC5N,OAAO,CAAC0M,YAAY,CAAC6B,UAAU,CAAC;QAClEH,eAAe,GAAGR,eAAe,CAAC5N,OAAO,CAAC0M,YAAY,CAAC8B,UAAU,CAAC;QAClEH,aAAa,GAAGT,eAAe,CAAC5N,OAAO,CAAC0M,YAAY,CAAC+B,QAAQ,CAAC;QAC9DH,aAAa,GAAGV,eAAe,CAAC5N,OAAO,CAAC0M,YAAY,CAACgC,QAAQ,CAAC;QAC9DjL,UAAU,GAAGmK,eAAe,CAAC5N,OAAO,CAAC0M,YAAY,CAACiC,WAAW,CAAC;OAC/D,MAAM;QACL,IAAInB,QAAQ,CAAC9U,KAAK,KAAK,UAAU,EAAE;QACnCyV,eAAe,GAAGxc,SAAS,EAAE+F,IAAI,IAAI,EAAE;QACvC0W,eAAe,GACb,CAACxc,SAAS,EAAE0C,MAAM,IAAI,EAAE,KACvB1C,SAAS,EAAEsD,OAAO,QAAQtD,SAAS,EAAEsD,SAAS,GAAG,EAAE,CAAC;QACvDmZ,aAAa,GAAGxc,OAAO,EAAE6F,IAAI,IAAI,EAAE;QACnC4W,aAAa,GACX,CAACxc,OAAO,EAAEwC,MAAM,IAAI,EAAE,KACrBxC,OAAO,EAAEoD,OAAO,QAAQpD,OAAO,EAAEoD,SAAS,GAAG,EAAE,CAAC;QACnDuO,UAAU,GAAGc,WAAW;QAExB+I,eAAe,CACb;UACE,IAAIa,eAAe,IAAI;YACrB,CAACzB,YAAY,CAAC6B,UAAU,GAAGJ;WAC5B,CAAC;UACF,IAAIC,eAAe,IAAI;YACrB,CAAC1B,YAAY,CAAC8B,UAAU,GAAGJ;WAC5B,CAAC;UACF,IAAIC,aAAa,IAAI;YAAE,CAAC3B,YAAY,CAAC+B,QAAQ,GAAGJ;WAAe,CAAC;UAChE,IAAIC,aAAa,IAAI;YAAE,CAAC5B,YAAY,CAACgC,QAAQ,GAAGJ;WAAe,CAAC;UAChE,IAAI7K,UAAU,IAAI;YAChB,CAACiJ,YAAY,CAACiC,WAAW,GAAGlL,UAAU,CAACpK,QAAQ;WAChD;SACF,EACD;UAAEyH,OAAO,EAAE;SAAM,CAClB;;;IAGLsM,WAAW,CAACpN,OAAO,GAAG,KAAK;GAC5B,EAAE,CAACwN,QAAQ,CAACU,QAAQ,EAAE3J,WAAW,CAAC,CAAC;EAEpCsJ,eAAS,CAAC;IACR,IAAI7W,aAAa,KAAK,SAAS,EAAE;MAC/B,MAAM4X,eAAe,GAAG3B,YAAY,CAAC4B,GAAG,CAACnC,YAAY,CAAC6B,UAAU,CAAC;MACjE,MAAMH,eAAe,GAAGnB,YAAY,CAAC4B,GAAG,CAACnC,YAAY,CAAC8B,UAAU,CAAC;MACjE,MAAMH,aAAa,GAAGpB,YAAY,CAAC4B,GAAG,CAACnC,YAAY,CAAC+B,QAAQ,CAAC;MAC7D,MAAMH,aAAa,GAAGrB,YAAY,CAAC4B,GAAG,CAACnC,YAAY,CAACgC,QAAQ,CAAC;MAC7D,MAAMjL,UAAU,GAAGwJ,YAAY,CAAC4B,GAAG,CAACnC,YAAY,CAACiC,WAAW,CAAC;MAC7D,MAAMhd,SAAS,GAAGiF,WAAW,CAAC/B,IAAI,CAC/BE,UAAU,IAAKA,UAAU,CAAC2C,IAAI,KAAKkX,eAAe,CACpD;MACD,MAAMhd,SAAS,GAAGob,mBAAmB,CAACjW,MAAM,EAAEqX,eAAe,CAAC;MAC9D,MAAMvc,OAAO,GAAG+E,WAAW,CAAC/B,IAAI,CAC7BE,UAAU,IAAKA,UAAU,CAAC2C,IAAI,KAAK2W,aAAa,CAClD;MACD,MAAMvc,OAAO,GAAGkb,mBAAmB,CAACjW,MAAM,EAAEuX,aAAa,CAAC;MAC1D,IAAI,CAAC,CAAC3c,SAAS,EAAE;QACfwZ,YAAY,CAACxZ,SAAS,CAAC;QACvB,IAAI,CAAC,CAACC,SAAS,EAAEwZ,YAAY,CAACxZ,SAAS,CAAC;;MAE1C,IAAI,CAAC,CAACC,OAAO,EAAE;QACbwZ,UAAU,CAACxZ,OAAO,CAAC;QACnB,IAAI,CAAC,CAACC,OAAO,EAAEwZ,UAAU,CAACxZ,OAAO,CAAC;;MAEpC,IAAI2R,UAAU,EAAE8H,cAAc,CAAC9H,UAAU,CAAC;;GAE7C,EAAE,CAACzM,aAAa,CAAC,CAAC;EAEnB,OAAO,IAAI;AACb;;AC7JA,MAAM8X,gBAAgB,gBAAGC,SAAM,CAAC,KAAK,EAAE;EACrCC,OAAO,EAAE;CACV,CAAC;AAEF,SAAgBC,aAAaA,CAACC,KAAgB;EAC5C,MAAM;IAAEC;GAAgB,GAAGD,KAAK;EAChC,MAAME,QAAQ,GAAGC,0BAAW,EAAE;EAE9B,OACEC,6BAACR,gBAAgB,QACfQ,6BAACC,UAAO;IAACC,OAAO,EAAC;KACfF,6BAACG,SAAM;IAACC,OAAO,EAAC,OAAO;IAACC,OAAO,EAAER;KAC/BG,6BAACM,YAAS;IAACvO,IAAI,EAAE;IAAM,CAChB,CACD,EACViO,6BAACC,UAAO;IAACC,OAAO,EAAC;KACfF,6BAACG,SAAM;IACLC,OAAO,EAAC,OAAO;IACfC,OAAO,EAAEA,MAAMP,QAAQ,CAAC3d,gBAAgB,CAACQ,KAAK;KAE9Cqd,6BAACO,cAAW;IAACxO,IAAI,EAAE;IAAM,CAClB,CACD,EACViO,6BAACC,UAAO;IAACC,OAAO,EAAC;KACfF,6BAACG,SAAM;IACLC,OAAO,EAAC,OAAO;IACfC,OAAO,EAAEA,MAAMP,QAAQ,CAAC3d,gBAAgB,CAACM,QAAQ;KAEjDud,6BAACQ,eAAY;IAACzO,IAAI,EAAE;IAAM,CACnB,CACD,CACO;AAEvB;;AC1CO,MAAM0O,eAAe,gBAAGhB,SAAM,CAAC,KAAK,EAAE;EAC3CC,OAAO,EAAE,MAAM;EACfgB,cAAc,EAAE,eAAe;EAC/BC,UAAU,EAAE,QAAQ;EACpBC,KAAK,EAAE,MAAM;EACbC,OAAO,EAAE;CACV,CAAC;AAMF,SAAgBC,MAAMA,CAAClB,KAAgB;EACrC,MAAM;IAAEC;GAAgB,GAAGD,KAAK;EAChC,OACEI,6BAACS,eAAe,QACdT,6BAACe,aAAU;IAACX,OAAO,EAAC;YAAsB,EAC1CJ,6BAACL,aAAa;IAACE,cAAc,EAAEA;IAAkB,CACjC;AAEtB;;AC8BO,MAAMmB,eAAe,gBAAGjb,eAAe,eAC5CoB,cAAM,EAAgB,eACpBwB,gCAAqB,CAAEvB,GAAG,KAAM;EAC9B8F,QAAQ,EAAE,EAAE;EACZ+B,QAAQ,EAAE,EAAE;EACZJ,eAAe,EAAE,EAAE;EACnBoS,aAAa,EAAG/T,QAAQ;IACtB,MAAMzF,MAAM,GAAGP,YAAY,CAACZ,QAAQ,EAAE,CAACe,IAAI,CAACI,MAAM;IAElDL,GAAG,CAAEgC,KAAK,KAAM;MACd8D,QAAQ,EAAE9D,KAAK,CAAC8D,QAAQ,CAACvD,MAAM,CAACuD,QAAQ,CAAC;MACzC+B,QAAQ,EAAE7F,KAAK,CAAC6F,QAAQ,CAACtF,MAAM,CAC7BuD,QAAQ,CAACxI,GAAG,CAAEiJ,OAAO,KAAM;QACzBsB,QAAQ,EAAE,EAAE;QACZrJ,OAAO,EAAE+H,OAAO,CAAC/H,OAAO;QACxBF,KAAK,EAAEiI,OAAO,CAACjI,KAAK;QACpBiK,OAAO,EAAE,IAAI;QACbnC,UAAU,EAAEG,OAAO,CAACH,UAAU;QAC9BhF,KAAK,EAAE,KAAK;QACZkH,WAAW,EAAE;OACd,CAAC,CAAC;KAEN,CAAC,CAAC;IACHxC,QAAQ,CAACQ,OAAO,CAAC,MAAOC,OAAO;MAC7B,IAAI;QACF,MAAM/F,QAAQ,GAAG,MAAMpB,WAAW,CAAC0a,iBAAiB,CAAC,CACnD;UAAEtb,OAAO,EAAE+H,OAAO,CAAC/H,OAAO;UAAEH,UAAU,EAAEkI,OAAO,CAACjI;SAAO,CACxD,CAAC;QACF,MAAM8J,eAAe,GAAG5H,QAAQ,CAAChF,OAAO,CAAC,CAAC,CAAC;QAC3C,IAAI4M,eAAe,EAAE;UACnBpI,GAAG,CAAEgC,KAAK,KAAM;YACd6F,QAAQ,EAAE7F,KAAK,CAAC6F,QAAQ,CAACvK,GAAG,CAAEyK,OAAO;cACnC,OAAOG,0BAA0B,CAAC3B,OAAO,EAAEwB,OAAO,CAAC,GAC/CI,cAAc,CAAC5B,OAAO,EAAE6B,eAAe,EAAE/H,MAAM,CAAC,GAChD0H,OAAO;aACZ;WACF,CAAC,CAAC;SACJ,MAAM,MAAM,IAAIkG,KAAK,CAAC,kBAAkB,CAAC;OAC3C,CAAC,OAAO7M,KAAK,EAAE;QACdpB,GAAG,CAAEgC,KAAK,KAAM;UACd6F,QAAQ,EAAE7F,KAAK,CAAC6F,QAAQ,CAACvK,GAAG,CAAEyK,OAAO;YACnC,OAAOG,0BAA0B,CAAC3B,OAAO,EAAEwB,OAAO,CAAC,GAC/CkB,iBAAiB,CAAClB,OAAO,CAAC,GAC1BA,OAAO;WACZ;SACF,CAAC,CAAC;;KAEN,CAAC;GACH;EACDgS,gBAAgB,EAAG3T,UAAU;IAC3BpG,GAAG,CAAEgC,KAAK,KAAM;MACd8D,QAAQ,EAAE9D,KAAK,CAAC8D,QAAQ,CAACjF,MAAM,CAC5B0F,OAAO,IAAKA,OAAO,CAACH,UAAU,KAAKA,UAAU,CAC/C;MACDyB,QAAQ,EAAE7F,KAAK,CAAC6F,QAAQ,CAAChH,MAAM,CAC5BkH,OAAO,IAAKA,OAAO,CAAC3B,UAAU,KAAKA,UAAU,CAC/C;MACDqB,eAAe,EAAEzF,KAAK,CAACyF,eAAe,CAAC5G,MAAM,CAC1CtC,MAAM,IAAKA,MAAM,CAAC6H,UAAU,IAAIA,UAAU;KAE9C,CAAC,CAAC;GACJ;EACD4T,mBAAmB,EAAEA,MACnBha,GAAG,CAAEgC,KAAK;IACR,MAAMiY,cAAc,GAAG9S,iBAAiB,CACtCoN,iBAAiB,CAACrV,QAAQ,EAAE,CAACvC,SAAS,CACvC;IACD,MAAM+K,gBAAgB,GAAG1F,KAAK,CAAC8D,QAAQ;IACvC,MAAM2B,eAAe,GAAqB,EAAE;IAC5CwS,cAAc,CAAC3T,OAAO,CAAEhI,KAAK;MAC3B,MAAM4b,iBAAiB,GAAG,CAAC,CAAClY,KAAK,CAACyF,eAAe,CAACtJ,IAAI,CACnDI,MAAM,IAAKA,MAAM,CAACD,KAAK,KAAKA,KAAK,CACnC;MACD,IAAI,CAAC4b,iBAAiB,EAAE;QACtB,MAAMC,2BAA2B,GAAGzS,gBAAgB,CAACvJ,IAAI,CACtDI,MAAM,IAAKA,MAAM,CAACD,KAAK,KAAKA,KAAK,CACnC;QACD,IAAI,CAAC,CAAC6b,2BAA2B,EAC/B1S,eAAe,CAACpB,IAAI,CAAC;UACnB7H,OAAO,EAAE2b,2BAA2B,CAAC3b,OAAO;UAC5CF,KAAK,EAAE6b,2BAA2B,CAAC7b,KAAK;UACxC8H,UAAU,EAAE+T,2BAA2B,CAAC/T;SACzC,CAAC;;KAEP,CAAC;IACF,OAAO;MACLqB,eAAe,EAAEzF,KAAK,CAACyF,eAAe,CAAClF,MAAM,CAACkF,eAAe;KAC9D;GACF,CAAC;EACJ2S,iBAAiB,EAAG7b,MAAM,IACxByB,GAAG,CAAEgC,KAAK,KAAM;IACdyF,eAAe,EAAEzF,KAAK,CAACyF,eAAe,CACnC5G,MAAM,CAAE7C,cAAc,IAAKA,cAAc,CAACM,KAAK,KAAKC,MAAM,CAACD,KAAK,CAAC,CACjEiE,MAAM,CAAC;MACNjE,KAAK,EAAEC,MAAM,CAACD,KAAK;MACnBE,OAAO,EAAED,MAAM,CAACC,OAAO;MACvB4H,UAAU,EAAE7H,MAAM,CAAC6H;KACpB;GACJ,CAAC;CACL,CAAC,CAAC,CACJ,CACF;;ACvID,MAAMiU,GAAG,gBAAGhC,SAAM,CAAC,KAAK,EAAE;EACxBC,OAAO,EAAE,MAAM;EACfgC,aAAa,EAAE,QAAQ;EACvBd,KAAK,EAAE;CACR,CAAC;AAEF,MAAMe,SAAS,gBAAGlC,SAAM,CAAC,KAAK,EAAE;EAC9BmC,SAAS,EAAE,YAAY;EACvBC,eAAe,EAAE,cAAc;EAC/BC,YAAY,EAAE,IAAI;EAClBjB,OAAO,EAAE,MAAM;EAEf,OAAO,EAAE;IACPnB,OAAO,EAAE,MAAM;IACfkB,KAAK,EAAE,MAAM;IACbC,OAAO,EAAE;;CAEZ,CAAC;AAEF,MAAMkB,WAAW,gBAAGtC,SAAM,CAAC,KAAK,EAAE;EAChCmB,KAAK,EAAE,KAAK;EACZoB,SAAS,EAAE;CACZ,CAAC;AAEF,MAAMC,OAAO,gBAAGxC,SAAM,CAAC,KAAK,EAAE;EAC5BC,OAAO,EAAE,MAAM;EACfgB,cAAc,EAAE,UAAU;EAC1BG,OAAO,EAAE;CACV,CAAC;AAEF,MAAMqB,gBAAgB,gBAAGzC,SAAM,CAAC,MAAM,EAAE;EACtCmB,KAAK,EAAE,MAAM;EACbuB,MAAM,EAAE,MAAM;EACdN,eAAe,EAAE,cAAc;EAC/BC,YAAY,EAAE;CACf,CAAC;AAEF,MAAMM,eAAe,gBAAG3C,SAAM,CAAC,KAAK,EAAE;EACpC0C,MAAM,EAAE,KAAK;EACbL,YAAY,EAAE,IAAI;EAClBO,QAAQ,EAAE,CAAC;EACXzB,KAAK,EAAE,KAAK;EACZiB,eAAe,EAAE,aAAa;EAC9BS,MAAM,EAAE,uBAAuB;EAC/B3Q,QAAQ,EAAE,UAAU;EACpB+N,OAAO,EAAE,MAAM;EACfiB,UAAU,EAAE,QAAQ;EACpB4B,WAAW,EAAE,IAAI;EACjBC,YAAY,EAAE;CACf,CAAC;AAEF,SAAgBC,SAASA,CAAC7C,KAAgB;EACxC,MAAM;IAAElT,IAAI;IAAEhH,KAAK;IAAE6M;GAAO,GAAGqN,KAAK;EACpC,MAAMlY,aAAa,GAAGR,YAAY,CAAChB,GAAG,CAACwB,aAAa,EAAE;EACtD,MAAMrF,SAAS,GAAGsZ,iBAAiB,CAACzV,GAAG,CAAC7D,SAAS,EAAE;EACnD,MAAME,OAAO,GAAGoZ,iBAAiB,CAACzV,GAAG,CAAC3D,OAAO,EAAE;EAC/C,MAAM8Q,aAAa,GAAGsI,iBAAiB,CAACzV,GAAG,CAACmN,aAAa,EAAE;EAC3D,MAAM/Q,SAAS,GAAGqZ,iBAAiB,CAACzV,GAAG,CAAC5D,SAAS,EAAE;EACnD,MAAM2Z,cAAc,GAAGN,iBAAiB,CAACzV,GAAG,CAAC+V,cAAc,EAAE;EAC7D,MAAMlY,SAAS,GAAG4X,iBAAiB,CAACzV,GAAG,CAACnC,SAAS,EAAE;EACnD,MAAMkR,WAAW,GAAG0G,iBAAiB,CAACzV,GAAG,CAAC+O,WAAW,EAAE;EACvD,MAAMhG,QAAQ,GAAG+R,eAAe,CAAC9a,GAAG,CAAC+I,QAAQ,EAAE;EAC/C,MAAM6Q,QAAQ,GAAGC,0BAAW,EAAE;EAE9B,MAAMnQ,YAAY,GAChB,CAAC,CAACvN,SAAS,IAAI,CAAC,CAACC,SAAS,GACtB6H,cAAc,CACZ6E,oBAAoB,CAACC,QAAQ,EAAE5M,SAAS,EAAE+F,IAAI,EAAE9F,SAAS,EAAE0C,MAAM,EAAE1C,SAAS,EAAEsD,OAAO,CAAC,EAClFyJ,MAAM,IAAI,GAAG,EACjB,CAAC,CACF,GACD,GAAG;EAET,MAAMqT,gBAAgB,GACpB,CAAC,CAACrgB,SAAS,IAAI,CAAC,CAACC,SAAS,GACtB6H,cAAc,CACZ6E,oBAAoB,CAACC,QAAQ,EAAE5M,SAAS,EAAE+F,IAAI,EAAE9F,SAAS,EAAE0C,MAAM,EAAE1C,SAAS,EAAEsD,OAAO,CAAC,EAClFyJ,MAAM,IAAI,GAAG,EACjBL,oBAAoB,CAACC,QAAQ,EAAE5M,SAAS,EAAE+F,IAAI,EAAE9F,SAAS,EAAE0C,MAAM,EAAE1C,SAAS,EAAEsD,OAAO,CAAC,EAClFoK,OAAO,CACZ,GACD,GAAG;EAET,MAAM2S,UAAU,GACd3C;IAAK4C,KAAK,EAAE;MAAElD,OAAO,EAAE,MAAM;MAAEgB,cAAc,EAAE,QAAQ;MAAEC,UAAU,EAAE;;KAClEjZ,aAAa,KAAK,QAAQ,IAAIsY,6BAAC6C,iBAAc;IAACC,KAAK,EAAC,OAAO;IAAC/Q,IAAI,EAAE;IAAM,EACzEiO,6BAAC+C,gBAAa,OAAG,CAEpB;EAED,OACE/C,6BAACyB,GAAG,QACFzB,0CACEA,6BAACe,aAAU;IAACX,OAAO,EAAC;KAAS1T,IAAI,CAAc,CAC3C,EACNsT,6BAAC2B,SAAS,QACP/B,KAAK,CAAClT,IAAI,KAAK,MAAM,IACpBsT,6BAACiC,OAAO,QACNjC;IACEgD,SAAS,EAAC,SAAS;IACnB3C,OAAO,EAAEA;MACP,IAAIzQ,YAAY,KAAK,GAAG,EAAEqM,cAAc,CAACyG,gBAAgB,CAACnR,KAAK,CAAC,GAAG,CAAC,CAACE,IAAI,CAAC,EAAE,CAAC,CAAC;;KAEhFuO,6BAACG,SAAM;IAACC,OAAO,EAAC,OAAO;IAACrO,IAAI,EAAC;KAC3BiO,6BAACe,aAAU;IAACX,OAAO,EAAC;aAAiBxQ,gBACnCtN,SAAS,EAAE0C,MAAM,IAAI,IACrB,CAAc,CACT,CACL,CAET,EACDgb;IAAKgD,SAAS,EAAC;KACbhD,6BAACG,SAAM;IACLE,OAAO,EAAEA;MACPP,QAAQ,KAAKF,KAAK,CAAClT,IAAI,CAAC7G,WAAW,UAAU,CAAC;KAC/C;IACDua,OAAO,EAAC,UAAU;IAClBtL,QAAQ,EAAEpN,aAAa,KAAK,QAAQ;IACpCiI,OAAO,EAAEjI,aAAa,KAAK,SAAS;IACpCub,MAAM,EACJvb,aAAa,KAAK,SAAS,IAAIhC,KAAK,GAClCsa,6BAAC+B,WAAW;MAACmB,GAAG,EAAExd,KAAK,CAACyK;MAAQ,GAEhC6P,6BAACkC,gBAAgB,OAClB;IAEHiB,MAAM,EAAER,UAAU;IAClBS,KAAK,EAAC,OAAO;IACbrR,IAAI,EAAC,OAAO;IACZ6Q,KAAK,EAAE;MAAES,WAAW,EAAE;;KACrB3b,aAAa,KAAK,SAAS,IAAIhC,KAAK,GAAGA,KAAK,CAAC4d,WAAW,GAAG,OAAO,CAC5D,EACTtD,6BAACG,SAAM;IACLE,OAAO,EAAEA;MACPP,QAAQ,KAAKF,KAAK,CAAClT,IAAI,CAAC7G,WAAW,UAAU,CAAC;KAC/C;IACDua,OAAO,EAAC,UAAU;IAClBtL,QAAQ,EACNpN,aAAa,KAAK,QAAQ,IACzBgF,IAAI,KAAK,MAAM,IAAI,CAACrK,SAAU,IAC9BqK,IAAI,KAAK,IAAI,IAAI,CAACnK,OAAQ;IAE7BoN,OAAO,EAAEjI,aAAa,KAAK,SAAS;IACpCub,MAAM,EACJvb,aAAa,KAAK,SAAS,IAAI6K,KAAK,GAClCyN,6BAAC+B,WAAW;MAACmB,GAAG,EAAE3Q,KAAK,CAAC3F;MAAS,GAEjCoT,6BAACkC,gBAAgB,OAClB;IAEHiB,MAAM,EAAER,UAAU;IAClB5Q,IAAI,EAAC,OAAO;IACZqR,KAAK,EAAC,OAAO;IACbR,KAAK,EAAE;MAAES,WAAW,EAAE;;KACrB3b,aAAa,KAAK,SAAS,IAAI6K,KAAK,GAAGA,KAAK,CAACvN,MAAM,GAAG,OAAO,CACvD,EACR4a,KAAK,CAAClT,IAAI,KAAK,MAAM,GACpBsT,6BAACuD,YAAS;IACR7W,IAAI,EAAC,QAAQ;IACbqF,IAAI,EAAC,OAAO;IACZyR,SAAS;IACTC,WAAW,EAAC,GAAG;IACfb,KAAK,EAAE;MACLhC,KAAK,EAAE,KAAK;MACZjP,QAAQ,EAAE,UAAU;MACpBkQ,eAAe,EAAE;KAClB;IACDsB,MAAM,EACJnD;MAAM4C,KAAK,EAAE;QAAEjR,QAAQ,EAAE,UAAU;QAAE+R,KAAK,EAAE,KAAK;QAAEC,MAAM,EAAE;;OACzD3D,6BAACe,aAAU;MAACX,OAAO,EAAC;WAAejW,cAAc,CAACkJ,aAAa,GAAG,CAAc,CAC3E;IAETqL,KAAK,EAAEkB,KAAK,CAAC3K,WAAW,IAAI,EAAE;IAC9B2O,QAAQ,EACNhE,KAAK,CAAClT,IAAI,KAAK,MAAM,GAChBmX,KAAK;MACJjE,KAAK,CAACkE,cAAc,CAACD,KAAK,CAACE,MAAM,CAACrF,KAAK,CAAC;KACzC,GACDsF;IAEN,GAEFhE,6BAACoC,eAAe,QACdpC,6BAACe,aAAU;IAACX,OAAO,EAAC;KACjBrc,SAAS,QAAQoG,cAAc,CAACyV,KAAK,CAACnI,YAAY,GAAG,GAAGxC,WAAW,GAAG,GAAG,GAAG,GAAG,CACrE,EACb+K;IAAM4C,KAAK,EAAE;MAAEjR,QAAQ,EAAE,UAAU;MAAE+R,KAAK,EAAE,KAAK;MAAEC,MAAM,EAAE;;KACzD3D,6BAACe,aAAU;IAACX,OAAO,EAAC;SAAejW,cAAc,CAC/CyV,KAAK,CAACtM,cAAc,GACnB,CAAc,CACZ,CAEV,CACG,CACI,CACR;AAEV;;ACrNA,MAAMqO,WAAS,gBAAGlC,YAAM,CAAC,KAAK,EAAE;EAC9BC,OAAO,EAAE,MAAM;EACfkB,KAAK,EAAE,MAAM;EACbF,cAAc,EAAE,KAAK;EACrBC,UAAU,EAAE,QAAQ;EACpBsD,UAAU,EAAE;CACb,CAAC;AAEF,MAAMC,IAAI,gBAAGzE,YAAM,CAAC,KAAK,EAAE;EACzB0E,IAAI,EAAE,aAAa;EACnBvD,KAAK,EAAE,KAAK;EACZwD,MAAM,EAAE;CACT,CAAC;AAEF,MAAMC,YAAY,gBAAG5E,YAAM,CAAC,GAAG,EAAE;EAC/BC,OAAO,EAAE,MAAM;EACfgB,cAAc,EAAE,QAAQ;EACxBC,UAAU,EAAE,QAAQ;EACpB2D,cAAc,EAAE;CACjB,CAAC;AAEF,SAAgBC,UAAUA;EACxB,OACEvE,6BAAC2B,WAAS,QACR3B,6BAACe,aAAU;IAACX,OAAO,EAAC;kBAAiC,EACrDJ,6BAACqE,YAAY;IAACG,IAAI,EAAC,wBAAwB;IAACT,MAAM,EAAC;KACjD/D,6BAACkE,IAAI;IAACO,KAAK,EAAC,4BAA4B;IAACC,OAAO,EAAC;KAC/C1E,0CAAa,EACbA;IAAG1J,EAAE,EAAC,SAAS;iBAAW;KACxB0J;IAAG1J,EAAE,EAAC,WAAW;iBAAW;KAC1B0J;IAAM2E,CAAC,EAAC;IAAqzB,EAC7zB3E;IAAM2E,CAAC,EAAC;IAA+L,CACrM,CACF,CACC,EACP3E,6BAACe,aAAU;IAACX,OAAO,EAAC;aAA0B,CACjC,CACL;AAEhB;;SCtCgBwE,cAAcA,CAAA/R,IAAA;MAAC;IAAEgS;GAA0B,GAAAhS,IAAA;EACzD,MAAMiL,WAAW,GAAGC,YAAM,CAAC,IAAI,CAAC;EAChC,MAAM,CAACJ,YAAY,EAAEK,eAAe,CAAC,GAAGC,8BAAe,EAAE;EACzD,MAAMxG,YAAY,GAAGkE,iBAAiB,CAACzV,GAAG,CAACuR,YAAY,EAAE;EAEzD8G,eAAS,CAAC;IACR,IAAI,CAACT,WAAW,CAACpN,OAAO,EAAE;MACxB,MAAMmO,eAAe,GAAGlB,YAAY,CAAC4B,GAAG,CAACnC,YAAY,CAAC6B,UAAU,CAAC;MACjE,MAAMH,eAAe,GAAGnB,YAAY,CAAC4B,GAAG,CAACnC,YAAY,CAAC8B,UAAU,CAAC;MACjE,MAAMH,aAAa,GAAGpB,YAAY,CAAC4B,GAAG,CAACnC,YAAY,CAAC+B,QAAQ,CAAC;MAC7D,MAAMH,aAAa,GAAGrB,YAAY,CAAC4B,GAAG,CAACnC,YAAY,CAACgC,QAAQ,CAAC;MAC7DpB,eAAe,CAAC;QACd,IAAIe,aAAa,IAAI;UAAE,CAAC3B,YAAY,CAAC6B,UAAU,GAAGF;SAAe,CAAC;QAClE,IAAIC,aAAa,IAAI;UAAE,CAAC5B,YAAY,CAAC8B,UAAU,GAAGF;SAAe,CAAC;QAClE,IAAIH,eAAe,IAAI;UAAE,CAACzB,YAAY,CAAC+B,QAAQ,GAAGN;SAAiB,CAAC;QACpE,IAAIC,eAAe,IAAI;UAAE,CAAC1B,YAAY,CAACgC,QAAQ,GAAGN;SAAiB,CAAC;QACpE,IAAIrH,YAAY,IAAI;UAAE,CAAC2F,YAAY,CAACiC,WAAW,GAAG5H,YAAY,CAAC1N,QAAQ;SAAI;OAC5E,CAAC;KACH,MAAM;MACL+T,WAAW,CAACpN,OAAO,GAAG,KAAK;;GAE9B,EAAE,CAACmU,KAAK,CAAC,CAAC;EAEX,OAAO,IAAI;AACb;;AC3BO,MAAMC,MAAM,gBAAGrF,SAAM,CAAC,KAAK,EAAE;EAClCC,OAAO,EAAE,MAAM;EACfgC,aAAa,EAAE,QAAQ;EACvBd,KAAK,EAAE,MAAM;EACbqD,UAAU,EAAE;CACb,CAAC;;ACPK,MAAMc,aAAa,GAAG;EAC3BC,kBAAkB,EAAE;CACrB;;ACkCD,MAAMrD,WAAS,gBAAGlC,SAAM,CAAC,KAAK,EAAE;EAC9BC,OAAO,EAAE,MAAM;EACfgC,aAAa,EAAE,QAAQ;EACvBhB,cAAc,EAAE,QAAQ;EACxBC,UAAU,EAAE;CACb,CAAC;AAEF,MAAMsE,qBAAqB,gBAAGxF,SAAM,CAAC,KAAK,EAAE;EAC1CC,OAAO,EAAE,MAAM;EACfgB,cAAc,EAAE,QAAQ;EACxBC,UAAU,EAAE,QAAQ;EACpBhP,QAAQ,EAAE,UAAU;EACpBuT,GAAG,EAAE;CACN,CAAC;AAEF,MAAMC,kBAAkB,gBAAG1F,SAAM,CAAC,KAAK,EAAE;EACvCmB,KAAK,EAAE,MAAM;EACbqD,UAAU,EAAE;CACb,CAAC;AAEF,MAAMmB,MAAM,gBAAG3F,SAAM,CAAC,KAAK,EAAE;EAC3BmB,KAAK,EAAE,MAAM;EACbqD,UAAU,EAAE;CACb,CAAC;AAEF,SAAgBoB,IAAIA;EAClB,MAAMC,aAAa,GAAG,EAAE;EACxB,MAAMC,iBAAiB,GAAGC,iCAAkB,EAAE;EAC9C,MAAM1F,QAAQ,GAAGC,0BAAW,EAAE;EAC9B,MAAM,CAAC8E,KAAK,EAAEY,QAAQ,CAAC,GAAGC,cAAQ,CAAC,CAAC,CAAC;EACrC,MAAMrjB,SAAS,GAAGsZ,iBAAiB,CAACzV,GAAG,CAAC7D,SAAS,EAAE;EACnD,MAAMC,SAAS,GAAGqZ,iBAAiB,CAACzV,GAAG,CAAC5D,SAAS,EAAE;EACnD,MAAMC,OAAO,GAAGoZ,iBAAiB,CAACzV,GAAG,CAAC3D,OAAO,EAAE;EAC/C,MAAMC,OAAO,GAAGmZ,iBAAiB,CAACzV,GAAG,CAAC1D,OAAO,EAAE;EAC/C,MAAMqZ,YAAY,GAAGF,iBAAiB,CAACzV,GAAG,CAAC2V,YAAY,EAAE;EACzD,MAAMC,YAAY,GAAGH,iBAAiB,CAACzV,GAAG,CAAC4V,YAAY,EAAE;EACzD,MAAMC,UAAU,GAAGJ,iBAAiB,CAACzV,GAAG,CAAC6V,UAAU,EAAE;EACrD,MAAMC,UAAU,GAAGL,iBAAiB,CAACzV,GAAG,CAAC8V,UAAU,EAAE;EACrD,MAAM3I,aAAa,GAAGsI,iBAAiB,CAACzV,GAAG,CAACmN,aAAa,EAAE;EAC3D,MAAM4B,WAAW,GAAG0G,iBAAiB,CAACzV,GAAG,CAAC+O,WAAW,EAAE;EACvD,MAAMgH,cAAc,GAAGN,iBAAiB,CAACzV,GAAG,CAAC+V,cAAc,EAAE;EAC7D,MAAMxE,YAAY,GAAGkE,iBAAiB,CAACzV,GAAG,CAACuR,YAAY,EAAE;EACzD,MAAMnE,cAAc,GAAGqI,iBAAiB,CAACzV,GAAG,CAACoN,cAAc,EAAE;EAC7D,MAAMvP,SAAS,GAAG4X,iBAAiB,CAACzV,GAAG,CAACnC,SAAS,EAAE;EACnD,MAAM0D,MAAM,GAAGP,YAAY,CAAChB,GAAG,CAACmB,IAAI,EAAE,CAACI,MAAM;EAC7C,MAAMke,iBAAiB,GAAGhK,iBAAiB,CAACzV,GAAG,CAACyJ,OAAO,EAAE;EACzD,MAAMiW,cAAc,GAAGjK,iBAAiB,CAACzV,GAAG,CAACsC,KAAK,EAAE;EAEpD,MAAMiM,iBAAiB,GAAGvN,YAAY,CAAChB,GAAG,CAACwB,aAAa,EAAE;EAC1D,MAAMwF,QAAQ,GAAG8T,eAAe,CAAC9a,GAAG,CAACgH,QAAQ,EAAE;EAE/C,MAAM2Y,cAAc,GAAGA;IACrBhK,YAAY,CAACtZ,OAAO,CAAC;IACrBuZ,YAAY,CAACtZ,OAAO,CAAC;IACrBuZ,UAAU,CAAC1Z,SAAS,CAAC;IACrB2Z,UAAU,CAAC1Z,SAAS,CAAC;IACrB2Z,cAAc,CAACxE,YAAY,EAAE1N,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9C0b,QAAQ,CAAEK,IAAI,IAAKA,IAAI,GAAG,CAAC,CAAC;GAC7B;EAED,MAAMC,YAAY,GAChBtR,iBAAiB,KAAK,QAAQ,GAC1BsQ,aAAa,CAACC,kBAAkB,GAChCY,cAAc;EAEpB,MAAMhR,oBAAoB,GAAG,KAAK;EAElC,MAAMoR,aAAa,GACjB/Q,WAAW,KAAK,CAAC,CAAClR,SAAS,IAAI4hB,iBAAiB,IAAIC,cAAc,CAAC;EAErE,MAAMK,YAAY,GAAG7S,cAAc,CAACC,aAAa,EAAEC,cAAc,CAAC;EAElE,MAAMoB,aAAa,GAAGhB,qBAAqB,CAACL,aAAa,EAAE4S,YAAY,CAAC;EAExE,MAAM;IAAE3R,oBAAoB;IAAEC,cAAc;IAAE5P;GAAM,GAClD0P,iBAAiB,CAACtQ,SAAS,CAAC;EAE9B,MAAM4Q,2BAA2B,GAAG,CAACK,qBAAqB,CACxDjR,SAAS,EACTkR,WAAW,EACX5B,aAAa,EACbC,cAAc,CACf;EAED,MAAM4S,eAAe,GAAG1R,kBAAkB,CACxCC,iBAAiB,EACjBvH,QAAQ,EACRyY,iBAAiB,EACjB5hB,SAAS,EACT6P,aAAa,CAAC7P,SAAS,CAAC,EACxB2Q,aAAa,EACbC,2BAA2B,EAC3BC,oBAAoB,CACrB;EAED,MAAMkE,aAAa,GAAGG,gBAAgB,CAAClV,SAAS,EAAE0D,MAAM,CAAC;EAEzD,MAAM0e,OAAO,GAAGhN,UAAU,CAACL,aAAa,CAAC;EAEzC,OACEkH,6BAAC2B,WAAS,QACR3B,6BAACc,MAAM;IAACjB,cAAc,EAAExD;IAAkB,EAC1C2D,6BAACyC,SAAS;IACR/V,IAAI,EAAC,MAAM;IACXhH,KAAK,EAAErD,SAAS;IAChBkQ,KAAK,EAAEjQ,SAAS;IAChBwhB,cAAc,EAAE7H,cAAc;IAC9BhH,WAAW,EAAEA;IACb,EACF+K,6BAACiF,qBAAqB,QACpBjF,6BAACG,SAAM;IAACC,OAAO,EAAC,OAAO;IAACC,OAAO,EAAEwF;KAC/B7F,6BAACoG,mBAAgB;IAACrU,IAAI,EAAE;IAAM,EAC7BwT,iBAAiB,IAAIvF,6BAAC4E,cAAc;IAACC,KAAK,EAAEA;IAAS,CAC/C,CACa,EACxB7E,6BAACyC,SAAS;IACR/V,IAAI,EAAC,IAAI;IACThH,KAAK,EAAEnD,OAAO;IACdgQ,KAAK,EAAE/P,OAAO;IACdiV,YAAY,EAAEA,YAAY;IAC1BnE,cAAc,EAAEA;IAChB,EACD0S,aAAa,IACZhG,6BAACmF,kBAAkB,QACjBnF,6BAACqG,YAAS;IACR7d,KAAK,EAAEod,cAAc;IACrBjW,OAAO,EAAEgW,iBAAiB;IAC1Bva,IAAI,EAAErH,SAAS;IACfmV,QAAQ,EAAE/O,cAAc,CAAC2O,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7CwN,UAAU,EAAEH,OAAO;IACnBI,SAAS,EAAE1c,eAAe,CAACsB,gBAAgB,CAACpH,SAAS,CAAC;IACtD,CAEL,EACA,CAACgiB,YAAY,IAAIT,aAAa,IAAI1R,aAAa,CAAC7P,SAAS,CAAC,KACzDic,6BAACoF,MAAM,QACJW,YAAY,IACX/F,6BAACwG,QAAK;IAAC9Z,IAAI,EAAC;KACTsT,6BAACe,aAAU;IAACX,OAAO,EAAC;KAAS2F,YAAY,CAAc,CAE3D,EACAnS,aAAa,CAAC7P,SAAS,CAAC,IACvBic,6BAACwG,QAAK;IAAC9Z,IAAI,EAAC,OAAO;IAACmI,KAAK,KAAKlQ,IAAI,EAAEC;KAClCob,4DACEA,6BAACe,aAAU;IAACX,OAAO,EAAC;KAAS9L,oBAAoB,CAAc,EAC/D0L,wCAAM,EACNA,6BAACe,aAAU;IAACX,OAAO,EAAC;gBACVjW,cAAc,CAACxF,IAAI,EAAEwP,UAAU,IAAI,IAAI,CAAC,EAC/CxP,IAAI,EAAEtB,IAAI,CAAC2B,MAAM,CACP,EACbgb,wCAAM,EACNA,6BAACe,aAAU;IAACX,OAAO,EAAC;KAAS7L,cAAc,CAAc,CACxD,CAEN,EACA+Q,aAAa,CAIb,CAEJ,EACDtF,6BAAC8E,MAAM,QACL9E,6BAACG,SAAM;IACLzT,IAAI,EAAC,SAAS;IACd0W,KAAK,EAAC,MAAM;IACZrR,IAAI,EAAC,OAAO;IACZ+C,QAAQ,EAAEoR,eAAe,CAACpR,QAAQ;IAClCuL,OAAO,EAAEA;MACP,IAAI6F,eAAe,CAACrR,KAAK,KAAK,gBAAgB,EAC5CiL,QAAQ,CAAC3d,gBAAgB,CAACS,OAAO,CAAC,CAAC,KAChC;QACHkd,QAAQ,CAAC3d,gBAAgB,CAACW,cAAc,EAAE;UAAE0O,OAAO,EAAE;SAAM,CAAC;;;KAI/D0U,eAAe,CAACrR,KAAK,CACf,EACTmL,6BAACuE,UAAU,OAAG,CACP,CACC;AAEhB;;AC/MA,MAAMkC,KAAK,GAAc7G,KAAwB;EAC/C,MAAM1B,QAAQ,GAAGC,uBAAW,EAAE;EAC9B,MAAM2B,QAAQ,GAAGC,uBAAW,EAAE;EAC9B,MAAM2G,GAAG,GAAG3I,YAAM,CAAC,IAAI,CAAC;EAExBQ,eAAS,CAAC;IACR,IACE,CAACpc,gBAAgB,CAACW,cAAc,EAAEX,gBAAgB,CAACU,WAAW,CAAC,CAACsF,QAAQ,CACtE+V,QAAQ,CAACU,QAAQ,CAClB,IACD8H,GAAG,CAAChW,OAAO,EAEXoP,QAAQ,CAAC3d,gBAAgB,CAACC,IAAI,GAAG8b,QAAQ,CAACG,MAAM,EAAE;MAAEjV,KAAK,EAAE;KAAY,CAAC;IAE1Esd,GAAG,CAAChW,OAAO,GAAG,KAAK;GACpB,EAAE,EAAE,CAAC;EAEN,IACE,CAACvO,gBAAgB,CAACW,cAAc,EAAEX,gBAAgB,CAACU,WAAW,CAAC,CAACsF,QAAQ,CACtE+V,QAAQ,CAACU,QAAQ,CAClB,IACD8H,GAAG,CAAChW,OAAO,EAEX,OAAOsP,6BAACqF,IAAI,OAAG;EAEjB,OAAOrF,iEAAIJ,KAAK,CAAC+G,QAAQ,CAAI;AAC/B,CAAC;AAED,SAAgBC,SAASA,CAAA/T,IAAA;MAAC;IAAE8T;GAA6B,GAAA9T,IAAA;EACvD,MAAM0S,iBAAiB,GAAGC,8BAAkB,EAAE;EAC9C,MAAMqB,MAAM,GAAGtB,iBAAiB,GAAGkB,KAAK,GAAGK,wBAAY;EAEvD,OACE9G,4DACEA,6BAAC6G,MAAM,QAAEF,QAAQ,CAAU,EAC1BpB,iBAAiB,IAAIvF,6BAACnC,SAAS,OAAG,CAClC;AAEP;;AC5CA,MAAMkJ,YAAY,gBAAGtH,SAAM,CAACU,SAAM,EAAE;EAClC6G,SAAS,EAAE;CACZ,CAAC;AAEF,SAAgBC,oBAAoBA;EAClC,MAAMnH,QAAQ,GAAGC,0BAAW,EAAE;EAE9B,OACEC,6BAAC+G,YAAY;IACXra,IAAI,EAAC,SAAS;IACd0T,OAAO,EAAC,WAAW;IACnBrO,IAAI,EAAC,OAAO;IACZsO,OAAO,EAAEP,QAAQ,CAAC7C,IAAI,CAAC,IAAI,EAAE9a,gBAAgB,CAACM,QAAQ;uBAGzC;AAEnB;;SCdgBykB,mBAAmBA,CAACtH,KAAgB;EAClD,MAAM;IAAEuH;GAAkB,GAAGvH,KAAK;EAElC,OACEI,6BAACwG,QAAK;IAAC9Z,IAAI,EAAC;KACVsT,6BAACe,aAAU;IAACX,OAAO,EAAC;6DAEjB+G,gBAAgB,qCACjBnH,6BAACiH,oBAAoB,OAAG,CACb,CACP;AAEZ;;SCZgBG,wBAAwBA,CAACxH,KAAgB;EACvD,MAAM;IAAEuH;GAAkB,GAAGvH,KAAK;EAClC,MAAMyH,YAAY,GAAGF,gBAAgB,IAAIpgB,aAAa;EAEtD,OAAOiZ,4DAAGqH,YAAY,IAAIrH,6BAACkH,mBAAmB;IAACC,gBAAgB,EAAEA;IAAoB,CAAI;AAC3F;;SCVgBG,eAAeA;EAC7B,MAAM/B,iBAAiB,GAAGC,iCAAkB,EAAE;EAC9C,MAAM1F,QAAQ,GAAGC,0BAAW,EAAE;EAI9B,MAAMwH,gBAAgB,GAAIC,YAAoB;IAC5C,IACE,CAACjC,iBAAiB,IACjBkC,MAAM,CAACC,OAAO,CAACte,KAAK,IAAIqe,MAAM,CAACC,OAAO,CAACte,KAAK,CAACue,GAAG,GAAG,CAAE,EAEtD7H,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KACV;MACH,IACE,CACE3d,gBAAgB,CAACE,SAAS,EAC1BF,gBAAgB,CAACG,SAAS,EAC1BH,gBAAgB,CAACI,OAAO,EACxBJ,gBAAgB,CAACK,OAAO,EACxBL,gBAAgB,CAACM,QAAQ,EACzBN,gBAAgB,CAACS,OAAO,EACxBT,gBAAgB,CAACQ,KAAK,EACtBR,gBAAgB,CAACW,cAAc,CAChC,CAACqF,QAAQ,CAACqf,YAAY,CAAC,EAExB1H,QAAQ,CAAC3d,gBAAgB,CAACC,IAAI,EAAE;QAAEoP,OAAO,EAAE;OAAM,CAAC,CAAC,KAChD,IAAIgW,YAAY,KAAKrlB,gBAAgB,CAACO,gBAAgB,EACzDod,QAAQ,CAAC3d,gBAAgB,CAACM,QAAQ,EAAE;QAAE+O,OAAO,EAAE;OAAM,CAAC,CAAC,KACpD,IAAIgW,YAAY,KAAKrlB,gBAAgB,CAACY,WAAW,EACpD+c,QAAQ,CAAC3d,gBAAgB,CAACQ,KAAK,EAAE;QAAE6O,OAAO,EAAE;OAAM,CAAC,CAAC,KACjD,IAAIgW,YAAY,KAAKrlB,gBAAgB,CAACU,WAAW,EACpDid,QAAQ,CAAC3d,gBAAgB,CAACW,cAAc,EAAE;QAAE0O,OAAO,EAAE;OAAM,CAAC;;GAEjE;EAED,OAAO;IAAE+V;GAAkB;AAC7B;;ACCO,MAAMK,mBAAmB,gBAAG7hB,eAAe,eAChDoB,cAAM,EAAoB,eACxBwB,gCAAqB,CAAC,OAAO;EAC3BgH,OAAO,EAAE,KAAK;EACdkY,MAAM,EAAE,EAAE;EACVC,QAAQ,EAAE,EAAE;EACZC,aAAa,EAAE;CAChB,CAAC,CAAC,CACJ,CACF;AAED,AAAA,IAAYC,qBAKX;AALD,WAAYA,qBAAqB;EAC/BA,yEAAQ;EACRA,6HAAkC;EAClCA,qFAAc;EACdA,mGAAqB;AACvB,CAAC,EALWA,qBAAqB,KAArBA,qBAAqB;AAuCjC,AAAA,IAAYC,uBAMX;AAND,WAAYA,uBAAuB;EACjCA,uFAAa;EACbA,yGAAsB;EACtBA,mGAAmB;EACnBA,2HAA+B;EAC/BA,qGAAoB;AACtB,CAAC,EANWA,uBAAuB,KAAvBA,uBAAuB;AAQnC,AAAO,MAAMplB,WAAW,GAAG;EACzB,MAAM;IACJP,SAAS;IACTE,OAAO;IACPyS,WAAW;IACXlR,SAAS,EAAEmkB,YAAY;IACvB7U,aAAa;IACbuI;GACD,GAAGD,iBAAiB,CAACrV,QAAQ,EAAE;EAChC,MAAM;IAAE4G,QAAQ;IAAE2B;GAAiB,GAAGmS,eAAe,CAAC1a,QAAQ,EAAE;EAChE,MAAM;IAAEyhB;GAAe,GAAGH,mBAAmB,CAACthB,QAAQ,EAAE;EACxD,MAAM;IAAEyC,wBAAwB;IAAEH,QAAQ;IAAEC;GAAgB,GAC1DJ,gBAAgB,CAACnC,QAAQ,EAAE;EAC7B,MAAM;IAAEe;GAAM,GAAGH,YAAY,CAACZ,QAAQ,EAAE;EAExC,MAAMkT,YAAY,GAAG3Q,cAAc,IAAID,QAAQ;EAE/C,IAAI,CAACtG,SAAS,IAAI,CAACE,OAAO,IAAI,CAACyS,WAAW,IAAI,CAACiT,YAAY,EAAE;EAE7D,IAAIH,aAAc,EAAE;IAClB,MAAMI,YAAY,GAAwB;MACxCvf,QAAQ,EAAE4Q,YAAY,CAACzP,QAAQ,EAAE;MACjCqe,sBAAsB,EAAErf;KACzB;IAED,MAAMsf,OAAO,GAAGnT,oBAAoB,CAClCD,WAAW,CAAClL,QAAQ,EAAE,EACtBme,YAAY,EACZ/N,oBAAoB,CAACtL,eAAe,CAAC,EACrCsZ,YAAY,EACZ,KAAK,EACL9gB,IAAI,CACL;IAEDihB,OAAO,CAACC,GAAG,CAAC,WAAW,EAAEF,OAAO,CAAC;;IAIjCT,mBAAmB,CAACpL,QAAQ,CAAC;MAC3BqL,MAAM,EAAE,EAAE;MACVC,QAAQ,EAAE,EAAE;MACZC,aAAa,EAAE;KAChB,CAAC;IAEF,OAAOM,OAAO;;EAGhB,IAAIjM,eAAe,GAA2B,IAAIG,eAAe,EAAE;EAEnEqL,mBAAmB,CAACpL,QAAQ,CAAC;IAAE7M,OAAO,EAAE;GAAM,CAAC;EAE/C,MAAMqK,WAAW,GAAGN,0BAA0B,CAC5CpX,SAAS,EACTE,OAAO,EACPyS,WAAW,EACX/H,QAAQ,EACR2B,eAAe,EACf9F,wBAAwB,EACxByQ,YAAY,EACZ,IAAI,CACL;EACD,MAAMgP,6BAA6B,GAAG7M,iBAAiB,CAACqB,SAAS,CAC9D5T,KAAK,IAAKA,KAAK,CAACrF,SAAS,EAC1B;IACEqY,eAAe,CAACE,KAAK,EAAE;GACxB,EACD;IAAEY,UAAU,EAAEuL;GAAS,CACxB;EACD,MAAMC,2BAA2B,GAAG1H,eAAe,CAAChE,SAAS,CAC1D5T,KAAK,IAAKA,KAAK,CAACyF,eAAe,EAChC;IACEuN,eAAe,EAAEE,KAAK,EAAE;GACzB,EACD;IACEY,UAAU,EAAEA,CAACC,SAAS,EAAE/T,KAAK;MAC3B,MAAMuf,sBAAsB,GAAG,CAACvf,KAAK,CAACzF,KAAK,CACxCgC,MAAM,IACL,CAAC,CAACwX,SAAS,CAAC5X,IAAI,CACbqjB,UAAU,IACTjjB,MAAM,CAACC,OAAO,KAAKgjB,UAAU,CAAChjB,OAAO,IACrCD,MAAM,CAACD,KAAK,KAAKkjB,UAAU,CAACljB,KAAK,CACpC,CACJ;MAED,IAAIijB,sBAAsB,EAAE,OAAO,KAAK,CAAC,KACpC,OAAO,IAAI;;GAEnB,CACF;EAED,MAAMN,OAAO,GAAmC,MAAM7hB,WAAW,CAC9DiW,YAAY,CAACzC,WAAW,EAAE;IAAE0C,MAAM,EAAEN,eAAe,CAACM;GAAQ,CAAC,CAC7DC,IAAI,CAAEkM,eAAe;IACpBjB,mBAAmB,CAACpL,QAAQ,CAAC;MAAE7M,OAAO,EAAE;KAAO,CAAC;IAEhD,IACE,CAACkZ,eAAe,CAAC7kB,MAAM,IACvB,CAAC,IAAIf,kBAAS,CAAC4lB,eAAe,CAACC,aAAa,CAAC,CAAC5d,SAAS,CACrD,IAAIjI,kBAAS,CAACgS,WAAW,IAAI,IAAI,CAAC,CACnC,EACD;MACA2S,mBAAmB,CAACpL,QAAQ,CAAEW,SAAS,KAAM;QAC3C0K,MAAM,EAAE1K,SAAS,CAAC0K,MAAM,CAACle,MAAM,CAAC;UAC9B+C,IAAI,EAAEsb,qBAAqB,CAACe;SAC7B;OACF,CAAC,CAAC;MACH,OAAO/E,SAAS;;IAGlB,MAAMnhB,WAAW,GAA8B;MAC7C8M,OAAO,EAAE,KAAK;MACdkY,MAAM,EAAE,EAAE;MACVC,QAAQ,EAAE,EAAE;MACZC;KACD;IAED,MAAMiB,YAAY,GAAG9jB,cAAc,CAACgjB,YAAY,EAAEW,eAAgB,CAAC;IAEnE,IAAIG,YAAY,EAAE;MAChBpN,YAAY,CAACiN,eAAe,CAAC;MAC7B,MAAMI,sBAAsB,GAAG,IAAIhmB,kBAAS,CAC1C4lB,eAAe,CAAC7kB,MAAM,EAAEyT,YAAY,IAAI,GAAG,CAC5C,CAACtG,YAAY,CAAC3O,OAAO,CAAC0B,QAAQ,IAAI,CAAC,CAAC;MAErC,MAAMyP,WAAW,GAAGP,cAAc,CAChCC,aAAa,EACb4V,sBAAsB,CACvB;MACD,MAAMvU,aAAa,GAAGhB,qBAAqB,CAACL,aAAa,EAAEM,WAAW,CAAC;MAEvE,IAAIxP,sBAAsB,CAAC+jB,YAAY,EAAEW,eAAe,CAAC,EACvDhmB,WAAW,CAACilB,QAAQ,CAACra,IAAI,CAAC;QACxBf,IAAI,EAAEub,uBAAuB,CAACiB;OAC/B,CAAC,CAAC,KACA,IAAI1kB,sBAAsB,CAAC0jB,YAAY,EAAEW,eAAe,CAAC,EAC5DhmB,WAAW,CAACilB,QAAQ,CAACra,IAAI,CAAC;QACxBf,IAAI,EAAEub,uBAAuB,CAACkB;OAC/B,CAAC,CAAC,KACArkB,2BAA2B,CAACojB,YAAY,EAAEW,eAAe,CAAC;MAC/DhmB,WAAW,CAACilB,QAAQ,CAACra,IAAI,CAAC;QACxBf,IAAI,EAAEub,uBAAuB,CAACmB;OAC/B,CAAC;MACF,IAAI1U,aAAa,EACf7R,WAAW,CAACglB,MAAM,CAACpa,IAAI,CAAC;QACtBf,IAAI,EAAEsb,qBAAqB,CAACqB;OAC7B,CAAC,CAAC,KACA,IAAI7O,yBAAyB,CAAC0N,YAAY,EAAEW,eAAe,CAAC,EAC/DhmB,WAAW,CAACilB,QAAQ,CAACra,IAAI,CAAC;QACxBf,IAAI,EAAEub,uBAAuB,CAACqB,+BAA+B;QAC7D1O,eAAe,EAAEzQ,cAAc,CAC7BiQ,oBAAoB,CAACyO,eAAe,CAAC,CACtC;QACDhO,gBAAgB,EAAE1Q,cAAc,CAC9BkQ,mBAAmB,CACjBD,oBAAoB,CAAC8N,YAAY,CAAC,EAClC9N,oBAAoB,CAACyO,eAAe,CAAC,CACtC,EACD,IAAI,EACJ,CAAC;OAEJ,CAAC;;IAGN,MAAMU,eAAe,GAAGxO,kBAAkB,CACxC8N,eAAe,EACfha,eAAe,CAChB;IACD,MAAM2a,aAAa,GAAGD,eAAe,CAAC7lB,MAAM,KAAK,CAAC;IAElD,IAAI,CAAC8lB,aAAa,EAChB3mB,WAAW,CAACilB,QAAQ,CAACra,IAAI,CAAC;MACxBf,IAAI,EAAEub,uBAAuB,CAACwB,oBAAoB;MAClDC,QAAQ,EAAEH;KACX,CAAC;IAEJ,MAAM9P,mBAAmB,GAAGL,sBAAsB,CAAC8O,YAAY,CAAC;IAEhE,IAAI,CAAC3O,iBAAiB,CAACC,YAAY,CAACzP,QAAQ,EAAE,EAAE0P,mBAAmB,CAAC,EAClE5W,WAAW,CAACglB,MAAM,CAACpa,IAAI,CAAC;MACtBf,IAAI,EAAEsb,qBAAqB,CAAC2B,qBAAqB;MACjDlQ;KACD,CAAC;IAEJ,MAAMmQ,QAAQ,GAAG/mB,WAAW,CAACglB,MAAM,CAACnkB,MAAM,KAAK,CAAC;IAChD,MAAMmmB,UAAU,GAAGhnB,WAAW,CAACilB,QAAQ,CAACpkB,MAAM,KAAK,CAAC;IAEpD,IACE,CAACkmB,QAAQ,IAAK,CAACA,QAAQ,IAAI7B,aAAc,MACxC8B,UAAU,IAAK,CAACA,UAAU,IAAI9B,aAAc,CAAC,EAC9C;MACA,MAAMI,YAAY,GAAwB;QACxCvf,QAAQ,EAAE4Q,YAAY,CAACzP,QAAQ,EAAE;QACjCqe,sBAAsB,EAAErf;OACzB;MAED,MAAMsf,OAAO,GAAGnT,oBAAoB,CAClCD,WAAW,CAAClL,QAAQ,EAAE,EACtB8e,eAAe,EACf1O,oBAAoB,CAACtL,eAAe,CAAC,EACrCsZ,YAAY,EACZ,KAAK,EACL9gB,IAAI,CACL;MAEDihB,OAAO,CAACC,GAAG,CAAC,WAAW,EAAEF,OAAO,CAAC;MACjC,OAAOA,OAAO;KACf,MAAM,IAAI,CAACN,aAAa,EAAE;MACzBllB,WAAW,CAACklB,aAAa,GAAG,IAAI;MAChCH,mBAAmB,CAACpL,QAAQ,CAAC3Z,WAAW,CAAC;;IAE3C,OAAOmhB,SAAS;GACjB,CAAC,CACDrH,IAAI,CAAE3Y,MAAM;IACXoY,eAAe,GAAG,IAAI;IACtBoM,6BAA6B,EAAE;IAC/BE,2BAA2B,EAAE;IAC7B,OAAO1kB,MAAM;GACd,CAAC,CACD6Y,KAAK,CAAErU,KAAK;IACX4T,eAAe,GAAG,IAAI;IACtB,IAAI5T,KAAK,CAACsU,IAAI,KAAK,cAAc,EAAE;MACjC8K,mBAAmB,CAACpL,QAAQ,CAAC;QAC3BqL,MAAM,EAAE,EAAE;QACVC,QAAQ,EAAE,EAAE;QACZnY,OAAO,EAAE,KAAK;QACdoY,aAAa,EAAE;OAChB,CAAC;MACFS,6BAA6B,EAAE;MAC/BE,2BAA2B,EAAE;;IAG/B,MAAM/S,MAAM,GAAGnN,KAAK,CAACZ,QAAQ,EAAE+N,MAAM;IAErCiS,mBAAmB,CAACpL,QAAQ,CAAEW,SAAS,KAAM;MAC3CxN,OAAO,EAAE,KAAK;MACdkY,MAAM,EAAE1K,SAAS,CAAC0K,MAAM,CAACle,MAAM,CAAC;QAC9B+C,IAAI,EAAEsb,qBAAqB,CAAC8B,cAAc;QAC1CnU;OACD;KACF,CAAC,CAAC;GACJ,CAAC;EAEJ,OAAO0S,OAAO,IAAIrE,SAAS;AAC7B,CAAC;;SC7Ue+F,mBAAmBA,CAAAlX,IAAA;MAAC;IAAE4G;GAAgC,GAAA5G,IAAA;EACpE,OACEmN,6BAACe,aAAU;IAACX,OAAO,EAAC;6EAEjB3G,mBAAmB,qBAEpBuG,6BAACiH,oBAAoB,OAAG,CACb;AAEjB;;SCZgB+C,iBAAiBA,CAACnC,MAA0B;EAC1D,OAAOA,MAAM,CAAC3W,OAAO,CAAE1I,KAAK;IAC1B,QAAQA,KAAK,CAACkE,IAAI;MAChB,KAAKsb,qBAAqB,CAACe,QAAQ;QACjC,OACE/I,6BAACe,aAAU;UAACX,OAAO,EAAC;sDAEP;MAEjB,KAAK4H,qBAAqB,CAAC8B,cAAc;QACvC,OACE9J,6BAACe,aAAU;UAACX,OAAO,EAAC;qCAClB5X,KAAK,CAACmN,MAAM,gBAAgBnN,KAAK,CAACmN,SAAS,GAAG,uBAC3B,CAAc;MAGvC,KAAKqS,qBAAqB,CAACqB,kCAAkC;QAC3D,OACErJ,6BAACe,aAAU;UAACX,OAAO,EAAC;0EAEP;MAEjB,KAAK4H,qBAAqB,CAAC2B,qBAAqB;QAC9C,OACE3J,6BAAC+J,mBAAmB;UAClBtQ,mBAAmB,EAAEjR,KAAK,CAACiR;UAC3B;MAEN;QACE,OAAO,EAAE;;GAEd,CAAC;AACJ;;SC9BgBwQ,eAAeA,CAAApX,IAAA;MAAC;IAAE6W;GAAqB,GAAA7W,IAAA;EACrD,OACEmN,0CACG0J,QAAQ,CAAChlB,GAAG,CAAEwlB,OAAO,IACpBlK,6BAACe,aAAU;IAACX,OAAO,EAAC;KAAS8J,OAAO,CACrC,CAAC,CACE;AAEV;;SCPgBC,mBAAmBA,CAACrC,QAA+B;EACjE,OAAOA,QAAQ,CAAC5W,OAAO,CAAEgZ,OAAO;IAC9B,QAAQA,OAAO,CAACxd,IAAI;MAClB,KAAKub,uBAAuB,CAACiB,aAAa;QACxC,OAAOlJ,6BAACe,aAAU;UAACX,OAAO,EAAC;qCAA4C;MACzE,KAAK6H,uBAAuB,CAACqB,+BAA+B;QAC1D,OACEtJ,6BAACe,aAAU;UAACX,OAAO,EAAC;uCAAqC8J,OAAO,CAACtP;SAClEsP,OAAO,CAACrP,4BAA4B,CAAc;MAGrD,KAAKoN,uBAAuB,CAACkB,sBAAsB;QACjD,OACEnJ,6BAACe,aAAU;UAACX,OAAO,EAAC;8CAEP;MAEjB,KAAK6H,uBAAuB,CAACmB,mBAAmB;QAC9C,OACEpJ,6BAACe,aAAU;UAACX,OAAO,EAAC;oDAEP;MAEjB,KAAK6H,uBAAuB,CAACwB,oBAAoB;QAC/C,OAAOzJ,6BAACiK,eAAe;UAACP,QAAQ,EAAEQ,OAAO,CAACR;UAAY;MACxD;QACE,OAAO,EAAE;;GAEd,CAAC;AACJ;;SCvBgBU,eAAeA;EAC7B,MAAM3M,eAAe,GAAGJ,UAAU,CAACnX,GAAG,CAACuX,eAAe,EAAE;EACxD,MAAM;IAAE8J;GAAkB,GAAGD,eAAe,EAAE;EAC9C,MAAM;IAAE+C;GAAS,GAAGC,4BAAU,EAAE;EAChC,MAAMxK,QAAQ,GAAGC,0BAAW,EAAE;EAE9B,MAAMhc,SAAS,GAAG4X,iBAAiB,CAACzV,GAAG,CAACnC,SAAS,EAAE;EAEnD,MAAM4L,OAAO,GAAGiY,mBAAmB,CAAC1hB,GAAG,CAACyJ,OAAO,EAAE;EACjD,MAAMmY,QAAQ,GAAGF,mBAAmB,CAAC1hB,GAAG,CAAC4hB,QAAQ,EAAE;EACnD,MAAMD,MAAM,GAAGD,mBAAmB,CAAC1hB,GAAG,CAAC2hB,MAAM,EAAE;EAC/C,MAAMjf,QAAQ,GAAGH,gBAAgB,CAACvC,GAAG,CAAC0C,QAAQ,EAAE;EAChD,MAAMC,cAAc,GAAGJ,gBAAgB,CAACvC,GAAG,CAAC2C,cAAc,EAAE;EAC5D,MAAMse,gBAAgB,GAAGte,cAAc,IAAID,QAAQ;EAEnD,OACEoX,6BAACuK,cAAW;IACVC,SAAS,EAAEA;MACT3nB,WAAW,EAAE,CAAC8Z,IAAI,CAAEhY,IAAI;QACtB,IAAIA,IAAI,EAAE;UACR0lB,OAAO,EAAEljB,MAAM,CAAC,MAAM,EAAE;YAAEpE,WAAW,EAAE4B;WAAM,CAAC;UAC9C8Y,eAAe,CAAC9Y,IAAI,CAAC+Q,SAAS,CAAC;UAC/BoK,QAAQ,CAAC3d,gBAAgB,CAACQ,KAAK,OAAOgC,IAAI,CAAC+Q,WAAW,EAAE;YACtDlE,OAAO,EAAE;WACV,CAAC;;OAEL,CAAC;KACH;IACDiZ,MAAM,EAAElD,gBAAgB,CAACtK,IAAI,CAAC,IAAI,EAAE9a,gBAAgB,CAACU,WAAW,CAAC;IACjEkB,SAAS,EAAEA,SAAS;IACpB4L,OAAO,EAAEA,OAAO;IAChBkY,MAAM,EAAEmC,iBAAiB,CAACnC,MAAM,CAAC;IACjCC,QAAQ,EAAEqC,mBAAmB,CAACrC,QAAQ,CAAC;IACvC4C,aAAa,EACX1K,6BAACoH,wBAAwB;MAACD,gBAAgB,EAAEA;MAAoB;IAElEwD,kBAAkB,EAChB7C,QAAQ,CAACpkB,MAAM,GAAG,CAAC,IAAImkB,MAAM,CAACnkB,MAAM,GAAG,CAAC,GACpC,iBAAiB,GACjB,eAAe;IAErBknB,qBAAqB,EAAE/C,MAAM,CAACnkB,MAAM,GAAG;IACvC;AAEN;;ACpDO,MAAMmnB,eAAe,GAAIR,OAA4B;EAC1D,MAAMrmB,MAAM,GAA6B,EAAE;EAE3CqmB,OAAO,EAAES,MAAM,EAAE,CAACpd,OAAO,CAAC,CAACqd,CAAC,EAAEzU,EAAE;IAC9B,MAAM0U,OAAO,GAAGD,CAAC,CAAC3e,IAAI,CAAC6e,UAAU,EAAiB;IAElD,IAAID,OAAO,EAAEjoB,WAAW,EAAE;MACxBiB,MAAM,CAACyJ,IAAI,CAAC;QACV6I,EAAE;QACF3R,IAAI,EAAEqmB,OAAO,EAAEjoB;OAChB,CAAC;;GAEL,CAAC;EAEF,OAAOiB,MAAM,CAACqE,IAAI,CAChB,CAACC,CAAC,EAAEC,CAAC,KAAK2iB,MAAM,CAAC3iB,CAAC,CAAC5D,IAAI,CAAC2Q,YAAY,CAAC,GAAG4V,MAAM,CAAC5iB,CAAC,CAAC3D,IAAI,CAAC2Q,YAAY,CAAC,CACpE;AACH,CAAC;;SCde6V,WAAWA;EACzB,MAAM1N,eAAe,GAAGJ,UAAU,CAACnX,GAAG,CAACuX,eAAe,EAAE;EACxD,MAAMqC,QAAQ,GAAGC,0BAAW,EAAE;EAC9B,MAAM;IAAEwH;GAAkB,GAAGD,eAAe,EAAE;EAC9C,MAAM;IAAE+C;GAAS,GAAGC,4BAAU,EAAE;EAChC,MAAMc,YAAY,GAAGP,eAAe,CAACR,OAAO,CAAC,CAAC3lB,GAAG,CAACmO,IAAA;IAAA,IAAC;MAAElO;KAAM,GAAAkO,IAAA;IAAA,OAAKlO,IAAI;IAAC;EAErE,OACEqb,6BAACqL;;;;;;IAGCjf,IAAI,EAAEgf,YAAY;IAClBE,WAAW,EAAG5V,SAAS;MACrB+H,eAAe,CAAC/H,SAAS,CAAC;MAC1BoK,QAAQ,CAAC3d,gBAAgB,CAACQ,KAAK,OAAO+S,WAAW,CAAC;KACnD;IACD+U,MAAM,EAAElD,gBAAgB,CAACtK,IAAI,CAAC,IAAI,EAAE9a,gBAAgB,CAACQ,KAAK;IAC1D;AAEN;;SCpBgB4oB,mBAAmBA;EACjC,MAAM;IAAE/jB;GAAU,GAAGN,YAAY,CAAChB,GAAG,CAACmB,IAAI,EAAE;EAC5C,MAAMoC,qBAAqB,GAAGhB,gBAAgB,CAACvC,GAAG,CAACuD,qBAAqB,EAAE;EAC1E,MAAMV,wBAAwB,GAC5BN,gBAAgB,CAACvC,GAAG,CAAC6C,wBAAwB,EAAE;EACjD,MAAMI,yBAAyB,GAC7BV,gBAAgB,CAACvC,GAAG,CAACiD,yBAAyB,EAAE;EAElD,MAAM;IAAEoe;GAAkB,GAAGD,eAAe,EAAE;EAE9C,MAAMkE,oBAAoB,GAKrB,EAAE;EACPtoB,mBAAmB,CAACsE,QAAQ,CAAC9C,GAAG,CAAE6B,CAAC,IAAKA,CAAC,CAACgD,YAAY,CAAC,CAAC,CACrD7E,GAAG,CAAE6E,YAAY;IAChB,OAAO/B,QAAQ,CAACjC,IAAI,CAAEgB,CAAC,IAAKA,CAAC,CAACgD,YAAY,KAAKA,YAAY,CAAC;GAC7D,CAAC,CACDhE,IAAI,CAAEgB,CAAC;IACN,IAAIA,CAAC,EAAE;MACL,KAAK,MAAMmG,IAAI,IAAInG,CAAC,CAACiQ,KAAK,EAAE;QAC1BgV,oBAAoB,CAAC/d,IAAI,CAAC;UACxBoH,KAAK,EAAEtO,CAAC,CAACgD,YAAY;UACrB4G,IAAI,EAAE5J,CAAC,CAAC4J,IAAI;UACZzD,IAAI;UACJqC,QAAQ,EAAE,CAAChG,wBAAwB,CAACZ,QAAQ,CAAC5B,CAAC,CAACgD,YAAY;SAC5D,CAAC;;;GAGP,CAAC;EAEJ,OACEyW,6BAACyL,2BAAwB;IACvBC,SAAS,EAAEviB,yBAAyB;IACpCiD,IAAI,EAAEof,oBAAoB;IAC1B5H,QAAQ,EAAGla,eAAe,IACxBD,qBAAqB,CAACC,eAAe,CAACmL,KAAK,CAAC;IAE9C4V,MAAM,EAAElD,gBAAgB,CAACtK,IAAI,CAAC,IAAI,EAAE9a,gBAAgB,CAACO,gBAAgB;IACrE;AAEN;;SCxCgBipB,eAAeA,CAAC/L,KAAgB;EAC9C,MAAM;IAAElT;GAAM,GAAGkT,KAAK;EAEtB,MAAM;IAAEtY;GAAa,GAAGJ,YAAY,CAAChB,GAAG,CAACmB,IAAI,EAAE;EAC/C,MAAMK,aAAa,GAAGR,YAAY,CAAChB,GAAG,CAACwB,aAAa,EAAE;EACtD,MAAMrF,SAAS,GAAGsZ,iBAAiB,CAACzV,GAAG,CAAC7D,SAAS,EAAE;EACnD,MAAME,OAAO,GAAGoZ,iBAAiB,CAACzV,GAAG,CAAC3D,OAAO,EAAE;EAC/C,MAAMsZ,YAAY,GAAGF,iBAAiB,CAACzV,GAAG,CAAC2V,YAAY,EAAE;EACzD,MAAME,UAAU,GAAGJ,iBAAiB,CAACzV,GAAG,CAAC6V,UAAU,EAAE;EACrD,MAAMD,YAAY,GAAGH,iBAAiB,CAACzV,GAAG,CAAC4V,YAAY,EAAE;EACzD,MAAME,UAAU,GAAGL,iBAAiB,CAACzV,GAAG,CAAC8V,UAAU,EAAE;EAErD,MAAM;IAAEuL;GAAkB,GAAGD,eAAe,EAAE;EAE9C,OACEtH,6BAAC4L,qBAAkB;IACjBlf,IAAI,EAAEA,IAAI,KAAK,MAAM,GAAG,QAAQ,GAAG,aAAa;IAChDN,IAAI,EAAE9E,WAAW;IACjByH,QAAQ,EAAErC,IAAI,KAAK,MAAM,GAAGrK,SAAS,GAAGE,OAAO;IAC/CmF,aAAa,EAAEA,aAAa;IAC5Bkc,QAAQ,EAAGle,KAAK;MACd,IAAIgH,IAAI,KAAK,MAAM,EAAEmP,YAAY,CAACnW,KAAK,CAAC,CAAC,KACpCqW,UAAU,CAACrW,KAAK,CAAC;MACtB,IAAIgH,IAAI,KAAK,MAAM,IAAIrK,SAAS,EAAE+F,IAAI,IAAI1C,KAAK,CAAC0C,IAAI,EAClD0T,YAAY,CAAC,IAAI,CAAC;MACpB,IAAIpP,IAAI,KAAK,IAAI,IAAInK,OAAO,EAAE6F,IAAI,IAAI1C,KAAK,CAAC0C,IAAI,EAAE4T,UAAU,CAAC,IAAI,CAAC;MAClEuL,gBAAgB,CAACplB,gBAAgB,CAACE,SAAS,CAAC;KAC7C;IACDooB,MAAM,EAAElD,gBAAgB,CAACtK,IAAI,CAAC,IAAI,EAAE9a,gBAAgB,CAACE,SAAS;IAC9D;AAEN;;SCjBgBwpB,eAAeA,CAACjM,KAAgB;EAC9C,MAAM;IAAElT;GAAM,GAAGkT,KAAK;EACtB,MAAM;IAAE2H;GAAkB,GAAGD,eAAe,EAAE;EAE9C,MAAM;IAAE7f;GAAQ,GAAGP,YAAY,CAAChB,GAAG,CAACmB,IAAI,EAAE;EAC1C,MAAMhF,SAAS,GAAGsZ,iBAAiB,CAACzV,GAAG,CAAC7D,SAAS,EAAE;EACnD,MAAME,OAAO,GAAGoZ,iBAAiB,CAACzV,GAAG,CAAC3D,OAAO,EAAE;EAC/C,MAAMD,SAAS,GAAGqZ,iBAAiB,CAACzV,GAAG,CAAC5D,SAAS,EAAE;EACnD,MAAME,OAAO,GAAGmZ,iBAAiB,CAACzV,GAAG,CAAC1D,OAAO,EAAE;EAC/C,MAAMsZ,YAAY,GAAGH,iBAAiB,CAACzV,GAAG,CAAC4V,YAAY,EAAE;EACzD,MAAME,UAAU,GAAGL,iBAAiB,CAACzV,GAAG,CAAC8V,UAAU,EAAE;EAErD,MAAM7M,OAAO,GAAG6R,eAAe,CAAC9a,GAAG,CAAC+I,QAAQ,EAAE;EAE9C,MAAM6c,sBAAsB,GAAGrkB,MAAM,CAACQ,MAAM,CAAEsK,KAAK;IACjD,IAAI7F,IAAI,KAAK,MAAM,EAAE,OAAO6F,KAAK,CAAC9M,UAAU,KAAKpD,SAAS,EAAE+F,IAAI;IAChE,OAAOmK,KAAK,CAAC9M,UAAU,KAAKlD,OAAO,EAAE6F,IAAI;GAC1C,CAAC;EAEF,MAAM2jB,iBAAiB,GAAuBD,sBAAsB,CAACpnB,GAAG,CACrE6N,KAAK;IACJ,MAAMyZ,WAAW,GAAG7hB,cAAc,CAChC,IAAIlH,kBAAS,CACX+L,oBAAoB,CAClBG,OAAO,EACPoD,KAAK,CAAC9M,UAAU,EAChB8M,KAAK,CAACvN,MAAM,EACZuN,KAAK,CAAC3M,OAAO,CACd,EAAEyJ,MAAM,IAAIrM,IAAI,CAClB,CACF;IAED,IAAIipB,aAAa,GAAG,EAAE;IACtB,IAAI1Z,KAAK,CAACrO,QAAQ,EAChB+nB,aAAa,GAAG9hB,cAAc,CAC5B,IAAIlH,kBAAS,CACX+L,oBAAoB,CAClBG,OAAO,EACPoD,KAAK,CAAC9M,UAAU,EAChB8M,KAAK,CAACvN,MAAM,EACZuN,KAAK,CAAC3M,OAAO,CACd,EAAEyJ,MAAM,IAAIrM,IAAI,CAClB,CAACmO,YAAY,CAACoB,KAAK,CAACrO,QAAQ,CAAC,CAC/B;IACH,OAAO;MACL,GAAGqO,KAAK;MACRpD,OAAO,EAAE;QACPE,MAAM,EAAE2c,WAAW,KAAK,GAAG,GAAGA,WAAW,GAAG,EAAE;QAC9CE,QAAQ,EAAED,aAAa,KAAK,GAAG,GAAGA,aAAa,GAAG;;KAErD;GACF,CACF;EAED,MAAME,eAAe,GAAGza,YAAY,CAACqa,iBAAiB,EAAErf,IAAI,EAAEyC,OAAO,CAAC;EAEtE,OACE6Q,6BAACoM,gBAAa;IACZ1f,IAAI,EAAEA,IAAI,KAAK,MAAM,GAAG,QAAQ,GAAG,aAAa;IAChDN,IAAI,EAAE+f,eAAe;IACrBpd,QAAQ,EAAErC,IAAI,KAAK,MAAM,GAAGpK,SAAS,GAAGE,OAAO;IAC/CohB,QAAQ,EAAGrR,KAAK;MACd,IAAI7F,IAAI,KAAK,MAAM,EAAEoP,YAAY,CAACvJ,KAAK,CAAC,CAAC,KACpCyJ,UAAU,CAACzJ,KAAK,CAAC;MACtBgV,gBAAgB,CAACplB,gBAAgB,CAACG,SAAS,CAAC;KAC7C;IACDmoB,MAAM,EAAElD,gBAAgB,CAACtK,IAAI,CAAC,IAAI,EAAE9a,gBAAgB,CAACG,SAAS;IAC9D;AAEN;;SChFgB+pB,YAAYA;EAC1B,MAAMzjB,QAAQ,GAAGH,gBAAgB,CAACvC,GAAG,CAAC0C,QAAQ,EAAE;EAChD,MAAMK,WAAW,GAAGR,gBAAgB,CAACvC,GAAG,CAAC+C,WAAW,EAAE;EACtD,MAAMF,wBAAwB,GAC5BN,gBAAgB,CAACvC,GAAG,CAAC6C,wBAAwB,EAAE;EACjD,MAAMF,cAAc,GAAGJ,gBAAgB,CAACvC,GAAG,CAAC2C,cAAc,EAAE;EAC5D,MAAMK,iBAAiB,GAAGT,gBAAgB,CAACvC,GAAG,CAACgD,iBAAiB,EAAE;EAClE,MAAMF,KAAK,GAAGP,gBAAgB,CAACvC,GAAG,CAAC8C,KAAK,EAAE;EAC1C,MAAMY,QAAQ,GAAGnB,gBAAgB,CAACvC,GAAG,CAAC0D,QAAQ,EAAE;EAChD,MAAM;IAAEpC;GAAU,GAAGN,YAAY,CAAChB,GAAG,CAACmB,IAAI,EAAE;EAC5C,MAAMyY,QAAQ,GAAGC,0BAAW,EAAE;EAC9B,MAAM;IAAEwH;GAAkB,GAAGD,eAAe,EAAE;EAE9C,MAAMxe,eAAe,GAAGL,gBAAgB,CAACvC,GAAG,CAAC4C,eAAe,EAAE;EAC9D,MAAMU,qBAAqB,GAAGf,gBAAgB,CAACvC,GAAG,CAACsD,qBAAqB,EAAE;EAC1E,MAAMgiB,oBAAoB,GAKrB,EAAE;EACPtoB,mBAAmB,CAACsE,QAAQ,CAAC9C,GAAG,CAAC6B,CAAC,IAAIA,CAAC,CAACgD,YAAY,CAAC,CAAC,CACnD7E,GAAG,CAAC6E,YAAY;IACf,OAAO/B,QAAQ,CAACjC,IAAI,CAACgB,CAAC,IAAIA,CAAC,CAACgD,YAAY,KAAKA,YAAY,CAAC;GAC3D,CAAC,CACDhE,IAAI,CAACgB,CAAC;IACL,IAAIA,CAAC,EAAE;MACL,KAAK,MAAMmG,IAAI,IAAInG,CAAC,CAACiQ,KAAK,EAAE;QAC1BgV,oBAAoB,CAAC/d,IAAI,CAAC;UACxBoH,KAAK,EAAEtO,CAAC,CAACgD,YAAY;UACrB4G,IAAI,EAAE5J,CAAC,CAAC4J,IAAI;UACZzD,IAAI;UACJqC,QAAQ,EAAE,CAAChG,wBAAwB,CAACZ,QAAQ,CAAC5B,CAAC,CAACgD,YAAY;SAC5D,CAAC;;;GAGP,CAAC;EAEJ,OACEyW,6BAACsM,WAAQ;IACPjT,SAAS,EAAExS,SAAS;IACpBsgB,gBAAgB,EAAEve,QAAQ;IAC1B2jB,gBAAgB,EAAE3jB,QAAQ,IAAIK,WAAW,CAACL,QAAQ,CAAC;IACnDlG,gBAAgB,EAAE8oB,oBAAoB;IACtCgB,wBAAwB,EAAEhB,oBAAoB,CAACvjB,MAAM,CAAE1B,CAAC,IAAKA,CAAC,CAACwI,QAAQ,CAAC;IACxE0d,uBAAuB,EAAE3M,QAAQ,CAAC7C,IAAI,CACpC,IAAI,EACJ9a,gBAAgB,CAACO,gBAAgB,CAClC;IACD+nB,MAAM,EAAElD,gBAAgB,CAACtK,IAAI,CAAC,IAAI,EAAE9a,gBAAgB,CAACM,QAAQ,CAAC;IAC9DoG,cAAc,EAAEA,cAAc,IAAI6jB,GAAG;IACrCC,sBAAsB,EAAEzjB,iBAAiB;IACzC0jB,WAAW,EAAE3lB,YAAY;IACzB4lB,WAAW,EAAE7lB,YAAY;IACzB8lB,aAAa,EAAE9jB,KAAK;IACpB+jB,aAAa,EAAEnjB,QAAQ;IACvBd,eAAe,EAAEA,eAAe;IAChCU,qBAAqB,EAAEA;IACvB;AAEN;;AC3DA,MAAMwjB,aAAa,gBAAGvN,SAAM,CAAC,KAAK,EAAE;EAClCC,OAAO,EAAE,MAAM;EACfuN,GAAG,EAAE,OAAO;EACZC,mBAAmB,EAAE,4BAA4B;EACjD/K,MAAM,EAAE,OAAO;EACfgL,YAAY,EAAE,UAAU;EACxBtM,OAAO,EAAE;CACV,CAAC;AAEF,MAAMuM,cAAc,gBAAG3N,SAAM,CAAC,KAAK,EAAE;EACnC4N,aAAa,EAAE;CAChB,CAAC;AACF,SAAgBC,WAAWA;EACzB,MAAM;IAAE/F;GAAkB,GAAGD,eAAe,EAAE;EAC9C,MAAM;IAAEle,KAAK;IAAEmkB,UAAU;IAAEphB,aAAa;IAAEqhB;GAAS,GAAGC,sBAAU,EAAE;EAClE,MAAM7qB,OAAO,GAAGsJ,aAAa,CAC3B9C,KAAK,EACL+C,aAAa,EACb/F,MAAM,CAACsnB,MAAM,CAACphB,wBAAU,CAAC,CAC1B;EACD,MAAM,CAACqhB,kBAAkB,EAAEC,qBAAqB,CAAC,GAAGlI,cAAQ,CAAC,EAAE,CAAC;EAChE,MAAMlI,0BAA0B,GAC9BH,UAAU,CAACnX,GAAG,CAACsX,0BAA0B,EAAE;EAE7C,MAAMqQ,cAAc,GAAG,MAAOnhB,IAAgB;IAC5C,MAAM/G,MAAM,GAAGyD,KAAK,CAACsD,IAAI,CAAC;IAC1B,IAAI;MACF,IAAIihB,kBAAkB,EAAEC,qBAAqB,CAAC,EAAE,CAAC;MACjD,IAAIjoB,MAAM,CAAC+F,SAAS,EAAE;QACpB,MAAM6hB,UAAU,CAAC7gB,IAAI,CAAC;OACvB,MAAM;QACL,MAAM8gB,OAAO,CAAC9gB,IAAI,CAAC;;KAEtB,CAAC,OAAOohB,CAAC,EAAE;MACVF,qBAAqB,CAAC,SAAS,GAAGE,CAAC,CAAC/Q,OAAO,CAAC;;GAE/C;EAEDwB,eAAS,CAAC;IACRf,0BAA0B,EAAE;IAC5B,OAAO,MAAMA,0BAA0B,EAAE;GAC1C,EAAE,EAAE,CAAC;EAEN,OACEwC,6BAAC+N,gBAAa;IACZlZ,KAAK,EAAC,eAAe;IACrBmZ,SAAS,EAAE,KAAK;IAChBvD,MAAM,EAAElD,gBAAgB,CAACtK,IAAI,CAAC,IAAI,EAAE9a,gBAAgB,CAACS,OAAO;KAE5Dod,4DACG2N,kBAAkB,IACjB3N,6BAACoN,cAAc,QACbpN,6BAACwG,QAAK;IAAC9Z,IAAI,EAAC;KACVsT,6BAACe,aAAU;IAACX,OAAO,EAAC;KAASuN,kBAAkB,CAAc,CACvD,CAEX,EACD3N,6BAACgN,aAAa,QACXpqB,OAAO,CAAC8B,GAAG,CAAC,CAACupB,IAAI,EAAE5X,KAAK,KACvB2J,6BAACkO,SAAM,oBAAKD,IAAI;IAAEtP,GAAG,EAAEtI,KAAK;IAAEgK,OAAO,EAAEwN;KACxC,CAAC,CACY,CACf,CACW;AAEpB;;SC7DgBM,kBAAkBA;EAChC,MAAMrO,QAAQ,GAAGC,0BAAW,EAAE;EAC9B,MAAM;IAAEwH;GAAkB,GAAGD,eAAe,EAAE;EAC9C,MAAMvjB,SAAS,GAAG4X,iBAAiB,CAACzV,GAAG,CAACnC,SAAS,EAAE;EAEnD,MAAM;IAAEuD;GAAa,GAAGJ,YAAY,CAAChB,GAAG,CAACmB,IAAI,EAAE;EAC/C,MAAM6F,QAAQ,GAAG8T,eAAe,CAAC9a,GAAG,CAACgH,QAAQ,EAAE;EAC/C,MAAM2B,eAAe,GAAGmS,eAAe,CAAC9a,GAAG,CAAC2I,eAAe,EAAE;EAC7D,MAAMuS,mBAAmB,GAAGJ,eAAe,CAAC9a,GAAG,CAACkb,mBAAmB,EAAE;EACrE,MAAMI,iBAAiB,GAAGR,eAAe,CAAC9a,GAAG,CAACsb,iBAAiB,EAAE;EAEjE,MAAM;IAAErV,aAAa;IAAEqhB;GAAS,GAAGC,sBAAU,EAAE;EAC/C,MAAMW,eAAe,GAAG,CAACxV,eAAe,CAAC7U,SAAS,CAAC,CAACJ,KAAK,CAAE+B,KAAK,IAC9DmJ,eAAe,CAACnK,GAAG,CAAEiB,MAAM,IAAKA,MAAM,CAACD,KAAK,CAAC,CAACyC,QAAQ,CAACzC,KAAK,CAAC,CAC9D;EAED,MAAM2oB,SAAS,GAAGtqB,SAAS,EAAEC,MAAM,EAAErB,KAAK,CAAC,CAAC,CAAC;EAC7C,MAAM2rB,QAAQ,GACZvqB,SAAS,EAAEC,MAAM,EAAErB,KAAK,CAACoB,SAAS,EAAEC,MAAM,EAAErB,KAAK,CAACe,MAAM,GAAG,CAAC,CAAC;EAE/D,MAAMyQ,UAAU,GAAG5I,aAAa,CAAC8iB,SAAS,EAAEla,UAAU,EAAE,CAAC,CAAC;EAC1D,MAAMqD,QAAQ,GAAGjM,aAAa,CAAC+iB,QAAQ,EAAE9W,QAAQ,EAAE,CAAC,CAAC;EACrD+G,eAAS,CAAC;IACR6C,mBAAmB,EAAE;GACtB,EAAE,EAAE,CAAC;EAEN,MAAMpO,iBAAiB,GAAGpE,oBAAoB,CAC5C1B,QAAQ,EACR2B,eAAe,EACf1C,aAAa,CACd;EAED,MAAMoiB,kBAAkB,GAAI5oB,MAAc;IACxC,MAAM2H,OAAO,GAAG3H,MAAiB;IACjCoN,kCAAkC,CAACC,iBAAiB,CAAC,CAACtF,OAAO,CAC1DyF,gBAA4B,IAAKqa,OAAO,GAAGra,gBAAgB,EAAE7F,OAAO,CAAC,CACvE;GACF;EAED,OACE0S,6BAACwO,iBAAc;IACb5V,eAAe,EAAErK,iBAAiB,CAACxK,SAAS,CAAC;IAC7CiP,iBAAiB,EAAEA,iBAAiB;IACpCyX,MAAM,EAAElD,gBAAgB,CAACtK,IAAI,CAAC,IAAI,EAAE9a,gBAAgB,CAACW,cAAc,CAAC;IACpE6B,IAAI,EAAEZ,SAAU;IAChBoQ,UAAU,EAAEA,UAAU;IACtBqD,QAAQ,EAAEA,QAAQ;IAClBgT,SAAS,EAAEA,MACT1K,QAAQ,CAAC3d,gBAAgB,CAACU,WAAW,EAAE;MAAE2O,OAAO,EAAE;KAAM,CAAC;IAE3DoS,QAAQ,EAAGje,MAAM,IAAK6b,iBAAiB,CAAC7b,MAAM,CAAC;IAC/CyoB,eAAe,EAAEA,eAAe;IAChCG,kBAAkB,EAAG5oB,MAAM,IAAK4oB,kBAAkB,CAAC5oB,MAAM,CAAC;IAC1D8M,mBAAmB,EAAG9M,MAAM,IAC1BoN,kCAAkC,CAACC,iBAAiB,CAAC,CAACtP,MAAM,GAAG,CAAC,GAC5D+O,mBAAmB,CAACnL,WAAW,EAAE3B,MAAM,CAAC,GACxC;IAEN;AAEN;;SC5EwB8oB,kBAAkBA,CAACC,aAAsB;EAC/D,MAAM,CAACC,QAAQ,EAAEC,SAAS,CAAC,GAAG5O,cAAK,CAAC0F,QAAQ,CAAC,KAAK,CAAC;EAEnD,MAAMmJ,UAAU,GAAG7O,cAAK,CAAC8O,WAAW,CAAEC,IAAqB;IACzDC,IAAI,CAACD,IAAI,CAAChlB,QAAQ,EAAE,CAAC;IACrB6kB,SAAS,CAAC,IAAI,CAAC;GAChB,EAAE,EAAE,CAAC;EAEN5O,cAAK,CAACzB,SAAS,CAAC;IACd,IAAI0Q,OAAuB;IAC3B,IAAIN,QAAQ,IAAID,aAAa,EAAE;MAC7BO,OAAO,GAAGC,UAAU,CAAC,MAAMN,SAAS,CAAC,KAAK,CAAC,EAAEF,aAAa,CAAC;;IAE7D,OAAO;MACLS,YAAY,CAACF,OAAO,CAAC;KACtB;GACF,EAAE,CAACN,QAAQ,EAAED,aAAa,CAAC,CAAC;EAE7B,OAAO,CAACC,QAAQ,EAAEE,UAAU,CAAU;AACxC;;SCbgBO,eAAeA;EAC7B,MAAM7R,qBAAqB,GAAGF,UAAU,CAACnX,GAAG,CAACqX,qBAAqB,EAAE;EACpE,MAAM;IAAEgK;GAAkB,GAAGD,eAAe,EAAE;EAC9C,MAAM;IAAE+C;GAAS,GAAGC,4BAAU,EAAE;EAChC,MAAM,CAACqE,QAAQ,EAAEE,UAAU,CAAC,GAAGJ,kBAAkB,CAAC,IAAI,CAAC;EAEvD,MAAMrD,YAAY,GAAGP,eAAe,CAACR,OAAO,CAAC;EAC7C,MAAMgF,YAAY,GAAGjE,YAAY,CAAC7lB,IAAI,CACpCsN,IAAA;IAAA,IAAC;MAAElO;KAAM,GAAAkO,IAAA;IAAA,OAAKlO,IAAI,CAAC+Q,SAAS,KAAK6H,qBAAqB;IACvD,EAAE5Y,IAAI;EAEP,OACEqb,6BAACsP,cAAW;IACV7E,MAAM,EAAElD,gBAAgB,CAACtK,IAAI,CAAC,IAAI,EAAE9a,gBAAgB,CAACY,WAAW,CAAC;;;IAGjEwsB,WAAW,EAAEF,YAAY;IACzBG,MAAM,EAAEX,UAAU;IAClBF,QAAQ,EAAEA,QAAQ;;IAElBc,QAAQ,EAAG/Z,SAAS,IAAK4S,OAAO,CAACC,GAAG,CAAC7S,SAAS;IAC9C;AAEN;;AClBO,MAAMga,SAAS,GAAGA,MACvBC,wBAAS,CAAC,CACR;EAAEC,IAAI,EAAEztB,gBAAgB,CAACC,IAAI;EAAEytB,OAAO,EAAE7P,6BAACqF,IAAI;CAAK,EAClD;EACEuK,IAAI,EAAEztB,gBAAgB,CAACE,SAAS;EAChCwtB,OAAO,EAAE7P,6BAAC2L,eAAe;IAACjf,IAAI,EAAC;;CAChC,EACD;EAAEkjB,IAAI,EAAEztB,gBAAgB,CAACI,OAAO;EAAEstB,OAAO,EAAE7P,6BAAC2L,eAAe;IAACjf,IAAI,EAAC;;CAAS,EAC1E;EACEkjB,IAAI,EAAEztB,gBAAgB,CAACG,SAAS,GAAG,IAAI;EACvCutB,OAAO,EAAE7P,6BAAC6L,eAAe;IAACnf,IAAI,EAAC;;CAChC,EACD;EAAEkjB,IAAI,EAAEztB,gBAAgB,CAACK,OAAO;EAAEqtB,OAAO,EAAE7P,6BAAC6L,eAAe;IAACnf,IAAI,EAAC;;CAAS,EAC1E;EAAEkjB,IAAI,EAAEztB,gBAAgB,CAACM,QAAQ;EAAEotB,OAAO,EAAE7P,6BAACqM,YAAY;CAAK,EAC9D;EACEuD,IAAI,EAAEztB,gBAAgB,CAACO,gBAAgB;EACvCmtB,OAAO,EAAE7P,6BAACuL,mBAAmB;CAC9B,EACD;EAAEqE,IAAI,EAAEztB,gBAAgB,CAACQ,KAAK;EAAEktB,OAAO,EAAE7P,6BAACmL,WAAW;CAAK,EAC1D;EACEyE,IAAI,EAAEztB,gBAAgB,CAACY,WAAW;EAClC8sB,OAAO,EAAE7P,6BAACoP,eAAe;CAC1B,EACD;EAAEQ,IAAI,EAAEztB,gBAAgB,CAACS,OAAO;EAAEitB,OAAO,EAAE7P,6BAACsN,WAAW;CAAK,EAC5D;EAAEsC,IAAI,EAAEztB,gBAAgB,CAACU,WAAW;EAAEgtB,OAAO,EAAE7P,6BAACoK,eAAe;CAAK,EACpE;EAAEwF,IAAI,EAAEztB,gBAAgB,CAACW,cAAc;EAAE+sB,OAAO,EAAE7P,6BAACmO,kBAAkB;CAAK,CAC3E,CAAC;;AC1BJ,MAAMrN,QAAM,gBAAGrB,SAAM,CAAC,KAAK,EAAE;EAC3BC,OAAO,EAAE,MAAM;EACfkB,KAAK,EAAE,MAAM;EACbF,cAAc,EAAE;CACjB,CAAC;AAEF,MAAMoP,WAAW,gBAAGrQ,SAAM,CAAC,KAAK,EAAE;EAChCmB,KAAK,EAAE,KAAK;EACZuB,MAAM,EAAE,KAAK;EACb4N,UAAU,EAAE,CAAC,EAAE;EACf1M,WAAW,EAAE,IAAI;EACjBvB,YAAY,EAAE;CACf,CAAC;AAEF,SAAgBkO,MAAMA;EACpB,MAAMlQ,QAAQ,GAAGC,0BAAW,EAAE;EAC9B,MAAM;IAAE9Q,QAAQ;IAAE/B,QAAQ;IAAE2B;GAAiB,GAAGmS,eAAe,EAAE;EACjE,MAAM;IAAE7U;GAAe,GAAGshB,sBAAU,EAAE;EACtC,MAAMwC,sBAAsB,GAAG/sB,mBAAmB,CAChD0L,oBAAoB,CAAC1B,QAAQ,EAAE2B,eAAe,EAAE1C,aAAa,CAAC,CAACzH,GAAG,CAC/DwrB,CAAC,IAAKA,CAAC,CAACtjB,KAAK,CACf,CACF;EAED,MAAMujB,YAAY,GAAG7f,uBAAuB,CAACrB,QAAQ,CAAC;EACtD,MAAMqO,4BAA4B,GAChCD,UAAU,CAACnX,GAAG,CAACoX,4BAA4B,EAAE;EAE/C,OACE0C,4DACEA,6BAACc,QAAM,QACLd,6BAACG,SAAM;IACLpO,IAAI,EAAC,OAAO;IACZoR,MAAM,EAAEnD,6BAACoQ,gBAAa;MAACre,IAAI,EAAE;MAAM;IACnCqO,OAAO,EAAC,OAAO;IACfiQ,WAAW;IACXhQ,OAAO,EAAEA;MACP,IAAI,CAAC/C,4BAA4B,EAC/BwC,QAAQ,CAAC3d,gBAAgB,CAACS,OAAO,CAAC;;KAGrCqtB,sBAAsB,EAAEvsB,MAAM,GAC7BusB,sBAAsB,CAACvrB,GAAG,CAAC,CAAC4rB,WAAW,EAAEja,KAAK,KAC5C2J,6BAAC8P,WAAW;IAACnR,GAAG,EAAEtI,KAAK;IAAE6M,GAAG,EAAEoN;IAC/B,CAAC,GAEFtQ,2DACD,EACDA,6BAACe,aAAU;IAACX,OAAO,EAAC;KACjB,CAAClT,QAAQ,EAAExJ,MAAM,GAAG,gBAAgB,OAAOysB,YAAY,IAAI,GAAG,CACpD,CACN,CACF,EACTnQ,6BAAC0P,SAAS,OAAG,CACZ;AAEP;;ACpEO,MAAMa,YAAY,gBAAGC,YAAS,CAAC;EACpC,GAAG,EAAE;IACH,sBAAsB,EAAE;MAAE5P,KAAK,EAAE;KAAM;IACvC,4BAA4B,EAAE;MAC5BiB,eAAe,EAAE;KAClB;IACD,kCAAkC,EAAE;MAClCA,eAAe,EAAE;KAClB;IACD,4BAA4B,EAAE;MAC5BA,eAAe,EAAE;;;CAGtB,CAAC;;SCVc4O,QAAQA;EACtB,MAAMznB,KAAK,GAAGP,gBAAgB,CAACvC,GAAG,CAAC8C,KAAK,EAAE;EAC1C,MAAMrB,SAAS,GAAGT,YAAY,CAAChB,GAAG,CAACyB,SAAS,EAAE;EAE9C,MAAM,CAAC+oB,OAAO,EAAEC,UAAU,CAAC,GAAGjL,cAAQ,CAACkL,aAAU,CAAC;EAClDrS,eAAS,CAAC;IACR,CAAC;MACC,MAAM5W,SAAS,EAAE;KAClB,GAAG;IAEJ,MAAMkpB,WAAW,GAAIhN,KAA0B;MAC7C,IAAIA,KAAK,CAACiN,OAAO,EAAEH,UAAU,CAACI,YAAS,CAAC,CAAC,KACpCJ,UAAU,CAACC,aAAU,CAAC;KAC5B;IAED,IAAInJ,MAAM,CAACuJ,UAAU,IAAIvJ,MAAM,CAACuJ,UAAU,CAAC,8BAA8B,CAAC,CAACF,OAAO,EAAE;MAClFH,UAAU,CAACI,YAAS,CAAC;;IAGvBtJ,MAAM,CAACuJ,UAAU,CAAC,8BAA8B,CAAC,CAACC,gBAAgB,CAAC,QAAQ,EAAEJ,WAAW,CAAC;IACzF,OAAO;MACLpJ,MAAM,CAACuJ,UAAU,CAAC,8BAA8B,CAAC,CAACE,mBAAmB,CAAC,QAAQ,EAAEL,WAAW,CAAC;KAC7F;GACF,EAAE,EAAE,CAAC;EAEN,MAAMM,cAAc,GAAGA;IACrB,IAAInoB,KAAK,KAAK,MAAM,EAAE,OAAO0nB,OAAO,CAAC,KAChC,OAAO1nB,KAAK,KAAK,MAAM,GAAG+nB,YAAS,GAAGH,aAAU;GACtD;EAED,OAAO;IAAEQ,WAAW,EAAED,cAAc;GAAI;AAC1C;;AClBA,MAAME,SAAS,gBAAGC,wBAAY,EAAE;AAEhC,MAAaC,OAAO,GAAaA;EAC/BhB,YAAY,EAAE;EACd,MAAM;IAAEa;GAAa,GAAGX,QAAQ,EAAE;EAClC,MAAM;IAAEnpB;GAAa,GAAGJ,YAAY,CAAChB,GAAG,CAACmB,IAAI,EAAE;EAC/C,MAAM8Z,gBAAgB,GAAGH,eAAe,CAAC9a,GAAG,CAACib,gBAAgB,EAAE;EAC/D,MAAMF,aAAa,GAAGD,eAAe,CAAC9a,GAAG,CAAC+a,aAAa,EAAE;EACzD,MAAMuQ,kBAAkB,GAAGlqB,WAAW,CACnCW,MAAM,CAACwpB,wBAAe,CAAC,CACvB/sB,GAAG,CAAEgB,KAAK,IAAKA,KAAK,CAAC0C,IAAI,CAAC;EAE7B,MAAMspB,aAAa,GAAiBA,CAAChlB,IAAI,EAAEmX,KAAK,EAAEnF,KAAK,EAAE3R,eAAe;IACtE,IAAI8W,KAAK,KAAK8N,kBAAM,CAACC,QAAQ,EAAE;MAC7B,IAAIlT,KAAK,EAAE;QACT,MAAMtR,mBAAmB;;QAEvBN,6BAA6B,CAACC,eAAe,CAAC;QAChD,MAAM3B,IAAI,GAAG6B,6BAA6B,CACxCP,IAAI,EACJgS,KAAK,EACL8S,kBAAkB,EAClBpkB,mBAAmB,CACpB;QACD6T,aAAa,CAAC7V,IAAI,CAAC;OACpB,MAAM;QACL+V,gBAAgB,CAACzU,IAAI,CAAC;;;GAG3B;EAED,OACEsT,6BAAC6R,oBAAQ;IACPC,cAAc,EAAExqB,WAAW;IAC3B+pB,SAAS,EAAEA,SAAS;IACpBK,aAAa,EAAEA;KAEf1R;IAAK1J,EAAE,EAAC,eAAe;IAAC0M,SAAS,EAAEoO;KACjCpR,6BAAC+R,gBAAa,QACZ/R,6BAAC4G,SAAS,QACR5G,6BAACgQ,MAAM,OAAG,CACA,CACE,CACZ,CACG;AAEf,CAAC;;;;"}
1
+ {"version":3,"file":"widget-embedded.cjs.development.js","sources":["../src/constants/navigationRoutes.ts","../src/constants/numbers.ts","../src/utils/common.ts","../src/utils/routing.ts","../src/store/selectors.ts","../src/services/httpService.ts","../src/constants/swapSettings.ts","../src/store/meta.ts","../src/store/settings.ts","../src/utils/numbers.ts","../src/utils/wallets.ts","../src/utils/swap.ts","../src/store/bestRoute.ts","../src/constants/searchParams.ts","../src/store/ui.ts","../src/components/UpdateUrl.tsx","../src/components/HeaderButtons.tsx","../src/components/Header.tsx","../src/store/wallets.ts","../src/components/TokenInfo.tsx","../src/components/BottomLogo.tsx","../src/components/SwitchFromAndTo.tsx","../src/components/Footer.tsx","../src/constants/errors.ts","../src/pages/Home.tsx","../src/components/AppRouter.tsx","../src/components/ChangeSlippageButton.tsx","../src/components/warnings/HighSlippageWarning.tsx","../src/components/warnings/ConfirmSwapExtraMessages.tsx","../src/hooks/useNavigateBack.ts","../src/store/confirmSwap.ts","../src/components/warnings/MinRequiredSlippage.tsx","../src/components/ConfirmSwapErrors.tsx","../src/components/warnings/BalanceWarnings.tsx","../src/components/ConfirmSwapWarnings.tsx","../src/pages/ConfirmSwapPage.tsx","../src/utils/queue.ts","../src/pages/HistoryPage.tsx","../src/pages/LiquiditySourcesPage.tsx","../src/pages/SelectChainPage.tsx","../src/pages/SelectTokenPage.tsx","../src/pages/SettingsPage.tsx","../src/pages/WalletsPage.tsx","../src/pages/ConfirmWalletsPage.tsx","../src/hooks/useCopyToClipboard.ts","../src/pages/SwapDetailsPage.tsx","../src/components/AppRoutes.tsx","../src/components/Layout.tsx","../src/globalStyles.ts","../src/hooks/useTheme.ts","../src/lib.tsx"],"sourcesContent":["export const navigationRoutes = {\n home: '/',\n fromChain: '/from-chain',\n fromToken: '/from-token',\n toChain: '/to-chain',\n toToken: '/to-token',\n settings: '/settings',\n liquiditySources: '/settings/liquidity-sources',\n swaps: '/swaps',\n wallets: '/wallets',\n confirmSwap: '/confirm-swap',\n confirmWallets: '/confirm-wallets',\n swapDetails: '/swaps/:requestId',\n};\n","import BigNumber from 'bignumber.js';\n\nexport const ZERO = new BigNumber(0);\n","export function removeDuplicateFrom<T>(array: T[]): T[] {\n return Array.from(new Set(array));\n}\n\nexport function areEqual(array1: (number | string)[], array2: (number | string)[]) {\n return array1.length === array2.length && array1.every((v, i) => v === array2[i]);\n}\n","import {\n SimulationAssetAndAmount,\n SimulationValidationStatus,\n} from '@rango-dev/ui/dist/types/swaps';\nimport BigNumber from 'bignumber.js';\nimport { BestRouteResponse } from 'rango-sdk';\nimport { areEqual } from './common';\nimport { SelectedWallet } from './wallets';\n\nexport const getBestRouteToTokenUsdPrice = (\n bestRoute: BestRouteResponse | null,\n): number | null | undefined =>\n bestRoute?.result?.swaps[bestRoute?.result?.swaps.length - 1].to.usdPrice;\n\nexport function isNumberOfSwapsChanged(route1: BestRouteResponse, route2: BestRouteResponse) {\n const route1Swaps = route1.result?.swaps || [];\n const route2Swaps = route2.result?.swaps || [];\n return route1Swaps.length !== route2Swaps.length;\n}\n\nexport function isRouteSwappersUpdated(route1: BestRouteResponse, route2: BestRouteResponse) {\n const route1Swappers = route1.result?.swaps.map((swap) => swap.swapperId) || [];\n const route2Swappers = route2.result?.swaps.map((swap) => swap.swapperId) || [];\n return !areEqual(route1Swappers, route2Swappers);\n}\n\nexport function isRouteInternalCoinsUpdated(route1: BestRouteResponse, route2: BestRouteResponse) {\n const route1InternalCoins = route1.result?.swaps.map((swap) => swap.to.symbol) || [];\n const route2InternalCoins = route2.result?.swaps.map((swap) => swap.to.symbol) || [];\n return !areEqual(route1InternalCoins, route2InternalCoins);\n}\n\nexport const isRouteChanged = (route1: BestRouteResponse, route2: BestRouteResponse): boolean => {\n return (\n isNumberOfSwapsChanged(route1, route2) ||\n isRouteSwappersUpdated(route1, route2) ||\n isRouteInternalCoinsUpdated(route1, route2)\n );\n};\n\nexport const outToRatioHasWarning = (fromUsdValue: BigNumber | null, outToInRatio: BigNumber | 0) =>\n (parseInt(outToInRatio?.toFixed(2) || '0') <= -10 &&\n (fromUsdValue === null || fromUsdValue.gte(new BigNumber(200)))) ||\n (parseInt(outToInRatio?.toFixed(2) || '0') <= -5 &&\n (fromUsdValue === null || fromUsdValue.gte(new BigNumber(1000))));\n\nexport const getRequiredBalanceOfWallet = (\n selectedWallet: SelectedWallet,\n fee: SimulationValidationStatus[] | null,\n): SimulationAssetAndAmount[] | null => {\n if (fee === null) return null;\n const relatedFeeStatus = fee\n ?.find((item) => item.blockchain === selectedWallet.chain)\n ?.wallets.find(\n (wallet) => wallet.address?.toLowerCase() === selectedWallet.address.toLowerCase(),\n );\n if (!relatedFeeStatus) return null;\n return relatedFeeStatus.requiredAssets;\n};\n","import { StoreApi, UseBoundStore } from 'zustand';\n\ntype State = object;\n\ntype WithSelectors<S> = S extends { getState: () => infer T }\n ? S & { use: { [K in keyof T]: () => T[K] } }\n : never;\n\nconst createSelectors = <S extends UseBoundStore<StoreApi<State>>>(_store: S) => {\n let store = _store as WithSelectors<typeof _store>;\n store.use = {};\n for (let k of Object.keys(store.getState())) {\n (store.use as any)[k] = () => store((s) => s[k as keyof typeof s]);\n }\n\n return store;\n};\n\nexport default createSelectors;\n","import { RangoClient } from 'rango-sdk';\n\nexport const httpService = new RangoClient(\n process.env.REACT_APP_API_KEY as string\n);\n","export const SLIPPAGES = [0.5, 1, 3, 5, 8, 13, 20];\n\nexport const DEFAULT_SLIPPAGE = 1;\n\nexport const HIGH_SLIPPAGE = 5;\n\nexport const MAX_SLIPPAGE = 100;\n\nexport const MIN_SLIPPGAE = 0;\n","import { create } from 'zustand';\nimport { MetaResponse } from 'rango-sdk';\nimport { httpService } from '../services/httpService';\nimport createSelectors from './selectors';\nimport { removeDuplicateFrom } from '../utils/common';\n\nexport type LoadingStatus = 'loading' | 'success' | 'failed';\n\nexport interface MetaState {\n meta: MetaResponse;\n loadingStatus: LoadingStatus;\n fetchMeta: () => Promise<void>;\n}\n\nexport const useMetaStore = createSelectors(\n create<MetaState>()((set) => ({\n meta: { blockchains: [], popularTokens: [], swappers: [], tokens: [] },\n loadingStatus: 'loading',\n fetchMeta: async () => {\n try {\n const response = await httpService.getAllMetadata();\n const chainThatHasTokenInMetaResponse = removeDuplicateFrom(\n response.tokens.map((t) => t.blockchain),\n );\n const enabledChains = response.blockchains.filter(\n (chain) => chain.enabled && chainThatHasTokenInMetaResponse.includes(chain.name),\n );\n response.blockchains = enabledChains.sort((a, b) => a.sort - b.sort);\n set({ meta: response, loadingStatus: 'success' });\n } catch (error) {\n set({ loadingStatus: 'failed' });\n }\n },\n })),\n);\n","import { create } from 'zustand';\nimport { persist, subscribeWithSelector } from 'zustand/middleware';\nimport { DEFAULT_SLIPPAGE } from '../constants/swapSettings';\nimport { removeDuplicateFrom } from '../utils/common';\nimport { useMetaStore } from './meta';\nimport createSelectors from './selectors';\n\ntype Theme = 'auto' | 'dark' | 'light';\n\ninterface Settings {\n slippage: number;\n customSlippage: number | null;\n infiniteApprove: boolean;\n disabledLiquiditySources: string[];\n theme: Theme;\n setSlippage: (slippage: number) => void;\n setCustomSlippage: (customSlippage: number | null) => void;\n toggleInfiniteApprove: () => void;\n toggleLiquiditySource: (name: string) => void;\n setTheme: (theme: Theme) => void;\n toggleAllLiquiditySources: () => void;\n}\n\nexport const useSettingsStore = createSelectors(\n create<Settings>()(\n persist(\n subscribeWithSelector((set) => ({\n slippage: DEFAULT_SLIPPAGE,\n customSlippage: null,\n infiniteApprove: false,\n disabledLiquiditySources: [],\n theme: 'auto',\n setSlippage: (slippage) =>\n set(() => ({\n slippage: slippage,\n })),\n setCustomSlippage: (customSlippage) =>\n set(() => ({\n customSlippage: customSlippage,\n })),\n toggleAllLiquiditySources: () =>\n set((state) => {\n const { swappers } = useMetaStore.getState().meta;\n const swappersGroup = removeDuplicateFrom(\n swappers.map((swapper) => swapper.swapperGroup)\n );\n\n if (swappersGroup.length === state.disabledLiquiditySources.length)\n return { disabledLiquiditySources: [] };\n else {\n return {\n disabledLiquiditySources: swappersGroup,\n };\n }\n }),\n toggleInfiniteApprove: () =>\n set((state) => ({\n infiniteApprove: !state.infiniteApprove,\n })),\n toggleLiquiditySource: (name) =>\n set((state) => {\n if (state.disabledLiquiditySources.includes(name))\n return {\n disabledLiquiditySources: state.disabledLiquiditySources.filter(\n (liquiditySource) => liquiditySource != name\n ),\n };\n else\n return {\n disabledLiquiditySources:\n state.disabledLiquiditySources.concat(name),\n };\n }),\n setTheme: (theme) =>\n set(() => ({\n theme,\n })),\n })),\n {\n name: 'user-settings',\n }\n )\n )\n);\n","import { BigNumber } from 'bignumber.js';\nimport { BestRouteResponse } from 'rango-sdk';\n\nexport const percentToString = (p: number, fractions = 0): string => (p * 100).toFixed(fractions);\nexport const secondsToString = (s: number): string => {\n const seconds = (s % 60).toString().padStart(2, '0');\n const minutes = parseInt((s / 60).toString())\n .toString()\n .padStart(2, '0');\n return `${minutes}:${seconds}`;\n};\n\nexport const numberToString = (\n number: BigNumber | string | null,\n minDecimals: number | null = null,\n maxDecimals: number | null = null,\n): string => {\n if (number === null) return '';\n if (number === '') return '';\n const n = new BigNumber(number);\n const roundingMode = 1;\n let maxI = 1000;\n for (let i = 0; i < 60; i++) {\n if (new BigNumber(n.toFixed(i, roundingMode)).eq(n)) {\n maxI = i;\n break;\n }\n }\n\n if (n.gte(10000)) return n.toFormat(0, roundingMode);\n if (n.gte(1000))\n return n.toFormat(\n Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 1))),\n roundingMode,\n );\n if (n.gte(100))\n return n.toFormat(\n Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 1))),\n roundingMode,\n );\n if (n.gte(1))\n return n.toFormat(\n Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 2))),\n roundingMode,\n );\n if (n.gte(0.01))\n return n.toFormat(\n Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 4))),\n roundingMode,\n );\n for (let i = minDecimals || 4; i < 17; i++)\n if (n.gte(Math.pow(10, -i)))\n return n.toFormat(\n Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, i))),\n roundingMode,\n );\n if (n.isEqualTo(0)) return '0';\n\n return n.toFormat(\n Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 8))),\n roundingMode,\n );\n};\n\nexport const convertBigNumberToHex = (value: BigNumber, decimals: number): string => {\n return '0x' + value.shiftedBy(decimals).toString(16);\n};\n\nexport const uint8ArrayToHex = (buffer: Uint8Array): string => {\n // buffer is an ArrayBuffer\n return [...buffer].map((x) => x.toString(16).padStart(2, '0')).join('');\n};\n\nexport function dollarToConciseString(num: number | undefined): string {\n if (!num) return '-';\n if (num < 1) return ' < 1$';\n if (num < 1000) return numberToString(new BigNumber(num)) + '$';\n if (num < 10_000) return parseInt((num / 100).toString()) / 10 + 'K';\n if (num < 1_000_000) return parseInt((num / 1000).toString()) + 'K';\n if (num < 100_000_000) return parseInt((num / 100000).toString()) / 10 + 'M';\n return parseInt((num / 1000000).toString()) + 'M';\n}\n\nexport function removeExtraDecimals(num: string, maxDecimals: number): string {\n try {\n if (!num.includes('.')) return num;\n const [b, f] = num.split('.');\n if (f && f.length > maxDecimals) {\n return `${b}.${f.substring(0, maxDecimals)}`;\n }\n return num;\n } catch (e) {\n return num;\n }\n}\n\nexport const totalArrivalTime = (data: BestRouteResponse | null) =>\n data?.result?.swaps?.reduce((a, b) => a + b.estimatedTimeInSeconds, 0) || 0;\n\nexport const rawFees = (data: BestRouteResponse): string =>\n (\n data?.result?.swaps?.flatMap((s) => s.fee.map((f) => ({ swapperId: s.swapperId, fee: f }))) ||\n []\n )\n .reduce((partialSum, a) => partialSum + parseFloat(a.fee.amount), 0)\n .toFixed(3);\n\nexport const decimalNumber = (number = '0', toFixed: number) => parseFloat(number).toFixed(toFixed);\n\nexport const containsText = (text: string, searchText: string) =>\n text.toLowerCase().indexOf(searchText.toLowerCase()) > -1;\n","import {\n getCosmosExperimentalChainInfo,\n isEvmAddress,\n KEPLR_COMPATIBLE_WALLETS,\n Network,\n WalletInfo,\n WalletState,\n WalletType,\n} from '@rango-dev/wallets-shared';\n\nimport {\n WalletInfo as ModalWalletInfo,\n WalletState as WalletStatus,\n SelectableWallet,\n} from '@rango-dev/ui';\nimport {\n BestRouteResponse,\n BlockchainMeta,\n Token,\n WalletDetail,\n} from 'rango-sdk';\nimport { isCosmosBlockchain } from 'rango-types';\nimport { readAccountAddress } from '@rango-dev/wallets-core';\nimport { Account, Balance, TokenBalance } from '../store/wallets';\nimport { numberToString } from './numbers';\nimport BigNumber from 'bignumber.js';\nimport { TokenWithBalance } from '../pages/SelectTokenPage';\nimport { ZERO } from '../constants/numbers';\n\nexport function getStateWallet(state: WalletState): WalletStatus {\n switch (true) {\n case state.connected:\n return WalletStatus.CONNECTED;\n case state.connecting:\n return WalletStatus.CONNECTING;\n case !state.installed:\n return WalletStatus.NOT_INSTALLED;\n default:\n return WalletStatus.DISCONNECTED;\n }\n}\n\nexport const excludedWallets = [\n WalletType.UNKNOWN,\n WalletType.TERRA_STATION,\n WalletType.LEAP,\n];\n\nexport function getlistWallet(\n getState: (type: WalletType) => WalletState,\n getWalletInfo: (type: WalletType) => WalletInfo,\n list: WalletType[]\n): ModalWalletInfo[] {\n const excludedWallets = [\n WalletType.UNKNOWN,\n WalletType.TERRA_STATION,\n WalletType.LEAP,\n ];\n\n return list\n .filter((wallet) => !excludedWallets.includes(wallet))\n .map((type) => {\n const { name, img: image, installLink } = getWalletInfo(type);\n const state = getStateWallet(getState(type));\n return {\n name,\n image,\n installLink,\n state,\n type,\n };\n });\n}\n\nexport function walletAndSupportedChainsNames(\n supportedChains: BlockchainMeta[]\n): Network[] | null {\n if (!supportedChains) return null;\n let walletAndSupportedChainsNames: Network[] = [];\n walletAndSupportedChainsNames = supportedChains.map(\n (blockchainMeta) => blockchainMeta.name as Network\n );\n\n return walletAndSupportedChainsNames;\n}\n\nexport function prepareAccountsForWalletStore(\n wallet: WalletType,\n accounts: string[],\n evmBasedChains: string[],\n supportedChainNames: Network[] | null\n): Account[] {\n const result: Account[] = [];\n\n function addAccount(network: Network, address: string) {\n const newAccount: Account = {\n address,\n chain: network,\n walletType: wallet,\n };\n\n result.push(newAccount);\n }\n\n const supportedChains = supportedChainNames || [];\n\n accounts.forEach((account) => {\n const { address, network } = readAccountAddress(account);\n\n const hasLimitation = supportedChains.length > 0;\n const isSupported = supportedChains.includes(network);\n const isUnknown = network === Network.Unknown;\n const notSupportedNetworkByWallet =\n hasLimitation && !isSupported && !isUnknown;\n\n // Here we check given `network` is not supported by wallet\n // And also the network is known.\n if (notSupportedNetworkByWallet) return;\n\n // In some cases we can handle unknown network by checking its address\n // pattern and act on it.\n // Example: showing our evm compatible netwrok when the uknown network is evem.\n // Otherwise, we stop executing this function.\n const isUknownAndEvmBased =\n network === Network.Unknown && isEvmAddress(address);\n if (isUnknown && !isUknownAndEvmBased) return;\n\n const isEvmBasedChain = evmBasedChains.includes(network);\n\n // If it's an evm network, we will add the address to all the evm chains.\n if (isEvmBasedChain || isUknownAndEvmBased) {\n // all evm chains are not supported in wallets, so we are adding\n // only to those that are supported by wallet.\n const evmChainsSupportedByWallet = supportedChains.filter((chain) =>\n evmBasedChains.includes(chain)\n );\n\n evmChainsSupportedByWallet.forEach((network) => {\n // EVM addresses are not case sensetive.\n // Some wallets like Binance-chain return some letters in uppercase which produces bugs in our wallet state.\n addAccount(network, address.toLowerCase());\n });\n } else {\n addAccount(network, address);\n }\n });\n\n return result;\n}\n\nexport function getRequiredChains(route: BestRouteResponse | null) {\n const wallets: string[] = [];\n\n route?.result?.swaps.forEach((swap) => {\n const currentStepFromBlockchain = swap.from.blockchain;\n const currentStepToBlockchain = swap.to.blockchain;\n let lastAddedWallet = wallets[wallets.length - 1];\n if (currentStepFromBlockchain != lastAddedWallet)\n wallets.push(currentStepFromBlockchain);\n lastAddedWallet = wallets[wallets.length - 1];\n if (currentStepToBlockchain != lastAddedWallet)\n wallets.push(currentStepToBlockchain);\n });\n return wallets;\n}\n\nexport interface SelectedWallet extends Account {}\ntype Blockchain = { name: string; accounts: Balance[] };\n\nexport function getSelectableWallets(\n accounts: Account[],\n selectedWallets: SelectedWallet[],\n getWalletInfo: (type: WalletType) => WalletInfo\n): SelectableWallet[] {\n const connectedWallets: SelectableWallet[] = accounts.map((account) => ({\n address: account.address,\n walletType: account.walletType,\n chain: account.chain,\n image: getWalletInfo(account.walletType).img,\n name: getWalletInfo(account.walletType).name,\n selected: !!selectedWallets.find(\n (wallet) =>\n wallet.chain === account.chain &&\n wallet.walletType === account.walletType\n ),\n }));\n\n return connectedWallets;\n}\n\nexport function getBalanceFromWallet(\n balances: Balance[],\n chain: string,\n symbol: string,\n address: string | null\n): TokenBalance | null {\n if (balances.length === 0) return null;\n\n const selectedChainBalances = balances.filter(\n (balance) => balance.chain === chain\n );\n if (selectedChainBalances.length === 0) return null;\n\n return (\n selectedChainBalances\n .map(\n (a) =>\n a.balances?.find(\n (bl) =>\n (address !== null && bl.address === address) ||\n (address === null &&\n bl.address === address &&\n bl.symbol === symbol)\n ) || null\n )\n .filter((b) => b !== null)\n .sort(\n (a, b) => parseFloat(b?.amount || '0') - parseFloat(a?.amount || '1')\n )\n .find(() => true) || null\n );\n}\n\nexport function isAccountAndBalanceMatched(account: Account, balance: Balance) {\n return (\n account.address === balance.address &&\n account.chain === balance.chain &&\n account.walletType === balance.walletType\n );\n}\n\nexport function makeBalanceFor(\n account: Account,\n retrivedBalance: WalletDetail,\n tokens: Token[]\n): Balance {\n const {\n address,\n blockChain: chain,\n explorerUrl,\n balances = [],\n } = retrivedBalance;\n return {\n address,\n chain,\n loading: false,\n error: false,\n explorerUrl,\n walletType: account.walletType,\n balances:\n balances?.map((tokenBalance) => ({\n chain,\n symbol: tokenBalance.asset.symbol,\n ticker: tokenBalance.asset.symbol,\n address: tokenBalance.asset.address || null,\n rawAmount: tokenBalance.amount.amount,\n decimal: tokenBalance.amount.decimals,\n amount: new BigNumber(tokenBalance.amount.amount)\n .shiftedBy(-tokenBalance.amount.decimals)\n .toFixed(),\n logo: '',\n usdPrice:\n getUsdPrice(\n chain,\n tokenBalance.asset.symbol,\n tokenBalance.asset.address,\n tokens\n ) || null,\n })) || [],\n };\n}\n\nexport function resetBalanceState(balance: Balance): Balance {\n return { ...balance, loading: false, error: true };\n}\n\nexport const calculateWalletUsdValue = (balance: Balance[]) => {\n const uniqueAccountAddresses = new Set<string | null>();\n const uniqueBalane: Balance[] = balance?.reduce(\n (acc: Balance[], current: Balance) => {\n return acc.findIndex(\n (i) => i.address === current.address && i.chain === current.chain\n ) === -1\n ? [...acc, current]\n : acc;\n },\n []\n );\n\n const modifiedWalletBlockchains = uniqueBalane?.map((chain) => {\n const modifiedWalletBlockchain: Blockchain = {\n name: chain.chain,\n accounts: [],\n };\n if (!uniqueAccountAddresses.has(chain.address)) {\n uniqueAccountAddresses.add(chain.address);\n }\n uniqueAccountAddresses.forEach((accountAddress) => {\n if (chain.address === accountAddress)\n modifiedWalletBlockchain.accounts.push(chain);\n });\n return modifiedWalletBlockchain;\n });\n const total = numberToString(\n modifiedWalletBlockchains\n ?.flatMap((b) => b.accounts)\n ?.flatMap((a) => a?.balances)\n ?.map((b) =>\n new BigNumber(b?.amount || ZERO).multipliedBy(b?.usdPrice || 0)\n )\n ?.reduce((a, b) => a.plus(b), ZERO) || ZERO\n ).toString();\n\n return numberWithThousandSeperator(total);\n};\n\nfunction numberWithThousandSeperator(number: string | number): string {\n var parts = number.toString().split('.');\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n return parts.join('.');\n}\n\nexport const sortedTokens = (\n tokens: TokenWithBalance[],\n position: 'from' | 'to',\n balance: Balance[]\n): TokenWithBalance[] => {\n if (!tokens) return [];\n const walletSymbols = new Set(\n (balance || [])\n .flatMap((a) => a.balances || [])\n .filter((b) => (new BigNumber(b?.rawAmount) || ZERO).gt(0))\n .map((b) => `${b?.chain}.${b?.symbol}.${b?.address}`)\n );\n let sortedList = [\n ...tokens.filter(\n (t) => !t.address && walletSymbols.size && position === 'to'\n ),\n ...tokens\n .filter(\n (t) =>\n !(position === 'to' && !t.address) &&\n walletSymbols.has(`${t.blockchain}.${t.symbol}.${t.address}`)\n )\n .sort((tokenA, tokenB) => compareBalance(tokenA, tokenB, balance)),\n ...tokens.filter(\n (t) =>\n !walletSymbols.has(`${t.blockchain}.${t.symbol}.${t.address}`) &&\n !t.address &&\n (!walletSymbols.size || position === 'from')\n ),\n ...tokens.filter(\n (t) =>\n !walletSymbols.has(`${t.blockchain}.${t.symbol}.${t.address}`) &&\n t.address &&\n !t.isSecondaryCoin\n ),\n ...tokens.filter(\n (t) =>\n !walletSymbols.has(`${t.blockchain}.${t.symbol}.${t.address}`) &&\n t.isSecondaryCoin\n ),\n ];\n\n return sortedList;\n};\n\nconst compareBalance = (\n tokenA: TokenWithBalance,\n tokenB: TokenWithBalance,\n wallet: Balance[]\n): number => {\n if (!tokenA.usdPrice || !tokenB.usdPrice) return 0;\n\n const tokenAUsdValue = new BigNumber(\n getBalanceFromWallet(\n wallet,\n tokenA.blockchain,\n tokenA.symbol,\n tokenA.address\n )?.amount || ZERO\n ).multipliedBy(tokenA.usdPrice);\n const tokenBUsdValue = new BigNumber(\n getBalanceFromWallet(\n wallet,\n tokenB.blockchain,\n tokenB.symbol,\n tokenB.address\n )?.amount || ZERO\n ).multipliedBy(tokenB.usdPrice);\n if (tokenAUsdValue.gt(tokenBUsdValue)) return -1;\n return 1;\n};\n\nexport const getUsdPrice = (\n blockchain: string,\n symbol: string,\n address: string | null,\n allTokens: Token[]\n): number | null => {\n const token = allTokens?.find(\n (t) =>\n t.blockchain === blockchain &&\n t.symbol?.toUpperCase() === symbol?.toUpperCase() &&\n t.address === address\n );\n return token?.usdPrice || null;\n};\nexport const isExperimentalChain = (\n blockchains: BlockchainMeta[],\n wallet: string\n): boolean => {\n const cosmosExperimentalChainInfo = getCosmosExperimentalChainInfo(\n Object.entries(blockchains)\n .map(([, blockchainMeta]) => blockchainMeta)\n .filter(isCosmosBlockchain)\n );\n return cosmosExperimentalChainInfo && !!cosmosExperimentalChainInfo[wallet];\n};\n\nexport const getKeplrCompatibleConnectedWallets = (\n selectableWallets: SelectableWallet[]\n): WalletType[] => {\n const connectedWalletTypes = new Set(\n selectableWallets.map((a: any) => a.walletType.toString())\n );\n\n return KEPLR_COMPATIBLE_WALLETS.filter((compatibleWallet) =>\n connectedWalletTypes.has(compatibleWallet)\n );\n};\n","import { PendingSwap } from '@rango-dev/ui/dist/containers/History/types';\nimport {\n WalletTypeAndAddress,\n SwapSavedSettings,\n} from '@rango-dev/ui/dist/types/swaps';\nimport BigNumber from 'bignumber.js';\nimport {\n BestRouteRequest,\n BestRouteResponse,\n RecommendedSlippage,\n SwapResult,\n MetaResponse,\n Token,\n} from 'rango-sdk';\nimport { Account } from '../store/wallets';\nimport { ZERO } from '../constants/numbers';\nimport { numberToString } from './numbers';\nimport { WalletType } from '@rango-dev/wallets-shared';\nimport { getRequiredBalanceOfWallet } from './routing';\nimport { getRequiredChains, SelectedWallet } from './wallets';\nimport { SwapButtonState } from '../types';\nimport { LoadingStatus } from '../store/meta';\n\nexport function getOutputRatio(\n inputUsdValue: BigNumber,\n outputUsdValue: BigNumber\n) {\n if (inputUsdValue.lte(ZERO) || outputUsdValue.lte(ZERO)) return 0;\n return outputUsdValue.div(inputUsdValue).minus(1).multipliedBy(100);\n}\n\nexport function outputRatioHasWarning(\n inputUsdValue: BigNumber,\n outputRatio: BigNumber | 0\n) {\n return (\n (parseInt(outputRatio.toFixed(2) || '0') <= -10 &&\n inputUsdValue.gte(new BigNumber(400))) ||\n (parseInt(outputRatio.toFixed(2) || '0') <= -5 &&\n inputUsdValue.gte(new BigNumber(1000)))\n );\n}\n\nexport function hasLimitError(bestRoute: BestRouteResponse | null): boolean {\n return (\n (bestRoute?.result?.swaps || []).filter((swap) => {\n const minimum = !!swap.fromAmountMinValue\n ? new BigNumber(swap.fromAmountMinValue)\n : null;\n const maximum = !!swap.fromAmountMaxValue\n ? new BigNumber(swap.fromAmountMaxValue)\n : null;\n const isExclusive = swap.fromAmountRestrictionType === 'EXCLUSIVE';\n if (isExclusive) {\n return minimum?.gte(swap.fromAmount) || maximum?.lte(swap.fromAmount);\n } else {\n return minimum?.gt(swap.fromAmount) || maximum?.lt(swap.fromAmount);\n }\n }).length > 0\n );\n}\n\nexport function LimitErrorMessage(bestRoute: BestRouteResponse | null): {\n swap: SwapResult | null;\n fromAmountRangeError: string;\n recommendation: string;\n} {\n if (!bestRoute)\n return { swap: null, fromAmountRangeError: '', recommendation: '' };\n const swap = (bestRoute?.result?.swaps || []).filter((swap) => {\n const minimum = !!swap.fromAmountMinValue\n ? new BigNumber(swap.fromAmountMinValue)\n : null;\n const maximum = !!swap.fromAmountMaxValue\n ? new BigNumber(swap.fromAmountMaxValue)\n : null;\n const isExclusive = swap.fromAmountRestrictionType === 'EXCLUSIVE';\n if (isExclusive) {\n return minimum?.gte(swap.fromAmount) || maximum?.lte(swap.fromAmount);\n } else {\n return minimum?.gt(swap.fromAmount) || maximum?.lt(swap.fromAmount);\n }\n })[0];\n if (!swap)\n return { swap: null, fromAmountRangeError: '', recommendation: '' };\n const minimum = !!swap.fromAmountMinValue\n ? new BigNumber(swap.fromAmountMinValue)\n : null;\n const maximum = !!swap.fromAmountMaxValue\n ? new BigNumber(swap.fromAmountMaxValue)\n : null;\n const isExclusive = swap.fromAmountRestrictionType === 'EXCLUSIVE';\n\n let fromAmountRangeError = '';\n let recommendation = '';\n if (!isExclusive && !!minimum && minimum.gt(swap.fromAmount)) {\n fromAmountRangeError = `Required: >= ${numberToString(minimum)} ${\n swap.from.symbol\n }`;\n recommendation = 'Increase your swap amount';\n } else if (isExclusive && !!minimum && minimum.gte(swap.fromAmount)) {\n fromAmountRangeError = `Required: > ${numberToString(minimum)} ${\n swap.from.symbol\n }`;\n recommendation = 'Increase your swap amount';\n }\n\n if (!isExclusive && !!maximum && maximum.lt(swap.fromAmount)) {\n fromAmountRangeError = `Required: <= ${numberToString(maximum)} ${\n swap.from.symbol\n }`;\n recommendation = 'Decrease your swap amount';\n } else if (isExclusive && !!maximum && maximum.lte(swap.fromAmount)) {\n fromAmountRangeError = `Required: < ${numberToString(maximum)} ${\n swap.from.symbol\n }`;\n recommendation = 'Decrease your swap amount';\n }\n\n return { swap, fromAmountRangeError, recommendation };\n}\n\nexport function getSwapButtonState(\n loadingMetaStatus: LoadingStatus,\n accounts: Account[],\n loading: boolean,\n bestRoute: BestRouteResponse | null,\n hasLimitError: boolean,\n highValueLoss: boolean,\n priceImpactCanNotBeComputed: boolean,\n needsToWarnEthOnPath: boolean\n): SwapButtonState {\n if (loadingMetaStatus !== 'success')\n return { title: 'Connect Wallet', disabled: true };\n if (accounts.length == 0) return { title: 'Connect Wallet', disabled: false };\n if (loading) return { title: 'Finding Best Route...', disabled: true };\n else if (!bestRoute) return { title: 'Swap', disabled: true };\n else if (hasLimitError) return { title: 'Limit Error', disabled: true };\n else if (highValueLoss)\n return { title: 'Price impact is too high!', disabled: true };\n else if (priceImpactCanNotBeComputed)\n return {\n title: 'USD price is unknown, price impact might be high!',\n disabled: false,\n hasWarning: true,\n };\n else if (needsToWarnEthOnPath)\n return {\n title: 'The route goes through Ethereum. Continue?',\n disabled: false,\n hasWarning: true,\n };\n else return { title: 'Swap', disabled: false };\n}\n\nexport function canComputePriceImpact(\n bestRoute: BestRouteResponse | null,\n inputAmount: string,\n inputUsdValue: BigNumber,\n outputUsdValue: BigNumber\n) {\n return !(\n (inputUsdValue.lte(ZERO) || outputUsdValue.lte(ZERO)) &&\n !!bestRoute?.result &&\n !!inputAmount &&\n inputAmount !== '0' &&\n parseFloat(inputAmount || '0') !== 0 &&\n !!bestRoute.result\n );\n}\n\nexport function calculatePendingSwap(\n inputAmount: string,\n bestRoute: BestRouteResponse,\n wallets: { [p: string]: WalletTypeAndAddress },\n settings: Omit<SwapSavedSettings, 'disabledSwappersIds'>,\n validateBalanceOrFee: boolean,\n meta: MetaResponse\n): PendingSwap {\n const simulationResult = bestRoute.result;\n if (!simulationResult) throw Error('Simulation result should not be null');\n\n return {\n creationTime: new Date().getTime().toString(),\n finishTime: null,\n requestId: bestRoute.requestId || '',\n inputAmount: inputAmount,\n wallets,\n status: 'running',\n isPaused: false,\n extraMessage: null,\n extraMessageSeverity: null,\n extraMessageDetail: null,\n extraMessageErrorCode: null,\n networkStatusExtraMessage: null,\n networkStatusExtraMessageDetail: null,\n lastNotificationTime: null,\n //@ts-ignore\n settings: settings,\n simulationResult: simulationResult,\n validateBalanceOrFee,\n steps:\n bestRoute.result?.swaps?.map((swap, index) => {\n const swapper = meta.swappers.find(\n (swapper) => swapper.id === swap.swapperId\n );\n const swapperType = swapper?.types[0];\n const fromBlockchain = meta.blockchains.find(\n (blockchain) => blockchain.name === swap.from.blockchain\n );\n const toBlockchain = meta.blockchains.find(\n (blockchain) => blockchain.name === swap.to.blockchain\n );\n return {\n id: index + 1,\n fromBlockchain: swap.from.blockchain,\n fromSymbol: swap.from.symbol,\n fromSymbolAddress: swap.from.address,\n fromDecimals: swap.from.decimals,\n fromAmountPrecision: swap.fromAmountPrecision,\n fromAmountMinValue: swap.fromAmountMinValue,\n fromAmountMaxValue: swap.fromAmountMaxValue,\n toBlockchain: swap.to.blockchain,\n fromLogo: swap.from.logo,\n toSymbol: swap.to.symbol,\n toSymbolAddress: swap.to.address,\n toDecimals: swap.to.decimals,\n toLogo: swap.to.logo,\n startTransactionTime: new Date().getTime(),\n swapperId: swap.swapperId,\n feeInUsd: numberToString(getUsdFeeOfStep(swap, meta.tokens), null, 2),\n expectedOutputAmountHumanReadable: swap.toAmount,\n outputAmount: '',\n status: 'created',\n networkStatus: null,\n executedTransactionId: null,\n externalTransactionId: null,\n explorerUrl: null,\n trackingCode: null,\n cosmosTransaction: null,\n solanaTransaction: null,\n starknetTransaction: null,\n starknetApprovalTransaction: null,\n tronTransaction: null,\n tronApprovalTransaction: null,\n evmTransaction: null,\n evmApprovalTransaction: null,\n transferTransaction: null,\n diagnosisUrl: null,\n internalSteps: null,\n fromBlockchainLogo: fromBlockchain.logo,\n toBlockchainLogo: toBlockchain.logo,\n swapperLogo: swapper?.logo,\n swapperType: swapperType,\n };\n }) || [],\n };\n}\n\nexport function requiredWallets(route: BestRouteResponse | null) {\n const wallets: string[] = [];\n\n route?.result?.swaps.forEach((swap) => {\n const currentStepFromBlockchain = swap.from.blockchain;\n const currentStepToBlockchain = swap.to.blockchain;\n let lastAddedWallet = wallets[wallets.length - 1];\n if (currentStepFromBlockchain != lastAddedWallet)\n wallets.push(currentStepFromBlockchain);\n lastAddedWallet = wallets[wallets.length - 1];\n if (currentStepToBlockchain != lastAddedWallet)\n wallets.push(currentStepToBlockchain);\n });\n return wallets;\n}\n\nexport const getUsdPrice = (\n blockchain: string,\n symbol: string,\n address: string | null,\n allTokens: Token[]\n): number | null => {\n const token = allTokens?.find(\n (t) =>\n t.blockchain === blockchain &&\n t.symbol?.toUpperCase() === symbol?.toUpperCase() &&\n t.address === address\n );\n return token?.usdPrice || null;\n};\n\nfunction getUsdFeeOfStep(step: SwapResult, allTokens: Token[]): BigNumber {\n let totalFeeInUsd = ZERO;\n for (let i = 0; i < step.fee.length; i++) {\n const fee = step.fee[i];\n if (fee.expenseType === 'DECREASE_FROM_OUTPUT') continue;\n\n const unitPrice = getUsdPrice(\n fee.asset.blockchain,\n fee.asset.symbol,\n fee.asset.address,\n allTokens\n );\n totalFeeInUsd = totalFeeInUsd.plus(\n new BigNumber(fee.amount).multipliedBy(unitPrice || 0)\n );\n }\n\n return totalFeeInUsd;\n}\n\nexport function getTotalFeeInUsd(\n bestRoute: BestRouteResponse | null,\n allTokens: Token[]\n): BigNumber | null {\n return (\n bestRoute?.result?.swaps.reduce(\n (totalFee: BigNumber, step) =>\n totalFee.plus(getUsdFeeOfStep(step, allTokens)),\n ZERO\n ) || null\n );\n}\n\nexport function hasHighFee(totalFeeInUsd: BigNumber | null) {\n if (!totalFeeInUsd) return false;\n return !totalFeeInUsd.lt(new BigNumber(30));\n}\n\nexport function hasSlippageError(\n slippages: (RecommendedSlippage | null)[] | undefined\n) {\n return (slippages?.filter((s) => !!s?.error)?.length || 0) > 0;\n}\n\nexport function getMinRequiredSlippage(route: BestRouteResponse) {\n const slippages = route.result?.swaps.map(\n (slippage) => slippage.recommendedSlippage\n );\n return (\n slippages\n ?.map((s) => s?.slippage || 0)\n ?.filter((s) => s > 0)\n ?.sort((a, b) => b - a)\n ?.find(() => true) || null\n );\n}\n\nexport function hasProperSlippage(\n userSlippage: string,\n minRequiredSlippage: number | null\n) {\n if (!minRequiredSlippage) return true;\n return parseFloat(userSlippage) > minRequiredSlippage;\n}\n\nexport function hasEnoughBalance(\n route: BestRouteResponse,\n selectedWallets: SelectedWallet[]\n) {\n const fee = route.validationStatus;\n\n if (fee === null || fee.length === 0) return true;\n\n for (const wallet of selectedWallets) {\n const requiredAssets = getRequiredBalanceOfWallet(wallet, fee);\n if (!requiredAssets) continue;\n\n const enoughBalanceInWallet = requiredAssets\n .map((asset) => asset.ok)\n .reduce((previous, current) => previous && current);\n if (!enoughBalanceInWallet) return false;\n }\n\n return true;\n}\n\nexport function hasEnoughBalanceAndProperSlippage(\n route: BestRouteResponse,\n selectedWallets: SelectedWallet[],\n userSlippage: string,\n minRequiredSlippage: number | null\n): boolean {\n return (\n hasEnoughBalance(route, selectedWallets) &&\n hasProperSlippage(userSlippage, minRequiredSlippage)\n );\n}\n\nexport function createBestRouteRequestBody(\n fromToken: Token,\n toToken: Token,\n inputAmount: string,\n wallets: Account[],\n selectedWallets: SelectedWallet[],\n disabledLiquiditySources: string[],\n slippage: number,\n checkPrerequisites: boolean\n): BestRouteRequest {\n const selectedWalletsMap = selectedWallets.reduce(\n (\n selectedWalletsMap: BestRouteRequest['selectedWallets'],\n selectedWallet\n ) => (\n (selectedWalletsMap[selectedWallet.chain] = selectedWallet.address),\n selectedWalletsMap\n ),\n {}\n );\n\n const connectedWallets: BestRouteRequest['connectedWallets'] = [];\n\n wallets.forEach((wallet) => {\n const chainAndAccounts = connectedWallets.find(\n (connectedWallet) => connectedWallet.blockchain === wallet.chain\n );\n if (!!chainAndAccounts) chainAndAccounts.addresses.push(wallet.address);\n else\n connectedWallets.push({\n blockchain: wallet.chain,\n addresses: [wallet.address],\n });\n });\n\n const requestBody: BestRouteRequest = {\n amount: inputAmount.toString(),\n checkPrerequisites,\n from: {\n address: fromToken.address,\n blockchain: fromToken.blockchain,\n symbol: fromToken.symbol,\n },\n to: {\n address: toToken.address,\n blockchain: toToken.blockchain,\n symbol: toToken.symbol,\n },\n connectedWallets,\n selectedWallets: selectedWalletsMap,\n swapperGroups: disabledLiquiditySources,\n swappersGroupsExclude: true,\n //@ts-ignore\n slippage: slippage.toString(),\n };\n\n return requestBody;\n}\n\nexport function getWalletsForNewSwap(selectedWallets: SelectedWallet[]) {\n const wallets = selectedWallets.reduce(\n (\n selectedWalletsMap: {\n [p: string]: { address: string; walletType: WalletType };\n },\n selectedWallet\n ) => (\n (selectedWalletsMap[selectedWallet.chain] = {\n address: selectedWallet.address,\n walletType: selectedWallet.walletType,\n }),\n selectedWalletsMap\n ),\n {}\n );\n\n return wallets;\n}\n\nexport function getRouteOutputAmount(route: BestRouteResponse) {\n return route.result?.outputAmount || null;\n}\n\nexport function getPercentageChange(\n oldValue: string | number,\n newValue: string | number\n) {\n return new BigNumber(newValue)\n .div(new BigNumber(oldValue))\n .minus(1)\n .multipliedBy(100);\n}\n\nexport function isOutputAmountChangedALot(\n oldRoute: BestRouteResponse,\n newRoute: BestRouteResponse\n) {\n const oldOutputAmount = getRouteOutputAmount(oldRoute);\n const newOutputAmount = getRouteOutputAmount(newRoute);\n if (!oldOutputAmount || !newOutputAmount) return false;\n const percentageChange = getPercentageChange(\n oldOutputAmount,\n newOutputAmount\n );\n\n return percentageChange.toNumber() <= -1;\n}\n\nexport function getBalanceWarnings(\n route: BestRouteResponse,\n selectedWallets: SelectedWallet[]\n) {\n const fee = route.validationStatus;\n const requiredWallets = getRequiredChains(route);\n const walletsSortedByRequiredWallets = selectedWallets.sort(\n (selectedWallet1, selectedWallet2) =>\n requiredWallets.indexOf(selectedWallet1.chain) -\n requiredWallets.indexOf(selectedWallet2.chain)\n );\n return walletsSortedByRequiredWallets\n .flatMap((wallet) => getRequiredBalanceOfWallet(wallet, fee) || [])\n .filter((asset) => !asset.ok)\n .map((asset) => {\n const symbol = asset.asset.symbol;\n const currentAmount = numberToString(\n new BigNumber(asset.currentAmount.amount).shiftedBy(\n -asset.currentAmount.decimals\n ),\n 8\n );\n const requiredAmount = numberToString(\n new BigNumber(asset.requiredAmount.amount).shiftedBy(\n -asset.requiredAmount.decimals\n ),\n 8\n );\n let reason = '';\n if (asset.reason === 'FEE') reason = ' for network fee';\n if (asset.reason === 'INPUT_ASSET') reason = ' for swap';\n if (asset.reason === 'FEE_AND_INPUT_ASSET')\n reason = ' for input and network fee';\n const warningMessage = `Needs ≈ ${requiredAmount} ${symbol}${reason}, but you have ${currentAmount} ${symbol} in your ${asset.asset.blockchain} wallet.`;\n return warningMessage;\n });\n}\n","import { BestRouteResponse, BlockchainMeta } from 'rango-sdk';\nimport { Token } from 'rango-sdk';\nimport { create } from 'zustand';\nimport BigNumber from 'bignumber.js';\nimport { ZERO } from '../constants/numbers';\nimport { getBestRouteToTokenUsdPrice } from '../utils/routing';\nimport createSelectors from './selectors';\nimport { subscribeWithSelector } from 'zustand/middleware';\nimport { httpService } from '../services/httpService';\nimport { useSettingsStore } from './settings';\nimport { createBestRouteRequestBody } from '../utils/swap';\n\nconst getUsdValue = (token: Token | null, amount: string) =>\n new BigNumber(amount || ZERO).multipliedBy(token?.usdPrice || 0);\n\ninterface RouteState {\n fromChain: BlockchainMeta | null;\n toChain: BlockchainMeta | null;\n inputAmount: string;\n inputUsdValue: BigNumber;\n outputAmount: BigNumber | null;\n outputUsdValue: BigNumber;\n fromToken: Token | null;\n toToken: Token | null;\n loading: boolean;\n error: string;\n setFromChain: (chain: BlockchainMeta | null) => void;\n setToChain: (chian: BlockchainMeta | null) => void;\n setFromToken: (token: Token | null) => void;\n setToToken: (token: Token | null) => void;\n setInputAmount: (amount: string) => void;\n bestRoute: BestRouteResponse | null;\n setBestRoute: (bestRoute: BestRouteResponse | null) => void;\n}\n\nexport const useBestRouteStore = createSelectors(\n create<RouteState>()(\n subscribeWithSelector((set) => ({\n fromChain: null,\n fromToken: null,\n inputAmount: '',\n outputAmount: null,\n inputUsdValue: new BigNumber(0),\n outputUsdValue: new BigNumber(0),\n toChain: null,\n toToken: null,\n bestRoute: null,\n loading: false,\n error: '',\n setBestRoute: (bestRoute) =>\n set((state) => {\n let outputAmount: BigNumber | null = null;\n let outputUsdValue: BigNumber = ZERO;\n if (!!bestRoute) {\n outputAmount = !!bestRoute.result?.outputAmount\n ? new BigNumber(bestRoute.result?.outputAmount)\n : null;\n outputUsdValue = new BigNumber(outputAmount || ZERO).multipliedBy(\n getBestRouteToTokenUsdPrice(bestRoute) ||\n state.toToken?.usdPrice ||\n 0\n );\n }\n return {\n bestRoute,\n ...(!!bestRoute && {\n outputAmount,\n outputUsdValue,\n }),\n };\n }),\n setFromChain: (chain) =>\n set(() => ({\n fromChain: chain,\n })),\n setFromToken: (token) =>\n set((state) => ({\n fromToken: token,\n ...(!!state.inputAmount && {\n inputUsdValue: getUsdValue(token, state.inputAmount),\n }),\n })),\n setToChain: (chain) =>\n set(() => ({\n toChain: chain,\n })),\n setToToken: (token) =>\n set(() => ({\n toToken: token,\n })),\n setInputAmount: (amount) =>\n set((state) => ({\n inputAmount: amount,\n ...(!!state.fromToken && {\n inputUsdValue: getUsdValue(state.fromToken, amount),\n }),\n })),\n }))\n )\n);\n\nconst bestRoute = (\n bestRouteStore: typeof useBestRouteStore,\n settingsStore: typeof useSettingsStore\n) => {\n let abortController: AbortController | null = null;\n const fetchBestRoute = () => {\n const { fromToken, toToken, inputAmount } = bestRouteStore.getState();\n const { slippage, customSlippage, disabledLiquiditySources } =\n settingsStore.getState();\n if (!fromToken || !toToken || !inputAmount) return;\n abortController?.abort();\n abortController = new AbortController();\n const userSlippage = customSlippage | slippage;\n const requestBody = createBestRouteRequestBody(\n fromToken,\n toToken,\n inputAmount,\n [],\n [],\n disabledLiquiditySources,\n userSlippage,\n false\n );\n bestRouteStore.setState({ loading: true, bestRoute: null });\n httpService\n .getBestRoute(requestBody, {\n signal: abortController.signal,\n })\n .then((res) => {\n const { setBestRoute } = bestRouteStore.getState();\n setBestRoute(res);\n bestRouteStore.setState({ loading: false });\n abortController = null;\n })\n .catch((error) => {\n if (error.code === 'ERR_CANCELED') return;\n bestRouteStore.setState({\n error: error.message,\n loading: false,\n });\n });\n };\n\n useBestRouteStore.subscribe(\n (state) => ({\n fromChain: state.fromChain,\n fromToken: state.fromToken,\n toChain: state.toChain,\n toToken: state.toToken,\n inputAmount: state.inputAmount,\n }),\n\n fetchBestRoute.bind(null),\n {\n equalityFn: (prevState, state) => {\n if (\n prevState.fromChain?.name !== state.fromChain?.name ||\n prevState.toChain?.name !== state.toChain?.name ||\n prevState.fromToken?.symbol !== state.fromToken?.symbol ||\n prevState.toToken?.symbol !== state.toToken?.symbol ||\n prevState.fromToken?.blockchain !== state.fromToken?.blockchain ||\n prevState.toToken?.blockchain !== state.toToken?.blockchain ||\n prevState.fromToken?.address !== state.fromToken?.address ||\n prevState.toToken?.address !== state.toToken?.address ||\n prevState.inputAmount !== state.inputAmount\n )\n return false;\n else return true;\n },\n }\n );\n\n useSettingsStore.subscribe(\n (state) => ({\n slippage: state.slippage,\n customSlippage: state.customSlippage,\n disabledLiquiditySources: state.disabledLiquiditySources,\n }),\n fetchBestRoute.bind(null),\n {\n equalityFn: (prevState, state) => {\n if (\n prevState.slippage !== state.slippage ||\n prevState.customSlippage !== state.customSlippage ||\n prevState.disabledLiquiditySources.length !==\n state.disabledLiquiditySources.length\n )\n return false;\n else return true;\n },\n }\n );\n\n return { fetchBestRoute };\n};\n\nexport const { fetchBestRoute } = bestRoute(\n useBestRouteStore,\n useSettingsStore\n);\n","export enum SearchParams {\n 'FROM_CHAIN' = 'fromChain',\n 'FROM_TOKEN' = 'fromToken',\n 'TO_CHAIN' = 'toChain',\n 'TO_TOKEN' = 'toToken',\n 'FROM_AMOUNT' = 'fromAmount',\n}\n","import { create } from 'zustand';\nimport createSelectors from './selectors';\n\ninterface UiState {\n connectWalletsButtonDisabled: boolean;\n selectedSwapRequestId: string | null;\n toggleConnectWalletsButton: () => void;\n setSelectedSwap: (requestId: string | null) => void;\n}\n\nexport const useUiStore = createSelectors(\n create<UiState>()((set) => ({\n connectWalletsButtonDisabled: false,\n selectedSwapRequestId: null,\n toggleConnectWalletsButton: () =>\n set((state) => ({\n connectWalletsButtonDisabled: !state.connectWalletsButtonDisabled,\n })),\n setSelectedSwap: (requestId) => set({ selectedSwapRequestId: requestId }),\n }))\n);\n","import { Token } from 'rango-sdk';\nimport { useEffect, useRef } from 'react';\nimport {\n createSearchParams,\n useLocation,\n useSearchParams,\n} from 'react-router-dom';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useMetaStore } from '../store/meta';\nimport { SearchParams } from '../constants/searchParams';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useUiStore } from '../store/ui';\n\nfunction searchParamsToToken(\n tokens: Token[],\n searchParams: string | null\n): Token | null {\n return (\n tokens.find((token) => {\n const symbolAndAddress = searchParams?.split('--');\n if (symbolAndAddress?.length === 1)\n return token.symbol === symbolAndAddress[0] && token.address === null;\n return (\n token.symbol === symbolAndAddress?.[0] &&\n token.address === symbolAndAddress?.[1]\n );\n }) || null\n );\n}\n\nexport function UpdateUrl() {\n const firstRender = useRef(true);\n const [searchParams, setSearchParams] = useSearchParams();\n const location = useLocation();\n const firstRenderSearchParams = useRef(location.search);\n const searchParamsRef = useRef<Record<string, string>>({});\n const fromChain = useBestRouteStore.use.fromChain();\n const toChain = useBestRouteStore.use.toChain();\n const fromToken = useBestRouteStore.use.fromToken();\n const toToken = useBestRouteStore.use.toToken();\n const setFromChain = useBestRouteStore.use.setFromChain();\n const setFromToken = useBestRouteStore.use.setFromToken();\n const setToChain = useBestRouteStore.use.setToChain();\n const setToToken = useBestRouteStore.use.setToToken();\n const inputAmount = useBestRouteStore.use.inputAmount();\n const setInputAmount = useBestRouteStore.use.setInputAmount();\n const loadingStatus = useMetaStore.use.loadingStatus();\n const { blockchains, tokens } = useMetaStore.use.meta();\n const setSelectedSwap = useUiStore.use.setSelectedSwap();\n\n useEffect(() => {\n const params: Record<string, string> = {};\n createSearchParams(firstRenderSearchParams.current).forEach(\n (value, key) => {\n params[key] = value;\n }\n );\n searchParamsRef.current = params;\n const requestId =\n location.pathname.split(navigationRoutes.swaps + '/')[1] || null;\n if (requestId) setSelectedSwap(requestId);\n }, []);\n\n useEffect(() => {\n let fromChainString = '',\n fromTokenString = '',\n toChainString = '',\n toTokenString = '',\n fromAmount = '';\n if (\n loadingStatus !== 'success' &&\n ![navigationRoutes.confirmWallets, navigationRoutes.confirmSwap].includes(\n location.pathname\n )\n ) {\n fromChainString = searchParamsRef.current[SearchParams.FROM_CHAIN];\n fromTokenString = searchParamsRef.current[SearchParams.FROM_TOKEN];\n toChainString = searchParamsRef.current[SearchParams.TO_CHAIN];\n toTokenString = searchParamsRef.current[SearchParams.TO_TOKEN];\n fromAmount = searchParamsRef.current[SearchParams.FROM_AMOUNT];\n setSearchParams(\n {\n ...(fromChainString && {\n [SearchParams.FROM_CHAIN]: fromChainString,\n }),\n ...(fromTokenString && {\n [SearchParams.FROM_TOKEN]: fromTokenString,\n }),\n ...(toChainString && { [SearchParams.TO_CHAIN]: toChainString }),\n ...(toTokenString && { [SearchParams.TO_TOKEN]: toTokenString }),\n ...(fromAmount && {\n [SearchParams.FROM_AMOUNT]: fromAmount.toString(),\n }),\n },\n { replace: true }\n );\n }\n if (!firstRender.current) {\n let fromChainString = '',\n fromTokenString = '',\n toChainString = '',\n toTokenString = '',\n fromAmount = '';\n if (loadingStatus !== 'success') {\n fromChainString = searchParamsRef.current[SearchParams.FROM_CHAIN];\n fromTokenString = searchParamsRef.current[SearchParams.FROM_TOKEN];\n toChainString = searchParamsRef.current[SearchParams.TO_CHAIN];\n toTokenString = searchParamsRef.current[SearchParams.TO_TOKEN];\n fromAmount = searchParamsRef.current[SearchParams.FROM_AMOUNT];\n } else {\n if (location.state === 'redirect') return;\n fromChainString = fromChain?.name || '';\n fromTokenString =\n (fromToken?.symbol || '') +\n (fromToken?.address ? `--${fromToken?.address}` : '');\n toChainString = toChain?.name || '';\n toTokenString =\n (toToken?.symbol || '') +\n (toToken?.address ? `--${toToken?.address}` : '');\n fromAmount = inputAmount;\n\n setSearchParams(\n {\n ...(fromChainString && {\n [SearchParams.FROM_CHAIN]: fromChainString,\n }),\n ...(fromTokenString && {\n [SearchParams.FROM_TOKEN]: fromTokenString,\n }),\n ...(toChainString && { [SearchParams.TO_CHAIN]: toChainString }),\n ...(toTokenString && { [SearchParams.TO_TOKEN]: toTokenString }),\n ...(fromAmount && {\n [SearchParams.FROM_AMOUNT]: fromAmount.toString(),\n }),\n },\n { replace: true }\n );\n }\n }\n firstRender.current = false;\n }, [location.pathname, inputAmount]);\n\n useEffect(() => {\n if (loadingStatus === 'success') {\n const fronChainString = searchParams.get(SearchParams.FROM_CHAIN);\n const fromTokenString = searchParams.get(SearchParams.FROM_TOKEN);\n const toChainString = searchParams.get(SearchParams.TO_CHAIN);\n const toTokenString = searchParams.get(SearchParams.TO_TOKEN);\n const fromAmount = searchParams.get(SearchParams.FROM_AMOUNT);\n const fromChain = blockchains.find(\n (blockchain) => blockchain.name === fronChainString\n );\n const fromToken = searchParamsToToken(tokens, fromTokenString);\n const toChain = blockchains.find(\n (blockchain) => blockchain.name === toChainString\n );\n const toToken = searchParamsToToken(tokens, toTokenString);\n if (!!fromChain) {\n setFromChain(fromChain);\n if (!!fromToken) setFromToken(fromToken);\n }\n if (!!toChain) {\n setToChain(toChain);\n if (!!toToken) setToToken(toToken);\n }\n if (fromAmount) setInputAmount(fromAmount);\n }\n }, [loadingStatus]);\n\n return null;\n}\n","import React from 'react';\nimport {\n SettingsIcon,\n Tooltip,\n styled,\n Button,\n HistoryIcon,\n RetryIcon,\n} from '@rango-dev/ui';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { PropTypes } from './Header';\n\nconst ButtonsContainer = styled('div', {\n display: 'flex',\n});\n\nexport function HeaderButtons(props: PropTypes) {\n const { onClickRefresh } = props;\n const navigate = useNavigate();\n\n return (\n <ButtonsContainer>\n <Tooltip content=\"Retry\">\n <Button variant=\"ghost\" onClick={onClickRefresh}>\n <RetryIcon size={28} />\n </Button>\n </Tooltip>\n <Tooltip content=\"Transactions History\">\n <Button\n variant=\"ghost\"\n onClick={() => navigate(navigationRoutes.swaps)}\n >\n <HistoryIcon size={24} />\n </Button>\n </Tooltip>\n <Tooltip content=\"Settings\">\n <Button\n variant=\"ghost\"\n onClick={() => navigate(navigationRoutes.settings)}\n >\n <SettingsIcon size={24} />\n </Button>\n </Tooltip>\n </ButtonsContainer>\n );\n}\n","import React from 'react';\nimport { styled, Typography } from '@rango-dev/ui';\nimport { HeaderButtons } from './HeaderButtons';\n\nexport const HeaderContainer = styled('div', {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n width: '100%',\n padding: '$16 0',\n});\n\nexport interface PropTypes {\n onClickRefresh: () => void;\n}\n\nexport function Header(props: PropTypes) {\n const { onClickRefresh } = props;\n return (\n <HeaderContainer>\n <Typography variant=\"h4\">SWAP</Typography>\n <HeaderButtons onClickRefresh={onClickRefresh} />\n </HeaderContainer>\n );\n}\n","import { SelectableWallet } from '@rango-dev/ui';\nimport { WalletType } from '@rango-dev/wallets-shared';\nimport { create } from 'zustand';\nimport { subscribeWithSelector } from 'zustand/middleware';\nimport { httpService } from '../services/httpService';\nimport {\n getRequiredChains,\n isAccountAndBalanceMatched,\n makeBalanceFor,\n resetBalanceState,\n SelectedWallet,\n} from '../utils/wallets';\nimport { useBestRouteStore } from './bestRoute';\nimport { useMetaStore } from './meta';\nimport createSelectors from './selectors';\n\nexport interface Account {\n chain: string;\n address: string;\n walletType: WalletType;\n}\n\nexport type TokenBalance = {\n chain: string;\n symbol: string;\n ticker: string;\n address: string | null;\n rawAmount: string;\n decimal: number | null;\n amount: string;\n logo: string | null;\n usdPrice: number | null;\n};\n\nexport interface Balance {\n balances: TokenBalance[] | null;\n address: string;\n chain: string;\n loading: boolean;\n walletType: WalletType;\n error: boolean;\n explorerUrl: string | null;\n}\n\ninterface WalletsStore {\n accounts: Account[];\n balances: Balance[];\n selectedWallets: SelectedWallet[];\n connectWallet: (accounts: Account[]) => void;\n disconnectWallet: (walletType: WalletType) => void;\n initSelectedWallets: () => void;\n setSelectedWallet: (wallet: SelectableWallet) => void;\n}\n\nexport const useWalletsStore = createSelectors(\n create<WalletsStore>()(\n subscribeWithSelector((set) => ({\n accounts: [],\n balances: [],\n selectedWallets: [],\n connectWallet: (accounts) => {\n const tokens = useMetaStore.getState().meta.tokens;\n\n set((state) => ({\n accounts: state.accounts.concat(accounts),\n balances: state.balances.concat(\n accounts.map((account) => ({\n balances: [],\n address: account.address,\n chain: account.chain,\n loading: true,\n walletType: account.walletType,\n error: false,\n explorerUrl: null,\n }))\n ),\n }));\n accounts.forEach(async (account) => {\n try {\n const response = await httpService.getWalletsDetails([\n { address: account.address, blockchain: account.chain },\n ]);\n const retrivedBalance = response.wallets[0];\n if (retrivedBalance) {\n set((state) => ({\n balances: state.balances.map((balance) => {\n return isAccountAndBalanceMatched(account, balance)\n ? makeBalanceFor(account, retrivedBalance, tokens)\n : balance;\n }),\n }));\n } else throw new Error('Wallet not found');\n } catch (error) {\n set((state) => ({\n balances: state.balances.map((balance) => {\n return isAccountAndBalanceMatched(account, balance)\n ? resetBalanceState(balance)\n : balance;\n }),\n }));\n }\n });\n },\n disconnectWallet: (walletType) => {\n set((state) => ({\n accounts: state.accounts.filter(\n (account) => account.walletType !== walletType\n ),\n balances: state.balances.filter(\n (balance) => balance.walletType !== walletType\n ),\n selectedWallets: state.selectedWallets.filter(\n (wallet) => wallet.walletType != walletType\n ),\n }));\n },\n initSelectedWallets: () =>\n set((state) => {\n const requiredChains = getRequiredChains(\n useBestRouteStore.getState().bestRoute\n );\n const connectedWallets = state.accounts;\n const selectedWallets: SelectedWallet[] = [];\n requiredChains.forEach((chain) => {\n const anyWalletSelected = !!state.selectedWallets.find(\n (wallet) => wallet.chain === chain\n );\n if (!anyWalletSelected) {\n const firstWalletWithMatchedChain = connectedWallets.find(\n (wallet) => wallet.chain === chain\n );\n if (!!firstWalletWithMatchedChain)\n selectedWallets.push({\n address: firstWalletWithMatchedChain.address,\n chain: firstWalletWithMatchedChain.chain,\n walletType: firstWalletWithMatchedChain.walletType,\n });\n }\n });\n return {\n selectedWallets: state.selectedWallets.concat(selectedWallets),\n };\n }),\n setSelectedWallet: (wallet) =>\n set((state) => ({\n selectedWallets: state.selectedWallets\n .filter((selectedWallet) => selectedWallet.chain !== wallet.chain)\n .concat({\n chain: wallet.chain,\n address: wallet.address,\n walletType: wallet.walletType,\n }),\n })),\n }))\n )\n);\n","import React from 'react';\nimport { AngleDownIcon, Button, InfoCircleIcon, styled, TextField, Typography } from '@rango-dev/ui';\nimport { useMetaStore } from '../store/meta';\nimport { BlockchainMeta, Token } from 'rango-sdk';\nimport { useNavigate } from 'react-router-dom';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { numberToString } from '../utils/numbers';\nimport BigNumber from 'bignumber.js';\nimport { getBalanceFromWallet } from '../utils/wallets';\nimport { useWalletsStore } from '../store/wallets';\n\ntype PropTypes = (\n | { type: 'From'; inputAmount: string; onAmountChange: (amount: string) => void }\n | {\n type: 'To';\n outputAmount: BigNumber | null;\n outputUsdValue: BigNumber | null;\n }\n) & { chain: BlockchainMeta | null; token: Token | null };\n\nconst Box = styled('div', {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n});\n\nconst Container = styled('div', {\n boxSizing: 'border-box',\n backgroundColor: '$neutrals300',\n borderRadius: '$5',\n padding: '$8 0',\n\n '.form': {\n display: 'flex',\n width: '100%',\n padding: '$8 $16',\n },\n});\n\nconst StyledImage = styled('img', {\n width: '$24',\n maxHeight: '$24',\n});\n\nconst Options = styled('div', {\n display: 'flex',\n justifyContent: 'flex-end',\n padding: '0 $8',\n});\n\nconst ImagePlaceholder = styled('span', {\n width: '24px',\n height: '24px',\n backgroundColor: '$neutrals300',\n borderRadius: '99999px',\n});\n\nconst OutputContainer = styled('div', {\n height: '$48',\n borderRadius: '$5',\n flexGrow: 1,\n width: '70%',\n backgroundColor: '$background',\n border: '1px solid transparent',\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n paddingLeft: '$8',\n paddingRight: '$8',\n});\n\nexport function TokenInfo(props: PropTypes) {\n const { type, chain, token } = props;\n const loadingStatus = useMetaStore.use.loadingStatus();\n const fromChain = useBestRouteStore.use.fromChain();\n const toChain = useBestRouteStore.use.toChain();\n const inputUsdValue = useBestRouteStore.use.inputUsdValue();\n const fromToken = useBestRouteStore.use.fromToken();\n const setInputAmount = useBestRouteStore.use.setInputAmount();\n const bestRoute = useBestRouteStore.use.bestRoute();\n const inputAmount = useBestRouteStore.use.inputAmount();\n const balances = useWalletsStore.use.balances();\n const navigate = useNavigate();\n\n const tokenBalance =\n !!fromChain && !!fromToken\n ? numberToString(\n getBalanceFromWallet(balances, fromChain?.name, fromToken?.symbol, fromToken?.address)\n ?.amount || '0',\n 8,\n )\n : '0';\n\n const tokenBalanceReal =\n !!fromChain && !!fromToken\n ? numberToString(\n getBalanceFromWallet(balances, fromChain?.name, fromToken?.symbol, fromToken?.address)\n ?.amount || '0',\n getBalanceFromWallet(balances, fromChain?.name, fromToken?.symbol, fromToken?.address)\n ?.decimal,\n )\n : '0';\n\n const ItemSuffix = (\n <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center' }}>\n {loadingStatus === 'failed' && <InfoCircleIcon color=\"error\" size={24} />}\n <AngleDownIcon />\n </div>\n );\n\n return (\n <Box>\n <div>\n <Typography variant=\"body2\">{type}</Typography>\n </div>\n <Container>\n {props.type === 'From' && (\n <Options>\n <div\n className=\"balance\"\n onClick={() => {\n if (tokenBalance !== '0') setInputAmount(tokenBalanceReal.split(',').join(''));\n }}>\n <Button variant=\"ghost\" size=\"small\">\n <Typography variant=\"body2\">{`Max: ${tokenBalance} ${\n fromToken?.symbol || ''\n }`}</Typography>\n </Button>\n </div>\n </Options>\n )}\n <div className=\"form\">\n <Button\n onClick={() => {\n navigate(`/${props.type.toLowerCase()}-chain`);\n }}\n variant=\"outlined\"\n disabled={loadingStatus === 'failed'}\n loading={loadingStatus === 'loading'}\n prefix={\n loadingStatus === 'success' && chain ? (\n <StyledImage src={chain.logo} />\n ) : (\n <ImagePlaceholder />\n )\n }\n suffix={ItemSuffix}\n align=\"start\"\n size=\"large\"\n style={{ marginRight: '.5rem' }}>\n {loadingStatus === 'success' && chain ? chain.displayName : 'Chain'}\n </Button>\n <Button\n onClick={() => {\n navigate(`/${props.type.toLowerCase()}-token`);\n }}\n variant=\"outlined\"\n disabled={\n loadingStatus === 'failed' ||\n (type === 'From' && !fromChain) ||\n (type === 'To' && !toChain)\n }\n loading={loadingStatus === 'loading'}\n prefix={\n loadingStatus === 'success' && token ? (\n <StyledImage src={token.image} />\n ) : (\n <ImagePlaceholder />\n )\n }\n suffix={ItemSuffix}\n size=\"large\"\n align=\"start\"\n style={{ marginRight: '.5rem' }}>\n {loadingStatus === 'success' && token ? token.symbol : 'Token'}\n </Button>\n {props.type === 'From' ? (\n <TextField\n type=\"number\"\n size=\"large\"\n autoFocus\n placeholder=\"0\"\n style={{\n width: '70%',\n position: 'relative',\n backgroundColor: '$background !important',\n }}\n suffix={\n <span style={{ position: 'absolute', right: '4px', bottom: '2px' }}>\n <Typography variant=\"caption\">{`$${numberToString(inputUsdValue)}`}</Typography>\n </span>\n }\n value={props.inputAmount || ''}\n onChange={\n props.type === 'From'\n ? (event) => {\n props.onAmountChange(event.target.value);\n }\n : undefined\n }\n />\n ) : (\n <OutputContainer>\n <Typography variant=\"body1\">\n {bestRoute ? `≈ ${numberToString(props.outputAmount)}` : inputAmount ? '?' : '0'}\n </Typography>\n <span style={{ position: 'absolute', right: '4px', bottom: '2px' }}>\n <Typography variant=\"caption\">{`$${numberToString(\n props.outputUsdValue,\n )}`}</Typography>\n </span>\n </OutputContainer>\n )}\n </div>\n </Container>\n </Box>\n );\n}\n","import React from 'react';\nimport { styled } from '@rango-dev/ui/src/theme';\nimport { Typography } from '@rango-dev/ui';\n\nconst Container = styled('div', {\n display: 'flex',\n width: '100%',\n justifyContent: 'end',\n alignItems: 'center',\n paddingTop: '$16',\n});\n\nconst Logo = styled('svg', {\n fill: '$foreground',\n width: '$24',\n margin: '0 $8 0 $16',\n});\n\nconst StyledAnchor = styled('a', {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n textDecoration: 'none',\n});\n\nexport function BottomLogo() {\n return (\n <Container>\n <Typography variant=\"caption\">Powered By</Typography>\n <StyledAnchor href=\"https://rango.exchange\" target=\"_blank\">\n <Logo xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 33.68 29\">\n <defs></defs>\n <g id=\"Layer_2\" data-name=\"Layer 2\">\n <g id=\"Layer_1-2\" data-name=\"Layer 1\">\n <path d=\"M33.68,18.05A17.93,17.93,0,0,0,28.34,5.29,18.31,18.31,0,0,0,15.45,0H13.54V7.41L6.07,0H.69L9.83,9.07H0V11A17.93,17.93,0,0,0,5.34,23.71,18.32,18.32,0,0,0,18.24,29h1.9V21.59l7.38,7.31h5.39l-9-9h9.82ZM17.37,16.16H12.49a1.93,1.93,0,0,0-1.35.55,1.89,1.89,0,0,0-.56,1.34,1.85,1.85,0,0,0,.56,1.33,1.93,1.93,0,0,0,1.35.55h3.84V25.1A14.43,14.43,0,0,1,8,21a14.21,14.21,0,0,1-4.1-8.2H21.2a1.86,1.86,0,0,0,.74-.13,1.92,1.92,0,0,0,.64-.4,2,2,0,0,0,.43-.62,1.88,1.88,0,0,0,0-1.47,2,2,0,0,0-.43-.62,1.92,1.92,0,0,0-.64-.4,1.86,1.86,0,0,0-.74-.13H17.35V3.9A14.43,14.43,0,0,1,25.64,8a14.19,14.19,0,0,1,4.11,8.2Zm2.12-5.27a1.43,1.43,0,0,1,.26-.83,1.52,1.52,0,0,1,.67-.56,1.55,1.55,0,0,1,.88-.08,1.51,1.51,0,0,1,.77.4,1.54,1.54,0,0,1,.42.77,1.41,1.41,0,0,1-.09.86,1.47,1.47,0,0,1-.55.68,1.56,1.56,0,0,1-.84.25,1.52,1.52,0,0,1-1.52-1.49Z\" />\n <path d=\"M21.7,11.57a.68.68,0,0,0-.12-.38.64.64,0,0,0-.31-.25.68.68,0,0,0-.75.15.61.61,0,0,0-.19.35.62.62,0,0,0,0,.4.67.67,0,0,0,.25.3.69.69,0,0,0,.39.12.7.7,0,0,0,.49-.2A.68.68,0,0,0,21.7,11.57Z\" />\n </g>\n </g>\n </Logo>\n <Typography variant=\"body2\">RANGO</Typography>\n </StyledAnchor>\n </Container>\n );\n}\n","import { useEffect, useRef } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { SearchParams } from '../constants/searchParams';\nimport { useBestRouteStore } from '../store/bestRoute';\n\nexport function SwithFromAndTo({ count }: { count: number }) {\n const firstRender = useRef(true);\n const [searchParams, setSearchParams] = useSearchParams();\n const outputAmount = useBestRouteStore.use.outputAmount();\n\n useEffect(() => {\n if (!firstRender.current) {\n const fromChainString = searchParams.get(SearchParams.FROM_CHAIN);\n const fromTokenString = searchParams.get(SearchParams.FROM_TOKEN);\n const toChainString = searchParams.get(SearchParams.TO_CHAIN);\n const toTokenString = searchParams.get(SearchParams.TO_TOKEN);\n setSearchParams({\n ...(toChainString && { [SearchParams.FROM_CHAIN]: toChainString }),\n ...(toTokenString && { [SearchParams.FROM_TOKEN]: toTokenString }),\n ...(fromChainString && { [SearchParams.TO_CHAIN]: fromChainString }),\n ...(fromTokenString && { [SearchParams.TO_TOKEN]: fromTokenString }),\n ...(outputAmount && { [SearchParams.FROM_AMOUNT]: outputAmount.toString() }),\n });\n } else {\n firstRender.current = false;\n }\n }, [count]);\n\n return null;\n}\n","import { styled } from '@rango-dev/ui';\n\nexport const Footer = styled('div', {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n paddingTop: '$16',\n});\n","export const errorMessages = {\n genericServerError: 'Error connecting server, please reload the app and try again',\n};\n","import {\n Alert,\n BestRoute,\n Button,\n styled,\n Typography,\n VerticalSwapIcon,\n} from '@rango-dev/ui';\nimport React, { useState } from 'react';\nimport { useInRouterContext, useNavigate } from 'react-router-dom';\nimport { Header } from '../components/Header';\nimport { TokenInfo } from '../components/TokenInfo';\nimport { fetchBestRoute, useBestRouteStore } from '../store/bestRoute';\nimport { BottomLogo } from '../components/BottomLogo';\nimport { SwithFromAndTo } from '../components/SwitchFromAndTo';\nimport { Footer } from '../components/Footer';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useMetaStore } from '../store/meta';\nimport { useWalletsStore } from '../store/wallets';\nimport { errorMessages } from '../constants/errors';\nimport {\n getSwapButtonState,\n getOutputRatio,\n hasLimitError,\n outputRatioHasWarning,\n canComputePriceImpact,\n LimitErrorMessage,\n getTotalFeeInUsd,\n hasHighFee,\n} from '../utils/swap';\nimport {\n numberToString,\n secondsToString,\n totalArrivalTime,\n} from '../utils/numbers';\n\nconst Container = styled('div', {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n});\n\nconst SwitchButtonContainer = styled('div', {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n position: 'relative',\n top: '11px',\n});\n\nconst BestRouteContainer = styled('div', {\n width: '100%',\n paddingTop: '$16',\n});\n\nconst Alerts = styled('div', {\n width: '100%',\n paddingTop: '$16',\n});\n\nexport function Home() {\n const waningMessage = '';\n const isRouterInContext = useInRouterContext();\n const navigate = useNavigate();\n const [count, setCount] = useState(0);\n const fromChain = useBestRouteStore.use.fromChain();\n const fromToken = useBestRouteStore.use.fromToken();\n const toChain = useBestRouteStore.use.toChain();\n const toToken = useBestRouteStore.use.toToken();\n const setFromChain = useBestRouteStore.use.setFromChain();\n const setFromToken = useBestRouteStore.use.setFromToken();\n const setToChain = useBestRouteStore.use.setToChain();\n const setToToken = useBestRouteStore.use.setToToken();\n const inputUsdValue = useBestRouteStore.use.inputUsdValue();\n const inputAmount = useBestRouteStore.use.inputAmount();\n const setInputAmount = useBestRouteStore.use.setInputAmount();\n const outputAmount = useBestRouteStore.use.outputAmount();\n const outputUsdValue = useBestRouteStore.use.outputUsdValue();\n const bestRoute = useBestRouteStore.use.bestRoute();\n const tokens = useMetaStore.use.meta().tokens;\n const fetchingBestRoute = useBestRouteStore.use.loading();\n const bestRouteError = useBestRouteStore.use.error();\n\n const loadingMetaStatus = useMetaStore.use.loadingStatus();\n const accounts = useWalletsStore.use.accounts();\n\n const swithFromAndTo = () => {\n setFromChain(toChain);\n setFromToken(toToken);\n setToChain(fromChain);\n setToToken(fromToken);\n setInputAmount(outputAmount?.toString() || '');\n setCount((prev) => prev + 1);\n };\n\n const errorMessage =\n loadingMetaStatus === 'failed'\n ? errorMessages.genericServerError\n : bestRouteError;\n\n const needsToWarnEthOnPath = false;\n\n const showBestRoute =\n inputAmount && (!!bestRoute || fetchingBestRoute || bestRouteError);\n\n const outToInRatio = getOutputRatio(inputUsdValue, outputUsdValue);\n\n const highValueLoss = outputRatioHasWarning(inputUsdValue, outToInRatio);\n\n const { fromAmountRangeError, recommendation, swap } =\n LimitErrorMessage(bestRoute);\n\n const priceImpactCanNotBeComputed = !canComputePriceImpact(\n bestRoute,\n inputAmount,\n inputUsdValue,\n outputUsdValue\n );\n\n const swapButtonState = getSwapButtonState(\n loadingMetaStatus,\n accounts,\n fetchingBestRoute,\n bestRoute,\n hasLimitError(bestRoute),\n highValueLoss,\n priceImpactCanNotBeComputed,\n needsToWarnEthOnPath\n );\n\n const totalFeeInUsd = getTotalFeeInUsd(bestRoute, tokens);\n\n const highFee = hasHighFee(totalFeeInUsd);\n\n return (\n <Container>\n <Header onClickRefresh={fetchBestRoute} />\n <TokenInfo\n type=\"From\"\n chain={fromChain}\n token={fromToken}\n onAmountChange={setInputAmount}\n inputAmount={inputAmount}\n />\n <SwitchButtonContainer>\n <Button variant=\"ghost\" onClick={swithFromAndTo}>\n <VerticalSwapIcon size={36} />\n {isRouterInContext && <SwithFromAndTo count={count} />}\n </Button>\n </SwitchButtonContainer>\n <TokenInfo\n type=\"To\"\n chain={toChain}\n token={toToken}\n outputAmount={outputAmount}\n outputUsdValue={outputUsdValue}\n />\n {showBestRoute && (\n <BestRouteContainer>\n <BestRoute\n error={bestRouteError}\n loading={fetchingBestRoute}\n data={bestRoute}\n totalFee={numberToString(totalFeeInUsd, 0, 2)}\n feeWarning={highFee}\n totalTime={secondsToString(totalArrivalTime(bestRoute))}\n />\n </BestRouteContainer>\n )}\n {(errorMessage || waningMessage || hasLimitError(bestRoute)) && (\n <Alerts>\n {errorMessage && (\n <Alert type=\"error\">\n {<Typography variant=\"body2\">{errorMessage}</Typography>}\n </Alert>\n )}\n {hasLimitError(bestRoute) && (\n <Alert type=\"error\" title={`${swap?.swapperId} Limit`}>\n <>\n <Typography variant=\"body2\">{fromAmountRangeError}</Typography>\n <br />\n <Typography variant=\"body2\">\n Yours: {numberToString(swap?.fromAmount || null)}\n {swap?.from.symbol}\n </Typography>\n <br />\n <Typography variant=\"body2\">{recommendation}</Typography>\n </>\n </Alert>\n )}\n {waningMessage && (\n <Alert type=\"warning\">\n <Typography variant=\"body2\">{waningMessage}</Typography>\n </Alert>\n )}\n </Alerts>\n )}\n <Footer>\n <Button\n type=\"primary\"\n align=\"grow\"\n size=\"large\"\n disabled={swapButtonState.disabled}\n onClick={() => {\n if (swapButtonState.title === 'Connect Wallet')\n navigate(navigationRoutes.wallets);\n else {\n navigate(navigationRoutes.confirmWallets, { replace: true });\n }\n }}\n >\n {swapButtonState.title}\n </Button>\n <BottomLogo />\n </Footer>\n </Container>\n );\n}\n","import React, { PropsWithChildren, useEffect, useRef } from 'react';\nimport {\n MemoryRouter,\n useInRouterContext,\n useLocation,\n useNavigate,\n} from 'react-router';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { UpdateUrl } from './UpdateUrl';\nimport { Home } from '../pages/Home';\n\nconst Route: React.FC = (props: PropsWithChildren) => {\n const location = useLocation();\n const navigate = useNavigate();\n const ref = useRef(true);\n\n useEffect(() => {\n if (\n [navigationRoutes.confirmWallets, navigationRoutes.confirmSwap].includes(\n location.pathname\n ) &&\n ref.current\n )\n navigate(navigationRoutes.home + location.search, { state: 'redirect' });\n\n ref.current = false;\n }, []);\n\n if (\n [navigationRoutes.confirmWallets, navigationRoutes.confirmSwap].includes(\n location.pathname\n ) &&\n ref.current\n )\n return <Home />;\n\n return <> {props.children}</>;\n};\n\nexport function AppRouter({ children }: PropsWithChildren) {\n const isRouterInContext = useInRouterContext();\n const Router = isRouterInContext ? Route : MemoryRouter;\n\n return (\n <>\n <Router>{children}</Router>\n {isRouterInContext && <UpdateUrl />}\n </>\n );\n}\n","import React from 'react';\nimport { Button, styled } from '@rango-dev/ui';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\n\nconst StyledButton = styled(Button, {\n marginTop: '$8',\n});\n\nexport function ChangeSlippageButton() {\n const navigate = useNavigate();\n\n return (\n <StyledButton\n type=\"primary\"\n variant=\"contained\"\n size=\"small\"\n onClick={navigate.bind(null, navigationRoutes.settings)}\n >\n Change Slippage\n </StyledButton>\n );\n}\n","import { Alert, Typography } from '@rango-dev/ui';\nimport React from 'react';\nimport { ChangeSlippageButton } from '../ChangeSlippageButton';\n\ninterface PropTypes {\n selectedSlippage: number;\n}\n\nexport function HighSlippageWarning(props: PropTypes) {\n const { selectedSlippage } = props;\n\n return (\n <Alert type=\"warning\">\n <Typography variant=\"body2\">\n slippage is high=&gt; Caution, your slippage is high (=\n {selectedSlippage}). Your trade may be front run.\n <ChangeSlippageButton />\n </Typography>\n </Alert>\n );\n}\n","import React from 'react';\nimport { HIGH_SLIPPAGE } from '../../constants/swapSettings';\nimport { HighSlippageWarning } from './HighSlippageWarning';\n\ninterface PropTypes {\n selectedSlippage: number;\n}\n\nexport function ConfirmSwapExtraMessages(props: PropTypes) {\n const { selectedSlippage } = props;\n const highSlippage = selectedSlippage >= HIGH_SLIPPAGE;\n\n return <>{highSlippage && <HighSlippageWarning selectedSlippage={selectedSlippage} />}</>;\n}\n","import { useInRouterContext, useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\n\nexport function useNavigateBack() {\n const isRouterInContext = useInRouterContext();\n const navigate = useNavigate();\n\n navigationRoutes;\n\n const navigateBackFrom = (currentRoute: string) => {\n if (\n !isRouterInContext ||\n (window.history.state && window.history.state.idx > 0)\n )\n navigate(-1);\n else {\n if (\n [\n navigationRoutes.fromChain,\n navigationRoutes.fromToken,\n navigationRoutes.toChain,\n navigationRoutes.toToken,\n navigationRoutes.settings,\n navigationRoutes.wallets,\n navigationRoutes.swaps,\n navigationRoutes.confirmWallets,\n ].includes(currentRoute)\n )\n navigate(navigationRoutes.home, { replace: true });\n else if (currentRoute === navigationRoutes.liquiditySources)\n navigate(navigationRoutes.settings, { replace: true });\n else if (currentRoute === navigationRoutes.swapDetails)\n navigate(navigationRoutes.swaps, { replace: true });\n else if (currentRoute === navigationRoutes.confirmSwap)\n navigate(navigationRoutes.confirmWallets, { replace: true });\n }\n };\n\n return { navigateBackFrom };\n}\n","import BigNumber from 'bignumber.js';\nimport { create } from 'zustand';\nimport { shallow } from 'zustand/shallow';\nimport { subscribeWithSelector } from 'zustand/middleware';\nimport { httpService } from '../services/httpService';\nimport { PendingSwapSettings } from '../types';\nimport { numberToString } from '../utils/numbers';\nimport {\n isRouteChanged,\n isNumberOfSwapsChanged,\n isRouteSwappersUpdated,\n isRouteInternalCoinsUpdated,\n} from '../utils/routing';\nimport {\n createBestRouteRequestBody,\n getOutputRatio,\n outputRatioHasWarning,\n isOutputAmountChangedALot,\n getRouteOutputAmount,\n getPercentageChange,\n getBalanceWarnings,\n getMinRequiredSlippage,\n hasProperSlippage,\n calculatePendingSwap,\n getWalletsForNewSwap,\n} from '../utils/swap';\nimport { useBestRouteStore } from './bestRoute';\nimport { useMetaStore } from './meta';\nimport createSelectors from './selectors';\nimport { useSettingsStore } from './settings';\nimport { useWalletsStore } from './wallets';\nimport { PendingSwap } from '@rango-dev/ui/dist/containers/History/types';\n\ninterface ConfirmSwapState {\n loading: boolean;\n errors: ConfirmSwapError[];\n warnings: ConfirmSwapWarnings[];\n proceedAnyway: boolean;\n}\n\nexport const useConfirmSwapStore = createSelectors(\n create<ConfirmSwapState>()(\n subscribeWithSelector(() => ({\n loading: false,\n errors: [],\n warnings: [],\n proceedAnyway: false,\n }))\n )\n);\n\nexport enum ConfirmSwapErrorTypes {\n NO_ROUTE,\n ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS,\n REQUEST_FAILED,\n INSUFFICIENT_SLIPPAGE,\n}\n\nexport type ConfirmSwapError =\n | {\n type: ConfirmSwapErrorTypes.REQUEST_FAILED;\n status?: number;\n }\n | {\n type: ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE;\n minRequiredSlippage: number;\n }\n | {\n type: Exclude<\n ConfirmSwapErrorTypes,\n | ConfirmSwapErrorTypes.REQUEST_FAILED\n | ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE\n >;\n };\n\nexport type ConfirmSwapWarnings =\n | {\n type: ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED;\n newOutputAmount: string;\n percentageChange: string;\n }\n | { type: ConfirmSwapWarningTypes.INSUFFICIENT_BALANCE; messages: string[] }\n | {\n type: Exclude<\n ConfirmSwapWarningTypes,\n | ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED\n | ConfirmSwapWarningTypes.INSUFFICIENT_BALANCE\n >;\n };\n\nexport enum ConfirmSwapWarningTypes {\n ROUTE_UPDATED,\n ROUTE_SWAPPERS_UPDATED,\n ROUTE_COINS_UPDATED,\n ROUTE_AND_OUTPUT_AMOUNT_UPDATED,\n INSUFFICIENT_BALANCE,\n}\n\nexport const confirmSwap = async (): Promise<PendingSwap | undefined> => {\n const {\n fromToken,\n toToken,\n inputAmount,\n bestRoute: initialRoute,\n inputUsdValue,\n setBestRoute,\n } = useBestRouteStore.getState();\n const { accounts, selectedWallets } = useWalletsStore.getState();\n const { proceedAnyway } = useConfirmSwapStore.getState();\n const { disabledLiquiditySources, slippage, customSlippage } =\n useSettingsStore.getState();\n const { meta } = useMetaStore.getState();\n\n const userSlippage = customSlippage || slippage;\n\n if (!fromToken || !toToken || !inputAmount || !initialRoute) return undefined;\n\n if (proceedAnyway!) {\n const swapSettings: PendingSwapSettings = {\n slippage: userSlippage.toString(),\n disabledSwappersGroups: disabledLiquiditySources,\n };\n\n const newSwap = calculatePendingSwap(\n inputAmount.toString(),\n initialRoute,\n getWalletsForNewSwap(selectedWallets),\n swapSettings,\n false,\n meta\n );\n\n console.log('new swap:', newSwap);\n\n // queueManager?.create('swap', { swapDetails: newSwap });\n\n useConfirmSwapStore.setState({\n errors: [],\n warnings: [],\n proceedAnyway: false,\n });\n\n return newSwap;\n }\n\n let abortController: AbortController | null = new AbortController();\n\n useConfirmSwapStore.setState({ loading: true });\n\n const requestBody = createBestRouteRequestBody(\n fromToken,\n toToken,\n inputAmount,\n accounts,\n selectedWallets,\n disabledLiquiditySources,\n userSlippage,\n true\n );\n const unsubscribeFromBestRouteStore = useBestRouteStore.subscribe(\n (state) => state.bestRoute,\n () => {\n abortController.abort();\n },\n { equalityFn: shallow }\n );\n const unsubscribeFromWalletsStore = useWalletsStore.subscribe(\n (state) => state.selectedWallets,\n () => {\n abortController?.abort();\n },\n {\n equalityFn: (prevState, state) => {\n const selectedWalletsChanged = !state.every(\n (wallet) =>\n !!prevState.find(\n (prevWallet) =>\n wallet.address === prevWallet.address &&\n wallet.chain === prevWallet.chain\n )\n );\n\n if (selectedWalletsChanged) return false;\n else return true;\n },\n }\n );\n\n const newSwap: PendingSwap | undefined | void = await httpService\n .getBestRoute(requestBody, { signal: abortController.signal })\n .then((confiremedRoute) => {\n useConfirmSwapStore.setState({ loading: false });\n\n if (\n !confiremedRoute.result ||\n !new BigNumber(confiremedRoute.requestAmount).isEqualTo(\n new BigNumber(inputAmount || '-1')\n )\n ) {\n useConfirmSwapStore.setState((prevState) => ({\n errors: prevState.errors.concat({\n type: ConfirmSwapErrorTypes.NO_ROUTE,\n }),\n }));\n return undefined;\n }\n\n const confirmSwap: Partial<ConfirmSwapState> = {\n loading: false,\n errors: [],\n warnings: [],\n proceedAnyway,\n };\n\n const routeChanged = isRouteChanged(initialRoute, confiremedRoute!);\n\n if (routeChanged) {\n setBestRoute(confiremedRoute);\n const newRouteOutputUsdValue = new BigNumber(\n confiremedRoute.result?.outputAmount || '0'\n ).multipliedBy(toToken.usdPrice || 0);\n\n const outputRatio = getOutputRatio(\n inputUsdValue,\n newRouteOutputUsdValue\n );\n const highValueLoss = outputRatioHasWarning(inputUsdValue, outputRatio);\n\n if (isNumberOfSwapsChanged(initialRoute, confiremedRoute))\n confirmSwap.warnings.push({\n type: ConfirmSwapWarningTypes.ROUTE_UPDATED,\n });\n else if (isRouteSwappersUpdated(initialRoute, confiremedRoute))\n confirmSwap.warnings.push({\n type: ConfirmSwapWarningTypes.ROUTE_SWAPPERS_UPDATED,\n });\n else isRouteInternalCoinsUpdated(initialRoute, confiremedRoute);\n confirmSwap.warnings.push({\n type: ConfirmSwapWarningTypes.ROUTE_COINS_UPDATED,\n });\n if (highValueLoss)\n confirmSwap.errors.push({\n type: ConfirmSwapErrorTypes.ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS,\n });\n else if (isOutputAmountChangedALot(initialRoute, confiremedRoute))\n confirmSwap.warnings.push({\n type: ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED,\n newOutputAmount: numberToString(\n getRouteOutputAmount(confiremedRoute)\n ),\n percentageChange: numberToString(\n getPercentageChange(\n getRouteOutputAmount(initialRoute),\n getRouteOutputAmount(confiremedRoute)\n ),\n null,\n 2\n ),\n });\n }\n\n const balanceWarnings = getBalanceWarnings(\n confiremedRoute,\n selectedWallets\n );\n const enoughBalance = balanceWarnings.length === 0;\n\n if (!enoughBalance)\n confirmSwap.warnings.push({\n type: ConfirmSwapWarningTypes.INSUFFICIENT_BALANCE,\n messages: balanceWarnings,\n });\n\n const minRequiredSlippage = getMinRequiredSlippage(initialRoute);\n\n if (!hasProperSlippage(userSlippage.toString(), minRequiredSlippage))\n confirmSwap.errors.push({\n type: ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE,\n minRequiredSlippage,\n });\n\n const noErrors = confirmSwap.errors.length === 0;\n const noWarnings = confirmSwap.warnings.length === 0;\n\n if (\n (noErrors || (!noErrors && proceedAnyway)) &&\n (noWarnings || (!noWarnings && proceedAnyway))\n ) {\n const swapSettings: PendingSwapSettings = {\n slippage: userSlippage.toString(),\n disabledSwappersGroups: disabledLiquiditySources,\n };\n\n const newSwap = calculatePendingSwap(\n inputAmount.toString(),\n confiremedRoute,\n getWalletsForNewSwap(selectedWallets),\n swapSettings,\n false,\n meta\n );\n\n console.log('new swap:', newSwap);\n return newSwap;\n } else if (!proceedAnyway) {\n confirmSwap.proceedAnyway = true;\n useConfirmSwapStore.setState(confirmSwap);\n }\n return undefined;\n })\n .then((result) => {\n abortController = null;\n unsubscribeFromBestRouteStore();\n unsubscribeFromWalletsStore();\n return result;\n })\n .catch((error) => {\n abortController = null;\n if (error.code === 'ERR_CANCELED') {\n useConfirmSwapStore.setState({\n errors: [],\n warnings: [],\n loading: false,\n proceedAnyway: false,\n });\n unsubscribeFromBestRouteStore();\n unsubscribeFromWalletsStore();\n }\n\n const status = error.response?.status;\n\n useConfirmSwapStore.setState((prevState) => ({\n loading: false,\n errors: prevState.errors.concat({\n type: ConfirmSwapErrorTypes.REQUEST_FAILED,\n status,\n }),\n }));\n });\n\n return newSwap || undefined;\n};\n","import { Typography } from '@rango-dev/ui';\nimport React from 'react';\nimport { ChangeSlippageButton } from '../ChangeSlippageButton';\n\ninterface PropTypes {\n minRequiredSlippage: number | null;\n}\n\nexport function MinRequiredSlippage({ minRequiredSlippage }: PropTypes) {\n return (\n <Typography variant=\"body2\">\n slippage is low =&gt; We recommend you to increase slippage to at least\n {minRequiredSlippage}\n for this route.\n <ChangeSlippageButton />\n </Typography>\n );\n}\n","import React from 'react';\nimport { Typography } from '@rango-dev/ui';\nimport { ConfirmSwapError, ConfirmSwapErrorTypes } from '../store/confirmSwap';\nimport { MinRequiredSlippage } from './warnings/MinRequiredSlippage';\n\nexport function ConfirmSwapErrors(errors: ConfirmSwapError[]) {\n return errors.flatMap((error) => {\n switch (error.type) {\n case ConfirmSwapErrorTypes.NO_ROUTE:\n return (\n <Typography variant=\"body2\">\n No routes found. Please try again later.\n </Typography>\n );\n case ConfirmSwapErrorTypes.REQUEST_FAILED:\n return (\n <Typography variant=\"body2\">{`Failed to confirm swap ${\n error.status ? `'status': ${error.status})` : ''\n }, please try again.`}</Typography>\n );\n\n case ConfirmSwapErrorTypes.ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS:\n return (\n <Typography variant=\"body2\">\n Route updated and price impact is too high, try again later!\n </Typography>\n );\n case ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE:\n return (\n <MinRequiredSlippage\n minRequiredSlippage={error.minRequiredSlippage}\n />\n );\n default:\n return [];\n }\n });\n}\n","import { Typography } from '@rango-dev/ui';\nimport React from 'react';\n\ninterface PropTypes {\n messages: string[];\n}\n\nexport function BalanceWarnings({ messages }: PropTypes) {\n return (\n <div>\n {messages.map((warning) => (\n <Typography variant=\"body2\">{warning}</Typography>\n ))}\n </div>\n );\n}\n","import React from 'react';\nimport { Typography } from '@rango-dev/ui';\nimport {\n ConfirmSwapWarnings,\n ConfirmSwapWarningTypes,\n} from '../store/confirmSwap';\nimport { BalanceWarnings } from './warnings/BalanceWarnings';\n\nexport function ConfirmSwapWarnings(warnings: ConfirmSwapWarnings[]) {\n return warnings.flatMap((warning) => {\n switch (warning.type) {\n case ConfirmSwapWarningTypes.ROUTE_UPDATED:\n return <Typography variant=\"body2\">Route has been updated.</Typography>;\n case ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED:\n return (\n <Typography variant=\"body2\">{`Output amount changed to ${warning.newOutputAmount} \n (${warning.percentageChange}% change).`}</Typography>\n );\n\n case ConfirmSwapWarningTypes.ROUTE_SWAPPERS_UPDATED:\n return (\n <Typography variant=\"body2\">\n Route swappers has been updated.\n </Typography>\n );\n case ConfirmSwapWarningTypes.ROUTE_COINS_UPDATED:\n return (\n <Typography variant=\"body2\">\n Route internal coins has been updated.\n </Typography>\n );\n case ConfirmSwapWarningTypes.INSUFFICIENT_BALANCE:\n return <BalanceWarnings messages={warning.messages} />;\n default:\n return [];\n }\n });\n}\n","import React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { ConfirmSwap } from '@rango-dev/ui';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useSettingsStore } from '../store/settings';\nimport { ConfirmSwapExtraMessages } from '../components/warnings/ConfirmSwapExtraMessages';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { confirmSwap, useConfirmSwapStore } from '../store/confirmSwap';\nimport { ConfirmSwapErrors } from '../components/ConfirmSwapErrors';\nimport { ConfirmSwapWarnings } from '../components/ConfirmSwapWarnings';\nimport { useManager } from '@rango-dev/queue-manager-react';\nimport { useUiStore } from '../store/ui';\n\nexport function ConfirmSwapPage() {\n const setSelectedSwap = useUiStore.use.setSelectedSwap();\n const { navigateBackFrom } = useNavigateBack();\n const { manager } = useManager();\n const navigate = useNavigate();\n\n const bestRoute = useBestRouteStore.use.bestRoute();\n\n const loading = useConfirmSwapStore.use.loading();\n const warnings = useConfirmSwapStore.use.warnings();\n const errors = useConfirmSwapStore.use.errors();\n const slippage = useSettingsStore.use.slippage();\n const customSlippage = useSettingsStore.use.customSlippage();\n const selectedSlippage = customSlippage || slippage;\n\n return (\n <ConfirmSwap\n onConfirm={() => {\n confirmSwap().then((swap) => {\n if (swap) {\n manager?.create('swap', { swapDetails: swap });\n setSelectedSwap(swap.requestId);\n navigate(navigationRoutes.swaps + `/${swap.requestId}`, {\n replace: true,\n });\n }\n });\n }}\n onBack={navigateBackFrom.bind(null, navigationRoutes.confirmSwap)}\n bestRoute={bestRoute}\n loading={loading}\n errors={ConfirmSwapErrors(errors)}\n warnings={ConfirmSwapWarnings(warnings)}\n extraMessages={\n <ConfirmSwapExtraMessages selectedSlippage={selectedSlippage} />\n }\n confirmButtonTitle={\n warnings.length > 0 || errors.length > 0\n ? 'Proceed anyway!'\n : 'Confirm swap!'\n }\n confirmButtonDisabled={errors.length > 0}\n />\n );\n}\n","import { Manager } from '@rango-dev/queue-manager-core';\nimport {\n PendingSwapWithQueueID,\n SwapStorage,\n} from '@rango-dev/queue-manager-rango-preset';\n\nexport const getPendingSwaps = (manager: Manager | undefined) => {\n const result: PendingSwapWithQueueID[] = [];\n\n manager?.getAll().forEach((q, id) => {\n const storage = q.list.getStorage() as SwapStorage;\n\n if (storage?.swapDetails) {\n result.push({\n id,\n swap: storage?.swapDetails,\n });\n }\n });\n\n return result.sort(\n (a, b) => Number(b.swap.creationTime) - Number(a.swap.creationTime)\n );\n};\n","import { History } from '@rango-dev/ui';\nimport { useManager } from '@rango-dev/queue-manager-react';\nimport React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { getPendingSwaps } from '../utils/queue';\nimport { useUiStore } from '../store/ui';\n\nexport function HistoryPage() {\n const setSelectedSwap = useUiStore.use.setSelectedSwap();\n const navigate = useNavigate();\n const { navigateBackFrom } = useNavigateBack();\n const { manager } = useManager();\n const pendingSwaps = getPendingSwaps(manager).map(({ swap }) => swap);\n\n return (\n <History\n //todo: move PendingSwap type to rango-types\n //@ts-ignore\n list={pendingSwaps}\n onSwapClick={(requestId) => {\n setSelectedSwap(requestId);\n navigate(navigationRoutes.swaps + `/${requestId}`);\n }}\n onBack={navigateBackFrom.bind(null, navigationRoutes.swaps)}\n />\n );\n}\n","import { LiquiditySourcesSelector } from '@rango-dev/ui';\nimport React from 'react';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { useMetaStore } from '../store/meta';\nimport { useSettingsStore } from '../store/settings';\nimport { removeDuplicateFrom } from '../utils/common';\n\nexport function LiquiditySourcePage() {\n const { swappers } = useMetaStore.use.meta();\n const toggleLiquiditySource = useSettingsStore.use.toggleLiquiditySource();\n const disabledLiquiditySources =\n useSettingsStore.use.disabledLiquiditySources();\n const toggleAllLiquiditySources =\n useSettingsStore.use.toggleAllLiquiditySources();\n\n const { navigateBackFrom } = useNavigateBack();\n\n const uniqueSwappersGroups: Array<{\n title: string;\n logo: string;\n type: 'BRIDGE' | 'AGGREGATOR' | 'DEX';\n selected: boolean;\n }> = [];\n removeDuplicateFrom(swappers.map((s) => s.swapperGroup))\n .map((swapperGroup) => {\n return swappers.find((s) => s.swapperGroup === swapperGroup);\n })\n .find((s) => {\n if (s) {\n for (const type of s.types) {\n uniqueSwappersGroups.push({\n title: s.swapperGroup,\n logo: s.logo,\n type,\n selected: !disabledLiquiditySources.includes(s.swapperGroup),\n });\n }\n }\n });\n\n return (\n <LiquiditySourcesSelector\n toggleAll={toggleAllLiquiditySources}\n list={uniqueSwappersGroups}\n onChange={(liquiditySource) =>\n toggleLiquiditySource(liquiditySource.title)\n }\n onBack={navigateBackFrom.bind(null, navigationRoutes.liquiditySources)}\n />\n );\n}\n","import React from 'react';\nimport { BlockchainSelector } from '@rango-dev/ui';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useMetaStore } from '../store/meta';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { navigationRoutes } from '../constants/navigationRoutes';\n\ninterface PropTypes {\n type: 'from' | 'to';\n}\n\nexport function SelectChainPage(props: PropTypes) {\n const { type } = props;\n\n const { blockchains } = useMetaStore.use.meta();\n const loadingStatus = useMetaStore.use.loadingStatus();\n const fromChain = useBestRouteStore.use.fromChain();\n const toChain = useBestRouteStore.use.toChain();\n const setFromChain = useBestRouteStore.use.setFromChain();\n const setToChain = useBestRouteStore.use.setToChain();\n const setFromToken = useBestRouteStore.use.setFromToken();\n const setToToken = useBestRouteStore.use.setToToken();\n\n const { navigateBackFrom } = useNavigateBack();\n\n return (\n <BlockchainSelector\n type={type === 'from' ? 'Source' : 'Destination'}\n list={blockchains}\n selected={type === 'from' ? fromChain : toChain}\n loadingStatus={loadingStatus}\n onChange={(chain) => {\n if (type === 'from') setFromChain(chain);\n else setToChain(chain);\n if (type === 'from' && fromChain?.name != chain.name)\n setFromToken(null);\n if (type === 'to' && toChain?.name != chain.name) setToToken(null);\n navigateBackFrom(navigationRoutes.fromChain);\n }}\n onBack={navigateBackFrom.bind(null, navigationRoutes.fromChain)}\n />\n );\n}\n","import React from 'react';\nimport { TokenSelector } from '@rango-dev/ui';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useMetaStore } from '../store/meta';\nimport { Token } from 'rango-sdk';\nimport { numberToString } from '../utils/numbers';\nimport BigNumber from 'bignumber.js';\nimport { getBalanceFromWallet } from '../utils/wallets';\nimport { useWalletsStore } from '../store/wallets';\nimport { sortedTokens } from '../utils/wallets';\nimport { ZERO } from '../constants/numbers';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { navigationRoutes } from '../constants/navigationRoutes';\n\ninterface PropTypes {\n type: 'from' | 'to';\n}\n\nexport interface TokenWithBalance extends Token {\n balance?: {\n amount: string;\n usdValue: string;\n };\n}\n\nexport function SelectTokenPage(props: PropTypes) {\n const { type } = props;\n const { navigateBackFrom } = useNavigateBack();\n\n const { tokens } = useMetaStore.use.meta();\n const fromChain = useBestRouteStore.use.fromChain();\n const toChain = useBestRouteStore.use.toChain();\n const fromToken = useBestRouteStore.use.fromToken();\n const toToken = useBestRouteStore.use.toToken();\n const setFromToken = useBestRouteStore.use.setFromToken();\n const setToToken = useBestRouteStore.use.setToToken();\n\n const balance = useWalletsStore.use.balances();\n\n const tokenWithSelectedChain = tokens.filter((token) => {\n if (type === 'from') return token.blockchain === fromChain?.name;\n return token.blockchain === toChain?.name;\n });\n\n const TokensWithBalance: TokenWithBalance[] = tokenWithSelectedChain.map(\n (token) => {\n const tokenAmount = numberToString(\n new BigNumber(\n getBalanceFromWallet(\n balance,\n token.blockchain,\n token.symbol,\n token.address\n )?.amount || ZERO\n )\n );\n\n let tokenUsdValue = '';\n if (token.usdPrice)\n tokenUsdValue = numberToString(\n new BigNumber(\n getBalanceFromWallet(\n balance,\n token.blockchain,\n token.symbol,\n token.address\n )?.amount || ZERO\n ).multipliedBy(token.usdPrice)\n );\n return {\n ...token,\n balance: {\n amount: tokenAmount !== '0' ? tokenAmount : '',\n usdValue: tokenUsdValue !== '0' ? tokenUsdValue : '',\n },\n };\n }\n );\n\n const sortedTokenList = sortedTokens(TokensWithBalance, type, balance);\n\n return (\n <TokenSelector\n type={type === 'from' ? 'Source' : 'Destination'}\n list={sortedTokenList}\n selected={type === 'from' ? fromToken : toToken}\n onChange={(token) => {\n if (type === 'from') setFromToken(token);\n else setToToken(token);\n navigateBackFrom(navigationRoutes.fromToken);\n }}\n onBack={navigateBackFrom.bind(null, navigationRoutes.fromToken)}\n />\n );\n}\n","import React from 'react';\nimport { Settings } from '@rango-dev/ui';\nimport { useSettingsStore } from '../store/settings';\nimport { useMetaStore } from '../store/meta';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { removeDuplicateFrom } from '../utils/common';\nimport {\n MAX_SLIPPAGE,\n MIN_SLIPPGAE,\n SLIPPAGES,\n} from '../constants/swapSettings';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\n\nexport function SettingsPage() {\n const slippage = useSettingsStore.use.slippage();\n const setSlippage = useSettingsStore.use.setSlippage();\n const disabledLiquiditySources =\n useSettingsStore.use.disabledLiquiditySources();\n const customSlippage = useSettingsStore.use.customSlippage();\n const setCustomSlippage = useSettingsStore.use.setCustomSlippage();\n const theme = useSettingsStore.use.theme();\n const setTheme = useSettingsStore.use.setTheme();\n const { swappers } = useMetaStore.use.meta();\n const navigate = useNavigate();\n const { navigateBackFrom } = useNavigateBack();\n\n const infiniteApprove = useSettingsStore.use.infiniteApprove();\n const toggleInfiniteApprove = useSettingsStore.use.toggleInfiniteApprove();\n const uniqueSwappersGroups: Array<{\n title: string;\n logo: string;\n type: 'BRIDGE' | 'AGGREGATOR' | 'DEX';\n selected: boolean;\n }> = [];\n removeDuplicateFrom(swappers.map(s => s.swapperGroup))\n .map(swapperGroup => {\n return swappers.find(s => s.swapperGroup === swapperGroup);\n })\n .find(s => {\n if (s) {\n for (const type of s.types) {\n uniqueSwappersGroups.push({\n title: s.swapperGroup,\n logo: s.logo,\n type,\n selected: !disabledLiquiditySources.includes(s.swapperGroup),\n });\n }\n }\n });\n\n return (\n <Settings\n slippages={SLIPPAGES}\n selectedSlippage={slippage}\n onSlippageChange={slippage => setSlippage(slippage)}\n liquiditySources={uniqueSwappersGroups}\n selectedLiquiditySources={uniqueSwappersGroups.filter((s) => s.selected)}\n onLiquiditySourcesClick={navigate.bind(\n null,\n navigationRoutes.liquiditySources\n )}\n onBack={navigateBackFrom.bind(null, navigationRoutes.settings)}\n customSlippage={customSlippage || NaN}\n onCustomSlippageChange={setCustomSlippage}\n minSlippage={MIN_SLIPPGAE}\n maxSlippage={MAX_SLIPPAGE}\n selectedTheme={theme}\n onThemeChange={setTheme}\n infiniteApprove={infiniteApprove}\n toggleInfiniteApprove={toggleInfiniteApprove}\n />\n );\n}\n","import {\n Alert,\n SecondaryPage,\n styled,\n Wallet,\n Typography,\n} from '@rango-dev/ui';\nimport React, { useEffect, useState } from 'react';\nimport { getlistWallet } from '../utils/wallets';\nimport { WalletType } from '@rango-dev/wallets-shared';\nimport { useWallets } from '@rango-dev/wallets-core';\nimport { useUiStore } from '../store/ui';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { navigationRoutes } from '../constants/navigationRoutes';\n\nconst ListContainer = styled('div', {\n display: 'grid',\n gap: '.5rem',\n gridTemplateColumns: ' repeat(2, minmax(0, 1fr))',\n height: '450px',\n alignContent: 'baseline',\n padding: '0 0.5rem',\n});\n\nconst AlertContainer = styled('div', {\n paddingBottom: '$16',\n});\nexport function WalletsPage() {\n const { navigateBackFrom } = useNavigateBack();\n const { state, disconnect, getWalletInfo, connect } = useWallets();\n const wallets = getlistWallet(\n state,\n getWalletInfo,\n Object.values(WalletType)\n );\n const [walletErrorMessage, setWalletErrorMessage] = useState('');\n const toggleConnectWalletsButton =\n useUiStore.use.toggleConnectWalletsButton();\n\n const onSelectWallet = async (type: WalletType) => {\n const wallet = state(type);\n try {\n if (walletErrorMessage) setWalletErrorMessage('');\n if (wallet.connected) {\n await disconnect(type);\n } else {\n await connect(type);\n }\n } catch (e) {\n setWalletErrorMessage('Error: ' + e.message);\n }\n };\n\n useEffect(() => {\n toggleConnectWalletsButton();\n return () => toggleConnectWalletsButton();\n }, []);\n\n return (\n <SecondaryPage\n title=\"Select Wallet\"\n textField={false}\n onBack={navigateBackFrom.bind(null, navigationRoutes.wallets)}\n >\n <>\n {walletErrorMessage && (\n <AlertContainer>\n <Alert type=\"error\">\n <Typography variant=\"body2\">{walletErrorMessage}</Typography>\n </Alert>\n </AlertContainer>\n )}\n <ListContainer>\n {wallets.map((info, index) => (\n <Wallet {...info} key={index} onClick={onSelectWallet} />\n ))}\n </ListContainer>\n </>\n </SecondaryPage>\n );\n}\n","import React, { useEffect } from 'react';\nimport { ConfirmWallets } from '@rango-dev/ui';\nimport { useNavigate } from 'react-router-dom';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useWalletsStore } from '../store/wallets';\nimport { useWallets } from '@rango-dev/wallets-core';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport {\n getKeplrCompatibleConnectedWallets,\n getRequiredChains,\n getSelectableWallets,\n isExperimentalChain,\n} from '../utils/wallets';\nimport { requiredWallets } from '../utils/swap';\nimport { decimalNumber } from '../utils/numbers';\nimport { useMetaStore } from '../store/meta';\nimport { Network, WalletType } from '@rango-dev/wallets-shared';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\n\nexport function ConfirmWalletsPage() {\n const navigate = useNavigate();\n const { navigateBackFrom } = useNavigateBack();\n const bestRoute = useBestRouteStore.use.bestRoute();\n\n const { blockchains } = useMetaStore.use.meta();\n const accounts = useWalletsStore.use.accounts();\n const selectedWallets = useWalletsStore.use.selectedWallets();\n const initSelectedWallets = useWalletsStore.use.initSelectedWallets();\n const setSelectedWallet = useWalletsStore.use.setSelectedWallet();\n\n const { getWalletInfo, connect } = useWallets();\n const confirmDisabled = !requiredWallets(bestRoute).every((chain) =>\n selectedWallets.map((wallet) => wallet.chain).includes(chain)\n );\n\n const firstStep = bestRoute?.result?.swaps[0];\n const lastStep =\n bestRoute?.result?.swaps[bestRoute?.result?.swaps.length - 1];\n\n const fromAmount = decimalNumber(firstStep?.fromAmount, 3);\n const toAmount = decimalNumber(lastStep?.toAmount, 3);\n useEffect(() => {\n initSelectedWallets();\n }, []);\n\n const selectableWallets = getSelectableWallets(\n accounts,\n selectedWallets,\n getWalletInfo\n );\n\n const handleConnectChain = (wallet: string) => {\n const network = wallet as Network;\n getKeplrCompatibleConnectedWallets(selectableWallets).forEach(\n (compatibleWallet: WalletType) => connect?.(compatibleWallet, network)\n );\n };\n\n return (\n <ConfirmWallets\n requiredWallets={getRequiredChains(bestRoute)}\n selectableWallets={selectableWallets}\n onBack={navigateBackFrom.bind(null, navigationRoutes.confirmWallets)}\n swap={bestRoute!}\n fromAmount={fromAmount}\n toAmount={toAmount}\n onConfirm={() =>\n navigate(navigationRoutes.confirmSwap, { replace: true })\n }\n onChange={(wallet) => setSelectedWallet(wallet)}\n confirmDisabled={confirmDisabled}\n handleConnectChain={(wallet) => handleConnectChain(wallet)}\n isExperimentalChain={(wallet) =>\n getKeplrCompatibleConnectedWallets(selectableWallets).length > 0\n ? isExperimentalChain(blockchains, wallet)\n : false\n }\n />\n );\n}\n","import React from 'react';\nimport copy from 'copy-to-clipboard';\n\nexport default function useCopyToClipboard(resetInterval?: number) {\n const [isCopied, setCopied] = React.useState(false);\n\n const handleCopy = React.useCallback((text: string | number) => {\n copy(text.toString());\n setCopied(true);\n }, []);\n\n React.useEffect(() => {\n let timeout: NodeJS.Timeout;\n if (isCopied && resetInterval) {\n timeout = setTimeout(() => setCopied(false), resetInterval);\n }\n return () => {\n clearTimeout(timeout);\n };\n }, [isCopied, resetInterval]);\n\n return [isCopied, handleCopy] as const;\n}\n","import React from 'react';\nimport { useManager } from '@rango-dev/queue-manager-react';\nimport { SwapHistory } from '@rango-dev/ui';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { getPendingSwaps } from '../utils/queue';\nimport { useUiStore } from '../store/ui';\nimport useCopyToClipboard from '../hooks/useCopyToClipboard';\n\nexport function SwapDetailsPage() {\n const selectedSwapRequestId = useUiStore.use.selectedSwapRequestId();\n const { navigateBackFrom } = useNavigateBack();\n const { manager } = useManager();\n const [isCopied, handleCopy] = useCopyToClipboard(2000);\n\n const pendingSwaps = getPendingSwaps(manager);\n const selectedSwap = pendingSwaps.find(\n ({ swap }) => swap.requestId === selectedSwapRequestId\n )?.swap;\n\n return (\n <SwapHistory\n onBack={navigateBackFrom.bind(null, navigationRoutes.swapDetails)}\n //todo: move PendingSwap type to rango-types\n //@ts-ignore\n pendingSwap={selectedSwap}\n onCopy={handleCopy}\n isCopied={isCopied}\n //todo: implement swap cancellation (move queueManager logic to queueManager/rango-preset)\n onCancel={(requestId) => console.log(requestId)}\n />\n );\n}\n","import React from 'react';\nimport { useRoutes } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { ConfirmSwapPage } from '../pages/ConfirmSwapPage';\nimport { HistoryPage } from '../pages/HistoryPage';\nimport { Home } from '../pages/Home';\nimport { LiquiditySourcePage } from '../pages/LiquiditySourcesPage';\nimport { SelectChainPage } from '../pages/SelectChainPage';\nimport { SelectTokenPage } from '../pages/SelectTokenPage';\nimport { SettingsPage } from '../pages/SettingsPage';\nimport { WalletsPage } from '../pages/WalletsPage';\nimport { ConfirmWalletsPage } from '../pages/ConfirmWalletsPage';\nimport { SwapDetailsPage } from '../pages/SwapDetailsPage';\n\nexport const AppRoutes = () =>\n useRoutes([\n { path: navigationRoutes.home, element: <Home /> },\n {\n path: navigationRoutes.fromChain,\n element: <SelectChainPage type=\"from\" />,\n },\n { path: navigationRoutes.toChain, element: <SelectChainPage type=\"to\" /> },\n {\n path: navigationRoutes.fromToken + '/*',\n element: <SelectTokenPage type=\"from\" />,\n },\n { path: navigationRoutes.toToken, element: <SelectTokenPage type=\"to\" /> },\n { path: navigationRoutes.settings, element: <SettingsPage /> },\n {\n path: navigationRoutes.liquiditySources,\n element: <LiquiditySourcePage />,\n },\n { path: navigationRoutes.swaps, element: <HistoryPage /> },\n {\n path: navigationRoutes.swapDetails,\n element: <SwapDetailsPage />,\n },\n { path: navigationRoutes.wallets, element: <WalletsPage /> },\n { path: navigationRoutes.confirmSwap, element: <ConfirmSwapPage /> },\n { path: navigationRoutes.confirmWallets, element: <ConfirmWalletsPage /> },\n ]);\n","import { Button, AddWalletIcon, Typography, styled } from '@rango-dev/ui';\nimport React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { useWallets } from '@rango-dev/wallets-core';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useUiStore } from '../store/ui';\nimport { AppRoutes } from './AppRoutes';\nimport { useWalletsStore } from '../store/wallets';\nimport {\n calculateWalletUsdValue,\n getSelectableWallets,\n} from '../utils/wallets';\nimport { removeDuplicateFrom } from '../utils/common';\n\nconst Header = styled('div', {\n display: 'flex',\n width: '100%',\n justifyContent: 'end',\n});\n\nconst WalletImage = styled('img', {\n width: '$24',\n height: '$24',\n marginLeft: -15,\n marginRight: '$6',\n borderRadius: '99999px',\n});\n\nexport function Layout() {\n const navigate = useNavigate();\n const { balances, accounts, selectedWallets } = useWalletsStore();\n const { getWalletInfo } = useWallets();\n const connectedWalletsImages = removeDuplicateFrom(\n getSelectableWallets(accounts, selectedWallets, getWalletInfo).map(\n (w) => w.image\n )\n );\n\n const totalBalance = calculateWalletUsdValue(balances);\n const connectWalletsButtonDisabled =\n useUiStore.use.connectWalletsButtonDisabled();\n\n return (\n <>\n <Header>\n <Button\n size=\"small\"\n suffix={<AddWalletIcon size={20} />}\n variant=\"ghost\"\n flexContent\n onClick={() => {\n if (!connectWalletsButtonDisabled)\n navigate(navigationRoutes.wallets);\n }}\n >\n {connectedWalletsImages?.length ? (\n connectedWalletsImages.map((walletImage, index) => (\n <WalletImage key={index} src={walletImage} />\n ))\n ) : (\n <></>\n )}\n <Typography variant=\"body2\">\n {!accounts?.length ? 'Connect Wallet' : `$${totalBalance || 0}`}\n </Typography>\n </Button>\n </Header>\n <AppRoutes />\n </>\n );\n}\n","import { globalCss } from '@rango-dev/ui';\n\nexport const globalStyles = globalCss({\n '*': {\n '&::-webkit-scrollbar': { width: '$8' },\n '&::-webkit-scrollbar-thumb': {\n backgroundColor: '$neutrals400',\n },\n '&::-webkit-scrollbar-thumb:hover': {\n backgroundColor: '$neutrals500',\n },\n '&::-webkit-scrollbar-track': {\n backgroundColor: '$neutrals300',\n },\n },\n});\n","import { lightTheme, darkTheme } from '@rango-dev/ui';\nimport { useState, useEffect } from 'react';\nimport { useMetaStore } from '../store/meta';\nimport { useSettingsStore } from '../store/settings';\n\nexport function useTheme() {\n const theme = useSettingsStore.use.theme();\n const fetchMeta = useMetaStore.use.fetchMeta();\n\n const [OSTheme, setOSTheme] = useState(lightTheme);\n useEffect(() => {\n (async () => {\n await fetchMeta();\n })();\n\n const switchTheme = (event: MediaQueryListEvent) => {\n if (event.matches) setOSTheme(darkTheme);\n else setOSTheme(lightTheme);\n };\n\n if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n setOSTheme(darkTheme);\n }\n\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', switchTheme);\n return () => {\n window.matchMedia('(prefers-color-scheme: dark)').removeEventListener('change', switchTheme);\n };\n }, []);\n\n const getActiveTheme = () => {\n if (theme === 'auto') return OSTheme;\n else return theme === 'dark' ? darkTheme : lightTheme;\n };\n\n return { activeTheme: getActiveTheme() };\n}\n","import { SwapContainer } from '@rango-dev/ui';\nimport React from 'react';\nimport { AppRouter } from './components/AppRouter';\nimport { useMetaStore } from './store/meta';\nimport { Events, Provider } from '@rango-dev/wallets-core';\nimport { allProviders } from '@rango-dev/provider-all';\nimport { EventHandler } from '@rango-dev/wallets-core/dist/wallet';\nimport { Network } from '@rango-dev/wallets-shared';\nimport {\n prepareAccountsForWalletStore,\n walletAndSupportedChainsNames,\n} from './utils/wallets';\nimport { useWalletsStore } from './store/wallets';\nimport { Layout } from './components/Layout';\nimport { globalStyles } from './globalStyles';\nimport { useTheme } from './hooks/useTheme';\nimport { isEvmBlockchain } from 'rango-sdk';\n\nconst providers = allProviders();\n\nexport const SwapBox: React.FC = () => {\n globalStyles();\n const { activeTheme } = useTheme();\n const { blockchains } = useMetaStore.use.meta();\n const disconnectWallet = useWalletsStore.use.disconnectWallet();\n const connectWallet = useWalletsStore.use.connectWallet();\n const evmBasedChainNames = blockchains\n .filter(isEvmBlockchain)\n .map((chain) => chain.name);\n\n const onUpdateState: EventHandler = (type, event, value, supportedChains) => {\n if (event === Events.ACCOUNTS) {\n if (value) {\n const supportedChainNames: Network[] | null =\n //@ts-ignore\n walletAndSupportedChainsNames(supportedChains);\n const data = prepareAccountsForWalletStore(\n type,\n value,\n evmBasedChainNames,\n supportedChainNames\n );\n connectWallet(data);\n } else {\n disconnectWallet(type);\n }\n }\n };\n\n return (\n <Provider\n allBlockChains={blockchains}\n providers={providers}\n onUpdateState={onUpdateState}\n >\n <div id=\"pageContainer\" className={activeTheme}>\n <SwapContainer>\n <AppRouter>\n <Layout />\n </AppRouter>\n </SwapContainer>\n </div>\n </Provider>\n );\n};\n"],"names":["navigationRoutes","home","fromChain","fromToken","toChain","toToken","settings","liquiditySources","swaps","wallets","confirmSwap","confirmWallets","swapDetails","ZERO","BigNumber","removeDuplicateFrom","array","Array","from","Set","areEqual","array1","array2","length","every","v","i","getBestRouteToTokenUsdPrice","bestRoute","result","to","usdPrice","isNumberOfSwapsChanged","route1","route2","route1Swaps","route2Swaps","isRouteSwappersUpdated","route1Swappers","map","swap","swapperId","route2Swappers","isRouteInternalCoinsUpdated","route1InternalCoins","symbol","route2InternalCoins","isRouteChanged","getRequiredBalanceOfWallet","selectedWallet","fee","relatedFeeStatus","find","item","blockchain","chain","wallet","address","toLowerCase","requiredAssets","createSelectors","_store","store","use","k","Object","keys","getState","s","httpService","RangoClient","process","env","REACT_APP_API_KEY","SLIPPAGES","DEFAULT_SLIPPAGE","HIGH_SLIPPAGE","MAX_SLIPPAGE","MIN_SLIPPGAE","useMetaStore","create","set","meta","blockchains","popularTokens","swappers","tokens","loadingStatus","fetchMeta","response","getAllMetadata","chainThatHasTokenInMetaResponse","t","enabledChains","filter","enabled","includes","name","sort","a","b","error","useSettingsStore","persist","subscribeWithSelector","slippage","customSlippage","infiniteApprove","disabledLiquiditySources","theme","setSlippage","setCustomSlippage","toggleAllLiquiditySources","state","swappersGroup","swapper","swapperGroup","toggleInfiniteApprove","toggleLiquiditySource","liquiditySource","concat","setTheme","secondsToString","seconds","toString","padStart","minutes","parseInt","numberToString","number","minDecimals","maxDecimals","n","roundingMode","maxI","toFixed","eq","gte","toFormat","Math","min","max","pow","isEqualTo","totalArrivalTime","data","reduce","estimatedTimeInSeconds","decimalNumber","parseFloat","getStateWallet","connected","WalletStatus","CONNECTED","connecting","CONNECTING","installed","NOT_INSTALLED","DISCONNECTED","getlistWallet","getWalletInfo","list","excludedWallets","WalletType","UNKNOWN","TERRA_STATION","LEAP","type","img","image","installLink","walletAndSupportedChainsNames","supportedChains","blockchainMeta","prepareAccountsForWalletStore","accounts","evmBasedChains","supportedChainNames","addAccount","network","newAccount","walletType","push","forEach","account","readAccountAddress","hasLimitation","isSupported","isUnknown","Network","Unknown","notSupportedNetworkByWallet","isUknownAndEvmBased","isEvmAddress","isEvmBasedChain","evmChainsSupportedByWallet","getRequiredChains","route","currentStepFromBlockchain","currentStepToBlockchain","lastAddedWallet","getSelectableWallets","selectedWallets","connectedWallets","selected","getBalanceFromWallet","balances","selectedChainBalances","balance","bl","amount","isAccountAndBalanceMatched","makeBalanceFor","retrivedBalance","blockChain","explorerUrl","loading","tokenBalance","asset","ticker","rawAmount","decimal","decimals","shiftedBy","logo","getUsdPrice","resetBalanceState","calculateWalletUsdValue","uniqueAccountAddresses","uniqueBalane","acc","current","findIndex","modifiedWalletBlockchains","modifiedWalletBlockchain","has","add","accountAddress","total","flatMap","multipliedBy","plus","numberWithThousandSeperator","parts","split","replace","join","sortedTokens","position","walletSymbols","gt","sortedList","size","tokenA","tokenB","compareBalance","isSecondaryCoin","tokenAUsdValue","tokenBUsdValue","allTokens","token","toUpperCase","isExperimentalChain","cosmosExperimentalChainInfo","getCosmosExperimentalChainInfo","entries","_ref","isCosmosBlockchain","getKeplrCompatibleConnectedWallets","selectableWallets","connectedWalletTypes","KEPLR_COMPATIBLE_WALLETS","compatibleWallet","getOutputRatio","inputUsdValue","outputUsdValue","lte","div","minus","outputRatioHasWarning","outputRatio","hasLimitError","minimum","fromAmountMinValue","maximum","fromAmountMaxValue","isExclusive","fromAmountRestrictionType","fromAmount","lt","LimitErrorMessage","fromAmountRangeError","recommendation","getSwapButtonState","loadingMetaStatus","highValueLoss","priceImpactCanNotBeComputed","needsToWarnEthOnPath","title","disabled","hasWarning","canComputePriceImpact","inputAmount","calculatePendingSwap","validateBalanceOrFee","simulationResult","Error","creationTime","Date","getTime","finishTime","requestId","status","isPaused","extraMessage","extraMessageSeverity","extraMessageDetail","extraMessageErrorCode","networkStatusExtraMessage","networkStatusExtraMessageDetail","lastNotificationTime","steps","index","id","swapperType","types","fromBlockchain","toBlockchain","fromSymbol","fromSymbolAddress","fromDecimals","fromAmountPrecision","fromLogo","toSymbol","toSymbolAddress","toDecimals","toLogo","startTransactionTime","feeInUsd","getUsdFeeOfStep","expectedOutputAmountHumanReadable","toAmount","outputAmount","networkStatus","executedTransactionId","externalTransactionId","trackingCode","cosmosTransaction","solanaTransaction","starknetTransaction","starknetApprovalTransaction","tronTransaction","tronApprovalTransaction","evmTransaction","evmApprovalTransaction","transferTransaction","diagnosisUrl","internalSteps","fromBlockchainLogo","toBlockchainLogo","swapperLogo","requiredWallets","step","totalFeeInUsd","expenseType","unitPrice","getTotalFeeInUsd","totalFee","hasHighFee","getMinRequiredSlippage","slippages","recommendedSlippage","hasProperSlippage","userSlippage","minRequiredSlippage","createBestRouteRequestBody","checkPrerequisites","selectedWalletsMap","chainAndAccounts","connectedWallet","addresses","requestBody","swapperGroups","swappersGroupsExclude","getWalletsForNewSwap","getRouteOutputAmount","getPercentageChange","oldValue","newValue","isOutputAmountChangedALot","oldRoute","newRoute","oldOutputAmount","newOutputAmount","percentageChange","toNumber","getBalanceWarnings","validationStatus","walletsSortedByRequiredWallets","selectedWallet1","selectedWallet2","indexOf","ok","currentAmount","requiredAmount","reason","warningMessage","getUsdValue","useBestRouteStore","setBestRoute","setFromChain","setFromToken","setToChain","setToToken","setInputAmount","bestRouteStore","settingsStore","abortController","fetchBestRoute","abort","AbortController","setState","getBestRoute","signal","then","res","catch","code","message","subscribe","bind","equalityFn","prevState","SearchParams","useUiStore","connectWalletsButtonDisabled","selectedSwapRequestId","toggleConnectWalletsButton","setSelectedSwap","searchParamsToToken","searchParams","symbolAndAddress","UpdateUrl","firstRender","useRef","setSearchParams","useSearchParams","location","useLocation","firstRenderSearchParams","search","searchParamsRef","useEffect","params","createSearchParams","value","key","pathname","fromChainString","fromTokenString","toChainString","toTokenString","FROM_CHAIN","FROM_TOKEN","TO_CHAIN","TO_TOKEN","FROM_AMOUNT","fronChainString","get","ButtonsContainer","styled","display","HeaderButtons","props","onClickRefresh","navigate","useNavigate","React","Tooltip","content","Button","variant","onClick","RetryIcon","HistoryIcon","SettingsIcon","HeaderContainer","justifyContent","alignItems","width","padding","Header","Typography","useWalletsStore","connectWallet","getWalletsDetails","disconnectWallet","initSelectedWallets","requiredChains","anyWalletSelected","firstWalletWithMatchedChain","setSelectedWallet","Box","flexDirection","Container","boxSizing","backgroundColor","borderRadius","StyledImage","maxHeight","Options","ImagePlaceholder","height","OutputContainer","flexGrow","border","paddingLeft","paddingRight","TokenInfo","tokenBalanceReal","ItemSuffix","style","InfoCircleIcon","color","AngleDownIcon","className","prefix","src","suffix","align","marginRight","displayName","TextField","autoFocus","placeholder","right","bottom","onChange","event","onAmountChange","target","undefined","paddingTop","Logo","fill","margin","StyledAnchor","textDecoration","BottomLogo","href","xmlns","viewBox","d","SwithFromAndTo","count","Footer","errorMessages","genericServerError","SwitchButtonContainer","top","BestRouteContainer","Alerts","Home","waningMessage","isRouterInContext","useInRouterContext","setCount","useState","fetchingBestRoute","bestRouteError","swithFromAndTo","prev","errorMessage","showBestRoute","outToInRatio","swapButtonState","highFee","VerticalSwapIcon","BestRoute","feeWarning","totalTime","Alert","Route","ref","children","AppRouter","Router","MemoryRouter","StyledButton","marginTop","ChangeSlippageButton","HighSlippageWarning","selectedSlippage","ConfirmSwapExtraMessages","highSlippage","useNavigateBack","navigateBackFrom","currentRoute","window","history","idx","useConfirmSwapStore","errors","warnings","proceedAnyway","ConfirmSwapErrorTypes","ConfirmSwapWarningTypes","initialRoute","swapSettings","disabledSwappersGroups","newSwap","console","log","unsubscribeFromBestRouteStore","shallow","unsubscribeFromWalletsStore","selectedWalletsChanged","prevWallet","confiremedRoute","requestAmount","NO_ROUTE","routeChanged","newRouteOutputUsdValue","ROUTE_UPDATED","ROUTE_SWAPPERS_UPDATED","ROUTE_COINS_UPDATED","ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS","ROUTE_AND_OUTPUT_AMOUNT_UPDATED","balanceWarnings","enoughBalance","INSUFFICIENT_BALANCE","messages","INSUFFICIENT_SLIPPAGE","noErrors","noWarnings","REQUEST_FAILED","MinRequiredSlippage","ConfirmSwapErrors","BalanceWarnings","warning","ConfirmSwapWarnings","ConfirmSwapPage","manager","useManager","ConfirmSwap","onConfirm","onBack","extraMessages","confirmButtonTitle","confirmButtonDisabled","getPendingSwaps","getAll","q","storage","getStorage","Number","HistoryPage","pendingSwaps","History","onSwapClick","LiquiditySourcePage","uniqueSwappersGroups","LiquiditySourcesSelector","toggleAll","SelectChainPage","BlockchainSelector","SelectTokenPage","tokenWithSelectedChain","TokensWithBalance","tokenAmount","tokenUsdValue","usdValue","sortedTokenList","TokenSelector","SettingsPage","Settings","onSlippageChange","selectedLiquiditySources","onLiquiditySourcesClick","NaN","onCustomSlippageChange","minSlippage","maxSlippage","selectedTheme","onThemeChange","ListContainer","gap","gridTemplateColumns","alignContent","AlertContainer","paddingBottom","WalletsPage","disconnect","connect","useWallets","values","walletErrorMessage","setWalletErrorMessage","onSelectWallet","e","SecondaryPage","textField","info","Wallet","ConfirmWalletsPage","confirmDisabled","firstStep","lastStep","handleConnectChain","ConfirmWallets","useCopyToClipboard","resetInterval","isCopied","setCopied","handleCopy","useCallback","text","copy","timeout","setTimeout","clearTimeout","SwapDetailsPage","selectedSwap","SwapHistory","pendingSwap","onCopy","onCancel","AppRoutes","useRoutes","path","element","WalletImage","marginLeft","Layout","connectedWalletsImages","w","totalBalance","AddWalletIcon","flexContent","walletImage","globalStyles","globalCss","useTheme","OSTheme","setOSTheme","lightTheme","switchTheme","matches","darkTheme","matchMedia","addEventListener","removeEventListener","getActiveTheme","activeTheme","providers","allProviders","SwapBox","evmBasedChainNames","isEvmBlockchain","onUpdateState","Events","ACCOUNTS","Provider","allBlockChains","SwapContainer"],"mappings":"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"}