@ref-finance/ref-sdk 1.3.2 → 1.3.3

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":"ref-sdk.esm.js","sources":["../src/constant.ts","../src/stable-swap.ts","../src/swap-widget/constant.ts","../src/metaIcons.ts","../src/indexer.ts","../src/v1-swap/parallelSwapLogic.ts","../src/v1-swap/smartRoutingLogic.js","../src/v1-swap/swap.ts","../src/utils.ts","../src/near.ts","../src/ref.ts","../src/dcl-swap/dcl-pool.ts","../src/error.ts","../src/v1-swap/instantSwap.ts","../src/v1-swap/pool.ts","../src/swap-widget/state.tsx","../node_modules/style-inject/dist/style-inject.es.js","../src/swap-widget/components.tsx","../src/swap-widget/index.tsx","../src/swap-widget/defaultTokenList.ts","../src/dcl-swap/swap.ts","../src/dcl-swap/limit-order.ts"],"sourcesContent":["import { TokenMetadata } from './types';\n\nexport const FEE_DIVISOR = 10000;\n\nexport const STABLE_LP_TOKEN_DECIMALS = 18;\nexport const RATED_POOL_LP_TOKEN_DECIMALS = 24;\nexport const STORAGE_TO_REGISTER_WITH_MFT = '0.1';\nexport const ONE_YOCTO_NEAR = '0.000000000000000000000001';\nlet ENV: string | undefined = '';\nexport function getConfig(\n env: string | undefined = ENV ||\n process.env.NEAR_ENV ||\n process.env.REACT_APP_REF_SDK_ENV\n) {\n ENV = env;\n switch (env) {\n case 'mainnet':\n return {\n networkId: 'mainnet',\n nodeUrl: 'https://rpc.mainnet.near.org',\n walletUrl: 'https://wallet.near.org',\n WRAP_NEAR_CONTRACT_ID: 'wrap.near',\n REF_FI_CONTRACT_ID: 'v2.ref-finance.near',\n REF_TOKEN_ID: 'token.v2.ref-finance.near',\n indexerUrl: 'https://indexer.ref.finance',\n explorerUrl: 'https://testnet.nearblocks.io',\n REF_DCL_SWAP_CONTRACT_ID: 'dclv2.ref-labs.near',\n };\n case 'testnet':\n return {\n networkId: 'testnet',\n nodeUrl: 'https://rpc.testnet.near.org',\n walletUrl: 'https://wallet.testnet.near.org',\n indexerUrl: 'https://testnet-indexer.ref-finance.com',\n WRAP_NEAR_CONTRACT_ID: 'wrap.testnet',\n REF_FI_CONTRACT_ID: 'ref-finance-101.testnet',\n REF_TOKEN_ID: 'ref.fakes.testnet',\n explorerUrl: 'https://testnet.nearblocks.io',\n REF_DCL_SWAP_CONTRACT_ID: 'dclv2.ref-dev.testnet',\n };\n default:\n return {\n networkId: 'mainnet',\n nodeUrl: 'https://rpc.mainnet.near.org',\n walletUrl: 'https://wallet.near.org',\n REF_FI_CONTRACT_ID: 'v2.ref-finance.near',\n WRAP_NEAR_CONTRACT_ID: 'wrap.near',\n REF_TOKEN_ID: 'token.v2.ref-finance.near',\n indexerUrl: 'https://indexer.ref.finance',\n explorerUrl: 'https://nearblocks.io',\n REF_DCL_SWAP_CONTRACT_ID: 'dclv2.ref-labs.near',\n };\n }\n}\n\nexport let config = getConfig();\n\nexport let REF_FI_CONTRACT_ID = config.REF_FI_CONTRACT_ID;\n\nexport let WRAP_NEAR_CONTRACT_ID = config.WRAP_NEAR_CONTRACT_ID;\n\nexport let REF_TOKEN_ID = config.REF_TOKEN_ID;\n\nexport let WNEAR_META_DATA: TokenMetadata = {\n id: WRAP_NEAR_CONTRACT_ID,\n name: 'wNEAR',\n symbol: 'wNEAR',\n decimals: 24,\n icon: 'https://assets.ref.finance/images/w-NEAR-no-border.png',\n};\n\nexport let REF_META_DATA = {\n decimals: 18,\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A\",\n id: REF_TOKEN_ID,\n name: 'Ref Finance Token',\n symbol: 'REF',\n};\n\nexport const NEAR_META_DATA: TokenMetadata = {\n id: 'NEAR',\n name: 'NEAR',\n symbol: 'NEAR',\n decimals: 24,\n icon:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA2AAAANgCAIAAADF8JzzAAAACXBIWXMAABYlAAAWJQFJUiTwAAAgAElEQVR4nO3d7VXb2rqw4eQd57/cgZ0KLCqwVwWIChAVYCrAqQBTgUUFERVEVBBTwTYdmArWO/by3uzMfBA+bHlK87r+nTP2WBFSjO/o8SN//Pvvvz8AAMB//T9nAgCA7wlEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAAC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ICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAID/+fDhw/8H0I0VimXUJpsAAAAASUVORK5CYII=',\n};\n\nexport const TokenLinks = {\n NEAR: 'https://awesomenear.com/near-protocol',\n wNEAR: 'https://awesomenear.com/near-protocol',\n REF: 'https://awesomenear.com/ref-finance',\n OCT: 'https://awesomenear.com/octopus-network',\n PARAS: 'https://awesomenear.com/paras',\n SKYWARD: 'https://awesomenear.com/skyward-finance',\n FLX: 'https://awesomenear.com/flux',\n PULSE: 'https://awesomenear.com/pulse',\n DBIO: 'https://awesomenear.com/debio-network',\n MYRIA: 'https://awesomenear.com/myriad-social',\n PXT: 'https://awesomenear.com/cryptoheroes',\n HAPI: 'https://awesomenear.com/hapi',\n OIN: 'https://awesomenear.com/oin-finance',\n ABR: 'https://awesomenear.com/allbridge',\n '1MIL': 'https://awesomenear.com/1millionnfts',\n MARMAJ: 'https://awesomenear.com/marmaj-foundation',\n marmaj: 'https://awesomenear.com/marmaj-foundation',\n USN: 'https://awesomenear.com/decentral-bank',\n '1INCH': 'https://awesomenear.com/1inch-network',\n GRT: 'https://awesomenear.com/the-graph',\n LINK: 'https://awesomenear.com/chainlink',\n Cheddar: 'https://awesomenear.com/cheddar-farm',\n AURORA: 'https://awesomenear.com/aurora-dev',\n $META: 'https://awesomenear.com/meta-pool',\n UMINT: 'https://awesomenear.com/youminter',\n UTO: 'https://awesomenear.com/secret-skellies-society',\n DEIP: 'https://awesomenear.com/deip',\n WOO: 'https://awesomenear.com/woo-dex',\n LINEAR: 'https://awesomenear.com/linear-protocol',\n PEM: 'https://awesomenear.com/pembrock-finance',\n ATO: 'https://awesomenear.com/atocha-protocol',\n SEAT: 'https://awesomenear.com/seatlab-nft',\n FAR: 'https://awesomenear.com/few-and-far',\n BSTN: 'https://awesomenear.com/bastion',\n BRRR: 'https://awesomenear.com/burrow',\n XNL: 'https://awesomenear.com/chronicle',\n KSW: 'https://awesomenear.com/killswitch-finance',\n STNEAR: 'https://awesomenear.com/meta-pool',\n NearX: 'https://awesomenear.com/stader',\n SD: 'https://awesomenear.com/stader',\n DISC: 'https://awesomenear.com/discovol',\n} as Record<string, string>;\n\nexport const CONSTANT_D = 1.0001;\n\nexport const POINTLEFTRANGE = -800000;\nexport const POINTRIGHTRANGE = 800000;\n\nexport const switchEnv = () => {\n config = getConfig();\n REF_FI_CONTRACT_ID = config.REF_FI_CONTRACT_ID;\n WRAP_NEAR_CONTRACT_ID = config.WRAP_NEAR_CONTRACT_ID;\n REF_TOKEN_ID = config.REF_TOKEN_ID;\n REF_META_DATA = {\n decimals: 18,\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A\",\n id: REF_TOKEN_ID,\n name: 'Ref Finance Token',\n symbol: 'REF',\n };\n WNEAR_META_DATA = {\n id: WRAP_NEAR_CONTRACT_ID,\n name: 'wNEAR',\n symbol: 'wNEAR',\n decimals: 24,\n icon: 'https://assets.ref.finance/images/w-NEAR-no-border.png',\n };\n return {\n config,\n REF_FI_CONTRACT_ID,\n WRAP_NEAR_CONTRACT_ID,\n REF_TOKEN_ID,\n REF_META_DATA,\n WNEAR_META_DATA,\n };\n};\n","import { StablePool } from './types';\nimport { FEE_DIVISOR } from './constant';\n\nimport {\n toReadableNumber,\n toNonDivisibleNumber,\n scientificNotationToString,\n} from './utils';\n\nimport Big from 'big.js';\n\nimport _ from 'lodash';\n\nconst tradeFee = (amount: number, trade_fee: number) => {\n return (amount * trade_fee) / FEE_DIVISOR;\n};\n\nexport const calc_d = (amp: number, c_amounts: number[]) => {\n const token_num = c_amounts.length;\n const sum_amounts = _.sum(c_amounts);\n let d_prev = 0;\n let d = sum_amounts;\n for (let i = 0; i < 256; i++) {\n let d_prod = d;\n for (let c_amount of c_amounts) {\n d_prod = (d_prod * d) / (c_amount * token_num);\n }\n d_prev = d;\n const ann = amp * token_num ** token_num;\n const numerator = d_prev * (d_prod * token_num + ann * sum_amounts);\n const denominator = d_prev * (ann - 1) + d_prod * (token_num + 1);\n d = numerator / denominator;\n if (Math.abs(d - d_prev) <= 1) break;\n }\n return d;\n};\n\nexport const calc_y = (\n amp: number,\n x_c_amount: number,\n current_c_amounts: number[],\n index_x: number,\n index_y: number\n) => {\n const token_num = current_c_amounts.length;\n const ann = amp * token_num ** token_num;\n const d = calc_d(amp, current_c_amounts);\n let s = x_c_amount;\n let c = (d * d) / x_c_amount;\n for (let i = 0; i < token_num; i++) {\n if (i !== index_x && i !== index_y) {\n s += current_c_amounts[i];\n c = (c * d) / current_c_amounts[i];\n }\n }\n c = (c * d) / (ann * token_num ** token_num);\n const b = d / ann + s;\n let y_prev = 0;\n let y = d;\n for (let i = 0; i < 256; i++) {\n y_prev = y;\n const y_numerator = y ** 2 + c;\n const y_denominator = 2 * y + b - d;\n y = y_numerator / y_denominator;\n if (Math.abs(y - y_prev) <= 1) break;\n }\n\n return y;\n};\n\nexport const calc_swap = (\n amp: number,\n in_token_idx: number,\n in_c_amount: number,\n out_token_idx: number,\n old_c_amounts: number[],\n trade_fee: number\n) => {\n const y = calc_y(\n amp,\n in_c_amount + old_c_amounts[in_token_idx],\n old_c_amounts,\n in_token_idx,\n out_token_idx\n );\n const dy = old_c_amounts[out_token_idx] - y;\n const fee = tradeFee(dy, trade_fee);\n const amount_swapped = dy - fee;\n return [amount_swapped, fee, dy];\n};\n\nexport const getSwappedAmount = (\n tokenInId: string,\n tokenOutId: string,\n amountIn: string,\n stablePool: StablePool,\n STABLE_LP_TOKEN_DECIMALS: number\n) => {\n const amp = stablePool.amp;\n const trade_fee = stablePool.total_fee;\n\n // depended on pools\n const in_token_idx = stablePool.token_account_ids.findIndex(\n id => id === tokenInId\n );\n const out_token_idx = stablePool.token_account_ids.findIndex(\n id => id === tokenOutId\n );\n\n const rates = stablePool.rates.map(r =>\n toReadableNumber(STABLE_LP_TOKEN_DECIMALS, r)\n );\n\n const base_old_c_amounts = stablePool.c_amounts.map(amount =>\n toReadableNumber(STABLE_LP_TOKEN_DECIMALS, amount)\n );\n\n const old_c_amounts = base_old_c_amounts\n .map((amount, i) =>\n toNonDivisibleNumber(\n STABLE_LP_TOKEN_DECIMALS,\n scientificNotationToString(\n new Big(amount || 0).times(new Big(rates[i])).toString()\n )\n )\n )\n .map(amount => Number(amount));\n\n const in_c_amount = Number(\n toNonDivisibleNumber(\n STABLE_LP_TOKEN_DECIMALS,\n scientificNotationToString(\n new Big(amountIn).times(new Big(rates[in_token_idx])).toString()\n )\n )\n );\n\n const [amount_swapped, fee, dy] = calc_swap(\n amp,\n in_token_idx,\n in_c_amount,\n out_token_idx,\n old_c_amounts,\n trade_fee\n );\n\n return [\n amount_swapped / Number(rates[out_token_idx]),\n fee,\n dy / Number(rates[out_token_idx]),\n ];\n};\n","import { getConfig } from '../constant';\nexport const REF_WIDGET_STAR_TOKEN_LIST_KEY =\n 'REF_WIDGET_STAR_TOKEN_LIST_VALUE';\n\nexport const REF_WIDGET_ALL_TOKENS_LIST_KEY =\n 'REF_WIDGET_ALL_TOKENS_LIST_VALUE';\n\nexport const REF_WIDGET_SWAP_IN_KEY = 'REF_WIDGET_SWAP_IN_VALUE';\n\nexport const REF_WIDGET_SWAP_OUT_KEY = 'REF_WIDGET_SWAP_OUT_VALUE';\n\nexport const REF_WIDGET_SWAP_DETAIL_KEY = 'REF_WIDGET_SWAP_DETAIL_VALUE';\n\nexport const DEFAULT_START_TOKEN_LIST_TESTNET = [\n 'wrap.testnet',\n 'usdtt.fakes.testnet',\n 'usdt.fakes.testnet',\n 'ref.fakes.testnet',\n 'usdn.testnet',\n 'eth.fakes.testnet',\n];\n\nexport const DEFAULT_START_TOKEN_LIST_MAINNET = [\n 'wrap.near',\n 'usdt.tether-token.near',\n 'dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near',\n 'token.v2.ref-finance.near',\n 'usn',\n 'aurora',\n 'token.sweat',\n];\n\nexport interface Theme {\n container: string; // container background\n buttonBg: string; // button background\n primary: string; // primary theme color\n secondary: string; // secondary theme color\n borderRadius: string; // border radius\n fontFamily: string; // font family\n hover: string; // hovering color\n active: string; // active color\n secondaryBg: string; // secondary background color\n borderColor: string; // border color\n iconDefault: string; // default icon color\n iconHover: string; // icon hovering color\n refIcon?: string; // ref icon color\n}\n\nexport const defaultTheme: Theme = {\n container: '#FFFFFF',\n buttonBg: '#00C6A2',\n primary: '#000000',\n secondary: '#7E8A93',\n borderRadius: '4px',\n fontFamily: 'sans-serif',\n hover: 'rgba(126, 138, 147, 0.2)',\n active: 'rgba(126, 138, 147, 0.2)',\n secondaryBg: '#F7F7F7',\n borderColor: 'rgba(126, 138, 147, 0.2)',\n iconDefault: 'rgba(126, 138, 147, 1)',\n iconHover: 'rgba(62, 62, 62, 1)',\n};\n\nexport const defaultDarkModeTheme: Theme = {\n container: '#26343E',\n buttonBg: '#00C6A2',\n primary: '#FFFFFF',\n secondary: '#7E8A93',\n borderRadius: '4px',\n fontFamily: 'sans-serif',\n hover: 'rgba(126, 138, 147, 0.2)',\n active: 'rgba(126, 138, 147, 0.2)',\n secondaryBg: 'rgba(0, 0, 0, 0.2)',\n borderColor: 'rgba(126, 138, 147, 0.2)',\n iconDefault: 'rgba(126, 138, 147, 1)',\n iconHover: 'rgba(183, 201, 214, 1)',\n refIcon: 'white',\n};\n","const icons: { [tokenId: string]: string } = {\n '4691937a7508860f876c9c0a2a617e7d9e945d4b.factory.bridge.near':\n 'https://ref-finance-images.s3.amazonaws.com/images/woo-wtrue.png',\n 'wrap.near':\n 'data:image/png;base64,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',\n 'wrap.testnet':\n 'data:image/png;base64,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',\n '6b175474e89094c44da98b954eedeac495271d0f.factory.bridge.near':\n 'https://assets.ref.finance/images/4943.png',\n 'berryclub.ek.near': 'https://assets.ref.finance/images/banana.png',\n 'dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near':\n 'https://assets.ref.finance/images/825.png',\n '1f9840a85d5af5bf1d1762f925bdaddc4201f984.factory.bridge.near':\n 'https://assets.ref.finance/images/7083.png',\n '514910771af9ca656af840dff83e8264ecf986ca.factory.bridge.near':\n 'https://assets.ref.finance/images/1975.png',\n 'a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.factory.bridge.near':\n 'https://assets.ref.finance/images/3408.png',\n '2260fac5e5542a773aa44fbcfedf7c193bc2c599.factory.bridge.near':\n 'https://assets.ref.finance/images/3717.png',\n '7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9.factory.bridge.near':\n 'https://assets.ref.finance/images/7278.png',\n 'a0b73e1ff0b80914ab6fe0444e65848c4c34450b.factory.bridge.near':\n 'https://assets.ref.finance/images/3635.png',\n '50d1c9771902476076ecfc8b2a83ad6b9355a4c9.factory.bridge.near':\n 'https://assets.ref.finance/images/4195.png',\n '4fabb145d64652a948d72533023f6e7a623c7c53.factory.bridge.near':\n 'https://assets.ref.finance/images/4687.png',\n '6f259637dcd74c767781e37bc6133cd6a68aa161.factory.bridge.near':\n 'https://assets.ref.finance/images/2502.png',\n '6b3595068778dd592e39a122f4f5a5cf09c90fe2.factory.bridge.near':\n 'https://assets.ref.finance/images/6758.png',\n 'c011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f.factory.bridge.near':\n 'https://assets.ref.finance/images/2586.png',\n 'c944e90c64b2c07662a292be6244bdf05cda44a7.factory.bridge.near':\n 'https://assets.ref.finance/images/6719.png',\n '9f8f72aa9304c8b593d555f12ef6589cc3a579a2.factory.bridge.near':\n 'https://assets.ref.finance/images/1518.png',\n '0bc529c00c6401aef6d220be8c6ea1667f6ad93e.factory.bridge.near':\n 'https://assets.ref.finance/images/5864.png',\n 'c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2.factory.bridge.near':\n 'https://assets.ref.finance/images/2396.png',\n '0316eb71485b0ab14103307bf65a021042c6d380.factory.bridge.near':\n 'https://assets.ref.finance/images/6941.png',\n '111111111117dc0aa78b770fa6a738034120c302.factory.bridge.near':\n 'https://assets.ref.finance/images/8104.png',\n 'f5cfbc74057c610c8ef151a439252680ac68c6dc.factory.bridge.near':\n 'https://assets.ref.finance/images/55sGoBm.png',\n 'de30da39c46104798bb5aa3fe8b9e0e1f348163f.factory.bridge.near':\n 'https://assets.ref.finance/images/10052.png',\n 'a4ef4b0b23c1fc81d3f9ecf93510e64f58a4a016.factory.bridge.near':\n 'https://assets.ref.finance/images/4222.png',\n 'token.cheddar.near': 'https://assets.ref.finance/images/cheddar.png',\n 'farm.berryclub.ek.near': 'https://assets.ref.finance/images/cucumber.png',\n 'd9c2d319cd7e6177336b0a9c93c21cb48d84fb54.factory.bridge.near':\n 'https://assets.ref.finance/images/HAPI.png',\n};\n\nexport default icons;\n","import { config, WRAP_NEAR_CONTRACT_ID, NEAR_META_DATA } from './constant';\nimport { REF_WIDGET_ALL_TOKENS_LIST_KEY } from './swap-widget/constant';\nimport { REPLACE_TOKENS } from './ref';\nimport metaIconDefaults from './metaIcons';\n\nexport const getTokenPriceList = async (): Promise<any> => {\n return await fetch(config.indexerUrl + '/list-token-price', {\n method: 'GET',\n headers: { 'Content-type': 'application/json; charset=UTF-8' },\n })\n .then(res => res.json())\n .then(list => {\n return list;\n });\n};\n\nexport const getTokens = async (reload?: boolean) => {\n const storagedTokens =\n typeof window !== 'undefined' && !reload\n ? localStorage.getItem(REF_WIDGET_ALL_TOKENS_LIST_KEY)\n : null;\n\n return storagedTokens\n ? JSON.parse(storagedTokens)\n : await fetch(config.indexerUrl + '/list-token', {\n method: 'GET',\n headers: { 'Content-type': 'application/json; charset=UTF-8' },\n })\n .then(res => res.json())\n .then(tokens => {\n const newTokens = Object.values(tokens).reduce(\n (acc: any, cur: any, i) => {\n const id = Object.keys(tokens)[i];\n return {\n ...acc,\n [id]: {\n ...cur,\n id,\n icon:\n !cur.icon || REPLACE_TOKENS.includes(id)\n ? metaIconDefaults[id]\n : cur.icon,\n },\n };\n },\n {}\n );\n\n return newTokens;\n })\n .then(res => {\n typeof window !== 'undefined' &&\n !reload &&\n localStorage.setItem(\n REF_WIDGET_ALL_TOKENS_LIST_KEY,\n JSON.stringify(res)\n );\n return res;\n });\n};\n\nexport const getWhiteListTokensIndexer = async (whiteListIds: string[]) => {\n return await fetch(config.indexerUrl + '/list-token', {\n method: 'GET',\n headers: { 'Content-type': 'application/json; charset=UTF-8' },\n })\n .then(res => res.json())\n .then(res => {\n return whiteListIds.reduce((acc, cur, i) => {\n if (\n !res[cur] ||\n !Object.values(res[cur]) ||\n Object.values(res[cur]).length === 0\n )\n return acc;\n\n return {\n ...acc,\n [cur]: { ...res[cur], id: cur },\n };\n }, {});\n })\n .then(res => {\n return Object.values(res);\n });\n};\n","//@ts-nocheck\nimport Big from 'big.js';\n\nimport { Pool } from '../types';\n\nBig.RM = 0;\nBig.DP = 40;\nBig.NE = -40;\nBig.PE = 40;\n\ninterface FormatedPool extends Pool {\n x?: string;\n y?: string;\n gamma_bps?: Big;\n}\n\n///////////////////////////////\n// Parallel Swap Logic Below //\n///////////////////////////////\n\n/** formatPoolNew\n * This function appends to the existing standard Pool struct and adds attributes that simplify the parallel swap algorithms.\n * Adds attributes \"x\" (for input token reserves in pool), \"y\" (for output token reserves in pool), and \"gamma_bps\" (for 1- fee in bps)\n * Our convention for our algorithm has been to use \"x\" as the input token and \"y\" as the output token.\n * @param pool AMM structure containing reserves of inputToken and outputToken\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns newFormatPool\n */\nexport function formatPoolNew(\n pool: Pool,\n inputToken: string,\n outputToken: string\n) {\n let p: FormatedPool = pool;\n let x = p.supplies[inputToken];\n let y = p.supplies[outputToken];\n p['gamma_bps'] = new Big(10000).minus(p.fee);\n p['x'] = x;\n p['y'] = y;\n return p;\n}\n\n/** solveForMuFloat\n * This function takes the set of token pools, the total input of inputToken, and the names of inputToken and outputToken and\n * solves for the Lagrange Multiplier \"mu\". Note that mu must be allowed to be aritrary precision floating point number. Mu will\n * be used in subsequent function calls to determine the best allocations of intputToken to be made per pool.\n * For more detailed math on how this function was derived, please see the white paper:\n * https://github.com/giddyphysicist/ParallelSwapForRefFinance/blob/main/ParallelSwapWhitePaper.pdf\n * @param pools list of pools that contain inputToken and outputToken\n * @param totalDeltaX total allocation (among all pools) being input of inputToken\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns mu the lagrange multiplier value calculated for a set of pools and inputToken amount.\n */\nexport function solveForMuFloat(\n pools: Pool[],\n totalDeltaX: string,\n inputToken: string,\n outputToken: string\n) {\n if (pools.length > 0) {\n let numerator = new Big(totalDeltaX);\n let denominator = new Big(0);\n\n for (var i = 0; i < pools.length; i++) {\n let p = formatPoolNew(pools[i], inputToken, outputToken);\n let numAdd = new Big(p.x).times(10000).div(p.gamma_bps);\n numerator = numerator.plus(numAdd);\n let denomAdd = new Big(p.x)\n .times(p.y)\n .div(p.gamma_bps)\n .sqrt()\n .times(100);\n denominator = denominator.plus(denomAdd);\n }\n\n const mu = new Big(numerator).div(denominator);\n return mu;\n } else {\n // console.log('ERROR - could not find pools that satisfy token pair');\n const mu = NaN;\n return mu;\n }\n}\n\n/** calculate_dx_float\n * Once mu has been calculated for a set of pools and total input amount, the next step is\n * determining the total allocation per pool. This function evaluates the amount of input Token to be\n * allocated to the given pool. Note, in our original algorithmic convention, the 'x' variable was for the input token,\n * and the 'y' variable was for the output token. Here, the value dx is the part of the full amount of input token X.\n * Again, the detailed formulae for these operations can be found in the white paper referenced above.\n * @param mu the lagrange multiplier value calculated for a set of pools and inputToken amount.\n * @param pool AMM structure containing reserves of inputToken and outputToken\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns dxFloat the allocation amount determined for the given pool\n */\nexport function calculate_dx_float(\n mu: number | Big,\n pool: FormatedPool,\n inputToken: string,\n outputToken: string\n) {\n let p = formatPoolNew(pool, inputToken, outputToken);\n let radical = new Big(p.x).times(p.y).div(p.gamma_bps);\n let dxFloat = new Big(mu)\n .times(100)\n .times(radical.sqrt())\n .minus(new Big(p.x).times(10000).div(p.gamma_bps));\n return dxFloat;\n}\n\n/** calculate_dy_float\n * Once you have an allocation amount for a given pool, you can use the AMM constant-product formula to determine\n * the expected output amount of output Token.\n * Note, here, as earlier, our algorithmic convention uses \"y\" as the output token, and so \"dy\" is the fraction of\n * the total output of output Token, assuming there could be dy contributions from other parallel pools as well.\n * @param dx_float input allocation amount of inputToken for the given pool\n * @param pool a structure representing the reserves and fees for a given pool.\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns dyFloat the expected trade out amount out of outputToken\n */\nexport function calculate_dy_float(\n dx_float: number,\n pool: FormatedPool,\n inputToken: string,\n outputToken: string\n) {\n if (dx_float <= 0) {\n return new Big(0);\n }\n let p = formatPoolNew(pool, inputToken, outputToken);\n let dx = new Big(dx_float);\n let denom = new Big(10000).times(p.x).plus(new Big(p.gamma_bps).times(dx));\n let numerator = new Big(p.y).times(dx).times(p.gamma_bps);\n let dyFloat = numerator.div(denom).round();\n return dyFloat;\n}\n\n/** calculateOptimalOutput\n * This is the main function, which calculates optimal values of inputToken to swap into each pool.\n * @param pools list of relevant AMM pools containing inputToken and outputToken\n * @param inputAmount the numeric total amount of inputToken to be traded into the group of swap pools.\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns normalizedDxArray an array containing the amount allocations of inputToken per pool in the list of pools.\n */\nexport function calculateOptimalOutput(\n pools: Pool[],\n inputAmount: string,\n inputToken: string,\n outputToken: string\n) {\n let mu = solveForMuFloat(pools, inputAmount, inputToken, outputToken);\n let dxArray: Big[] = [];\n let negativeDxValsFlag = false;\n for (var i = 0; i < pools.length; i++) {\n let pool = formatPoolNew(pools[i], inputToken, outputToken);\n let dx = calculate_dx_float(mu, pool, inputToken, outputToken);\n if (dx.lt(0)) {\n negativeDxValsFlag = true;\n }\n let dxInt = new Big(dx).round();\n dxArray.push(dxInt);\n }\n if (negativeDxValsFlag) {\n dxArray = reducePools(pools, dxArray, inputAmount, inputToken, outputToken);\n }\n let dxArraySum = new Big(0);\n for (var i = 0; i < dxArray.length; i++) {\n dxArraySum = dxArraySum.plus(dxArray[i]);\n }\n let tempAllocationsArray = [];\n for (var i = 0; i < dxArray.length; i++) {\n let ndx = new Big(dxArray[i])\n .times(inputAmount)\n .div(dxArraySum)\n .round();\n tempAllocationsArray.push(ndx);\n }\n let allocationsArray = checkIntegerSumOfAllocations(\n tempAllocationsArray,\n inputAmount\n );\n let normalizedDxArray = [];\n for (var i = 0; i < allocationsArray.length; i++) {\n let ndx = allocationsArray[i];\n normalizedDxArray.push(BigInt(ndx));\n pools[i]['partialAmountIn'] = ndx.toString();\n }\n return normalizedDxArray;\n}\n\n/** reducePools\n * This function is used to implement part of the non-linear slack variables in the lagrange - multiplier\n * solution for parallel swap. Part of what comes out of the math is that sometimes, the optimal allocation for a pool\n * can be negative, which makes no physical sense. When this occurs, that particular pool needs to be flagged and the\n * lagrange constraint applied to force the allocation to be zero.\n * This function takes an already-solved set of pools, input allocation per pool, the total input amount, and the\n * inputToken name and outputToken name, and determines which, if any, allocations need to be set to zero.\n * However, when this occurs, and a pool is essentially ignored from the list, then the calculation for mu must be re-done.\n * So the calculateOptimalOutput function is then called on the reduced set of pools, and if no negative allocation values remain,\n * then the allocations on the reduced set is determined, and values of zero are put in for the 'failed' pools.\n * @param pools list of pools that contain inputToken and outputToken\n * @param dxArray list of input allocation per pool\n * @param inputAmount total amount of inputToken to be traded among the pools\n * @param inputToken the name of the inputToken\n * @param outputToken the name of the outputToken\n * @returns newFullDxVec the new full list of input allocations the same length as dxArray, containing zeros for failed pools.\n */\nexport function reducePools(\n pools: Pool[],\n dxArray: Big[],\n inputAmount: string,\n inputToken: string,\n outputToken: string\n) {\n let goodIndices = [];\n for (var i = 0; i < dxArray.length; i++) {\n let dx = dxArray[i];\n if (dx.gte(0)) {\n goodIndices.push(i);\n }\n }\n if (goodIndices.length < 1) {\n // console.log(\"ERROR OCCURRED -- ALL DX VALUES WERE NEGATIVE\")\n return dxArray;\n }\n let newPools = [];\n for (var j = 0; j < dxArray.length; j++) {\n if (goodIndices.includes(j)) {\n newPools.push(pools[j]);\n }\n }\n let newDxVec = calculateOptimalOutput(\n newPools,\n inputAmount,\n inputToken,\n outputToken\n );\n let goodInd2newdx = {};\n for (var k = 0; k < newDxVec.length; k++) {\n goodInd2newdx[goodIndices[k]] = newDxVec[k];\n }\n let newFullDxVec = [];\n for (var ii = 0; ii < pools.length; ii++) {\n if (goodIndices.includes(ii)) {\n newFullDxVec.push(goodInd2newdx[ii]);\n } else {\n newFullDxVec.push(0);\n }\n }\n return newFullDxVec;\n}\n\nexport function checkIntegerSumOfAllocations(\n allocations: Big[] | string[] | BigInt[],\n totalInput: Big | string | BigInt\n) {\n var totalInput = new Big(totalInput);\n var allocations:\n | Big[]\n | string[]\n | BigInt[] = allocations.map((item: Big | string | BigInt) =>\n new Big(item).round()\n );\n let alloSum = allocations\n .map(item => new Big(item))\n .reduce((a, b) => a.plus(b), new Big(0));\n let offset = totalInput.minus(alloSum);\n //get largest allocation.\n let currMax = new Big(0);\n let currMaxInd = 0;\n for (var i = 0; i < allocations.length; i++) {\n if (allocations[i].gt(currMax)) {\n currMaxInd = i;\n currMax = allocations[i];\n }\n }\n let newAllocations = [];\n for (var j = 0; j < allocations.length; j++) {\n if (j === currMaxInd) {\n newAllocations.push(allocations[j].plus(offset).toString());\n } else {\n newAllocations.push(allocations[j].toString());\n }\n }\n return newAllocations;\n}\n","/* eslint-disable no-undef */\n////////////////////////////////////////////////////////////////////////////\n// SMART ROUTE SWAP LOGIC\n////////////////////////////////////////////////////////////////////////////\nimport Big from 'big.js';\nimport { checkIntegerSumOfAllocations } from './parallelSwapLogic';\n\nimport { TokenMetadata } from '../types';\n\nimport { ftGetTokenMetadata } from '../ref';\n\nimport { percentLess, toNonDivisibleNumber } from '../utils';\nBig.RM = 0;\nBig.DP = 40;\nBig.NE = -40;\nBig.PE = 40;\n\nfunction bisqrt(value) {\n // For some ridiculous reason, the .sqrt() method for Big decimals is extremely slow (~10-20ms),\n // which isn't so bad until you need to use it a bunch of times.\n // Since we're dealing with super large numbers anyway, we can convert the Big decimal number into a BigInt,\n // then run this BigInt Newton iteration square root function instead, and then convert back into a\n // Big number. And it speeds up the operation by a crazy factor, ~10x faster.\n if (value < BigInt(0)) {\n throw 'square root of negative numbers is not supported';\n }\n\n if (value < BigInt(2)) {\n return value;\n }\n\n function newtonIteration(n, x0) {\n const x1 = (n / x0 + x0) >> BigInt(1);\n if (x0 === x1 || x0 === x1 - BigInt(1)) {\n return x0;\n }\n return newtonIteration(n, x1);\n }\n\n return newtonIteration(value, BigInt(1));\n}\n\nfunction getBetaForRoute(route, path) {\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n let p = route[0];\n var beta = new Big(p.reserves[path[0]]);\n } else if (route.length == 2) {\n let p1 = route[0];\n let p2 = route[1];\n var beta = new Big(p1.reserves[path[0]]).times(\n new Big(p2.reserves[path[1]])\n );\n }\n return beta;\n}\n\nfunction getEpsilonForRoute(route, path) {\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n // Single Hop case\n let p = route[0];\n let gamma = new Big(10000).minus(new Big(p.fee)).div(new Big(10000));\n var epsilon = Big(gamma);\n } else if (route.length == 2) {\n //Double Hop Case\n let p1 = route[0];\n let p2 = route[1];\n let gamma1 = new Big(10000).minus(new Big(p1.fee)).div(new Big(10000));\n let gamma2 = new Big(10000).minus(new Big(p2.fee)).div(Big(10000));\n var epsilon = new Big(p2.reserves[path[1]])\n .times(new Big(gamma1))\n .plus(new Big(p1.reserves[path[1]]).times(gamma1).times(gamma2));\n }\n return epsilon;\n}\n\nfunction getAlphaForRoute(route, path) {\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n //console.log('single hop')\n let p = route[0];\n let inputToken = path[0];\n let outputToken = path[1];\n let gamma = new Big(10000).minus(new Big(p.fee)).div(new Big(10000));\n let key1 = p.token1Id;\n let key2 = p.token2Id;\n let val1 = p.token1Supply;\n let val2 = p.token2Supply;\n p['reserves'] = { [key1]: val1, [key2]: val2 };\n var alpha = new Big(p.reserves[inputToken]).times(\n new Big(p.reserves[outputToken]).times(new Big(gamma))\n );\n } else if (route.length == 2) {\n //console.log('double hop')\n let p1 = route[0];\n let p2 = route[1];\n let key11 = p1.token1Id;\n let key12 = p1.token2Id;\n let val11 = p1.token1Supply;\n let val12 = p1.token2Supply;\n p1['reserves'] = { [key11]: val11, [key12]: val12 };\n let key21 = p2.token1Id;\n let key22 = p2.token2Id;\n let val21 = p2.token1Supply;\n let val22 = p2.token2Supply;\n p2['reserves'] = { [key21]: val21, [key22]: val22 };\n let inputToken = path[0];\n let middleToken = path[1];\n let outputToken = path[2];\n let gamma1 = new Big(10000).minus(Big(p1.fee)).div(new Big(10000));\n let gamma2 = new Big(10000).minus(new Big(p2.fee)).div(new Big(10000));\n let alpha1 = new Big(p1.reserves[inputToken])\n .times(new Big(p1.reserves[middleToken]))\n .times(gamma1);\n let alpha2 = new Big(p2.reserves[middleToken])\n .times(new Big(p2.reserves[outputToken]))\n .times(gamma2);\n var alpha = alpha1.times(alpha2);\n }\n return alpha;\n}\n\nfunction getAlphaSumFromRoutes(routes, nodeRoutes) {\n let alphaSum = new Big(0);\n for (var i in routes) {\n let route = routes[i];\n let nodeRoute = nodeRoutes[i];\n let alpha = getAlphaForRoute(route, nodeRoute);\n // console.log('alpha is...');\n // console.log(alpha.toString());\n // below, we are replacing the built-in Big sqrt() method with a\n // newton-iteration BigInt sqrt function, to speed it up by 10x.\n let radical = new Big(bisqrt(BigInt(new Big(alpha).round().toFixed())));\n // let radical = new Big(alpha).sqrt();\n let epsilon = getEpsilonForRoute(route, nodeRoute);\n let denom = new Big(epsilon);\n alphaSum = alphaSum.plus(radical.div(denom));\n }\n return alphaSum;\n}\n\nfunction getBetaSumFromRoutes(routes, nodeRoutes) {\n let betaSum = new Big(0);\n for (var i in routes) {\n let route = routes[i];\n let nodeRoute = nodeRoutes[i];\n let num = new Big(getBetaForRoute(route, nodeRoute));\n let denom = new Big(getEpsilonForRoute(route, nodeRoute));\n betaSum = betaSum.plus(num.div(denom));\n }\n return betaSum;\n}\n\nfunction getPhiFromRoutes(routes, nodeRoutes, totalInput) {\n let alphaSum = getAlphaSumFromRoutes(routes, nodeRoutes);\n let betaSum = getBetaSumFromRoutes(routes, nodeRoutes);\n let phi = new Big(totalInput).plus(betaSum).div(alphaSum);\n return phi;\n}\n\nfunction getAllocationForRoute(phi, route, path) {\n let alpha = getAlphaForRoute(route, path);\n let beta = getBetaForRoute(route, path);\n let epsilon = getEpsilonForRoute(route, path);\n // below, we are replacing the built-in Big sqrt() method with a\n // newton-iteration BigInt sqrt function, to speed it up by 10x.\n let allocation = new Big(phi)\n .abs()\n .times(new Big(bisqrt(BigInt(new Big(alpha).round().toFixed()))))\n .minus(beta)\n .div(epsilon);\n return allocation;\n}\n\nfunction getAllocationVectorForRoutes(phi, routes, nodeRoutes) {\n let allocationVec = [];\n for (var i in routes) {\n allocationVec.push(getAllocationForRoute(phi, routes[i], nodeRoutes[i]));\n }\n return allocationVec;\n}\n\nfunction getOptimalAllocationForRoutes(routes, nodeRoutes, totalInput) {\n // console.log(\"CALLING GET OPTIMAL ALLOCATION FOR ROUTES:\")\n // console.log(routes)\n var totalInput = new Big(totalInput);\n let phi = getPhiFromRoutes(routes, nodeRoutes, totalInput);\n // console.log('PHI CALCULATED TO BE...')\n // console.log(phi.toString())\n let allocations = getAllocationVectorForRoutes(phi, routes, nodeRoutes);\n if (allocations.every(item => item.lt(new Big(0)))) {\n allocations = allocations.map(item => item.times(new Big(-1.0)));\n }\n if (allocations.some(item => item.lt(new Big(0)))) {\n allocations = reduceRoutes(routes, nodeRoutes, allocations, totalInput);\n }\n let sumAllocations = allocations.reduce((a, b) => a.plus(b), new Big(0));\n let normalizedAllocations = allocations.map(a =>\n a.div(sumAllocations).times(new Big(totalInput))\n );\n return normalizedAllocations;\n}\n\nfunction reduceRoutes(routes, nodeRoutes, allocationVec, totalInput) {\n // console.log(\"RUNNING REDUCE ROUTES\")\n var totalInput = new Big(totalInput);\n let goodIndices = [];\n for (var i in allocationVec) {\n let dx = allocationVec[i];\n // console.log('DX IS...')\n // console.log(dx.toString())\n if (dx.gt(new Big(0))) {\n goodIndices.push(i);\n }\n }\n // console.log('GOOD INDICES ARE...');\n // console.log(goodIndices);\n let newRoutes = [];\n let newNodeRoutes = [];\n for (var i in goodIndices) {\n let goodIndex = goodIndices[i];\n newRoutes.push(routes[goodIndex]);\n newNodeRoutes.push(nodeRoutes[goodIndex]);\n }\n allocationVec = getOptimalAllocationForRoutes(\n newRoutes,\n newNodeRoutes,\n totalInput\n );\n let allocationDict = {};\n for (var i in goodIndices) {\n allocationDict[goodIndices[i]] = allocationVec[i];\n }\n var allocationVecNew = [];\n for (var i in routes) {\n if (goodIndices.includes(i)) {\n allocationVecNew.push(allocationDict[i]);\n } else {\n let zeroAllocation = new Big(0);\n allocationVecNew.push(zeroAllocation);\n }\n }\n return allocationVecNew;\n}\n\nfunction getNodeRoutesFromPathsAndPoolChains(paths, poolChains) {\n let multiplicity = [];\n for (var i in poolChains) {\n let pc = poolChains[i];\n let mul = pc\n .map(item => item.length)\n .reduce((elem1, elem2) => elem1 * elem2, 1);\n multiplicity.push(mul);\n }\n let nodeRoutes = [];\n for (var j in paths) {\n let path = paths[j];\n let m = multiplicity[j];\n for (var k = 0; k < m; k++) {\n nodeRoutes.push(path);\n }\n }\n return nodeRoutes;\n}\n\nfunction getPoolChainFromPaths(paths, pools, threshold = 0.001) {\n let poolChains = [];\n for (var pathInd in paths) {\n let path = paths[pathInd];\n let chain = [];\n let pairs = [];\n for (var i = 0; i < path.length - 1; i++) {\n pairs.push([path[i], path[i + 1]]);\n }\n for (var pairInd in pairs) {\n let pair = pairs[pairInd];\n // console.log(pair);\n let tokenPools = getPoolsByToken1ANDToken2(pools, pair[0], pair[1]);\n chain.push(tokenPools);\n }\n poolChains.push(chain);\n }\n // return poolChains;\n let culledPoolChains = getCulledPoolChains(poolChains, threshold);\n\n return culledPoolChains;\n}\n\nfunction getCulledPoolChains(poolChains, threshold = 0.001) {\n let newChains = [];\n for (var pathInd in poolChains) {\n let path = poolChains[pathInd];\n let newPath = [];\n for (var legInd in path) {\n let leg = path[legInd];\n let culledPath = cullPoolsWithInsufficientLiquidity(leg, threshold);\n newPath.push(culledPath);\n }\n newChains.push(newPath);\n }\n return newChains;\n}\n\nfunction getRoutesFromPoolChain(poolChains) {\n let routes = [];\n for (var pci in poolChains) {\n let poolChain = poolChains[pci];\n //get cartesian product of each pool chain to get the list of routes.\n let newRoutes = cartesianProduct(poolChain);\n routes.push(...newRoutes);\n }\n for (var i in routes) {\n if (!routes[i].length) {\n routes[i] = [routes[i]];\n }\n }\n return routes;\n}\n\nfunction getOutputSingleHop(pool, inputToken, outputToken, totalInput) {\n var totalInput = new Big(totalInput);\n // check if pool is forward or backward for inputToken/outputToken cf. token1Id/token2Id\n if (inputToken === pool.token1Id && outputToken === pool.token2Id) {\n // forward Pool\n var reserves = {\n [inputToken]: new Big(pool.token1Supply),\n [outputToken]: new Big(pool.token2Supply),\n };\n } else if (inputToken === pool.token2Id && outputToken === pool.token1Id) {\n // reverse pool\n var reserves = {\n [outputToken]: new Big(pool.token1Supply),\n [inputToken]: new Big(pool.token2Supply),\n };\n } else {\n return new Big(0);\n }\n let gamma = new Big(10000).minus(new Big(pool.fee)).div(new Big(10000));\n // console.log(totalInput)\n // console.log(gamma)\n // console.log(reserves)\n let num = totalInput.times(gamma).times(reserves[outputToken]);\n let denom = reserves[inputToken].plus(gamma.times(totalInput));\n return num.div(denom);\n}\n\nfunction getOutputDoubleHop(\n pools,\n inputToken,\n middleToken,\n outputToken,\n totalInput\n) {\n var totalInput = new Big(totalInput);\n for (var poolIndex in pools) {\n let p = pools[poolIndex];\n p['gamma'] = new Big(10000).minus(new Big(p.fee)).div(new Big(10000));\n }\n let p1 = pools[0];\n let p2 = pools[1];\n\n if (inputToken === p1.token1Id && middleToken === p1.token2Id) {\n // forward Pool\n p1['reserves'] = {\n [inputToken]: new Big(p1.token1Supply),\n [middleToken]: new Big(p1.token2Supply),\n };\n } else if (middleToken === p1.token1Id && inputToken === p1.token2Id) {\n //reverse pool\n p1['reserves'] = {\n [middleToken]: new Big(p1.token1Supply),\n [inputToken]: new Big(p1.token2Supply),\n };\n }\n\n if (middleToken === p2.token1Id && outputToken === p2.token2Id) {\n // forward Pool\n p2['reserves'] = {\n [middleToken]: new Big(p2.token1Supply),\n [outputToken]: new Big(p2.token2Supply),\n };\n } else if (outputToken === p2.token1Id && middleToken === p2.token2Id) {\n //reverse pool\n p2['reserves'] = {\n [outputToken]: new Big(p2.token1Supply),\n [middleToken]: new Big(p2.token2Supply),\n };\n }\n\n let c1 = new Big(p1.reserves[middleToken]);\n let a1 = new Big(p1.reserves[inputToken]);\n let c2 = new Big(p2.reserves[middleToken]);\n let b2 = new Big(p2.reserves[outputToken]);\n let gamma1 = p1.gamma;\n let gamma2 = p2.gamma;\n let num = totalInput\n .times(c1)\n .times(b2)\n .times(gamma1)\n .times(gamma2);\n let denom = c2\n .times(a1)\n .plus(\n totalInput.times(c2.times(gamma1).plus(c1.times(gamma1).times(gamma2)))\n );\n // denom = c2*a1 + totalInput * (c2*gamma1 + c1*gamma1*gamma2)\n\n return num.div(denom);\n}\n\nfunction getOutputFromRoute(route, nodeRoute, allocation) {\n if (new Big(allocation).eq(new Big(0))) {\n return new Big(0);\n } else {\n var allocation = new Big(allocation);\n }\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n // single hop\n let inputToken = nodeRoute[0];\n let outputToken = nodeRoute[1];\n let pool = route[0];\n var output = getOutputSingleHop(pool, inputToken, outputToken, allocation);\n } else if (route.length == 2) {\n // DOUBLE HOP\n let inputToken = nodeRoute[0];\n let middleToken = nodeRoute[1];\n let outputToken = nodeRoute[2];\n let pools = route;\n var output = getOutputDoubleHop(\n pools,\n inputToken,\n middleToken,\n outputToken,\n allocation\n );\n }\n return output;\n}\n\nfunction getOptOutputVec(routes, nodeRoutes, totalInput) {\n let allocations = getOptimalAllocationForRoutes(\n routes,\n nodeRoutes,\n totalInput\n );\n let result = [];\n for (var i in routes) {\n let route = routes[i];\n let nodeRoute = nodeRoutes[i];\n let allocation = allocations[i];\n let output = getOutputFromRoute(route, nodeRoute, allocation);\n result.push(output);\n }\n return {\n result: result,\n allocations: allocations,\n };\n //NOTE -- I made this return an object instead of the tuple returned in python. need to check the places it is called, and specify\n // result field instead of tuple 0 position, and allocations field instead of tuple 1 position.\n}\n\nfunction getBestOptInputAndOutputSlower(routes, nodeRoutes, totalInput) {\n let refDict = getOptOutputVecRefined(routes, nodeRoutes, totalInput);\n let outputRefined = refDict.result;\n let inputRefined = refDict.allocations;\n inputRefined = checkIntegerSumOfAllocations(inputRefined, totalInput);\n let rawDict = getOptOutputVec(routes, nodeRoutes, totalInput);\n let outputRaw = rawDict.result;\n let inputRaw = rawDict.allocations;\n inputRaw = checkIntegerSumOfAllocations(inputRaw, totalInput);\n let res1 = new Big(0);\n let res2 = new Big(0);\n\n for (var n in outputRefined) {\n res1 = res1.plus(outputRefined[n]);\n }\n for (var nn in outputRaw) {\n res2 = res2.plus(outputRaw[nn]);\n }\n // console.log('COMPARING SINGLE HOPS VS DOUBLE')\n // console.log(res1.toString())\n // console.log(res2.toString())\n if (res1.gt(res2)) {\n return { input: inputRefined, output: res1 };\n } else {\n return { input: inputRaw, output: res2 };\n }\n}\n\nfunction getBestOptInputAndOutput(routes, nodeRoutes, totalInput) {\n // let refDict = getOptOutputVecRefined(routes, nodeRoutes, totalInput);\n // let outputRefined = refDict.result;\n // let inputRefined = refDict.allocations;\n // inputRefined = checkIntegerSumOfAllocations(inputRefined, totalInput);\n let rawDict = getOptOutputVec(routes, nodeRoutes, totalInput);\n let outputRaw = rawDict.result;\n let inputRaw = rawDict.allocations;\n inputRaw = checkIntegerSumOfAllocations(inputRaw, totalInput);\n let res1 = new Big(0);\n let res2 = new Big(0);\n\n let res = outputRaw\n .map(v => new Big(v))\n .reduce((bv1, bv2) => bv1.plus(bv2), new Big(0));\n\n return {\n input: inputRaw,\n output: res,\n };\n}\n\nfunction getBestOptOutput(routes, nodeRoutes, totalInput) {\n let outputRefined = getOptOutputVecRefined(routes, nodeRoutes, totalInput)\n .result;\n let outputRaw = getOptOutputVec(routes, nodeRoutes, totalInput).result;\n let res1 = new Big(0);\n let res2 = new Big(0);\n\n for (var n in outputRefined) {\n res1 = res1.plus(outputRefined[n]);\n }\n for (var nn in outputRaw) {\n res2 = res2.plus(outputRaw[nn]);\n }\n if (res1.gt(res2)) {\n return res1;\n } else {\n return res2;\n }\n}\n\nfunction getBestOptInput(routes, nodeRoutes, totalInput) {\n let refDict = getOptOutputVecRefined(routes, nodeRoutes, totalInput);\n let outputRefined = refDict.result;\n let inputRefined = refDict.allocations;\n inputRefined = checkIntegerSumOfAllocations(inputRefined, totalInput);\n let rawDict = getOptOutputVec(routes, nodeRoutes, totalInput);\n let outputRaw = rawDict.result;\n let inputRaw = rawDict.allocations;\n inputRaw = checkIntegerSumOfAllocations(inputRaw, totalInput);\n let res1 = new Big(0);\n let res2 = new Big(0);\n\n for (var n in outputRefined) {\n res1 = res1.plus(outputRefined[n]);\n }\n for (var nn in outputRaw) {\n res2 = res2.plus(outputRaw[nn]);\n }\n // console.log('COMPARING SINGLE HOPS VS DOUBLE')\n // console.log(res1.toString())\n // console.log(res2.toString())\n if (res1.gt(res2)) {\n return inputRefined;\n } else {\n return inputRaw;\n }\n}\n\nfunction getOptOutputVecRefined(routes, nodeRoutes, totalInput) {\n // need to calculate full result.\n // if direct pools exist, need to calculate parallel result. if not, this portion is set to zero output.\n\n // need to compare between outputs of the two results above.\n\n let initLengthRoutes = routes.length;\n let directRouteInds = [];\n for (var routeInd in routes) {\n let route = routes[routeInd];\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n directRouteInds.push(routeInd);\n }\n }\n // console.log('DIRECT ROUTE INDS ARE')\n // console.log(directRouteInds)\n // if (directRouteInds.length < 1) {\n var fullResultAllocations = getOptimalAllocationForRoutes(\n routes,\n nodeRoutes,\n totalInput\n );\n var fullResult = [];\n for (var i in routes) {\n let r = routes[i];\n let nr = nodeRoutes[i];\n let a = fullResultAllocations[i];\n let output = getOutputFromRoute(r, nr, a);\n fullResult.push(output);\n }\n var fullResultTotal = fullResult.reduce((a, b) => a.plus(b), new Big(0));\n\n // } else {\n if (directRouteInds.length > 0) {\n // console.log('DOING SINGLE HOP ONLY')\n let droutes = [];\n let dnodeRoutes = [];\n for (var dri in directRouteInds) {\n let ind = directRouteInds[dri];\n droutes.push(routes[ind]);\n dnodeRoutes.push(nodeRoutes[ind]);\n }\n let dallocations = getOptimalAllocationForRoutes(\n droutes,\n dnodeRoutes,\n totalInput\n );\n let dallocDict = {};\n for (var dd in dallocations) {\n dallocDict[directRouteInds[dd]] = dallocations[dd];\n }\n var pallocations = [];\n\n for (var ii = 0; ii < initLengthRoutes; ii++) {\n if (directRouteInds.includes(ii.toString())) {\n //console.log('ADDING ALLOCATION FOR SINGLE ROUTE')\n pallocations.push(dallocDict[ii]);\n } else {\n pallocations.push(new Big(0));\n }\n }\n var presult = [];\n for (var j in routes) {\n let route = routes[j];\n let nodeRoute = nodeRoutes[j];\n let allocation = pallocations[j];\n let output = getOutputFromRoute(route, nodeRoute, allocation);\n presult.push(output);\n }\n var presultTotal = presult.reduce((a, b) => a.plus(b), new Big(0));\n } else {\n var presultTotal = new Big(0);\n }\n if (presultTotal.gt(fullResultTotal)) {\n var result = presult;\n var allocations = pallocations;\n } else {\n var result = fullResult;\n var allocations = fullResultAllocations;\n }\n // NEED TO COMPARE BETWEEEN DIRECT AND MULTI HOP TO GET BEST OUTPUT\n return {\n result: result,\n allocations: allocations,\n };\n}\n\nasync function getBestOptimalAllocationsAndOutputs(\n pools,\n inputToken,\n outputToken,\n totalInput,\n maxPathLength = 3,\n threshold = 0.001\n) {\n var totalInput = new Big(totalInput);\n let paths = await getPathsFromPools(\n pools,\n inputToken,\n outputToken,\n maxPathLength\n );\n if (!paths.length) {\n return {\n allocations: [],\n outputs: new Big(0),\n routes: [],\n nodeRoutes: [],\n };\n }\n let poolChains = await getPoolChainFromPaths(paths, pools, threshold);\n\n let routes = await getRoutesFromPoolChain(poolChains);\n let nodeRoutes = await getNodeRoutesFromPathsAndPoolChains(paths, poolChains);\n // let allocations = await getBestOptInput(routes, nodeRoutes, totalInput);\n // // fix integer rounding for allocations:\n // allocations = checkIntegerSumOfAllocations(allocations, totalInput);\n // let outputs = getBestOptOutput(routes, nodeRoutes, totalInput);\n let inputOutput = await getBestOptInputAndOutput(\n routes,\n nodeRoutes,\n totalInput\n );\n let allocations = inputOutput.input;\n let outputs = inputOutput.output;\n\n return {\n allocations: allocations,\n outputs: outputs,\n routes: routes,\n nodeRoutes: nodeRoutes,\n };\n}\n\nfunction getHopsFromRoutes(routes, nodeRoutes, allocations) {\n let hops = [];\n for (var i in routes) {\n var route = routes[i];\n var nodeRoute = nodeRoutes[i];\n var allocation = allocations[i];\n if (!route.length) {\n route = [route];\n }\n if (!route[0]) {\n continue;\n }\n let hop = {\n pool: route[0],\n allocation: allocation,\n inputToken: nodeRoute[0],\n outputToken: nodeRoute[1],\n };\n hops.push(hop);\n }\n return hops;\n}\n\nfunction distillHopsByPool(hops) {\n // console.log('some HOPS =');\n // console.log(hops);\n let distilledHops = [];\n let poolIds = [];\n let poolId2allocation = {};\n for (var i in hops) {\n let hop = hops[i];\n if (hop.allocation === '0') {\n continue;\n }\n // console.log(`HOP ${i} IS...`);\n // console.log(hop);\n let poolId = hop.pool['id'];\n if (poolIds.includes(poolId)) {\n poolId2allocation[poolId] = new Big(poolId2allocation[poolId])\n .plus(new Big(hop.allocation))\n .toString();\n } else {\n poolId2allocation[poolId] = new Big(hop.allocation).toString();\n poolIds.push(poolId);\n }\n }\n // let poolsWithOrder = [...new Set(...hops.map((item) => item.pool))]\n let keys = Object.keys(poolId2allocation);\n for (var j in keys) {\n var poolId = keys[j];\n let hop = hops.filter(\n item => item.pool.id.toString() === poolId.toString()\n )[0];\n let distilledHop = {\n pool: hop.pool,\n allocation: poolId2allocation[poolId],\n inputToken: hop.inputToken,\n outputToken: hop.outputToken,\n };\n distilledHops.push(distilledHop);\n }\n return distilledHops;\n}\n\nfunction getDistilledHopActions(distilledHops, slippageTolerance) {\n let actions = [];\n for (var i in distilledHops) {\n let hop = distilledHops[i];\n let expectedAmountOut = getOutputSingleHop(\n hop.pool,\n hop.inputToken,\n hop.outputToken,\n hop.allocation\n );\n let minimumAmountOut = new Big(expectedAmountOut)\n .times(new Big(1).minus(new Big(slippageTolerance).div(100)))\n .round()\n .toString(); //Here, assume slippage tolerance is a percentage. So 1% would be 1.0\n let action = {\n pool_id: hop.pool.id,\n token_in: hop.inputToken,\n token_out: hop.outputToken,\n amount_in: hop.allocation,\n min_amount_out: minimumAmountOut,\n };\n actions.push(action);\n }\n return actions;\n}\nfunction getMiddleTokenTotalsFromFirstHopActions(firstHopActions) {\n let middleTokens = [...new Set(firstHopActions.map(item => item.token_out))];\n let middleTokenTotals = {};\n for (var i in middleTokens) {\n let middleToken = middleTokens[i];\n let mtActions = firstHopActions.filter(\n item => item.token_out === middleToken\n );\n let mtTotal = mtActions\n .map(item => new Big(item.min_amount_out))\n .reduce((a, b) => a.plus(b), new Big(0))\n .toString();\n middleTokenTotals[middleToken] = mtTotal;\n }\n return middleTokenTotals;\n}\nfunction getRoutesAndAllocationsForMiddleToken(\n routes,\n nodeRoutes,\n allocations,\n middleToken,\n middleTokenTotal\n) {\n // get routes that use middle token.\n // (input route alloction) /sum(input allocations of routes with middle token) * (total_middleToken)\n let mask = [];\n for (var i in nodeRoutes) {\n if (nodeRoutes[i][1] === middleToken) {\n mask.push(true);\n } else {\n mask.push(false);\n }\n }\n let froutes = [];\n let fallocations = [];\n let fnoderoutes = [];\n for (var i in routes) {\n if (mask[i]) {\n froutes.push(routes[i]);\n fallocations.push(allocations[i]);\n fnoderoutes.push(nodeRoutes[i]);\n }\n }\n let sumfallocations = fallocations.reduce(\n (a, b) => new Big(a).plus(new Big(b)),\n new Big(0)\n );\n let middleAllocations = fallocations.map(item =>\n new Big(item).div(sumfallocations).times(new Big(middleTokenTotal))\n );\n let secondHopRoutes = froutes.map(item => [item[1]]);\n let secondHopNodeRoutes = fnoderoutes.map(item => [item[1], item[2]]);\n middleAllocations = checkIntegerSumOfAllocations(\n middleAllocations,\n middleTokenTotal\n );\n return {\n routes: secondHopRoutes,\n nodeRoutes: secondHopNodeRoutes,\n allocations: middleAllocations,\n };\n}\n\nfunction getHopActionsFromRoutes(routes, nodeRoutes, allocations) {\n // console.log('INSIDE GET HOP ACTIONS FROM ROUTES');\n // console.log('ROUTES ARE...');\n // console.log(routes);\n // console.log('NODE ROUTES ARE...');\n // console.log(nodeRoutes);\n // console.log('ALLOCATIONS ARE...');\n // console.log(allocations);\n let totalInput = allocations\n .map(a => new Big(a))\n .reduce((a, b) => a.plus(b), new Big(0))\n .toString();\n let hops = [];\n for (var i in routes) {\n var route = routes[i];\n var nodeRoute = nodeRoutes[i];\n var allocation = allocations[i];\n if (new Big(allocation).eq(new Big(0))) {\n continue;\n }\n if (!route.length) {\n route = [route];\n }\n if (!route[0]) {\n continue;\n }\n for (var j in route) {\n let pool = route[j];\n // console.log('J IS...');\n // console.log(j);\n // console.log('NODE ROUTE IS...');\n // console.log(nodeRoute);\n if (j == 0) {\n //first hop.\n // console.log(nodeRoute[0]);\n // console.log(nodeRoute[1]);\n var hop = {\n pool: pool,\n allocation: allocation.toString(),\n inputToken: nodeRoute[0],\n outputToken: nodeRoute[1],\n nodeRoute: nodeRoute,\n route: route,\n allRoutes: routes,\n allNodeRoutes: nodeRoutes,\n totalInputAmount: totalInput,\n allAllocations: allocations,\n };\n // console.log('FIRST HOP IS...');\n // console.log(hop);\n hops.push(hop);\n if (nodeRoute.length > 2) {\n var middleTokenAllocation = getOutputSingleHop(\n pool,\n nodeRoute[0],\n nodeRoute[1],\n allocation\n );\n }\n } else {\n // second hop\n var hop = {\n pool: pool,\n allocation: middleTokenAllocation.toString(),\n inputToken: nodeRoute[1],\n outputToken: nodeRoute[2],\n nodeRoute: nodeRoute,\n route: route,\n allRoutes: routes,\n allNodeRoutes: nodeRoutes,\n totalInputAmount: totalInput,\n allAllocations: allocations,\n };\n // console.log('SECOND HOP IS...');\n // console.log(hop);\n hops.push(hop);\n }\n }\n }\n // console.log('HOP ACTIONS FOUND TO BE');\n // console.log(hops);\n return hops;\n}\n\n// TODO: Clean this function. I don't need all the \"actions\" just the hops.\n// TODO: re-order actions to ensure each route is complete with zero input for second hop before starting next route.\nfunction getActionListFromRoutesAndAllocations(\n routes,\n nodeRoutes,\n allocations\n) {\n // REPLACE THE CODE BELOW WITH THE FUNCTION HERE.\n return getHopActionsFromRoutes(routes, nodeRoutes, allocations);\n var actions = [];\n var all_hops = [];\n let firstHops = getHopsFromRoutes(routes, nodeRoutes, allocations);\n\n firstHops = firstHops.filter(hop => new Big(hop.allocation).gt(new Big(0)));\n all_hops.push(...firstHops);\n let distilledFirstHops = distillHopsByPool(firstHops);\n let firstHopActions = getDistilledHopActions(\n distilledFirstHops,\n slippageTolerance\n );\n actions.push(...firstHopActions);\n let middleTokenTotals = getMiddleTokenTotalsFromFirstHopActions(\n firstHopActions\n );\n // console.log('first hop actions are...');\n // console.log(firstHopActions);\n let middleTokens = Object.keys(middleTokenTotals);\n // console.log('middle token totals are...');\n // console.log(middleTokenTotals);\n // console.log('middle tokens are...');\n // console.log(middleTokens);\n for (var tokenIndex in middleTokens) {\n var secondHops = [];\n let middleToken = middleTokens[tokenIndex];\n // console.log('current middle token is ');\n // console.log(middleToken);\n let middleTokenTotal = middleTokenTotals[middleToken];\n // console.log('current middle token total is...');\n // console.log(middleTokenTotal);\n let middleTokenRoutesWithAllocations = getRoutesAndAllocationsForMiddleToken(\n routes,\n nodeRoutes,\n allocations,\n middleToken,\n middleTokenTotal\n );\n // console.log('current middle tokens routes with allocations are...');\n // console.log(middleTokenRoutesWithAllocations);\n let middleTokenRoutes = middleTokenRoutesWithAllocations.routes;\n let middleTokenAllocations = middleTokenRoutesWithAllocations.allocations;\n let middleTokenNodeRoutes = middleTokenRoutesWithAllocations.nodeRoutes;\n // console.log('middle token routes are...');\n // console.log(middleTokenRoutes);\n // console.log('middle token allocations are...');\n // console.log(middleTokenAllocations);\n // console.log('middle token node routes are...');\n // console.log(middleTokenNodeRoutes);\n secondHops.push(\n ...getHopsFromRoutes(\n middleTokenRoutes,\n middleTokenNodeRoutes,\n middleTokenAllocations\n )\n );\n // console.log('CURRENT SECOND HOPS', secondHops);\n // console.log(secondHops.length);\n // console.log(secondHops.map((hop) => hop.allocation));\n // console.log('filter out zero allocation 2nd hops:');\n secondHops = secondHops.filter(hop =>\n new Big(hop.allocation).gt(new Big(0))\n );\n // console.log(secondHops);\n all_hops.push(...secondHops);\n // console.log('second hops are currently...');\n // console.log(secondHops);\n let distilledSecondHopsForToken = distillHopsByPool(secondHops);\n // console.log('distilled second hops are...');\n let secondHopActionsForToken = getDistilledHopActions(\n distilledSecondHopsForToken,\n slippageTolerance\n );\n // console.log(secondHopActionsForToken);\n actions.push(...secondHopActionsForToken);\n }\n\n //TODO: NEED TO RUN INTEGER ROUNDING FUNCTION ON MIDDLE TOKEN ALLOCATIONS\n\n // TODO: check the node routes. for double-hop cases, find the hop action for each hop.\n // For now, we are assuming no parallel swaps if there is a double-hop.\n\n // Possible cases:\n // (1) 1 single-hop.\n // (2) Parallel single-hop ?\n // (3) 1 double-hop\n // (4) 2 double-hops\n\n // We only have to worry about re-ordering the actions for cases (3) and (4).\n\n let orderedHops = orderHops(all_hops, routes, nodeRoutes, allocations);\n\n // console.log('ALL HOPS', all_hops);\n return orderedHops;\n // return actions;\n}\n\nfunction orderHops(hops, routes, nodeRoutes, allocations) {\n // first get rid of zero allocation routes\n // console.log('NODE ROUTES ARE...');\n // console.log(nodeRoutes);\n let filteredRoutes = [];\n let filteredNodeRoutes = [];\n let filteredAllocations = [];\n for (var i in routes) {\n // remove zero-allocation routes.\n let allocation = new Big(allocations[i]);\n if (allocation.gt(new Big(0))) {\n filteredAllocations.push(allocation);\n filteredRoutes.push(routes[i]);\n filteredNodeRoutes.push(nodeRoutes[i]);\n }\n // console.log('FILTERED NODE ROUTES ARE...');\n // console.log(filteredNodeRoutes);\n }\n // next check node routes to see if it is case 1, 2, 3, or 4.\n // Possible cases:\n // (1) 1 single-hop.\n // (2) Parallel single-hop ?\n // (3) 1 double-hop\n // (4) 2 double-hops\n\n if (filteredNodeRoutes.length === 1) {\n // only one route.\n let currentNodeRoute = filteredNodeRoutes[0];\n if (currentNodeRoute.length === 2) {\n // case 1.\n return hops;\n } else {\n // case 3. assume there are only 3 nodes (double-hop)\n //make sure order of hops is such that input token precedes output token.\n //make sure the amount_in for second hop is zero (which will grab all of output of first hop to use.)\n let firstHop = hops.filter(\n hop => hop.inputToken === currentNodeRoute[0]\n )[0];\n let secondHop = hops.filter(\n hop => hop.inputToken === currentNodeRoute[1]\n )[0];\n // set second hop amount in to 0 so that it will use whatever was generated by hop 1.\n secondHop.pool.partialAmountIn = '0';\n\n let orderedHops = [firstHop, secondHop];\n return orderedHops;\n }\n } else if (filteredNodeRoutes.length === 2) {\n // two routes.\n let lengthNodeRoutes = filteredNodeRoutes.map(nr => nr.length);\n // sub cases:\n // [2,2] -- parallel swap. (direct) -- case 2\n // [2,3] -- direct swap in parallel with double hop.\n // [3,2] -- double hop in parallel with direct swap.\n // [3,3] -- double hop in parallel with double hop. -- case 4\n let orderedHops = [];\n if (arrayEquals(lengthNodeRoutes, [2, 2])) {\n return hops;\n } else if (arrayEquals(lengthNodeRoutes, [2, 3])) {\n directNodeRoute = filteredNodeRoutes[0];\n doubleNodeRoute = filteredNodeRoutes[1];\n let firstHop = hops.filter(\n hop =>\n hop.inputToken === directNodeRoute[0] &&\n hop.outputToken === directNodeRoute[1]\n )[0];\n let secondHop = hops.filter(\n hop => hop.inputToken === doubleNodeRoute[0]\n )[0];\n let thirdHop = hops.filter(\n hop => hop.outputToken === doubleNodeRoute[2]\n )[0];\n // set third hop amount in to 0 so that it will use whatever was generated by hop 2.\n thirdHop.pool.partialAmountIn = '0';\n orderedHops = [firstHop, secondHop, thirdHop];\n return orderedHops;\n } else if (arrayEquals(lengthNodeRoutes, [3, 2])) {\n directNodeRoute = filteredNodeRoutes[1];\n doubleNodeRoute = filteredNodeRoutes[0];\n let firstHop = hops.filter(\n hop =>\n hop.inputToken === directNodeRoute[0] &&\n hop.outputToken === directNodeRoute[1]\n )[0];\n let secondHop = hops.filter(\n hop => hop.inputToken === doubleNodeRoute[0]\n )[0];\n let thirdHop = hops.filter(\n hop => hop.outputToken === doubleNodeRoute[2]\n )[0];\n // set third hop amount in to 0 so that it will use whatever was generated by hop 2.\n thirdHop.pool.partialAmountIn = '0';\n orderedHops = [firstHop, secondHop, thirdHop];\n return orderedHops;\n } else if (arrayEquals(lengthNodeRoutes, [3, 3])) {\n orderedHops = [];\n\n for (var i in filteredNodeRoutes) {\n let doubleNodeRoute = filteredNodeRoutes[i];\n let doubleHopMiddleToken = doubleNodeRoute[1];\n let firstHop = hops.filter(\n hop =>\n hop.inputToken === doubleNodeRoute[0] &&\n hop.outputToken === doubleHopMiddleToken\n )[0];\n let secondHop = hops.filter(\n hop =>\n hop.inputToken === doubleHopMiddleToken &&\n hop.outputToken === doubleNodeRoute[2]\n )[0];\n // set second hop amount in to 0 so that it will use whatever was generated by hop 1.\n secondHop.pool.partialAmountIn = '0';\n orderedHops.push(firstHop);\n orderedHops.push(secondHop);\n }\n return orderedHops;\n } else {\n return hops;\n }\n for (var i in filteredNodeRoutes) {\n let currentNodeRoute = filteredNodeRoutes[i];\n if (currentNodeRoute.length === 2) {\n }\n }\n }\n\n return hops;\n}\n\n// function getActionListFromRoutesAndAllocationsORIG(\n// routes,\n// nodeRoutes,\n// allocations,\n// slippageTolerance\n// ) {\n// let actions = [];\n// for (var i in routes) {\n// let route = routes[i];\n// let nodeRoute = nodeRoutes[i];\n// let allocation = new Big(allocations[i]);\n// if (allocation.eq(new Big(0))) {\n// continue;\n// }\n// if (!route.length) {\n// route = [route];\n// }\n// if (route.length === 1) {\n// //single hop. only one action.\n// let pool = route[0];\n// let poolId = pool.id;\n// let inputToken = nodeRoute[0];\n// let outputToken = nodeRoute[1];\n// let expectedAmountOut = getOutputSingleHop(\n// pool,\n// inputToken,\n// outputToken,\n// allocation\n// );\n// let minimumAmountOut = expectedAmountOut\n// .times(new Big(1).minus(new Big(slippageTolerance).div(100)))\n// .round()\n// .toString(); //Here, assume slippage tolerance is a percentage. So 1% would be 1.0\n// let action = {\n// pool_id: poolId,\n// token_in: inputToken,\n// token_out: outputToken,\n// amount_in: allocation.round().toString(),\n// min_amount_out: minimumAmountOut.toString(),\n// };\n// actions.push(action);\n// } else if (route.length === 2) {\n// // double hop. two actions.\n// let pool1 = route[0];\n// let pool2 = route[1];\n// let pool1Id = pool1.id;\n// let pool2Id = pool2.id;\n// let inputToken = nodeRoute[0];\n// let middleToken = nodeRoute[1];\n// let outputToken = nodeRoute[2];\n// let expectedAmountOutFirstHop = getOutputSingleHop(\n// pool1,\n// inputToken,\n// middleToken,\n// allocation\n// );\n// let minimumAmountOutFirstHop = expectedAmountOutFirstHop\n// .times(new Big(1).minus(new Big(slippageTolerance).div(100)))\n// .round()\n// .toString(); //Here, assume slippage tolerance is a percentage. So 1% would be 1.0\n\n// let action1 = {\n// pool_id: pool1Id,\n// token_in: inputToken,\n// token_out: middleToken,\n// amount_in: allocation.round().toString(),\n// min_amount_out: minimumAmountOutFirstHop,\n// };\n// let expectedFinalAmountOut = getOutputSingleHop(\n// pool2,\n// middleToken,\n// outputToken,\n// minimumAmountOutFirstHop\n// );\n// let minimumAMountOutSecondHop = expectedFinalAmountOut\n// .times(new Big(1).minus(new Big(slippageTolerance).div(100)))\n// .round()\n// .toString();\n// let action2 = {\n// pool_id: pool2Id,\n// token_in: middleToken,\n// token_out: outputToken,\n// amount_in: minimumAmountOutFirstHop,\n// min_amount_out: minimumAMountOutSecondHop,\n// };\n// actions.push(action1);\n// actions.push(action2);\n// }\n// }\n// return actions;\n// }\n\nfunction* range(start, end) {\n for (; start <= end; ++start) {\n yield start;\n }\n}\n\nfunction last(arr) {\n return arr[arr.length - 1];\n}\n\nfunction* numericCombinations(n, r, loc = []) {\n var idx = loc.length;\n if (idx === r) {\n yield loc;\n return;\n }\n for (let next of range(idx ? last(loc) + 1 : 0, n - r + idx)) {\n yield* numericCombinations(n, r, loc.concat(next));\n }\n}\n\nfunction* combinations(arr, r) {\n for (let idxs of numericCombinations(arr.length, r)) {\n yield idxs.map(i => arr[i]);\n }\n}\n\n// #middleTokenTotals = getMiddleTokenTotals(routes,nodeRoutes,allocations)\n// #TODO: complete this function with middle token checks.\n\n// #consider all routes of length 2 with non-zero allocation. (double-hops)\n// # among these, check for parallel swaps. That is, check for common node routes\n// # for first hop. Then check for common node routes on second hop.\n// # when common node routes occur for the first hop:\n// # 1. Calculate the total expected output of intermediate token.\n// # 2.\n// # when common node routes occur for the second hop:\n// # 1. get a ratio of the input allocations of the full routes associated with\n// # these common node routes. allocate the total intermediate token output\n// # toward these 2nd hop routes in the same ratio as their route input allocations.\n\nexport async function getSmartRouteSwapActions(\n pools,\n inputToken,\n outputToken,\n totalInput,\n allTokens,\n maxPathLength = 3,\n threshold = 0.001,\n numberOfRoutesLimit = 2,\n MAX_NUMBER_PARALLEL_POOLS = 4,\n decimalsCulledPoolIds = []\n) {\n if (!totalInput) {\n return [];\n }\n var totalInput = new Big(totalInput);\n\n // remove pools that have an id from the decimalCulledPoolIds\n pools = pools.filter(p => !decimalsCulledPoolIds.includes(p.id));\n\n let resDict = await getBestOptimalAllocationsAndOutputs(\n pools,\n inputToken,\n outputToken,\n totalInput,\n maxPathLength,\n threshold\n );\n\n let allocations = resDict.allocations;\n\n // let outputs = resDict.outputs;\n let routes = resDict.routes;\n let nodeRoutes = resDict.nodeRoutes;\n\n let sortedIndexValues = argsort(allocations);\n let topIndices = sortedIndexValues.slice(0, 10);\n var reducedRoutes = [];\n var reducedNodeRoutes = [];\n for (var ind of topIndices) {\n reducedRoutes.push(routes[ind]);\n reducedNodeRoutes.push(nodeRoutes[ind]);\n }\n routes = reducedRoutes;\n nodeRoutes = reducedNodeRoutes;\n\n // TODO: compare pairs of routes to get the best allocation pair-wise.\n var currentBestOutput = new Big(0);\n var bestResDict = { routes: [] };\n var bestAllocations = resDict.allocations;\n var bestNodeRoutes = resDict.nodeRoutes;\n var bestRoutes = resDict.routes;\n // first check parallel swap with 4 actions. store result.\n var parallelNodeRoutes = [];\n var parallelRoutes = [];\n for (var n in bestRoutes) {\n let currentNodeRoute = bestNodeRoutes[n];\n if (currentNodeRoute.length == 2) {\n parallelNodeRoutes.push(currentNodeRoute);\n parallelRoutes.push(bestRoutes[n]);\n }\n }\n // console.log(`${parallelNodeRoutes.length} parallel routes found...`);\n var bestRoutesAreParallel = false;\n if (parallelNodeRoutes.length > 0) {\n // first calculate the expected result using only parallel routes.\n // let filteredAllocationsAndOutputs = getOptOutputVecRefined(parallelRoutes, parallelNodeRoutes, totalInput);\n let filteredAllocationsAndOutputs = getOptOutputVec(\n parallelRoutes,\n parallelNodeRoutes,\n totalInput\n );\n let parallellAllocations = filteredAllocationsAndOutputs.allocations;\n let parallelOutputs = filteredAllocationsAndOutputs.result;\n\n if (parallellAllocations.length > MAX_NUMBER_PARALLEL_POOLS) {\n // now sort by allocation value to the top 4 parallel swaps:\n let sortIndices = argsort(parallellAllocations);\n\n sortIndices = sortIndices.slice(0, MAX_NUMBER_PARALLEL_POOLS);\n var filteredParallelRoutes = [];\n var filteredParallelNodeRoutes = [];\n for (var i in sortIndices) {\n filteredParallelRoutes.push(parallelRoutes[sortIndices[i]]);\n filteredParallelNodeRoutes.push(parallelNodeRoutes[sortIndices[i]]);\n }\n filteredAllocationsAndOutputs = getOptOutputVec(\n filteredParallelRoutes,\n filteredParallelNodeRoutes,\n totalInput\n );\n parallellAllocations = filteredAllocationsAndOutputs.allocations;\n parallelOutputs = filteredAllocationsAndOutputs.result;\n }\n\n let parallelOutput = parallelOutputs.reduce(\n (a, b) => a.plus(b),\n new Big(0)\n );\n if (new Big(parallelOutput).gt(currentBestOutput)) {\n bestAllocations = parallellAllocations;\n currentBestOutput = parallelOutput;\n // console.log(\n // 'BEST OUTPUT FROM PARALLEL SWAPS IS NOW... ',\n // currentBestOutput.toString()\n // );\n bestRoutes = parallelRoutes;\n bestNodeRoutes = parallelNodeRoutes;\n bestRoutesAreParallel = true;\n }\n }\n var canHaveTwoRoutes = false;\n // initialize this variable to check if we can have two routes, or if all routes share a pool for an edge case.\n // console.log('THE NUMBER OF ROUTES IS...', routes.length);\n\n for (var i in routes) {\n for (var j in routes) {\n if (j > i) {\n var route1 = routes[i];\n var route2 = routes[j];\n var nodeRoute1 = nodeRoutes[i];\n var nodeRoute2 = nodeRoutes[j];\n // check if they share a pool.\n let route1PoolIds = new Set(route1.map(r => r.id));\n let route2PoolIds = new Set(route2.map(r => r.id));\n var sharePool = false;\n for (var route1PoolId of route1PoolIds) {\n if (route2PoolIds.has(route1PoolId)) {\n sharePool = true;\n }\n }\n if (sharePool) {\n // routes are not independent. skip this pair.\n // console.log('skipping this pair because pool was shared.');\n continue;\n } else {\n canHaveTwoRoutes = true;\n let currentRoutes = [route1, route2];\n let currentNodeRoutes = [nodeRoute1, nodeRoute2];\n\n let filteredAllocationsAndOutputs = getOptOutputVec(\n currentRoutes,\n currentNodeRoutes,\n totalInput\n );\n\n let filteredAllocations = filteredAllocationsAndOutputs.allocations;\n let filteredOutputs = filteredAllocationsAndOutputs.result;\n // console.log('FILTERED ALLOCATIONS:');\n // console.log(filteredAllocations.map((i) => i.toString()));\n // console.log(filteredOutputs);\n let totalOutput = filteredOutputs.reduce(\n (a, b) => a.plus(b),\n new Big(0)\n );\n if (new Big(totalOutput).gt(currentBestOutput)) {\n bestAllocations = filteredAllocations;\n currentBestOutput = totalOutput;\n // console.log('BEST OUTPUT IS NOW... ', currentBestOutput.toString());\n bestRoutes = currentRoutes;\n bestNodeRoutes = currentNodeRoutes;\n bestRoutesAreParallel = false;\n // bestResDict = currentResDict\n }\n\n // if (currentResDict.outputs.gt(currentBestOutput)) {\n // console.log('DIFF IS...', currentResDict.outputs.minus(currentBestOutput).toString());\n // bestResDict = currentResDict;\n // currentBestOutput = bestResDict.outputs;\n // console.log('BEST OUTPUT IS NOW... ', currentBestOutput.toString());\n // console.log(bestResDict.routes);\n // console.log(bestResDict.allocations.map((i) => i.toString()));\n // console.log(bestResDict.outputs.toString());\n }\n }\n }\n }\n\n if (!canHaveTwoRoutes) {\n // now we need to check through the routes in single manner to find the best one:\n for (var i in routes) {\n let currentRoutes = [routes[i]];\n let currentNodeRoutes = [nodeRoutes[i]];\n // let filteredAllocationsAndOutputs = getOptOutputVecRefined(currentRoutes, currentNodeRoutes, totalInput);\n let filteredAllocationsAndOutputs = getOptOutputVec(\n currentRoutes,\n currentNodeRoutes,\n totalInput\n );\n\n let filteredAllocations = filteredAllocationsAndOutputs.allocations;\n let filteredOutputs = filteredAllocationsAndOutputs.result;\n // console.log('FILTERED ALLOCATIONS:');\n // console.log(filteredAllocations.map((i) => i.toString()));\n // console.log(filteredOutputs);\n let totalOutput = filteredOutputs.reduce((a, b) => a.plus(b), new Big(0));\n if (new Big(totalOutput).gt(currentBestOutput)) {\n bestAllocations = filteredAllocations;\n currentBestOutput = totalOutput;\n // console.log('BEST OUTPUT IS NOW... ', currentBestOutput.toString());\n bestRoutes = currentRoutes;\n bestNodeRoutes = currentNodeRoutes;\n bestRoutesAreParallel = false;\n // bestResDict = currentResDict\n }\n }\n }\n\n // resDict = bestResDict;\n\n allocations = bestAllocations;\n\n // let outputs = resDict.outputs;\n routes = bestRoutes;\n nodeRoutes = bestNodeRoutes;\n\n if (routes.length < 1) {\n return [];\n }\n\n // check the top numberOfRoutesLimit\n // console.log('initial allocations are...');\n // console.log(allocations.map((a) => a.toString()));\n // console.log('fixed allocations are...');\n // console.log(allocations.map((a) => new Big(a).toFixed()));\n //SORT BY ALLOCATIONS\n let allSortedIndices = argsort(allocations.map(a => new Big(a)));\n if (bestRoutesAreParallel) {\n numberOfRoutesLimit = 4;\n }\n let sortedIndices = allSortedIndices.slice(0, numberOfRoutesLimit);\n\n // console.log('sorted Indices are');\n // console.log(sortedIndices);\n var filteredRoutes = [];\n var filteredNodeRoutes = [];\n for (var i in sortedIndices) {\n let index = sortedIndices[i];\n filteredRoutes.push(routes[index]);\n filteredNodeRoutes.push(nodeRoutes[index]);\n }\n\n // console.log('filteredRoutes are ...');\n // console.log(filteredRoutes);\n for (var i in filteredRoutes) {\n if (!filteredRoutes[i].length) {\n filteredRoutes[i] = [filteredRoutes[i]];\n }\n }\n // console.log('filtered Node routes are...');\n // console.log(filteredNodeRoutes);\n\n // THE BELOW CODE WILL ENSURE THAT ROUTES ARE INDEPENDENT (e.g. THE ROUTES WILL NOT SHARE A POOL)\n\n let route1PoolIds = filteredRoutes[0].map(pool => pool.id);\n // console.log('route 1 pool ids:');\n // console.log(route1PoolIds);\n if (filteredRoutes.length > 1) {\n let route2PoolIds = filteredRoutes[1].map(pool => pool.id);\n // console.log('route 2 pool ids:');\n // console.log(route2PoolIds);\n var sharedRoute = false;\n for (var i in route2PoolIds) {\n if (route1PoolIds.includes(route2PoolIds[i])) {\n // a pool was shared between routes. need to calculate a new second route.\n // console.log(\n // 'a pool was shared between routes. going to calculate a new second route'\n // );\n sharedRoute = true;\n break;\n }\n }\n }\n\n // NOTE -- this is a much simpler solution than that below. Instead of choosing the next best second route that doesn't share a\n // pool with the first route, we could just use the first route and allocate all inputs to it.\n // but, for larger transactions, it would be better to have option of two independent routes to spread out slippage.\n\n // if (sharedRoute) {\n // filteredRoutes = [filteredRoutes[0]];\n // filteredNodeRoutes = [filteredNodeRoutes[0]];\n // // TODO -- later can add in a second route that doesn't share a pool with first.\n // }\n\n // We're going to find the next-highest allocation route that doesn't share a pool with the first route.\n if (sharedRoute) {\n let allFilteredRoutes = [];\n let allFilteredNodeRoutes = [];\n for (var i in allSortedIndices) {\n allFilteredRoutes.push(routes[allSortedIndices[i]]);\n allFilteredNodeRoutes.push(nodeRoutes[allSortedIndices[i]]);\n }\n let firstRoute = allFilteredRoutes[0];\n // console.log('first route is...');\n // console.log(firstRoute);\n let firstRoutePoolIds = firstRoute.map(pool => pool.id);\n for (var i in allFilteredRoutes) {\n if (!allFilteredRoutes[i].length) {\n allFilteredRoutes[i] = [allFilteredRoutes[i]];\n }\n }\n // console.log('FIRST ROUTE POOL IDS ARE');\n // console.log(firstRoutePoolIds);\n let allFilteredRouteIds = allFilteredRoutes.map(route =>\n route.map(pool => pool.id)\n );\n // console.log('allFilteredRouteIds are ...');\n // console.log(allFilteredRouteIds);\n for (var i in allFilteredRouteIds) {\n // console.log('i is', i);\n // console.log('ALL FILTERED ROUTES [i] IS...');\n // console.log(allFilteredRouteIds[i]);\n for (var j in allFilteredRouteIds[i]) {\n // console.log('j is', j);\n // console.log('ALL FILTERED ROUTES [i][j] IS...');\n // console.log(allFilteredRouteIds[i][j]);\n if (firstRoutePoolIds.includes(allFilteredRouteIds[i][j])) {\n break;\n }\n\n var secondRoute = allFilteredRoutes[i];\n if (!secondRoute.length) {\n secondRoute = [secondRoute];\n }\n filteredRoutes = [allFilteredRoutes[0], secondRoute];\n filteredNodeRoutes = [\n allFilteredNodeRoutes[0],\n allFilteredNodeRoutes[i],\n ];\n break;\n }\n }\n // console.log('new filteredRoutes are ...');\n // console.log(filteredRoutes);\n // console.log('new filtered Node routes are...');\n // console.log(filteredNodeRoutes);\n }\n\n // let filteredAllocations_check = getBestOptInput(\n // filteredRoutes,\n // filteredNodeRoutes,\n // totalInput\n // );\n // let filteredAllocationsAndOutputs = getOptOutputVecRefined(filteredRoutes, filteredNodeRoutes, totalInput);\n let filteredAllocationsAndOutputs = getOptOutputVec(\n filteredRoutes,\n filteredNodeRoutes,\n totalInput\n );\n\n let filteredAllocations = filteredAllocationsAndOutputs.allocations;\n let filteredOutputs = filteredAllocationsAndOutputs.result;\n\n filteredAllocations = checkIntegerSumOfAllocations(\n filteredAllocations,\n totalInput\n ).map(stringAllo => new Big(stringAllo));\n\n let hops = getActionListFromRoutesAndAllocations(\n filteredRoutes,\n filteredNodeRoutes,\n filteredAllocations\n );\n\n var actions = [];\n // console.log('hops are...');\n // console.log(hops);\n\n for (var i in hops) {\n let hopInputTokenMeta = allTokens[hops[i].inputToken]\n ? allTokens[hops[i].inputToken]\n : await ftGetTokenMetadata(hops[i].inputToken, 'token input');\n\n let hopOutputTokenMeta = allTokens[hops[i].outputToken]\n ? allTokens[hops[i].outputToken]\n : await ftGetTokenMetadata(hops[i].outputToken, 'token sm');\n let hopOutputTokenDecimals = hopOutputTokenMeta.decimals;\n\n let expectedHopOutput = getOutputSingleHop(\n hops[i].pool,\n hops[i].inputToken,\n hops[i].outputToken,\n hops[i].allocation\n );\n let decimalEstimate = new Big(expectedHopOutput)\n .div(new Big(10).pow(hopOutputTokenDecimals))\n .toString();\n\n // Need to check if expected Hop Output is > 1. If not, then cull the corresponding pool and re-calculate.\n if (new Big(expectedHopOutput).lt(new Big(1))) {\n // purge the pool and recalculate.\n\n decimalsCulledPoolIds.push(hops[i].pool.id);\n return getSmartRouteSwapActions(\n pools,\n inputToken,\n outputToken,\n totalInput,\n allTokens,\n (maxPathLength = maxPathLength),\n (threshold = threshold),\n (numberOfRoutesLimit = numberOfRoutesLimit),\n (MAX_NUMBER_PARALLEL_POOLS = MAX_NUMBER_PARALLEL_POOLS),\n (decimalsCulledPoolIds = decimalsCulledPoolIds)\n );\n }\n\n if (\n hops[i].inputToken == inputToken &&\n hops[i].outputToken == outputToken\n ) {\n var status = 'parallel swap';\n } else {\n var status = 'stableSmart';\n }\n\n let tokens = await Promise.all(\n hops[i].nodeRoute.map(async t =>\n allTokens[t] ? allTokens[t] : await ftGetTokenMetadata(t, 'smart')\n )\n );\n\n actions[i] = {\n estimate: decimalEstimate,\n pool: {\n fee: hops[i].pool.fee,\n gamma_bps: new Big(10000).minus(new Big(hops[i].pool.fee)), //.div(new Big(10000)), //hops[i].pool.gamma, //new Big(10000).minus(new Big(hops[i].pool.fee)).div(new Big(10000));\n id: hops[i].pool.id,\n partialAmountIn: new Big(hops[i].allocation).round().toString(),\n supplies: {\n [hops[i].pool.token1Id]: hops[i].pool.token1Supply,\n [hops[i].pool.token2Id]: hops[i].pool.token2Supply,\n },\n token0_ref_price: hops[i].pool.token0_price,\n tokenIds: [hops[i].pool.token1Id, hops[i].pool.token2Id],\n Dex: hops[i].pool.Dex,\n },\n status: status,\n token: hopInputTokenMeta,\n outputToken: hops[i].outputToken,\n inputToken: hops[i].inputToken,\n nodeRoute: hops[i].nodeRoute,\n route: hops[i].route,\n allRoutes: hops[i].allRoutes,\n allNodeRoutes: hops[i].allNodeRoutes,\n totalInputAmount: hops[i].totalInputAmount,\n allAllocations: hops[i].allAllocations,\n tokens: tokens,\n routeInputToken: inputToken,\n routeOutputToken: outputToken,\n overallPriceImpact: '0',\n };\n // console.log('INPUT TOKEN IS...');\n // console.log(hops[i].inputToken);\n actions[i].pool.x = actions[i].pool.supplies[hops[i].inputToken];\n actions[i].pool.y = actions[i].pool.supplies[hops[i].outputToken];\n }\n // now set partial amount in for second hops equal to zero:\n // also, set the total price impact value.\n let overallPriceImpact = await calculateSmartRouteV2PriceImpact(\n actions,\n allTokens\n );\n for (var i in actions) {\n let action = actions[i];\n action.overallPriceImpact = overallPriceImpact;\n if (action.outputToken === outputToken && action.inputToken != inputToken) {\n // only want to set second hop partial amount in to zero\n action.pool.partialAmountIn = '0';\n }\n }\n\n return actions;\n}\n\nasync function calculateSmartRouteV2PriceImpact(actions, allTokens) {\n // the goal is to take a weighted average of the price impact per route, treating each one at a time.\n // for single hop (parallel swaps), the price impact is calculated as before.\n // for double-hop, the market price, P, is determined using reserves of tokens in each pool in the route.\n // in both cases, we compare the 'market price', P , determined solely by reserves in pools, and the actual\n // average price, R, expected to be paid in the transaction.\n // the price impact is then defined as (P-R)/R * 100 and is a percentage number, returned as a string.\n\n let deltaY = actions\n .filter(a => a.outputToken == a.routeOutputToken)\n .map(a => new Big(a.estimate))\n .reduce((a, b) => a.plus(b), new Big(0));\n // console.log('DELTA Y IS...');\n // console.log(deltaY.toString());\n\n let inputTokenMeta = actions[0].tokens[0];\n let deltaX = new Big(actions[0].totalInputAmount).div(\n new Big(10).pow(inputTokenMeta.decimals)\n );\n let R = deltaY.div(deltaX);\n var P = new Big(0);\n let routes = actions[0].allRoutes;\n let nodeRoutes = actions[0].allNodeRoutes;\n let allocations = actions[0].allAllocations.map(a => new Big(a));\n let totalAllocations = allocations\n .map(a => new Big(a))\n .reduce((a, b) => a.plus(b), new Big(0));\n\n let weights = allocations.map(a => a.div(totalAllocations));\n\n for (var i in routes) {\n let route = routes[i];\n let nodeRoute = nodeRoutes[i];\n let tokens = await Promise.all(\n nodeRoute.map(async t => {\n return allTokens[t]\n ? allTokens[t]\n : await ftGetTokenMetadata(t, 'sm routes');\n })\n );\n let weight = weights[i];\n if (route.length == 1) {\n let num = new Big(route[0].reserves[nodeRoute[0]]).div(\n new Big(10).pow(tokens[0].decimals)\n );\n let denom = new Big(route[0].reserves[nodeRoute[1]]).div(\n new Big(10).pow(tokens[1].decimals)\n );\n var routeMarketPrice = num.div(denom);\n } else {\n let num1 = new Big(route[0].reserves[nodeRoute[0]]).div(\n new Big(10).pow(tokens[0].decimals)\n );\n\n let denom1 = new Big(route[0].reserves[nodeRoute[1]]).div(\n new Big(10).pow(tokens[1].decimals)\n );\n\n let num2 = new Big(route[1].reserves[nodeRoute[1]]).div(\n new Big(10).pow(tokens[1].decimals)\n );\n\n let denom2 = new Big(route[1].reserves[nodeRoute[2]]).div(\n new Big(10).pow(tokens[2].decimals)\n );\n\n var routeMarketPrice = num1\n .div(denom1)\n .times(num2)\n .div(denom2);\n }\n P = P.plus(weight.times(new Big(1).div(routeMarketPrice)));\n }\n\n let priceImpact = P.minus(R)\n .div(R)\n .times(new Big(100))\n .toString();\n return priceImpact;\n}\n\nfunction decor(arr) {\n var res = [];\n for (var i in arr) {\n res.push([arr[i], i]);\n }\n return res;\n}\nfunction argsort(arr) {\n let undecor = a => a[1]; // leave only index\n let decorated = decor(arr);\n\n return decorated\n .sort((a, b) => new Big(b[0]).minus(new Big(a[0])))\n .map(undecor);\n}\n\nfunction getPoolsByToken1ORToken2(pools, token1, token2) {\n let filteredPools = pools.filter(\n item =>\n item.token1Id === token1 ||\n item.token2Id === token1 ||\n item.token1Id === token2 ||\n item.token2Id === token2\n );\n return filteredPools;\n}\n\nfunction getPoolsByToken1ANDToken2(\n pools,\n token1,\n token2,\n cullZeroLiquidityPools = true\n) {\n let filteredPools = pools.filter(\n item =>\n (item.token1Id === token1 && item.token2Id === token2) ||\n (item.token1Id === token2 && item.token2Id === token1)\n );\n if (cullZeroLiquidityPools) {\n filteredPools = filteredPools.filter(\n item => item.token1Supply != '0' && item.token2Supply != '0'\n );\n }\n return filteredPools;\n}\n\nfunction getLiqudityOfPoolsFromList(pools) {\n let liquidities = [];\n for (var poolInd in pools) {\n let pool = pools[poolInd];\n pool.amounts = [pool.token1Supply, pool.token2Supply];\n let poolBigAmounts = pool.amounts.map(item => new Big(item));\n let liquidity = poolBigAmounts[0].times(poolBigAmounts[1]);\n liquidities.push(liquidity);\n }\n return liquidities;\n}\n\nfunction getNormalizedLiquiditiesFromList(pools) {\n let liquidities = getLiqudityOfPoolsFromList(pools);\n let maxLiq = bigMax(liquidities);\n let normalizedLiquidities = liquidities.map(item => item.div(maxLiq));\n return normalizedLiquidities;\n}\n\nfunction bigMax(arrayOfBigs) {\n if (arrayOfBigs.length < 1) {\n return null;\n }\n let maxElem = arrayOfBigs[0];\n for (var ind in arrayOfBigs) {\n let val = arrayOfBigs[ind];\n if (val.gt(maxElem)) {\n maxElem = val;\n }\n }\n return maxElem;\n}\n\nfunction cullPoolsWithInsufficientLiquidity(pools, threshold = 0.0001) {\n var thresh = new Big(threshold);\n let normLiq = getNormalizedLiquiditiesFromList(pools);\n let filteredPools = [];\n for (var i = 0; i < normLiq.length; i++) {\n if (normLiq[i] > thresh) {\n filteredPools.push(pools[i]);\n }\n }\n return filteredPools;\n}\n\nfunction cartesianProduct(a) {\n let result = a.reduce((a, b) => a.flatMap(d => b.map(e => [d, e].flat())));\n return result;\n}\n\nfunction addEdge(g, edge) {\n let src = edge[0];\n let dst = edge[1];\n if (Object.keys(g).includes(src)) {\n if (!Object.keys(g[src]).includes(dst)) {\n g[src][dst] = 1;\n }\n } else {\n g[src] = {};\n g[src][dst] = 1;\n }\n if (Object.keys(g).includes(dst)) {\n if (!Object.keys(g[dst]).includes(src)) {\n g[dst][src] = 1;\n }\n } else {\n g[dst] = {};\n g[dst][src] = 1;\n }\n}\n\nfunction addEdges(g, edgeList) {\n for (var n in edgeList) {\n let edge = edgeList[n];\n addEdge(g, edge);\n }\n}\n\nfunction deleteEdge(g, edge) {\n let gNew = JSON.parse(JSON.stringify(g)); // using this to deep clone graph structure\n let e1 = edge[0];\n let e2 = edge[1];\n if (Object.keys(gNew).includes(e1)) {\n if (Object.keys(gNew[e1]).includes(e2)) {\n delete gNew[e1][e2];\n }\n }\n if (Object.keys(gNew).includes(e2)) {\n if (Object.keys(gNew[e2]).includes(e1)) {\n delete gNew[e2][e1];\n }\n }\n return gNew;\n}\n\nfunction deleteNode(g, node) {\n let gNew = JSON.parse(JSON.stringify(g)); // using this to deep clone graph structure\n if (Object.keys(gNew).includes(node)) {\n delete gNew[node];\n }\n let keys = Object.keys(gNew);\n for (var nodeInd in keys) {\n let nodeNow = keys[nodeInd];\n if (Object.keys(gNew[nodeNow]).includes(node)) {\n delete gNew[nodeNow][node];\n }\n }\n return gNew;\n}\n\nfunction dijkstra(graph, s) {\n var solutions = {};\n solutions[s] = {};\n solutions[s].path = [];\n solutions[s].dist = 0;\n\n while (true) {\n var parent = null;\n var nearest = null;\n var dist = Infinity;\n\n //for each existing solution\n for (var n in solutions) {\n if (!solutions[n]) {\n solutions[n] = {};\n }\n if (!solutions[n].path) continue;\n var ndist = solutions[n].dist;\n var adj = graph[n];\n //for each of its adjacent nodes...\n for (var a in adj) {\n //without a solution already...\n if (!solutions[a]) {\n solutions[a] = {};\n }\n if (solutions[a].path) continue;\n //choose nearest node with lowest *total* cost\n var d = adj[a] + ndist;\n if (d < dist) {\n //reference parent\n parent = solutions[n].path;\n nearest = a;\n dist = d;\n }\n }\n }\n\n //no more solutions\n if (dist === Infinity) {\n break;\n }\n\n //extend parent's solution path\n solutions[nearest].path = parent.concat(nearest);\n //extend parent's cost\n solutions[nearest].dist = dist;\n }\n\n return solutions;\n}\n\nfunction shortestPath(g, src, dst, ignore_nodes = [], ignore_edges = []) {\n let gTemp = JSON.parse(JSON.stringify(g)); // using this to deep clone graph structure. If we can use lodash, could use _.cloneDeep(obj)\n // remove nodes\n for (var nodeInd in ignore_nodes) {\n let nodeNow = ignore_nodes[nodeInd];\n gTemp = deleteNode(gTemp, nodeNow);\n }\n // remove edges\n for (var edgeInd in ignore_edges) {\n let edgeNow = ignore_edges[edgeInd];\n gTemp = deleteEdge(gTemp, edgeNow);\n }\n let solution = dijkstra(gTemp, src)[dst];\n solution.path.unshift(src); // original algorithm doesn't include source node in path\n return solution;\n}\n\nfunction* count(firstval = 0, step = 1) {\n let x = firstval;\n while (true) {\n yield x;\n x = x + 1;\n }\n}\n\nclass PathBuffer {\n constructor() {\n this.paths = [];\n this.sortedpaths = [];\n //this.counter = count();\n }\n len() {\n return this.sortedpaths.length;\n }\n\n push(cost, path) {\n if (path && !arrayContains(this.paths, path)) {\n this.sortedpaths.push([cost, path]);\n this.sortedpaths.sort(function(a, b) {\n return a[0] - b[0];\n });\n //heappush(this.sortedpaths, (cost, this.counter.next().value,path));\n this.paths.push(path);\n }\n }\n\n pop() {\n //let val = heappop(this.sortedpaths);\n let val = this.sortedpaths.shift();\n let cost = val[0];\n let path = val[1];\n this.paths.splice(this.paths.indexOf(path), 1);\n return path;\n }\n}\n\nfunction arrayEquals(a, b) {\n return (\n Array.isArray(a) &&\n Array.isArray(b) &&\n a.length === b.length &&\n a.every((val, index) => val === b[index])\n );\n}\n\nfunction arrayContains(arr, obj) {\n // checks to see if the input array contains a reference object, obj, using\n // JSON.stringify() .\n let obj_json = JSON.stringify(obj);\n for (var itemInd in arr) {\n if (JSON.stringify(arr[itemInd]) == obj_json) {\n return true;\n }\n }\n return false;\n}\n\nfunction* yenFromPy(g, source, target) {\n //adapted from the python implementation in networkx.algorithms.simple_paths.shortest_simple_paths()\n let listA = [];\n let listB = new PathBuffer();\n let prev_path = null;\n\n while (true) {\n if (!prev_path) {\n let sol = shortestPath(g, source, target);\n let length = sol.dist;\n let path = sol.path;\n listB.push(length, path);\n } else {\n let ignore_nodes = [];\n let ignore_edges = [];\n for (var i = 1; i < prev_path.length; i++) {\n let root = prev_path.slice(0, i);\n let root_length = root.length;\n for (var pathInd in listA) {\n let path = listA[pathInd];\n\n if (arrayEquals(path.slice(0, i), root)) {\n let edgeToIgnore = [path[i - 1], path[i]];\n ignore_edges.push(edgeToIgnore);\n }\n }\n try {\n let sol = shortestPath(\n g,\n root[root.length - 1],\n target,\n (ignore_nodes = ignore_nodes),\n (ignore_edges = ignore_edges)\n );\n let length = sol.dist;\n let spur = sol.path;\n let path = root.slice(0, root.length - 1).concat(spur);\n listB.push(root_length + length, path);\n } catch (e) {\n //console.log(`yenFromPy error was... ${e}`)\n //dont do anything.\n }\n ignore_nodes.push(root[root.length - 1]);\n }\n }\n if (listB.sortedpaths) {\n try {\n let path = listB.pop();\n yield path;\n listA.push(path);\n prev_path = path;\n } catch (e) {\n break;\n }\n } else {\n break;\n }\n }\n}\n\nfunction getKShortestPaths(g, source, target, k, maxPathLength = 3) {\n let paths = [];\n if (maxPathLength < 2) {\n var maxPathLength = 2;\n }\n let gen = yenFromPy(g, source, target);\n for (var n = 1; n <= k; n++) {\n try {\n let res = gen.next().value;\n if (res && !arrayContains(paths, res)) {\n if (res.length > maxPathLength) {\n // console.log(\n // `found all hops of length ${\n // maxPathLength - 1\n // } or less... breaking out of generator`\n // );\n break;\n }\n paths.push(res);\n }\n } catch (e) {\n break;\n }\n }\n return paths;\n}\n\nasync function getPathsFromPools(\n pools,\n inputToken,\n outputToken,\n maxPathLength = 3\n) {\n let graph = getGraphFromPoolList(pools);\n return getKShortestPaths(graph, inputToken, outputToken, 100, maxPathLength);\n}\n\nasync function getAllPathsBelowLengthN(g, source, target, N, limit = 100) {\n // use Yen's algorithm to find the paths of length N or below between source and target nodes in graph g.\n\n let paths = [];\n\n let gen = await yenFromPy(g, source, target);\n let currentPathLength = 0;\n let count = 1;\n while (currentPathLength <= N) {\n // console.log(`CURRENT PATH LENGTH IS ${currentPathLength}`)\n try {\n let res = await gen.next().value;\n // console.log(`RES IS ${res}`)\n if (res && !arrayContains(paths, res)) {\n if (res.length > currentPathLength) {\n currentPathLength = res.length;\n if (currentPathLength > N) {\n break;\n }\n }\n paths.push(res);\n }\n count = count + 1;\n if (count > limit) {\n break;\n }\n } catch (e) {\n // console.log(e)\n break;\n }\n }\n return paths;\n}\n\nfunction getGraphFromPoolList(poolList) {\n let pools = poolList.filter(\n item => item.token1Supply != '0' && item.token2Supply != '0'\n );\n let transitions = pools.map(item => [item.token1Id, item.token2Id]);\n let g = {};\n addEdges(g, transitions);\n return g;\n}\n\n////////////////////////////////////\n\n// MAIN FUNCTION\n\n////////////////////////////////////\n\n// TODO -- incorporate the following integrated function, which tries to\n// account for stablecoins within the context of smart routing.\n\n//TODO -- need the right API / hooks for GETSTABLESWAPACTION function and GETPARALLELSWAPACTIONS functions.\n\n//TODO -- transform the actions generated in this function into tranaction to execute.\n\n//TRYING: GETSTABLESWAPACTION <==> instantSwapGetTransactions\n\nexport async function stableSmart(\n pools,\n inputToken,\n outputToken,\n totalInput,\n allTokens\n) {\n let smartRouteActions = await getSmartRouteSwapActions(\n pools,\n inputToken,\n outputToken,\n totalInput,\n allTokens\n );\n return smartRouteActions;\n}\n\nexport function getExpectedOutputFromActionsORIG(actions, outputToken) {\n return actions\n .filter(item => item.outputToken === outputToken)\n .map(item => new Big(item.estimate))\n .reduce((a, b) => a.plus(b), new Big(0));\n}\n\nfunction getFeeForRoute(route) {\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n // Single Hop case\n let p = route[0];\n return p.fee;\n } else if (route.length == 2) {\n //Double Hop Case\n let p1 = route[0];\n let p2 = route[1];\n let fee1 = p1.fee;\n let fee2 = p2.fee;\n return fee1 + fee2;\n }\n}\n\nexport function getAverageFeeForRoutes(routes, nodeRoutes, totalInput) {\n let normalizedAllocations = getOptimalAllocationForRoutes(\n routes,\n nodeRoutes,\n totalInput\n ).map(a => a.div(new Big(totalInput)));\n let averageFee = 0;\n for (var i in routes) {\n averageFee += normalizedAllocations[i] * getFeeForRoute(routes[i]);\n }\n return averageFee;\n}\n","import { TokenMetadata, Pool, StablePool, EstimateSwapView } from '../types';\nimport {\n toReadableNumber,\n toNonDivisibleNumber,\n scientificNotationToString,\n} from '../utils';\nimport Big from 'big.js';\nimport { SameInputTokenError, ZeroInputError, NoPoolError } from '../error';\nimport { ONLY_ZEROS, toPrecision } from '../utils';\nimport _ from 'lodash';\nimport { FEE_DIVISOR } from '../constant';\nimport { getSwappedAmount } from '../stable-swap';\nimport { ftGetTokenMetadata, ftGetTokensMetadata } from '../ref';\nimport { isStablePool } from '../utils';\nimport { getTokens } from '../indexer';\nimport {\n getStablePoolDecimal,\n isStablePoolToken,\n poolFormatter,\n} from '../utils';\nimport {\n stableSmart,\n getExpectedOutputFromActionsORIG,\n //@ts-ignore\n} from './smartRoutingLogic.js';\n\nexport enum PoolMode {\n PARALLEL = 'parallel swap',\n SMART = 'smart routing',\n SMART_V2 = 'stableSmart',\n STABLE = 'stable swap',\n}\n\nexport interface SwapParams {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n simplePools: Pool[];\n options?: SwapOptions;\n}\n\nexport interface SwapOptions {\n enableSmartRouting?: boolean;\n stablePools?: Pool[];\n stablePoolsDetail?: StablePool[];\n}\n\nexport const getSimplePoolEstimate = ({\n tokenIn,\n tokenOut,\n pool,\n amountIn,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n pool: Pool;\n amountIn: string;\n}) => {\n const amount_with_fee = Number(amountIn) * (FEE_DIVISOR - pool.fee);\n const in_balance = toReadableNumber(\n tokenIn.decimals,\n pool.supplies[tokenIn.id]\n );\n const out_balance = toReadableNumber(\n tokenOut.decimals,\n pool.supplies[tokenOut.id]\n );\n const estimate = new Big(\n (\n (amount_with_fee * Number(out_balance)) /\n (FEE_DIVISOR * Number(in_balance) + amount_with_fee)\n ).toString()\n ).toFixed();\n\n return {\n estimate,\n pool,\n outputToken: tokenOut.id,\n inputToken: tokenIn.id,\n };\n};\n\nexport const getStablePoolEstimate = ({\n tokenIn,\n tokenOut,\n amountIn,\n stablePool,\n pool,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n stablePool: StablePool;\n pool?: Pool;\n}) => {\n const STABLE_LP_TOKEN_DECIMALS = getStablePoolDecimal(stablePool);\n\n const [amount_swapped, _, dy] = getSwappedAmount(\n tokenIn.id,\n tokenOut.id,\n amountIn,\n stablePool,\n STABLE_LP_TOKEN_DECIMALS\n );\n\n const amountOut =\n amount_swapped < 0 || isNaN(amount_swapped)\n ? '0'\n : toPrecision(scientificNotationToString(amount_swapped.toString()), 0);\n\n const dyOut =\n amount_swapped < 0 || isNaN(amount_swapped) || isNaN(dy)\n ? '0'\n : toPrecision(scientificNotationToString(dy.toString()), 0);\n\n const rates = stablePool.rates.reduce((acc, cur, i) => {\n return {\n ...acc,\n [stablePool.token_account_ids[i]]: cur,\n };\n }, {});\n\n return {\n estimate: toReadableNumber(STABLE_LP_TOKEN_DECIMALS, amountOut),\n noFeeAmountOut: toReadableNumber(STABLE_LP_TOKEN_DECIMALS, dyOut),\n pool: {\n ...stablePool,\n rates,\n },\n outputToken: tokenOut.id,\n inputToken: tokenIn.id,\n };\n};\n\n/**\n * @description Get the estimate of the amount of tokenOut that can be received\n *\n */\nexport const singlePoolSwap = ({\n tokenIn,\n tokenOut,\n simplePools,\n amountIn,\n stablePools,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n simplePools: Pool[];\n amountIn: string;\n stablePools?: StablePool[];\n}) => {\n if (!simplePools || simplePools.length === 0) {\n throw NoPoolError;\n }\n\n const parsedAmountIn = toNonDivisibleNumber(tokenIn.decimals, amountIn);\n\n // const pools = simplePools.concat(stablePools);\n\n const simplePoolsThisPair = simplePools.filter(\n p =>\n p.tokenIds.includes(tokenIn.id) &&\n p.tokenIds.includes(tokenOut.id) &&\n (!stablePools || !isStablePool(stablePools, p.id))\n );\n\n const estimatesSimplePool = simplePoolsThisPair.map(pool =>\n getSimplePoolEstimate({\n tokenIn,\n tokenOut,\n pool,\n amountIn,\n })\n );\n\n const stablePoolThisPair = stablePools?.filter(\n sp =>\n sp.token_account_ids.includes(tokenIn.id) &&\n sp.token_account_ids.includes(tokenOut.id)\n );\n\n // different stable lp token decimal for different type of pools\n const estimatesStablePool = stablePoolThisPair?.map(stablePool => {\n return getStablePoolEstimate({\n tokenIn,\n tokenOut,\n amountIn,\n stablePool,\n pool: simplePools.find(p => p.id === stablePool.id) as Pool,\n });\n });\n\n const maxSimplePoolEstimate =\n estimatesSimplePool === undefined || estimatesSimplePool.length === 0\n ? undefined\n : estimatesSimplePool.length === 1\n ? estimatesSimplePool[0]\n : _.maxBy(estimatesSimplePool, estimate => Number(estimate.estimate));\n\n const maxStablePoolEstimate =\n estimatesStablePool === undefined || estimatesStablePool.length === 0\n ? undefined\n : estimatesStablePool.length === 1\n ? estimatesStablePool[0]\n : _.maxBy(estimatesStablePool, estimate => Number(estimate.estimate));\n\n if (!maxStablePoolEstimate && !maxSimplePoolEstimate) throw NoPoolError;\n\n maxSimplePoolEstimate &&\n (maxSimplePoolEstimate.pool.partialAmountIn = parsedAmountIn);\n\n maxStablePoolEstimate &&\n (maxStablePoolEstimate.pool.partialAmountIn = parsedAmountIn);\n\n if (!maxStablePoolEstimate) {\n maxSimplePoolEstimate &&\n (maxSimplePoolEstimate.pool.partialAmountIn = parsedAmountIn);\n\n return maxSimplePoolEstimate;\n } else if (!maxSimplePoolEstimate) {\n return maxStablePoolEstimate;\n } else {\n return Number(maxSimplePoolEstimate?.estimate) >\n Number(maxStablePoolEstimate?.estimate)\n ? maxSimplePoolEstimate\n : maxStablePoolEstimate;\n }\n};\n\nexport const getStablePoolsThisPair = ({\n tokenInId,\n tokenOutId,\n stablePools,\n}: {\n tokenInId: string;\n tokenOutId: string;\n stablePools: Pool[];\n}) => {\n return stablePools.filter(\n p =>\n p.tokenIds.includes(tokenInId) &&\n p.tokenIds.includes(tokenOutId) &&\n tokenInId !== tokenOutId\n );\n};\n\nexport const getPoolsByTokens = ({\n pools,\n tokenInId,\n tokenOutId,\n}: {\n pools: Pool[];\n tokenInId: string;\n tokenOutId: string;\n}) => {\n if (tokenInId === tokenOutId) return [];\n\n return pools.filter(\n p => p.tokenIds.includes(tokenInId) && p.tokenIds.includes(tokenOutId)\n );\n};\n\nexport const getPoolEstimate = async ({\n tokenIn,\n tokenOut,\n amountIn,\n stablePoolDetail,\n pool,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n pool: Pool;\n stablePoolDetail?: StablePool;\n}) => {\n if (!!stablePoolDetail) {\n return getStablePoolEstimate({\n tokenIn,\n tokenOut,\n stablePool: stablePoolDetail,\n amountIn,\n pool,\n });\n } else {\n return getSimplePoolEstimate({\n tokenIn,\n tokenOut,\n pool,\n amountIn,\n });\n }\n};\n\nexport async function getHybridStableSmart(\n tokenIn: TokenMetadata,\n tokenOut: TokenMetadata,\n amountIn: string,\n stablePools: Pool[],\n stablePoolsDetail: StablePool[],\n simplePools: Pool[],\n allTokens: Record<string, TokenMetadata>\n) {\n if (\n !isStablePoolToken(stablePoolsDetail, tokenIn.id) &&\n !isStablePoolToken(stablePoolsDetail, tokenOut.id)\n ) {\n return { actions: [], estimate: '0' };\n }\n\n const stablePoolsDetailById = stablePoolsDetail.reduce((acc, cur) => {\n return {\n ...acc,\n [cur.id]: cur,\n };\n }, {} as Record<string, StablePool>);\n\n const parsedAmountIn = toNonDivisibleNumber(tokenIn.decimals, amountIn);\n\n let pool1: Pool, pool2: Pool;\n\n let pools1: Pool[] = [];\n let pools2: Pool[] = [];\n\n let pools1Right: Pool[] = [];\n let pools2Right: Pool[] = [];\n\n let candidatePools: Pool[][] = [];\n\n /**\n * find possible routes for this pair\n *\n *\n */\n\n if (isStablePoolToken(stablePoolsDetail, tokenIn.id)) {\n // first hop will be through stable pool.\n pools1 = stablePools.filter(pool => pool.tokenIds.includes(tokenIn.id));\n\n const otherStables = pools1\n .map(pool => pool.tokenIds.filter(id => id !== tokenIn.id))\n .flat();\n\n for (var otherStable of otherStables) {\n let stablePoolsThisPair = getStablePoolsThisPair({\n tokenInId: otherStable,\n tokenOutId: tokenOut.id,\n stablePools,\n });\n\n let tmpPools = getPoolsByTokens({\n tokenInId: otherStable,\n tokenOutId: tokenOut.id,\n pools: simplePools,\n });\n const tobeAddedPools = tmpPools.concat(stablePoolsThisPair);\n pools2.push(\n ...tobeAddedPools.filter(p => {\n const supplies = Object.values(p.supplies);\n return new Big(supplies[0]).times(new Big(supplies[1])).gt(0);\n })\n );\n }\n }\n\n if (isStablePoolToken(stablePoolsDetail, tokenOut.id)) {\n // second hop will be through stable pool.\n pools2Right = stablePools.filter(pool =>\n pool.tokenIds.includes(tokenOut.id)\n );\n\n const otherStables = pools2Right\n .map(pool => pool.tokenIds.filter(id => id !== tokenOut.id))\n .flat();\n for (let otherStable of otherStables) {\n let stablePoolsThisPair = getStablePoolsThisPair({\n tokenInId: tokenIn.id,\n tokenOutId: otherStable,\n stablePools,\n });\n\n let tmpPools = getPoolsByTokens({\n tokenInId: tokenIn.id,\n tokenOutId: otherStable,\n pools: simplePools,\n });\n\n const tobeAddedPools = tmpPools.concat(stablePoolsThisPair);\n\n pools1Right.push(\n ...tobeAddedPools.filter(p => {\n const supplies = Object.values(p.supplies);\n return new Big(supplies[0]).times(new Big(supplies[1])).gt(0);\n })\n );\n }\n }\n\n // find candidate pools\n\n for (let p1 of pools1) {\n let middleTokens = p1.tokenIds.filter((id: string) => id !== tokenIn.id);\n for (let middleToken of middleTokens) {\n let p2s = pools2.filter(\n p =>\n p.tokenIds.includes(middleToken) &&\n p.tokenIds.includes(tokenOut.id) &&\n middleToken !== tokenOut.id\n );\n let p2 = _.maxBy(p2s, p =>\n Number(\n new Big(toReadableNumber(tokenOut.decimals, p.supplies[tokenOut.id]))\n )\n );\n\n if (middleToken === tokenOut.id) {\n p2 = p1;\n }\n\n if (p1 && p2) {\n if (p1.id === p2.id) candidatePools.push([p1]);\n else candidatePools.push([p1, p2]);\n }\n }\n }\n for (let p1 of pools1Right) {\n let middleTokens = p1.tokenIds.filter((id: string) => id !== tokenIn.id);\n for (let middleToken of middleTokens) {\n let p2s = pools2Right.filter(\n p =>\n p.tokenIds.includes(middleToken) &&\n p.tokenIds.includes(tokenOut.id) &&\n middleToken !== tokenOut.id\n );\n let p2 = _.maxBy(p2s, p =>\n Number(\n new Big(toReadableNumber(tokenOut.decimals, p.supplies[tokenOut.id]))\n )\n );\n\n if (middleToken === tokenOut.id) {\n p2 = p1;\n }\n\n if (p1 && p2) {\n if (p1.id === p2.id) candidatePools.push([p1]);\n else candidatePools.push([p1, p2]);\n }\n }\n }\n\n if (candidatePools.length > 0) {\n const tokensMedata = await ftGetTokensMetadata(\n candidatePools.map(cp => cp.map(p => p.tokenIds).flat()).flat(),\n allTokens\n );\n\n const BestPoolPair =\n candidatePools.length === 1\n ? candidatePools[0]\n : _.maxBy(candidatePools, poolPair => {\n // only one pool case, only for stable tokens\n if (poolPair.length === 1) {\n if (isStablePool(stablePoolsDetail, poolPair[0].id)) {\n const stablePoolThisPair = getStablePoolsThisPair({\n tokenInId: tokenIn.id,\n tokenOutId: tokenOut.id,\n stablePools,\n })[0];\n\n const stablePoolDetailThisPair = stablePoolsDetail.find(\n spd => spd.id === stablePoolThisPair.id\n );\n\n return Number(\n getStablePoolEstimate({\n tokenIn,\n tokenOut,\n stablePool: stablePoolDetailThisPair as StablePool,\n amountIn,\n pool: poolPair[0],\n }).estimate\n );\n } else {\n return Number(\n getSimplePoolEstimate({\n tokenIn,\n tokenOut,\n amountIn,\n pool: poolPair[0],\n }).estimate\n );\n }\n }\n\n const [tmpPool1, tmpPool2] = poolPair;\n const tokenMidId = poolPair[0].tokenIds.find((t: string) =>\n poolPair[1].tokenIds.includes(t)\n ) as string;\n\n const tokenMidMeta = tokensMedata[tokenMidId];\n\n const estimate1 = {\n ...(isStablePool(stablePoolsDetail, tmpPool1.id)\n ? getStablePoolEstimate({\n tokenIn,\n tokenOut: tokenMidMeta,\n amountIn,\n stablePool: stablePoolsDetailById[tmpPool1.id],\n pool: tmpPool1,\n })\n : getSimplePoolEstimate({\n tokenIn,\n tokenOut: tokenMidMeta,\n amountIn,\n pool: tmpPool1,\n })),\n status: PoolMode.SMART,\n };\n\n const estimate2 = {\n ...(isStablePool(stablePoolsDetail, tmpPool2.id)\n ? getStablePoolEstimate({\n tokenIn: tokenMidMeta,\n tokenOut,\n amountIn: estimate1.estimate,\n stablePool: stablePoolsDetailById[tmpPool2.id],\n pool: tmpPool2,\n })\n : getSimplePoolEstimate({\n tokenIn: tokenMidMeta,\n tokenOut,\n pool: tmpPool2,\n amountIn: estimate1.estimate,\n })),\n status: PoolMode.SMART,\n };\n\n return Number(estimate2.estimate);\n });\n\n // one pool case only get best price\n\n if (!BestPoolPair) return { actions: [], estimate: '0' };\n\n if (BestPoolPair.length === 1) {\n const bestPool = BestPoolPair[0];\n const estimate = await getPoolEstimate({\n tokenIn,\n tokenOut,\n amountIn,\n pool: bestPool,\n stablePoolDetail: stablePoolsDetailById[bestPool.id],\n });\n\n return {\n actions: [\n {\n ...estimate,\n status: PoolMode.STABLE,\n\n pool: { ...estimate.pool, partialAmountIn: parsedAmountIn },\n tokens: [tokenIn, tokenOut],\n inputToken: tokenIn.id,\n outputToken: tokenOut.id,\n totalInputAmount: toNonDivisibleNumber(tokenIn.decimals, amountIn),\n },\n ],\n estimate: estimate.estimate,\n };\n }\n\n // two pool case get best price\n [pool1, pool2] = BestPoolPair;\n\n const tokenMidId = BestPoolPair[0].tokenIds.find((t: string) =>\n BestPoolPair[1].tokenIds.includes(t)\n ) as string;\n\n const tokenMidMeta =\n allTokens[tokenMidId] ||\n (await ftGetTokenMetadata(tokenMidId, 'hybridSmartRoutingEstimate'));\n\n const estimate1 = {\n ...(isStablePool(stablePoolsDetail, pool1.id)\n ? getStablePoolEstimate({\n tokenIn,\n tokenOut: tokenMidMeta,\n amountIn,\n stablePool: stablePoolsDetailById[pool1.id],\n pool: pool1,\n })\n : getSimplePoolEstimate({\n tokenIn,\n tokenOut: tokenMidMeta,\n amountIn,\n pool: pool1,\n })),\n tokens: [tokenIn, tokenMidMeta, tokenOut],\n inputToken: tokenIn.id,\n outputToken: tokenMidMeta.id,\n status: PoolMode.SMART,\n };\n\n estimate1.pool = {\n ...estimate1.pool,\n partialAmountIn: parsedAmountIn,\n };\n\n const estimate2 = {\n ...(isStablePool(stablePoolsDetail, pool2.id)\n ? getStablePoolEstimate({\n tokenIn: tokenMidMeta,\n tokenOut,\n amountIn: estimate1.estimate,\n stablePool: stablePoolsDetailById[pool2.id],\n pool: pool2,\n })\n : getSimplePoolEstimate({\n tokenIn: tokenMidMeta,\n tokenOut,\n amountIn: estimate1.estimate,\n pool: pool2,\n })),\n\n tokens: [tokenIn, tokenMidMeta, tokenOut],\n inputToken: tokenMidMeta.id,\n outputToken: tokenOut.id,\n status: PoolMode.SMART,\n };\n\n return { actions: [estimate1, estimate2], estimate: estimate2.estimate };\n }\n\n return { actions: [], estimate: '0' };\n}\n\n// simple pools and stable pools for this pair\nexport const estimateSwap = async ({\n tokenIn,\n tokenOut,\n amountIn,\n simplePools,\n options,\n}: SwapParams) => {\n if (tokenIn.id === tokenOut.id) throw SameInputTokenError;\n\n if (ONLY_ZEROS.test(amountIn)) throw ZeroInputError;\n\n const { enableSmartRouting, stablePools, stablePoolsDetail } = options || {};\n\n const parsedAmountIn = toNonDivisibleNumber(tokenIn.decimals, amountIn);\n\n let singleRouteEstimate: EstimateSwapView[] = [];\n\n try {\n const estimate = singlePoolSwap({\n tokenIn,\n tokenOut,\n simplePools,\n amountIn,\n stablePools: stablePoolsDetail,\n });\n\n singleRouteEstimate = [\n {\n ...estimate,\n status: PoolMode.PARALLEL,\n pool: { ...estimate?.pool, partialAmountIn: parsedAmountIn },\n totalInputAmount: toNonDivisibleNumber(tokenIn.decimals, amountIn),\n tokens: [tokenIn, tokenOut],\n },\n ] as EstimateSwapView[];\n if (!enableSmartRouting) {\n return singleRouteEstimate;\n }\n } catch (error) {\n if (!enableSmartRouting) throw error;\n }\n\n const inputPools = simplePools.map(p => poolFormatter(p));\n\n const allTokens = (await getTokens()) as Record<string, TokenMetadata>;\n\n const simplePoolSmartRoutingActions = await stableSmart(\n inputPools,\n tokenIn.id,\n tokenOut.id,\n parsedAmountIn,\n allTokens\n );\n\n const simplePoolSmartRoutingEstimate = getExpectedOutputFromActionsORIG(\n simplePoolSmartRoutingActions,\n tokenOut.id\n ).toString();\n\n const hybridSmartRoutingRes = await getHybridStableSmart(\n tokenIn,\n tokenOut,\n amountIn,\n stablePools || [],\n stablePoolsDetail || [],\n simplePools,\n allTokens\n );\n\n const hybridSmartRoutingEstimate = hybridSmartRoutingRes.estimate.toString();\n\n if (\n new Big(simplePoolSmartRoutingEstimate || '0').gte(\n hybridSmartRoutingEstimate || '0'\n )\n ) {\n if (!simplePoolSmartRoutingActions?.length) throw NoPoolError;\n\n if (\n typeof singleRouteEstimate !== 'undefined' &&\n singleRouteEstimate &&\n singleRouteEstimate?.[0]?.estimate &&\n new Big(singleRouteEstimate[0].estimate || '0').gt(\n simplePoolSmartRoutingEstimate || '0'\n )\n ) {\n return singleRouteEstimate;\n }\n return simplePoolSmartRoutingActions as EstimateSwapView[];\n } else {\n if (\n typeof singleRouteEstimate !== 'undefined' &&\n singleRouteEstimate &&\n singleRouteEstimate?.[0]?.estimate &&\n new Big(singleRouteEstimate[0].estimate || '0').gt(\n hybridSmartRoutingEstimate || '0'\n )\n ) {\n return singleRouteEstimate;\n }\n\n return hybridSmartRoutingRes.actions as EstimateSwapView[];\n }\n};\n","import {\n Pool,\n PoolRPCView,\n StablePool,\n SmartRoutingInputPool,\n Transaction,\n EstimateSwapView,\n} from './types';\nimport {\n FEE_DIVISOR,\n RATED_POOL_LP_TOKEN_DECIMALS,\n STABLE_LP_TOKEN_DECIMALS,\n} from './constant';\n\nimport {\n transactions,\n utils,\n transactions as nearTransactions,\n} from 'near-api-js';\n\nimport _, { sortBy } from 'lodash';\n\nimport BN from 'bn.js';\n\nimport * as math from 'mathjs';\nimport {\n REF_FI_CONTRACT_ID,\n WRAP_NEAR_CONTRACT_ID,\n STORAGE_TO_REGISTER_WITH_MFT,\n} from './constant';\nimport Big from 'big.js';\nimport { SignAndSendTransactionsParams } from '@near-wallet-selector/core/lib/wallet';\nimport { TokenMetadata } from './types';\nimport { PoolMode } from './v1-swap/swap';\nimport { getSwappedAmount } from './stable-swap';\nimport { NoFeeToPool } from './error';\nimport { CONSTANT_D, POINTLEFTRANGE, POINTRIGHTRANGE } from './constant';\nimport { DCL_POOL_FEE_LIST } from './dcl-swap/dcl-pool';\n\nexport const parsePool = (pool: PoolRPCView, id?: number): Pool => ({\n id: Number(typeof id === 'number' ? id : pool.id),\n tokenIds: pool.token_account_ids,\n supplies: pool.amounts.reduce(\n (acc: { [tokenId: string]: string }, amount: string, i: number) => {\n acc[pool.token_account_ids[i]] = amount;\n return acc;\n },\n {}\n ),\n fee: pool.total_fee,\n shareSupply: pool.shares_total_supply,\n tvl: pool.tvl,\n token0_ref_price: pool.token0_ref_price,\n pool_kind: pool.pool_kind,\n});\n\nexport const poolFormatter = (pool: Pool) => {\n return {\n id: pool.id,\n token1Id: pool.tokenIds[0],\n token2Id: pool.tokenIds[1],\n token1Supply: pool.supplies[pool.tokenIds[0]],\n token2Supply: pool.supplies[pool.tokenIds[1]],\n fee: pool.fee,\n shares: pool.shareSupply,\n token0_price: pool.token0_ref_price || '0',\n } as SmartRoutingInputPool;\n};\n\nexport const isStablePoolToken = (\n stablePools: StablePool[],\n tokenId: string | Number\n) => {\n return stablePools\n .map(p => p.token_account_ids)\n .flat()\n .includes(tokenId.toString());\n};\n\nexport const isStablePool = (\n stablePools: StablePool[],\n poolId: string | number\n) => {\n return stablePools.map(p => p.id.toString()).includes(poolId.toString());\n};\n\nexport const getStablePoolDecimal = (stablePool: StablePool) => {\n return stablePool.pool_kind === 'RATED_SWAP'\n ? RATED_POOL_LP_TOKEN_DECIMALS\n : STABLE_LP_TOKEN_DECIMALS;\n};\n\nexport const round = (decimals: number, minAmountOut: string) => {\n return Number.isInteger(Number(minAmountOut))\n ? minAmountOut\n : Math.ceil(\n Math.round(Number(minAmountOut) * Math.pow(10, decimals)) /\n Math.pow(10, decimals)\n ).toString();\n};\n\nexport const convertToPercentDecimal = (percent: number) => {\n return math.divide(percent, 100);\n};\n\nexport const percentOf = (percent: number, num: number | string) => {\n return math.evaluate(`${convertToPercentDecimal(percent)} * ${num}`);\n};\n\nexport const percentLess = (percent: number, num: number | string) => {\n return math.format(math.evaluate(`${num} - ${percentOf(percent, num)}`), {\n notation: 'fixed',\n });\n};\n\nexport const getGas = (gas: string | undefined) =>\n gas ? new BN(gas) : new BN('100000000000000');\n\nexport const getAmount = (amount: string) =>\n amount ? new BN(utils.format.parseNearAmount(amount) || '0') : new BN('0');\n\nexport const ONLY_ZEROS = /^0*\\.?0*$/;\n\nexport const toReadableNumber = (\n decimals: number,\n number: string = '0'\n): string => {\n if (!decimals) return number;\n\n const wholeStr = number.substring(0, number.length - decimals) || '0';\n const fractionStr = number\n .substring(number.length - decimals)\n .padStart(decimals, '0')\n .substring(0, decimals);\n\n return `${wholeStr}.${fractionStr}`.replace(/\\.?0+$/, '');\n};\n\nexport const toNonDivisibleNumber = (\n decimals: number,\n number: string\n): string => {\n if (decimals === null || decimals === undefined) return number;\n const [wholePart, fracPart = ''] = number.split('.');\n\n return `${wholePart}${fracPart.padEnd(decimals, '0').slice(0, decimals)}`\n .replace(/^0+/, '')\n .padStart(1, '0');\n};\n\nexport const scientificNotationToString = (strParam: string) => {\n let flag = /e/.test(strParam);\n if (!flag || !strParam) return strParam;\n\n let sysbol = true;\n if (/e-/.test(strParam)) {\n sysbol = false;\n }\n\n const negative = Number(strParam) < 0 ? '-' : '';\n\n let index = Number(strParam.match(/\\d+$/)?.[0]);\n\n let basis = strParam.match(/[\\d\\.]+/)?.[0];\n\n if (!index || !basis) return strParam;\n\n const ifFraction = basis.includes('.');\n\n let wholeStr;\n let fractionStr;\n\n if (ifFraction) {\n wholeStr = basis.split('.')[0];\n fractionStr = basis.split('.')[1];\n } else {\n wholeStr = basis;\n fractionStr = '';\n }\n\n if (sysbol) {\n if (!ifFraction) {\n return negative + wholeStr.padEnd(index + wholeStr.length, '0');\n } else {\n if (fractionStr.length <= index) {\n return negative + wholeStr + fractionStr.padEnd(index, '0');\n } else {\n return (\n negative +\n wholeStr +\n fractionStr.substring(0, index) +\n '.' +\n fractionStr.substring(index)\n );\n }\n }\n } else {\n if (!ifFraction)\n return (\n negative +\n wholeStr.padStart(index + wholeStr.length, '0').replace(/^0/, '0.')\n );\n else {\n return (\n negative +\n wholeStr.padStart(index + wholeStr.length, '0').replace(/^0/, '0.') +\n fractionStr\n );\n }\n }\n};\n\nexport const formatWithCommas = (value: string) => {\n const pattern = /(-?\\d+)(\\d{3})/;\n while (pattern.test(value)) {\n value = value.replace(pattern, '$1,$2');\n }\n return value;\n};\n\nexport const toPrecision = (\n number: string,\n precision: number,\n withCommas: boolean = false,\n atLeastOne: boolean = true\n): string => {\n const [whole, decimal = ''] = number.split('.');\n\n let str = `${withCommas ? formatWithCommas(whole) : whole}.${decimal.slice(\n 0,\n precision\n )}`.replace(/\\.$/, '');\n if (atLeastOne && Number(str) === 0 && str.length > 1) {\n var n = str.lastIndexOf('0');\n str = str.slice(0, n) + str.slice(n).replace('0', '1');\n }\n\n return str;\n};\n\nexport const transformTransactions = (\n transactions: Transaction[],\n AccountId: string\n) => {\n const parsedTransactions = transactions.map((t: Transaction) => {\n return {\n signerId: AccountId,\n receiverId: t.receiverId,\n actions: t.functionCalls.map(fc => {\n return {\n type: 'FunctionCall',\n params: {\n methodName: fc.methodName,\n args: fc.args || {},\n gas: getGas(fc.gas)\n .toNumber()\n .toFixed(),\n deposit: utils.format.parseNearAmount(fc.amount || '0')!,\n },\n };\n }),\n };\n });\n\n return parsedTransactions;\n};\n\nexport const WalletSelectorTransactions = (\n transactions: Transaction[],\n AccountId: string\n) => {\n const parsedTransactions = transactions.map((t: Transaction) => {\n return {\n signerId: AccountId,\n receiverId: t.receiverId,\n actions: t.functionCalls.map(fc => {\n return {\n type: 'FunctionCall',\n params: {\n methodName: fc.methodName,\n args: fc.args || {},\n gas: getGas(fc.gas)\n .toNumber()\n .toFixed(),\n deposit: utils.format.parseNearAmount(fc.amount || '0')!,\n },\n };\n }),\n };\n });\n\n return { transactions: parsedTransactions } as SignAndSendTransactionsParams;\n};\n\nexport const separateRoutes = (\n actions: EstimateSwapView[],\n outputToken: string\n) => {\n const res = [];\n let curRoute = [];\n\n for (let i in actions) {\n curRoute.push(actions[i]);\n if (actions[i].outputToken === outputToken) {\n res.push(curRoute);\n curRoute = [];\n }\n }\n\n return res;\n};\n\nexport const calculateExchangeRate = (\n from: string,\n to: string,\n precision?: number\n) => {\n return math\n .floor(math.evaluate(`${to} / ${from}`), precision || 4)\n .toString();\n};\n\nexport const getAvgFee = (\n estimates: EstimateSwapView[],\n outputToken: string,\n parsedAmountIn: string\n) => {\n if (!estimates || estimates.length === 0) {\n return 0;\n }\n\n const routes = separateRoutes(estimates, outputToken);\n\n let fee = new Big(0);\n\n routes.forEach(r => {\n const partialAmountIn = r[0].pool.partialAmountIn || '0';\n\n fee = fee.plus(\n r\n .reduce(\n (acc, cur) => acc.plus(cur.pool.fee || cur.pool.total_fee || 0),\n new Big(0)\n )\n .times(partialAmountIn)\n .div(ONLY_ZEROS.test(parsedAmountIn) ? '1' : parsedAmountIn)\n );\n });\n\n return fee.toNumber();\n};\n\nexport const getAccountName = (AccountId: string) => {\n if (!AccountId) return AccountId;\n\n const [account, network] = AccountId.split('.');\n const niceAccountId = `${account.slice(0, 10)}...${network || ''}`;\n\n return account.length > 10 ? niceAccountId : AccountId;\n};\n\nexport const symbolsArr = ['e', 'E', '+', '-'];\n\nexport const multiply = (factor1: string, factor2: string) => {\n return math.format(math.evaluate(`${factor1} * ${factor2}`), {\n notation: 'fixed',\n });\n};\n\nexport const toInternationalCurrencySystemLongString = (\n labelValue: string,\n percent?: number\n) => {\n return Math.abs(Number(labelValue)) >= 1.0e9\n ? (Math.abs(Number(labelValue)) / 1.0e9).toFixed(percent || 2) + 'B'\n : Math.abs(Number(labelValue)) >= 1.0e6\n ? (Math.abs(Number(labelValue)) / 1.0e6).toFixed(percent || 2) + 'M'\n : Math.abs(Number(labelValue)).toFixed(percent || 2);\n};\n\nexport const percentOfBigNumber = (\n percent: number,\n num: number | string,\n precision: number\n) => {\n const valueBig = math.bignumber(num);\n const percentBig = math.bignumber(percent).div(100);\n\n return toPrecision(\n scientificNotationToString(valueBig.mul(percentBig).toString()),\n precision\n );\n};\n\nexport const toRealSymbol = (symbol: string) => {\n if (!symbol) return '';\n const blackList = ['nUSDO'];\n\n if (symbol === 'nWETH' || symbol === 'WETH') return 'wETH';\n if (blackList.includes(symbol)) return symbol;\n return symbol.charAt(0) === 'n' &&\n symbol.charAt(1) === symbol.charAt(1).toUpperCase()\n ? symbol.substring(1)\n : symbol;\n};\n\nexport const calculateFeeCharge = (fee: number, total: string) => {\n return math.floor(math.evaluate(`(${fee} / ${FEE_DIVISOR}) * ${total}`), 3);\n};\n\nexport const calculateFeePercent = (fee: number) => {\n return math.divide(fee, 100);\n};\n\nexport function getExpectedOutputFromSwapTodos(\n estimates: EstimateSwapView[],\n outputToken: string\n) {\n if (!estimates || estimates.length === 0) return new Big(0);\n\n return estimates\n .filter(item => item.outputToken === outputToken)\n .map(item => new Big(item.estimate || 0))\n .reduce((a, b) => a.plus(b), new Big(0));\n}\n\nexport const calculateAmountReceived = (\n pool: Pool,\n amountIn: string,\n tokenIn: TokenMetadata,\n tokenOut: TokenMetadata\n) => {\n const partialAmountIn = toReadableNumber(tokenIn.decimals, amountIn);\n\n const in_balance = toReadableNumber(\n tokenIn.decimals,\n pool.supplies[tokenIn.id]\n );\n const out_balance = toReadableNumber(\n tokenOut.decimals,\n pool.supplies[tokenOut.id]\n );\n\n const big_in_balance = math.bignumber(in_balance);\n const big_out_balance = math.bignumber(out_balance);\n\n const constant_product = big_in_balance.mul(big_out_balance);\n\n const new_in_balance = big_in_balance.plus(math.bignumber(partialAmountIn));\n\n const new_out_balance = constant_product.div(new_in_balance);\n\n const tokenOutReceived = big_out_balance.minus(new_out_balance);\n\n return tokenOutReceived;\n};\n\nexport const calculateMarketPrice = (\n pool: Pool,\n tokenIn: TokenMetadata,\n tokenOut: TokenMetadata\n) => {\n const cur_in_balance = toReadableNumber(\n tokenIn.decimals,\n pool.supplies[tokenIn.id]\n );\n\n const cur_out_balance = toReadableNumber(\n tokenOut.decimals,\n pool.supplies[tokenOut.id]\n );\n\n return math.evaluate(`(${cur_in_balance} / ${cur_out_balance})`);\n};\n\nexport const calculateSmartRoutingPriceImpact = (\n tokenInAmount: string,\n swapTodos: EstimateSwapView[],\n tokenIn: TokenMetadata,\n tokenMid: TokenMetadata,\n tokenOut: TokenMetadata,\n stablePools: StablePool[]\n) => {\n const isPool1StablePool = isStablePool(stablePools, swapTodos[0].pool.id);\n const isPool2StablePool = isStablePool(stablePools, swapTodos[1].pool.id);\n\n const marketPrice1 = isPool1StablePool\n ? (\n Number(swapTodos[0].pool.rates?.[tokenMid.id]) /\n Number(swapTodos[0].pool.rates?.[tokenIn.id])\n ).toString()\n : calculateMarketPrice(swapTodos[0].pool, tokenIn, tokenMid);\n\n const marketPrice2 = isPool2StablePool\n ? (\n Number(swapTodos[1].pool.rates?.[tokenOut.id]) /\n Number(swapTodos[1].pool.rates?.[tokenMid.id])\n ).toString()\n : calculateMarketPrice(swapTodos[1].pool, tokenMid, tokenOut);\n\n const generalMarketPrice = math.evaluate(`${marketPrice1} * ${marketPrice2}`);\n\n const tokenMidReceived = isPool1StablePool\n ? swapTodos[0].noFeeAmountOut\n : calculateAmountReceived(\n swapTodos[0].pool,\n toNonDivisibleNumber(tokenIn.decimals, tokenInAmount),\n tokenIn,\n tokenMid\n );\n\n const formattedTokenMidReceived = scientificNotationToString(\n tokenMidReceived?.toString() || '0'\n );\n\n let stableOutPool2;\n if (isPool2StablePool) {\n const stablePool2 =\n stablePools.find(p => p.id === swapTodos[1].pool.id) || stablePools[0];\n\n const stableOut = getSwappedAmount(\n tokenMid.id,\n tokenOut.id,\n formattedTokenMidReceived,\n stablePool2,\n getStablePoolDecimal(stablePool2)\n );\n stableOutPool2 =\n stableOut[0] < 0\n ? '0'\n : toPrecision(scientificNotationToString(stableOut[2].toString()), 0);\n stableOutPool2 = toReadableNumber(\n getStablePoolDecimal(stablePool2),\n stableOutPool2\n );\n }\n\n const tokenOutReceived = isPool2StablePool\n ? stableOutPool2\n : calculateAmountReceived(\n swapTodos[1].pool,\n toNonDivisibleNumber(tokenMid.decimals, formattedTokenMidReceived),\n tokenMid,\n tokenOut\n );\n\n const newMarketPrice = math.evaluate(\n `${tokenInAmount} / ${tokenOutReceived}`\n );\n\n const PriceImpact = new Big(newMarketPrice)\n .minus(new Big(generalMarketPrice))\n .div(newMarketPrice)\n .times(100)\n .toString();\n\n return scientificNotationToString(PriceImpact);\n};\nexport const percent = (numerator: string, denominator: string) => {\n return math.evaluate(`(${numerator} / ${denominator}) * 100`);\n};\nexport const calcStableSwapPriceImpact = (\n from: string,\n to: string,\n marketPrice: string = '1'\n) => {\n const newMarketPrice = math.evaluate(`${from} / ${to}`);\n\n return math.format(\n percent(\n math.evaluate(`${newMarketPrice} - ${marketPrice}`),\n newMarketPrice\n ),\n {\n notation: 'fixed',\n }\n );\n};\n\nexport const calculatePriceImpact = (\n pools: Pool[],\n tokenIn: TokenMetadata,\n tokenOut: TokenMetadata,\n tokenInAmount: string\n) => {\n let in_balance: string = '0',\n out_balance: string = '0';\n\n pools.forEach((pool, i) => {\n const cur_in_balance = toReadableNumber(\n tokenIn.decimals,\n pool.supplies[tokenIn.id]\n );\n\n const cur_out_balance = toReadableNumber(\n tokenOut.decimals,\n pool.supplies[tokenOut.id]\n );\n\n in_balance = new Big(in_balance).plus(cur_in_balance).toString();\n out_balance = new Big(out_balance).plus(cur_out_balance).toString();\n });\n\n const finalMarketPrice = math.evaluate(`(${in_balance} / ${out_balance})`);\n\n const separatedReceivedAmount = pools.map(pool => {\n return calculateAmountReceived(\n pool,\n pool.partialAmountIn || '0',\n tokenIn,\n tokenOut\n );\n });\n\n const finalTokenOutReceived = math.sum(...separatedReceivedAmount);\n\n const newMarketPrice = math.evaluate(\n `${tokenInAmount} / ${finalTokenOutReceived}`\n );\n\n const PriceImpact = new Big(newMarketPrice)\n .minus(new Big(finalMarketPrice))\n .div(newMarketPrice)\n .times(100)\n .toString();\n\n return scientificNotationToString(PriceImpact);\n};\n\nexport function calculateSmartRoutesV2PriceImpact(\n actions: any,\n outputToken: string,\n tokenInPara: TokenMetadata,\n stablePools: StablePool[]\n) {\n const routes = separateRoutes(actions, outputToken);\n\n const tokenIn = routes[0][0].tokens?.[0] || tokenInPara;\n\n const totalInputAmount = routes[0][0].totalInputAmount;\n\n const priceImpactForRoutes = routes.map((r, i) => {\n const readablePartialAmountIn = toReadableNumber(\n tokenIn.decimals,\n r[0].pool.partialAmountIn\n );\n\n if (r.length > 1) {\n const tokenIn = r[0].tokens?.[0];\n const tokenMid = r[0].tokens?.[1];\n const tokenOut = r[0].tokens?.[2];\n\n return calculateSmartRoutingPriceImpact(\n readablePartialAmountIn,\n routes[i],\n tokenIn || tokenInPara,\n tokenMid || tokenInPara,\n tokenOut || tokenInPara,\n stablePools\n );\n } else {\n return isStablePool(stablePools, r[0].pool.id)\n ? calcStableSwapPriceImpact(\n readablePartialAmountIn,\n r[0].noFeeAmountOut || '0',\n (\n Number(r[0].pool.rates?.[outputToken]) /\n Number(r[0].pool.rates?.[tokenIn.id])\n ).toString()\n )\n : calculatePriceImpact(\n [r[0].pool],\n r[0].tokens?.[0] || tokenIn,\n r[0].tokens?.[1] || tokenIn,\n readablePartialAmountIn\n );\n }\n });\n\n const rawRes = priceImpactForRoutes.reduce(\n (pre, cur, i) => {\n return pre.plus(\n new Big(routes[i][0].pool.partialAmountIn || '0')\n .div(new Big(totalInputAmount || '1'))\n .mul(cur)\n );\n },\n\n new Big(0)\n );\n\n return scientificNotationToString(rawRes.toString());\n}\n\nexport const getPriceImpact = ({\n estimates,\n tokenIn,\n tokenOut,\n amountIn,\n amountOut,\n stablePools,\n}: {\n estimates: EstimateSwapView[];\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n amountOut: string;\n stablePools: StablePool[];\n}) => {\n let PriceImpactValue: string = '0';\n let priceImpactValueSmartRouting: string = '0';\n let priceImpactValueSmartRoutingV2: string = '0';\n\n if (typeof estimates === 'undefined') return '0';\n\n try {\n if (estimates?.length === 2 && estimates[0].status === PoolMode.SMART) {\n priceImpactValueSmartRouting = calculateSmartRoutingPriceImpact(\n amountIn,\n estimates,\n tokenIn,\n estimates[0].tokens?.[1] || tokenIn,\n tokenOut,\n stablePools\n );\n } else if (\n estimates?.length === 1 &&\n estimates[0].status === PoolMode.STABLE\n ) {\n priceImpactValueSmartRouting = calcStableSwapPriceImpact(\n toReadableNumber(tokenIn.decimals, estimates[0].totalInputAmount),\n estimates[0].noFeeAmountOut || '0',\n (\n Number(estimates[0].pool.rates?.[tokenOut.id]) /\n Number(estimates[0].pool.rates?.[tokenIn.id])\n ).toString()\n );\n } else priceImpactValueSmartRouting = '0';\n } catch (error) {\n priceImpactValueSmartRouting = '0';\n }\n\n try {\n priceImpactValueSmartRoutingV2 = calculateSmartRoutesV2PriceImpact(\n estimates,\n tokenOut.id,\n tokenIn,\n stablePools\n );\n } catch (error) {\n priceImpactValueSmartRoutingV2 = '0';\n }\n\n try {\n if (\n estimates[0].status === PoolMode.SMART ||\n estimates[0].status === PoolMode.STABLE\n ) {\n PriceImpactValue = priceImpactValueSmartRouting;\n } else {\n PriceImpactValue = priceImpactValueSmartRoutingV2;\n }\n\n return PriceImpactValue;\n } catch (error) {\n return '0';\n }\n};\n\nexport const subtraction = (initialValue: string, toBeSubtract: string) => {\n return math.format(math.evaluate(`${initialValue} - ${toBeSubtract}`), {\n notation: 'fixed',\n });\n};\n\nexport function getPoolAllocationPercents(pools: Pool[]) {\n if (pools.length === 1) return ['100'];\n\n if (pools) {\n const partialAmounts = pools.map(pool => {\n return math.bignumber(pool.partialAmountIn);\n });\n\n const ps: string[] = new Array(partialAmounts.length).fill('0');\n\n const sum =\n partialAmounts.length === 1\n ? partialAmounts[0]\n : math.sum(...partialAmounts);\n\n const sortedAmount = sortBy(partialAmounts, p => Number(p));\n\n let minIndexes: number[] = [];\n\n for (let k = 0; k < sortedAmount.length - 1; k++) {\n let minIndex = -1;\n\n for (let j = 0; j < partialAmounts.length; j++) {\n if (partialAmounts[j].eq(sortedAmount[k]) && !minIndexes.includes(j)) {\n minIndex = j;\n minIndexes.push(j);\n break;\n }\n }\n const res = math\n .round(percent(partialAmounts[minIndex].toString(), sum))\n .toString();\n\n if (Number(res) === 0) {\n ps[minIndex] = '1';\n } else {\n ps[minIndex] = res;\n }\n }\n\n const finalPIndex = ps.indexOf('0');\n\n ps[finalPIndex] = subtraction(\n '100',\n ps.length === 1 ? Number(ps[0]) : math.sum(...ps.map(p => Number(p)))\n ).toString();\n\n return ps;\n } else {\n return [];\n }\n}\n\nexport const isMobile = (): boolean => {\n return window.screen.width <= 600;\n};\nexport function divide(numerator: string, denominator: string) {\n return math.format(math.evaluate(`${numerator} / ${denominator}`), {\n notation: 'fixed',\n });\n}\n\nexport const getMax = function(id: string, amount: string) {\n return id !== WRAP_NEAR_CONTRACT_ID\n ? amount\n : Number(amount) <= 0.5\n ? '0'\n : String(Number(amount) - 0.5);\n};\n\nexport function getPointByPrice(\n pointDelta: number,\n price: string,\n decimalRate: number,\n noNeedSlot?: boolean\n) {\n const point = Math.log(+price * decimalRate) / Math.log(CONSTANT_D);\n const point_int = Math.round(point);\n let point_int_slot = point_int;\n if (!noNeedSlot) {\n point_int_slot = Math.floor(point_int / pointDelta) * pointDelta;\n }\n if (point_int_slot < POINTLEFTRANGE) {\n return POINTLEFTRANGE;\n } else if (point_int_slot > POINTRIGHTRANGE) {\n return 800000;\n }\n return point_int_slot;\n}\nexport const feeToPointDelta = (fee: number) => {\n switch (fee) {\n case 100:\n return 1;\n case 400:\n return 8;\n case 2000:\n return 40;\n case 10000:\n return 200;\n default:\n throw NoFeeToPool(fee);\n }\n};\n\nexport const priceToPoint = ({\n tokenA,\n tokenB,\n amountA,\n amountB,\n fee,\n}: {\n tokenA: TokenMetadata;\n tokenB: TokenMetadata;\n amountA: string;\n amountB: string;\n fee: number;\n}) => {\n if (DCL_POOL_FEE_LIST.indexOf(fee) === -1) throw NoFeeToPool(fee);\n\n const decimal_price_A_by_B = new Big(amountB).div(amountA);\n const undecimal_price_A_by_B = decimal_price_A_by_B\n .times(new Big(10).pow(tokenB.decimals))\n .div(new Big(10).pow(tokenA.decimals));\n\n const pointDelta = feeToPointDelta(fee);\n\n const price = decimal_price_A_by_B;\n\n const decimalRate = new Big(10)\n .pow(tokenB.decimals)\n .div(new Big(10).pow(tokenA.decimals))\n .toNumber();\n\n return getPointByPrice(\n pointDelta,\n scientificNotationToString(price.toString()),\n decimalRate\n );\n};\n\nexport const pointToPrice = ({\n tokenA,\n tokenB,\n point,\n}: {\n tokenA: TokenMetadata;\n tokenB: TokenMetadata;\n point: number;\n}) => {\n const undecimal_price = Math.pow(CONSTANT_D, point);\n const decimal_price_A_by_B = new Big(undecimal_price)\n .times(new Big(10).pow(tokenA.decimals))\n .div(new Big(10).pow(tokenB.decimals));\n\n return scientificNotationToString(decimal_price_A_by_B.toString());\n};\n\nexport const registerAccountOnToken = (AccountId: string) => {\n return {\n methodName: 'storage_deposit',\n args: {\n registration_only: true,\n account_id: AccountId,\n },\n gas: '30000000000000',\n amount: STORAGE_TO_REGISTER_WITH_MFT,\n };\n};\n","import {\n keyStores,\n KeyPair,\n InMemorySigner,\n providers,\n transactions as nearTransactions,\n utils,\n} from 'near-api-js';\nimport BN from 'bn.js';\nimport { getConfig } from './constant';\nimport fs from 'fs';\nimport os from 'os';\nimport {\n NoPuiblicKeyError,\n InValidAccessKeyError,\n NoCredential,\n} from './error';\nimport { AccessKeyView } from 'near-api-js/lib/providers/provider';\nimport { TransformedTransaction } from './types';\nimport { Transaction } from './types';\nimport { transformTransactions } from './utils';\nimport { AccountIdMisMatch } from './error';\n\nexport const getKeyStore = () => {\n return typeof window === 'undefined'\n ? new keyStores.InMemoryKeyStore()\n : new keyStores.BrowserLocalStorageKeyStore();\n};\n\nexport const provider = new providers.JsonRpcProvider({\n url: getConfig().nodeUrl,\n});\n\nexport const getMemorySigner = async ({\n AccountId,\n keyPath,\n}: {\n AccountId: string;\n keyPath: string;\n}) => {\n try {\n // const homedir = os.homedir();\n const credentials = JSON.parse(fs.readFileSync(keyPath).toString());\n\n const credentialAccountId = credentials?.account_id;\n\n if (!credentialAccountId) throw NoCredential;\n\n if (credentialAccountId !== AccountId) throw AccountIdMisMatch;\n\n const myKeyStore = new keyStores.InMemoryKeyStore();\n myKeyStore.setKey(\n getConfig().networkId,\n AccountId,\n KeyPair.fromString(credentials.private_key)\n );\n\n const signer = new InMemorySigner(myKeyStore);\n\n return signer;\n } catch (error) {\n throw error;\n }\n};\n\nconst validateAccessKey = (\n transaction: TransformedTransaction,\n accessKey: AccessKeyView\n) => {\n if (accessKey.permission === 'FullAccess') {\n return accessKey;\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const { receiver_id, method_names } = accessKey.permission.FunctionCall;\n\n if (transaction.receiverId !== receiver_id) {\n return null;\n }\n\n return transaction.actions.every(action => {\n if (action.type !== 'FunctionCall') {\n return false;\n }\n\n const { methodName, deposit } = action.params;\n\n if (method_names.length && method_names.includes(methodName)) {\n return false;\n }\n\n return parseFloat(deposit) <= 0;\n });\n};\n\nexport const getSignedTransactionsByMemoryKey = async ({\n transactionsRef,\n AccountId,\n keyPath,\n}: {\n transactionsRef: Transaction[];\n AccountId: string;\n keyPath: string;\n}) => {\n const transactions = transformTransactions(transactionsRef, AccountId);\n\n const block = await provider.block({ finality: 'final' });\n\n const signedTransactions: Array<nearTransactions.SignedTransaction> = [];\n const signer = await getMemorySigner({\n AccountId,\n keyPath,\n });\n\n for (let i = 0; i < transactions.length; i += 1) {\n const transaction = transactions[i];\n\n const publicKey = await signer.getPublicKey(\n AccountId,\n getConfig().networkId\n );\n if (!publicKey) {\n throw NoPuiblicKeyError;\n }\n\n const accessKey = await provider.query<AccessKeyView>({\n request_type: 'view_access_key',\n finality: 'final',\n account_id: AccountId,\n public_key: publicKey.toString(),\n });\n\n if (!validateAccessKey(transaction, accessKey)) {\n throw InValidAccessKeyError;\n }\n\n const tx = nearTransactions.createTransaction(\n AccountId,\n utils.PublicKey.from(publicKey.toString()),\n transactions[i].receiverId,\n accessKey.nonce + i + 1,\n transaction.actions.map(action => {\n const { methodName, args, gas, deposit } = action.params;\n return nearTransactions.functionCall(\n methodName,\n args,\n new BN(gas),\n new BN(deposit)\n );\n }),\n utils.serialize.base_decode(block.header.hash)\n );\n\n const [, signedTx] = await nearTransactions.signTransaction(\n tx,\n signer,\n transactions[i].signerId,\n getConfig().networkId\n );\n signedTransactions.push(signedTx);\n }\n\n return signedTransactions;\n};\n\nexport const sendTransactionsByMemoryKey = async ({\n signedTransactions,\n}: {\n signedTransactions: nearTransactions.SignedTransaction[];\n}) => {\n try {\n const results: Array<providers.FinalExecutionOutcome> = [];\n\n for (let i = 0; i < signedTransactions.length; i += 1) {\n results.push(await provider.sendTransaction(signedTransactions[i]));\n }\n\n return results;\n } catch (err) {\n throw err;\n }\n};\n","import {\n REF_FI_CONTRACT_ID,\n config,\n WRAP_NEAR_CONTRACT_ID,\n NEAR_META_DATA,\n getConfig,\n switchEnv,\n} from './constant';\nimport {\n keyStores,\n Near,\n providers,\n WalletConnection,\n utils,\n} from 'near-api-js';\nimport { NoAccountIdFound, TokenNotExistError, DCLInValid } from './error';\nimport { getKeyStore } from './near';\n\nimport {\n TokenMetadata,\n FTStorageBalance,\n RefFiViewFunctionOptions,\n} from './types';\nimport { AccountView } from 'near-api-js/lib/providers/provider';\nimport { Transaction } from './types';\nimport { ONE_YOCTO_NEAR, REF_TOKEN_ID, REF_META_DATA } from './constant';\n\nimport metaIconDefaults from './metaIcons';\n\nconst BANANA_ID = 'berryclub.ek.near';\nconst CHEDDAR_ID = 'token.cheddar.near';\nconst CUCUMBER_ID = 'farm.berryclub.ek.near';\nconst HAPI_ID = 'd9c2d319cd7e6177336b0a9c93c21cb48d84fb54.factory.bridge.near';\nconst WOO_ID = '4691937a7508860f876c9c0a2a617e7d9e945d4b.factory.bridge.near';\n\nexport const REPLACE_TOKENS = [\n BANANA_ID,\n CHEDDAR_ID,\n CUCUMBER_ID,\n HAPI_ID,\n WOO_ID,\n];\n\nlet near = new Near({\n keyStore: getKeyStore(),\n headers: {},\n ...getConfig(),\n});\nexport const init_env = (env: string) => {\n near = new Near({\n keyStore: getKeyStore(),\n headers: {},\n ...getConfig(env),\n });\n return switchEnv();\n};\n\nexport const refFiViewFunction = async ({\n methodName,\n args,\n}: RefFiViewFunctionOptions) => {\n const nearConnection = await near.account(REF_FI_CONTRACT_ID);\n\n return nearConnection.viewFunction(REF_FI_CONTRACT_ID, methodName, args);\n};\n\nexport const ftViewFunction = async (\n tokenId: string,\n { methodName, args }: RefFiViewFunctionOptions\n) => {\n const nearConnection = await near.account(REF_FI_CONTRACT_ID);\n\n return nearConnection.viewFunction(tokenId, methodName, args);\n};\n\nexport const ftGetStorageBalance = (\n tokenId: string,\n AccountId: string\n): Promise<FTStorageBalance | null> => {\n if (!AccountId) throw NoAccountIdFound;\n\n return ftViewFunction(tokenId, {\n methodName: 'storage_balance_of',\n args: { account_id: AccountId },\n });\n};\n\nexport const ftGetBalance = async (tokenId: string, AccountId: string) => {\n if (!AccountId) return '0';\n\n if (tokenId === 'NEAR') {\n return getAccountNearBalance(AccountId).catch(() => '0');\n }\n\n return ftViewFunction(tokenId, {\n methodName: 'ft_balance_of',\n args: {\n account_id: AccountId,\n },\n })\n .then(res => {\n return res;\n })\n .catch(() => '0');\n};\n\nexport const getTotalPools = async () => {\n return refFiViewFunction({\n methodName: 'get_number_of_pools',\n });\n};\n\nexport const ftGetTokenMetadata = async (\n id: string,\n tag?: string\n): Promise<TokenMetadata> => {\n if (id === REF_TOKEN_ID) return REF_META_DATA;\n\n const metadata = await ftViewFunction(id, {\n methodName: 'ft_metadata',\n }).catch(() => {\n throw TokenNotExistError(id);\n });\n\n if (\n !metadata.icon ||\n id === BANANA_ID ||\n id === CHEDDAR_ID ||\n id === CUCUMBER_ID ||\n id === HAPI_ID ||\n id === WOO_ID ||\n id === WRAP_NEAR_CONTRACT_ID\n ) {\n return {\n ...metadata,\n icon: metaIconDefaults[id],\n id,\n };\n }\n\n return { ...metadata, id };\n};\n\nexport const ftGetTokensMetadata = async (\n tokenIds?: string[],\n allTokens?: Record<string, TokenMetadata>\n) => {\n const ids = tokenIds || (await getGlobalWhitelist());\n\n const tokensMetadata = await Promise.all(\n ids.map(\n (id: string) =>\n allTokens?.[id] || ftGetTokenMetadata(id).catch(() => null)\n )\n );\n\n return tokensMetadata.reduce((pre, cur, i) => {\n return {\n ...pre,\n [ids[i]]: cur,\n };\n }, {}) as Record<string, TokenMetadata>;\n};\n\nexport const getGlobalWhitelist = async (): Promise<string[]> => {\n const globalWhitelist = await refFiViewFunction({\n methodName: 'get_whitelisted_tokens',\n });\n return Array.from(new Set(globalWhitelist));\n};\n\nexport const getUserRegisteredTokens = async (\n AccountId?: string\n): Promise<string[]> => {\n if (!AccountId) return [];\n\n return refFiViewFunction({\n methodName: 'get_user_whitelisted_tokens',\n args: { account_id: AccountId },\n });\n};\n\nexport const getAccountNearBalance = async (accountId: string) => {\n const provider = new providers.JsonRpcProvider({\n url: getConfig().nodeUrl,\n });\n\n return provider\n .query<AccountView>({\n request_type: 'view_account',\n finality: 'final',\n account_id: accountId,\n })\n .then(data => data.amount);\n};\n\nexport const nearDepositTransaction = (amount: string) => {\n const transaction: Transaction = {\n receiverId: WRAP_NEAR_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'near_deposit',\n args: {},\n gas: '50000000000000',\n amount,\n },\n ],\n };\n\n return transaction;\n};\n\nexport const nearWithdrawTransaction = (amount: string) => {\n const transaction: Transaction = {\n receiverId: WRAP_NEAR_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'near_withdraw',\n args: { amount: utils.format.parseNearAmount(amount) },\n amount: ONE_YOCTO_NEAR,\n },\n ],\n };\n return transaction;\n};\n\nexport const refDCLSwapViewFunction = async ({\n methodName,\n args,\n}: RefFiViewFunctionOptions) => {\n const nearConnection = await near.account(REF_FI_CONTRACT_ID);\n\n if (!config.REF_DCL_SWAP_CONTRACT_ID) throw DCLInValid;\n\n return nearConnection.viewFunction(\n config.REF_DCL_SWAP_CONTRACT_ID,\n methodName,\n args\n );\n};\n\nexport const DCLSwapGetStorageBalance = (\n tokenId: string,\n AccountId: string\n) => {\n return refDCLSwapViewFunction({\n methodName: 'storage_balance_of',\n args: { account_id: AccountId },\n });\n};\n","import { TokenMetadata, Transaction } from '../types';\nimport {\n priceToPoint,\n toNonDivisibleNumber,\n toPrecision,\n registerAccountOnToken,\n} from '../utils';\nimport { ONE_YOCTO_NEAR, WRAP_NEAR_CONTRACT_ID, config } from '../constant';\nimport {\n nearDepositTransaction,\n ftGetStorageBalance,\n refDCLSwapViewFunction,\n} from '../ref';\nimport { NoFeeToPool } from '../error';\n\nexport const DCL_POOL_FEE_LIST = [100, 400, 2000, 10000];\n\ninterface PoolInfo {\n pool_id?: string;\n token_x?: string;\n token_y?: string;\n fee: number;\n point_delta?: number;\n current_point?: number;\n state?: string;\n liquidity?: string;\n liquidity_x?: string;\n max_liquidity_per_point?: string;\n percent?: string;\n total_x?: string;\n total_y?: string;\n tvl?: number;\n token_x_metadata?: TokenMetadata;\n token_y_metadata?: TokenMetadata;\n}\n\nexport const getDCLPoolId = (tokenA: string, tokenB: string, fee: number) => {\n if (DCL_POOL_FEE_LIST.indexOf(fee) === -1) throw NoFeeToPool(fee);\n\n const tokenSeq = [tokenA, tokenB].sort().join('|');\n\n return `${tokenSeq}|${fee}`;\n};\nexport const listDCLPools = () => {\n return refDCLSwapViewFunction({\n methodName: 'list_pools',\n });\n};\n\nexport const getDCLPool = async (pool_id: string) => {\n const [token_x, token_y, fee] = pool_id.split('|');\n\n const token_seq = [token_x, token_y].sort().join('|');\n\n const new_pool_id = `${token_seq}|${fee}`;\n\n return refDCLSwapViewFunction({\n methodName: 'get_pool',\n args: {\n pool_id: new_pool_id,\n },\n }) as Promise<PoolInfo>;\n};\n","import { config, getConfig } from './constant';\nimport { DCL_POOL_FEE_LIST } from './dcl-swap/dcl-pool';\n\nexport const formatError = (msg: string) => {\n return new Error(msg);\n};\n\nexport const unNamedError = formatError('Something wrong happened');\n\nexport const SameInputTokenError = formatError(\n 'Input token should be different with output token'\n);\n\nexport const ZeroInputError = formatError(\n 'Input amount should be greater than 0'\n);\n\nexport const NoPoolError = formatError('No pool found for the input tokens');\n\nexport const NotLoginError = formatError('Please login in first');\n\nexport const SwapRouteError = formatError(\n \"Something wrong happened, we don't get correct routes corrreponding to current input\"\n);\n\nexport const TokenNotExistError = (id: string) =>\n formatError(`${id} doesn't exist in ${getConfig().networkId}`);\n\nexport const NoPuiblicKeyError = formatError('No public key found');\n\nexport const NoLocalSignerError = formatError('No local signer found');\n\nexport const InValidAccessKeyError = formatError('Invalid access key');\n\nexport const AccountIdMisMatch = formatError(\n \"Your input account id doesn't match the account id in the credential\"\n);\n\nexport const NoCredential = formatError('No Credential to such path');\n\nexport const NoAccountIdFound = formatError('No account id found');\n\nexport const NoFeeToPool = (fee: number) =>\n formatError(\n `InValid fee ${fee} to DCL pool, the valid fee should be one of ${DCL_POOL_FEE_LIST}`\n );\n\nexport const DCLInValid = formatError(\n `DCL contract currently in Valid on ${config.networkId}`\n);\n\nexport const NoPoolOnThisPair = (tokenA: string, tokenB: string) =>\n formatError(`No pools on pair ${tokenA} <> ${tokenB}`);\n\nexport const SlippageError = formatError(\n 'slippage tolerance should be in range (0, 100)'\n);\n\nexport const NoOrderFound = (order_id?: string) =>\n formatError(`No order ${order_id || ''} found`);\n\nexport const OrderNoRemainedAmount = formatError(\n 'No remained amount on this order'\n);\n","import { TokenMetadata, EstimateSwapView, Transaction } from '../types';\nimport { ftGetStorageBalance } from '../ref';\nimport {\n STORAGE_TO_REGISTER_WITH_MFT,\n REF_FI_CONTRACT_ID,\n ONE_YOCTO_NEAR,\n} from '../constant';\nimport { round, percentLess } from '../utils';\nimport { toNonDivisibleNumber } from '../utils';\nimport { config } from '../constant';\nimport { SwapRouteError } from '../error';\n\nexport const instantSwap = async ({\n tokenIn,\n tokenOut,\n amountIn,\n slippageTolerance,\n swapTodos,\n AccountId,\n referralId,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n slippageTolerance: number;\n swapTodos: EstimateSwapView[];\n AccountId: string;\n referralId?: string;\n}) => {\n const transactions: Transaction[] = [];\n\n if (swapTodos?.[swapTodos?.length - 1]?.outputToken !== tokenOut.id)\n throw SwapRouteError;\n\n const registerToken = async (token: TokenMetadata) => {\n const tokenRegistered = await ftGetStorageBalance(\n token.id,\n AccountId\n ).catch(() => {\n throw new Error(`${token.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: token.id,\n functionCalls: [\n {\n methodName: 'storage_deposit',\n args: {\n registration_only: true,\n account_id: AccountId,\n },\n gas: '30000000000000',\n amount: STORAGE_TO_REGISTER_WITH_MFT,\n },\n ],\n });\n }\n };\n\n if (tokenIn.id === config.WRAP_NEAR_CONTRACT_ID) {\n const registered = await ftGetStorageBalance(\n config.WRAP_NEAR_CONTRACT_ID,\n AccountId\n );\n if (registered === null) {\n await registerToken(tokenIn);\n }\n }\n\n await registerToken(tokenOut);\n let actionsList: any = [];\n let allSwapsTokens = swapTodos.map(s => [s.inputToken, s.outputToken]); // to get the hop tokens\n for (let i in allSwapsTokens) {\n let swapTokens = allSwapsTokens[i];\n if (swapTokens[0] === tokenIn.id && swapTokens[1] === tokenOut.id) {\n // parallel, direct hop route.\n actionsList.push({\n pool_id: swapTodos[i].pool.id,\n token_in: tokenIn.id,\n token_out: tokenOut.id,\n amount_in: swapTodos[i].pool.partialAmountIn,\n min_amount_out: round(\n tokenOut.decimals,\n toNonDivisibleNumber(\n tokenOut.decimals,\n percentLess(slippageTolerance, swapTodos[i].estimate)\n )\n ),\n });\n } else if (swapTokens[0] === tokenIn.id) {\n // first hop in double hop route\n //TODO -- put in a check to make sure this first hop matches with the next (i+1) hop as a second hop.\n actionsList.push({\n pool_id: swapTodos[i].pool.id,\n token_in: swapTokens[0],\n token_out: swapTokens[1],\n amount_in: swapTodos[i].pool.partialAmountIn,\n min_amount_out: '0',\n });\n } else {\n // second hop in double hop route.\n //TODO -- put in a check to make sure this second hop matches with the previous (i-1) hop as a first hop.\n actionsList.push({\n pool_id: swapTodos[i].pool.id,\n token_in: swapTokens[0],\n token_out: swapTokens[1],\n min_amount_out: round(\n tokenOut.decimals,\n toNonDivisibleNumber(\n tokenOut.decimals,\n percentLess(slippageTolerance, swapTodos[i].estimate)\n )\n ),\n });\n }\n }\n\n transactions.push({\n receiverId: tokenIn.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: REF_FI_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenIn.decimals, amountIn),\n msg: !!referralId\n ? JSON.stringify({\n force: 0,\n actions: actionsList,\n referral_id: referralId,\n })\n : JSON.stringify({\n force: 0,\n actions: actionsList,\n }),\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n\n return transactions;\n};\n","import { getTotalPools, refFiViewFunction } from '../ref';\nimport { Pool, PoolRPCView } from '../types';\nimport { parsePool, toNonDivisibleNumber } from '../utils';\nimport { STABLE_LP_TOKEN_DECIMALS } from '../constant';\n\nlet DEFAULT_PAGE_LIMIT = 100;\nconst BLACK_TOKEN_LIST = ['meta-token.near'];\n\nexport const getRatedPoolDetail = async ({ id }: { id: string | number }) => {\n return refFiViewFunction({\n methodName: 'get_rated_pool',\n args: { pool_id: Number(id) },\n }).then(pool_info => ({\n ...pool_info,\n id: Number(id),\n pool_kind: 'RATED_SWAP',\n }));\n};\n\nexport const getUnRatedPoolDetail = async ({ id }: { id: string | number }) => {\n return refFiViewFunction({\n methodName: 'get_stable_pool',\n args: { pool_id: Number(id) },\n }).then(pool_info => ({\n ...pool_info,\n id: Number(id),\n pool_kind: 'STABLE_SWAP',\n rates: pool_info.c_amounts.map((_: any) =>\n toNonDivisibleNumber(STABLE_LP_TOKEN_DECIMALS, '1')\n ),\n }));\n};\n\nexport const getStablePools = async (stablePools: Pool[]) => {\n return Promise.all(\n stablePools.map(pool =>\n pool.pool_kind === 'RATED_SWAP'\n ? getRatedPoolDetail({ id: pool.id })\n : getUnRatedPoolDetail({ id: pool.id })\n )\n );\n};\n\nexport const getPool = async (id: number): Promise<Pool> => {\n return await refFiViewFunction({\n methodName: 'get_pool',\n args: { pool_id: id },\n }).then((pool: PoolRPCView) => parsePool(pool, id));\n};\n\nexport const getPoolByIds = async (ids: number[]): Promise<Pool[]> => {\n return await refFiViewFunction({\n methodName: 'get_pool_by_ids',\n args: { pool_ids: ids },\n }).then((pools: PoolRPCView[]) => pools.map((p, i) => parsePool(p, ids[i])));\n};\n\nexport const getRefPools = async (\n page: number = 1,\n perPage: number = DEFAULT_PAGE_LIMIT\n): Promise<Pool[]> => {\n const index = (page - 1) * perPage;\n const poolData: PoolRPCView[] = await refFiViewFunction({\n methodName: 'get_pools',\n args: { from_index: index, limit: perPage },\n });\n return poolData\n .map((rawPool, i) => parsePool(rawPool, i + index))\n .filter(\n p => !p.tokenIds?.find(tokenId => BLACK_TOKEN_LIST.includes(tokenId))\n );\n};\n\nexport const fetchAllPools = async (perPage?: number) => {\n if (perPage) {\n DEFAULT_PAGE_LIMIT = Math.min(perPage, 500);\n }\n const totalPools = await getTotalPools();\n const pages = Math.ceil(totalPools / DEFAULT_PAGE_LIMIT);\n const pools = (\n await Promise.all(\n [...Array(pages)].fill(0).map((_, i) => getRefPools(i + 1))\n )\n ).flat() as Pool[];\n return {\n simplePools: pools.filter(\n p => p.pool_kind && p.pool_kind === 'SIMPLE_POOL'\n ),\n unRatedPools: pools.filter(\n p => p.pool_kind && p.pool_kind === 'STABLE_SWAP'\n ),\n ratedPools: pools.filter(p => p.pool_kind && p.pool_kind === 'RATED_SWAP'),\n };\n};\n","import React, {\n useEffect,\n useState,\n useContext,\n createContext,\n ReactNode,\n} from 'react';\nimport {\n ftGetBalance,\n ftGetTokenMetadata,\n getGlobalWhitelist,\n nearDepositTransaction,\n nearWithdrawTransaction,\n REPLACE_TOKENS,\n} from '../ref';\nimport {\n EstimateSwapView,\n Pool,\n StablePool,\n TokenMetadata,\n Transaction,\n} from '../types';\nimport { fetchAllPools, getStablePools } from '../v1-swap/pool';\nimport { estimateSwap, SwapOptions, SwapParams } from '../v1-swap/swap';\nimport { SwapOutParams } from './types';\nimport {\n percentLess,\n separateRoutes,\n toNonDivisibleNumber,\n calculateExchangeRate,\n getAvgFee,\n} from '../utils';\nimport Big from 'big.js';\nimport { instantSwap } from '../v1-swap/instantSwap';\n\nimport { getExpectedOutputFromActionsORIG } from '../v1-swap/smartRoutingLogic.js';\nimport { Theme } from './constant';\nimport { defaultTheme } from './constant';\nimport {\n getTokenPriceList,\n getTokens,\n getWhiteListTokensIndexer,\n} from '../indexer';\nimport {\n toReadableNumber,\n ONLY_ZEROS,\n getExpectedOutputFromSwapTodos,\n} from '../utils';\nimport { getUserRegisteredTokens } from '../ref';\nimport { WRAP_NEAR_CONTRACT_ID, NEAR_META_DATA } from '../constant';\nimport { scientificNotationToString } from '../utils';\nimport metaIconDefaults from '../metaIcons';\n\nexport const ThemeContext = createContext<Theme>(defaultTheme);\n\nexport const ThemeContextProvider: React.FC<{\n customTheme: Theme | undefined;\n}> = ({ customTheme, children }) => {\n const [theme, setTheme] = useState<Theme>(customTheme || defaultTheme);\n\n useEffect(() => {\n if (!customTheme) return;\n setTheme(customTheme);\n }, [customTheme]);\n\n return (\n <ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>\n );\n};\n\nexport const estimateValidator = (\n swapTodos: EstimateSwapView[],\n tokenIn: TokenMetadata,\n parsedAmountIn: string,\n tokenOut: TokenMetadata\n) => {\n const tokenInId = swapTodos[0]?.inputToken;\n const tokenOutId = swapTodos[swapTodos.length - 1]?.outputToken;\n\n const totalPartialAmountIn =\n swapTodos.length === 0\n ? new Big(swapTodos[0].pool.partialAmountIn || 0)\n : swapTodos.reduce(\n (acc, cur, i) => acc.plus(cur.pool.partialAmountIn || 0),\n new Big(0)\n );\n\n if (\n tokenInId !== tokenIn.id ||\n tokenOutId !== tokenOut.id ||\n !totalPartialAmountIn.eq(parsedAmountIn || '0')\n ) {\n return false;\n }\n return true;\n};\n\nexport const useAllTokens = ({ reload }: { reload?: boolean }) => {\n const [tokens, setTokens] = useState<Record<string, TokenMetadata>>();\n const [tokensLoading, setTokensLoading] = useState<boolean>(true);\n\n useEffect(() => {\n const fetchTokens = async () => {\n const tokens = await getTokens(reload);\n setTokens(tokens);\n setTokensLoading(false);\n };\n fetchTokens();\n }, [reload]);\n\n return { tokens, tokensLoading };\n};\n\nexport const useTokensIndexer = ({\n defaultTokenList,\n AccountId,\n}: {\n defaultTokenList?: TokenMetadata[];\n AccountId?: string;\n}) => {\n const [tokens, setTokens] = useState<TokenMetadata[]>([]);\n\n const [tokenLoading, setTokenLoading] = useState<boolean>(false);\n\n useEffect(() => {\n setTokenLoading(true);\n\n const getTokensList = async () => {\n const whiteList = await getGlobalWhitelist();\n const globalWhiteListTokens = (\n await getWhiteListTokensIndexer(whiteList)\n ).filter(token => !!token) as TokenMetadata[];\n\n const parsedTokens = globalWhiteListTokens.map(t => {\n return t.id === WRAP_NEAR_CONTRACT_ID\n ? {\n ...NEAR_META_DATA,\n id: t.id,\n }\n : t;\n });\n\n if (!defaultTokenList || defaultTokenList.length === 0) {\n setTokens(parsedTokens);\n setTokenLoading(false);\n } else {\n const newList = defaultTokenList\n .map(t => {\n return t.id === WRAP_NEAR_CONTRACT_ID\n ? {\n ...NEAR_META_DATA,\n id: t.id,\n }\n : t;\n })\n .filter(t => {\n return parsedTokens.findIndex(p => p.id === t.id) !== -1;\n });\n setTokens(\n newList.map(t =>\n !t.icon || REPLACE_TOKENS.includes(t.id)\n ? {\n ...t,\n icon: metaIconDefaults[t.id],\n }\n : t\n )\n );\n setTokenLoading(false);\n }\n };\n\n getTokensList();\n }, [AccountId, defaultTokenList]);\n\n return { tokens, tokenLoading };\n};\n\nexport const useRefPools = (refreshTrigger: boolean) => {\n const [allPools, setAllPools] = useState<{\n simplePools: Pool[];\n ratedPools: Pool[];\n unRatedPools: Pool[];\n }>({\n simplePools: [],\n ratedPools: [],\n unRatedPools: [],\n });\n\n const [poolFetchingState, setPoolFetchingState] = useState<'loading' | 'end'>(\n 'loading'\n );\n\n const [allStablePools, setAllStablePools] = useState<StablePool[]>([]);\n\n useEffect(() => {\n setPoolFetchingState('loading');\n\n fetchAllPools()\n .then(allPools => {\n setAllPools(allPools);\n\n return allPools;\n })\n .then(allPools => {\n const pools: Pool[] = allPools.unRatedPools.concat(allPools.ratedPools);\n\n return getStablePools(pools).then(setAllStablePools);\n })\n .finally(() => {\n setPoolFetchingState('end');\n });\n }, [refreshTrigger]);\n\n return {\n allPools,\n allStablePools,\n poolFetchingState,\n };\n};\n\nexport const useSwap = (\n params: {\n tokenIn?: TokenMetadata;\n tokenOut?: TokenMetadata;\n amountIn: string;\n simplePools: Pool[];\n options?: SwapOptions;\n } & {\n slippageTolerance: number;\n refreshTrigger: boolean;\n onSwap: (transactionsRef: Transaction[]) => void;\n AccountId?: string;\n poolFetchingState?: 'loading' | 'end';\n referralId?: string;\n }\n): SwapOutParams => {\n const {\n slippageTolerance,\n refreshTrigger,\n onSwap,\n AccountId,\n poolFetchingState,\n referralId,\n ...swapParams\n } = params;\n\n const { tokenIn, tokenOut, amountIn } = params;\n\n const [estimates, setEstimates] = useState<EstimateSwapView[]>([]);\n\n const [canSwap, setCanSwap] = useState(false);\n\n const [swapError, setSwapError] = useState<Error | null>(null);\n\n const [amountOut, setAmountOut] = useState<string>('');\n\n const [isEstimating, setIsEstimating] = useState<boolean>(false);\n\n const [forceEstimate, setForceEstimate] = useState<boolean>(false);\n\n const minAmountOut = amountOut\n ? percentLess(slippageTolerance, amountOut)\n : '';\n\n const fee =\n !params.tokenOut || !params.tokenIn\n ? 0\n : getAvgFee(\n estimates,\n params.tokenOut.id,\n toNonDivisibleNumber(params.tokenIn.decimals, params.amountIn)\n );\n\n const rate = calculateExchangeRate(\n ONLY_ZEROS.test(params.amountIn) ? '1' : params.amountIn,\n amountOut || '1'\n );\n\n const makeSwap = async () => {\n if (!params.tokenIn || !params.tokenOut) return;\n\n const transactionsRef = await instantSwap({\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n amountIn: params.amountIn,\n swapTodos: estimates,\n slippageTolerance,\n AccountId: AccountId || '',\n referralId,\n });\n if (tokenIn && tokenIn.id === WRAP_NEAR_CONTRACT_ID) {\n transactionsRef.splice(-1, 0, nearDepositTransaction(amountIn));\n }\n if (tokenOut && tokenOut.id === WRAP_NEAR_CONTRACT_ID) {\n let outEstimate = new Big(0);\n const routes = separateRoutes(estimates, tokenOut.id);\n\n const bigEstimate = routes.reduce((acc, cur) => {\n const curEstimate = cur[cur.length - 1].estimate;\n return acc.plus(curEstimate);\n }, outEstimate);\n\n const minAmountOut = percentLess(\n slippageTolerance,\n\n scientificNotationToString(bigEstimate.toString())\n );\n\n transactionsRef.push(nearWithdrawTransaction(minAmountOut));\n }\n\n onSwap(transactionsRef);\n };\n\n const getEstimate = () => {\n if (\n !params.tokenIn ||\n !params.tokenOut ||\n poolFetchingState === 'loading'\n ) {\n setCanSwap(false);\n return;\n }\n setCanSwap(false);\n\n if (\n ONLY_ZEROS.test(params.amountIn) ||\n !params.tokenOut ||\n !params.tokenIn\n ) {\n setAmountOut('');\n setEstimates([]);\n return;\n }\n\n setSwapError(null);\n setIsEstimating(true);\n estimateSwap({\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n amountIn: params.amountIn,\n simplePools: params.simplePools,\n options: params.options,\n })\n .then(estimates => {\n if (\n ONLY_ZEROS.test(params.amountIn) ||\n !params.tokenOut ||\n !params.tokenIn\n ) {\n setAmountOut('');\n return;\n }\n setSwapError(null);\n\n const expectAmountOut = getExpectedOutputFromSwapTodos(\n estimates,\n params.tokenOut.id\n ).toString();\n\n setAmountOut(expectAmountOut);\n\n setEstimates(estimates);\n setCanSwap(true);\n })\n .catch(e => {\n setSwapError(e);\n setCanSwap(false);\n setAmountOut('');\n })\n .finally(() => {\n setIsEstimating(false);\n setForceEstimate(false);\n });\n };\n\n useEffect(() => {\n const estimateValidationPass =\n estimates.length > 0 &&\n params.tokenIn &&\n params.tokenOut &&\n estimateValidator(\n estimates,\n params.tokenIn,\n toNonDivisibleNumber(params.tokenIn.decimals, params.amountIn),\n params.tokenOut\n );\n\n if (isEstimating && estimates && !forceEstimate) return;\n if ((estimateValidationPass || swapError) && !forceEstimate) return;\n getEstimate();\n }, [\n params.amountIn,\n params.tokenIn?.id,\n params.tokenOut?.id,\n refreshTrigger,\n poolFetchingState,\n isEstimating,\n forceEstimate,\n ]);\n\n useEffect(() => {\n // setEstimating(false);\n\n setForceEstimate(true);\n }, [\n params.tokenIn?.id,\n params.tokenOut?.id,\n params.options?.enableSmartRouting,\n ]);\n\n return {\n amountOut,\n minAmountOut,\n fee,\n rate,\n estimates,\n makeSwap,\n canSwap,\n swapError,\n setAmountOut,\n isEstimating,\n };\n};\n\nexport const TokenPriceContext = createContext<Record<string, any> | null>(\n null\n);\n\nexport const useTokenPriceList = () => {\n const [tokenPriceList, setTokenPriceList] = useState<Record<string, any>>({});\n\n useEffect(() => {\n getTokenPriceList().then(setTokenPriceList);\n }, []);\n\n return tokenPriceList;\n};\n\nexport const TokenPriceContextProvider: React.FC = ({ children }) => {\n const tokenPriceList = useTokenPriceList();\n\n return (\n <TokenPriceContext.Provider value={tokenPriceList}>\n {children}\n </TokenPriceContext.Provider>\n );\n};\n\nexport const useTokenBalnces = (tokens: TokenMetadata[], AccountId: string) => {\n const [balances, setBalances] = useState<Record<string, string>>({});\n\n useEffect(() => {\n const validTokens = tokens.filter(t => !!t?.id);\n\n const ids = validTokens.map(token => token.id);\n\n Promise.all(\n ids.map(id =>\n ftGetBalance(id === WRAP_NEAR_CONTRACT_ID ? 'NEAR' : id, AccountId)\n )\n ).then(balances => {\n const balancesMap = validTokens.reduce((acc, token, index) => {\n return {\n ...acc,\n [token.id]: toReadableNumber(token.decimals, balances[index]),\n };\n }, {});\n\n setBalances(balancesMap);\n });\n }, [tokens.map(t => t?.id).join('-')]);\n\n return balances;\n};\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import React, { useState, useEffect, useContext, useRef, useMemo } from 'react';\nimport { TokenMetadata, EstimateSwapView, Pool } from '../types';\nimport {\n ThemeContext,\n useTokenPriceList,\n TokenPriceContext,\n useTokenBalnces,\n} from './state';\n\nimport { FiChevronDown } from '@react-icons/all-files/fi/FiChevronDown';\n\nimport { FiChevronLeft } from '@react-icons/all-files/fi/FiChevronLeft';\n\nimport { FiChevronUp } from '@react-icons/all-files/fi/FiChevronUp';\n\nimport { FaSearch } from '@react-icons/all-files/fa/FaSearch';\n\nimport { RiRefreshLine } from '@react-icons/all-files/ri/RiRefreshLine';\n\nimport { TiArrowSortedUp } from '@react-icons/all-files/ti/TiArrowSortedUp';\n\nimport { TiArrowSortedDown } from '@react-icons/all-files/ti/TiArrowSortedDown';\n\nimport { HiOutlineExternalLink } from '@react-icons/all-files/hi/HiOutlineExternalLink';\n\nimport { AiFillPushpin } from '@react-icons/all-files/ai/AiFillPushpin';\n\nimport { AiOutlinePushpin } from '@react-icons/all-files/ai/AiOutlinePushpin';\n\nimport { RiExchangeFill } from '@react-icons/all-files/ri/RiExchangeFill';\n\nimport { IoWarning } from '@react-icons/all-files/io5/IoWarning';\n\nimport { IoCloseOutline } from '@react-icons/all-files/io5/IoCloseOutline';\n\nimport { AiOutlineClose } from '@react-icons/all-files/ai/AiOutlineClose';\n\nimport './style.css';\nimport {\n getAccountName,\n symbolsArr,\n multiply,\n percentOfBigNumber,\n ONLY_ZEROS,\n toRealSymbol,\n toPrecision,\n toInternationalCurrencySystemLongString,\n calculateFeeCharge,\n calculateFeePercent,\n} from '../utils';\nimport { REF_WIDGET_STAR_TOKEN_LIST_KEY } from './constant';\nimport Big from 'big.js';\nimport {\n config,\n FEE_DIVISOR,\n getConfig,\n NEAR_META_DATA,\n TokenLinks,\n WRAP_NEAR_CONTRACT_ID,\n} from '../constant';\nimport {\n scientificNotationToString,\n percent,\n getPoolAllocationPercents,\n} from '../utils';\nimport {\n REF_WIDGET_SWAP_DETAIL_KEY,\n DEFAULT_START_TOKEN_LIST_TESTNET,\n DEFAULT_START_TOKEN_LIST_MAINNET,\n} from './constant';\nimport { PoolMode } from '../v1-swap/swap';\nimport { isMobile, separateRoutes, divide, getMax } from '../utils';\n\ninterface TokenAmountProps {\n balance?: string;\n reloading?: JSX.Element;\n token?: TokenMetadata;\n onSelectToken: () => void;\n amount: string;\n onChangeAmount?: (amount: string) => void;\n price?: string;\n onForceUpdate?: () => void;\n poolFetchingState?: 'loading' | 'end';\n}\n\nexport const getPriceImpact = (\n value: string,\n tokenIn: TokenMetadata,\n tokenInAmount: string\n) => {\n const textColor =\n Number(value) <= 1\n ? 'text-greenLight'\n : 1 < Number(value) && Number(value) <= 2\n ? 'text-warn'\n : 'text-error';\n\n const displayValue = scientificNotationToString(\n multiply(tokenInAmount || '0', divide(value, '100'))\n );\n\n const tokenInInfo =\n Number(displayValue) <= 0\n ? ` / 0 ${toRealSymbol(tokenIn.symbol)}`\n : ` / -${toInternationalCurrencySystemLongString(\n displayValue,\n 3\n )} ${toRealSymbol(tokenIn.symbol)}`;\n\n if (Number(value) < 0.01)\n return (\n <span className=\"text-greenLight\">\n {`< -0.01%`}\n {tokenInInfo}\n </span>\n );\n\n if (Number(value) > 1000)\n return (\n <span className=\"text-error\">\n {`< -1000%`}\n {tokenInInfo}\n </span>\n );\n\n return (\n <span className={`${textColor} font-sans`}>\n {`≈ -${toPrecision(value, 2)}%`}\n {tokenInInfo}\n </span>\n );\n};\n\nexport const SmartRouteV2 = ({\n tokens: tokensRaw,\n p,\n pools,\n}: {\n tokens: TokenMetadata[];\n p: string;\n pools: Pool[];\n}) => {\n const theme = useContext(ThemeContext);\n\n const tokens = tokensRaw.map(t =>\n t.id === WRAP_NEAR_CONTRACT_ID\n ? { ...NEAR_META_DATA, id: WRAP_NEAR_CONTRACT_ID }\n : t\n );\n\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n const ParaTokenFrom = ({\n tokenIn,\n p,\n }: {\n tokenIn: TokenMetadata;\n p: string;\n }) => {\n return (\n <div\n className=\"__ref-swap-widget-row-flex-center \"\n style={{\n width: '60px',\n }}\n >\n <span\n style={{\n marginRight: '4px',\n }}\n >\n {p}%\n </span>\n <span className=\"\">\n <Icon token={tokenIn} />\n </span>\n </div>\n );\n };\n const Icon = ({ token }: { token: TokenMetadata }) => {\n if (token.icon) {\n return (\n <img\n src={token.icon}\n alt=\"\"\n style={{\n borderRadius: '100%',\n height: '16px',\n width: '16px',\n flexShrink: 0,\n }}\n />\n );\n } else {\n return (\n <div\n style={{\n borderRadius: '100%',\n height: '16px',\n width: '16px',\n }}\n />\n );\n }\n };\n const Hub = ({ token, poolId }: { token: TokenMetadata; poolId: number }) => {\n return (\n <div\n className={`__ref-swap-widget-row-flex-center`}\n style={{\n width: '62px',\n height: '22px',\n }}\n >\n <div\n className={`w-full flex items-center justify-start pl-2 `}\n style={{\n marginRight: '4px',\n }}\n >\n <span className=\"text-gray-400\">{`#${poolId}`}</span>\n </div>\n <Icon token={token} />\n </div>\n );\n };\n\n if (tokens.length === 3) {\n return (\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap_route_row\">\n {/* <Hub token={tokens[0]} /> */}\n\n <ParaTokenFrom tokenIn={tokens[0]} p={p} />\n <div\n className=\"\"\n style={{\n position: 'relative',\n bottom: '1px',\n }}\n >\n <ArrowRight />\n </div>\n\n <Hub token={tokens[1]} poolId={pools?.[0]?.id} />\n <div\n className=\"px-3\"\n style={{\n position: 'relative',\n bottom: '1px',\n }}\n >\n <ArrowRight />\n </div>\n\n <Hub token={tokens[2]} poolId={pools?.[1]?.id} />\n </div>\n );\n } else if (tokens.length === 2) {\n return (\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap_route_row\">\n <ParaTokenFrom tokenIn={tokens[0]} p={p} />\n <div className=\"px-3\">\n <ArrowRight />\n </div>\n <Hub token={tokens[1]} poolId={pools?.[0]?.id} />\n </div>\n );\n } else {\n return null;\n }\n};\n\nexport const DetailView = ({\n tokenIn,\n tokenOut,\n rate,\n fee,\n minReceived,\n amountIn,\n amountOut,\n priceImpact,\n estimates,\n}: {\n tokenIn: TokenMetadata | undefined;\n tokenOut: TokenMetadata | undefined;\n rate: string;\n fee: number;\n minReceived: string;\n amountIn: string;\n amountOut: string;\n priceImpact: string;\n estimates: EstimateSwapView[];\n}) => {\n const theme = useContext(ThemeContext);\n\n const storagedOpen = !!localStorage.getItem(REF_WIDGET_SWAP_DETAIL_KEY);\n\n const [showDetail, setShowDetail] = useState(storagedOpen || false);\n const [isRateReverse, setIsRateReverse] = useState(false);\n\n const tokensPerRoute = estimates\n .filter(swap => swap.inputToken === tokenIn?.id)\n .map(swap => swap.tokens);\n\n const identicalRoutes = separateRoutes(\n estimates,\n estimates[estimates.length - 1]?.outputToken || ''\n );\n\n const pools = identicalRoutes.map(r => r[0]).map(hub => hub.pool);\n const percents = useMemo(() => {\n if (!pools || pools.length === 0) return [];\n return getPoolAllocationPercents(pools);\n }, [pools]);\n\n const priceImpactDisplay = useMemo(() => {\n if (!priceImpact || !tokenIn || !amountIn) return null;\n return getPriceImpact(priceImpact, tokenIn, amountIn);\n }, [priceImpact, tokenIn, amountIn]);\n if (!tokenIn || !tokenOut) return null;\n\n const displayRate = `1 ${toRealSymbol(tokenIn.symbol)} ≈ ${\n Number(rate) < 0.01 ? '< 0.01' : toPrecision(rate, 2)\n } ${toRealSymbol(tokenOut.symbol)}`;\n\n const revertRate = new Big(1).div(ONLY_ZEROS.test(rate) ? '1' : rate || '1');\n\n const revertDisplayRate = `1 ${toRealSymbol(tokenOut.symbol)} ≈ ${\n Number(revertRate) < 0.01 ? '< 0.01' : toPrecision(revertRate.toString(), 2)\n } ${toRealSymbol(tokenIn.symbol)}`;\n\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n return (\n <div\n className=\"__ref-widget-swap-detail-view __ref-swap-widget-col-flex-start\"\n style={{\n color: secondary,\n }}\n >\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap-detail-view-item\">\n <div\n style={{\n color: primary,\n cursor: 'pointer',\n }}\n className=\"__ref-swap-widget-row-flex-center\"\n onClick={() => {\n if (showDetail) localStorage.removeItem(REF_WIDGET_SWAP_DETAIL_KEY);\n else {\n localStorage.setItem(REF_WIDGET_SWAP_DETAIL_KEY, '1');\n }\n setShowDetail(!showDetail);\n }}\n >\n <div>Detail</div>\n <div\n style={{\n position: 'relative',\n }}\n >\n {!showDetail ? <FiChevronDown /> : <FiChevronUp />}\n </div>\n </div>\n\n {amountIn && amountOut && (\n <div className=\"__ref-swap-widget-row-flex-center\">\n <div>{isRateReverse ? revertDisplayRate : displayRate}</div>\n\n <RiExchangeFill\n onClick={() => {\n setIsRateReverse(!isRateReverse);\n }}\n size={16}\n style={{\n marginLeft: '4px',\n cursor: 'pointer',\n }}\n fill={iconDefault}\n />\n </div>\n )}\n </div>\n {!showDetail ? null : (\n <>\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap-detail-view-item\">\n <div>Minimum received</div>\n <div>{toPrecision(minReceived || '0', 8)}</div>\n </div>\n\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap-detail-view-item\">\n <div>Fee</div>\n\n <div>\n {!amountIn\n ? '0'\n : `${calculateFeeCharge(fee, amountIn)} ${toRealSymbol(\n tokenIn.symbol\n )}(${toPrecision(calculateFeePercent(fee).toString(), 2)}%)`}\n </div>\n </div>\n </>\n )}\n\n {!showDetail ? null : (\n <>\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap-detail-view-item\">\n <div>Price impact</div>\n\n <div>{priceImpactDisplay}</div>\n </div>\n </>\n )}\n\n {estimates && estimates.length > 1 && showDetail && (\n <div\n className=\"__ref-swap-widget-swap_routes __ref-swap-widget-row-flex-center\"\n style={{\n border: `1px solid ${borderColor}`,\n flexDirection: isMobile() ? 'column' : 'row',\n position: 'relative',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n }}\n >\n <div className=\"__ref-swap-widget-row-flex-center\">\n <RouterIcon />\n <span\n className=\"__ref-swap-widget-valueStyle\"\n style={{\n marginLeft: '4px',\n whiteSpace: 'nowrap',\n }}\n >\n {'Auto Router'}\n </span>\n </div>\n\n <div\n className=\"\"\n style={{\n width: isMobile() ? '100%' : 'auto',\n minWidth: !isMobile() ? '70%' : '',\n }}\n >\n {tokensPerRoute.every(r => !!r) &&\n tokensPerRoute.map((tokens, index) => {\n if (!tokens) return null;\n return (\n <SmartRouteV2\n key={index + '-swap-route'}\n tokens={tokens}\n p={percents[index]}\n pools={identicalRoutes[index].map(hub => hub.pool)}\n />\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport const HalfAndMaxAmount = ({\n max,\n onChangeAmount,\n token,\n amount,\n}: {\n max: string;\n token: TokenMetadata;\n onChangeAmount: (amount: string) => void;\n amount: string;\n}) => {\n const halfValue = percentOfBigNumber(50, max, token.decimals);\n\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n } = theme;\n\n const [hoverHalf, setHoverHalf] = useState<boolean>(false);\n const [hoverMax, setHoverMax] = useState<boolean>(false);\n\n return (\n <div className=\"__ref-swap-widget-token-amount_quick_selector __ref-swap-widget-row-flex-center\">\n <span\n className=\"__ref-swap-widget-token-amount_quick_selector_item \"\n style={{\n color: secondary,\n borderRadius,\n border: `1px solid ${borderColor}`,\n marginRight: '4px',\n\n background:\n amount === halfValue && !ONLY_ZEROS.test(halfValue)\n ? active\n : hoverHalf\n ? hover\n : 'transparent',\n }}\n onMouseEnter={() => setHoverHalf(true)}\n onMouseLeave={() => setHoverHalf(false)}\n onClick={() => {\n const half = percentOfBigNumber(50, max, token.decimals);\n\n onChangeAmount(half);\n }}\n >\n Half\n </span>\n\n <span\n className=\"__ref-swap-widget-token-amount_quick_selector_item\"\n onClick={() => {\n onChangeAmount(max);\n }}\n onMouseEnter={() => setHoverMax(true)}\n onMouseLeave={() => setHoverMax(false)}\n style={{\n color: secondary,\n borderRadius,\n border: `1px solid ${borderColor}`,\n background:\n amount === max && !ONLY_ZEROS.test(max)\n ? active\n : hoverMax\n ? hover\n : 'transparent',\n }}\n >\n Max\n </span>\n </div>\n );\n};\n\nexport const TokenAmount = (props: TokenAmountProps) => {\n const {\n balance,\n reloading,\n token,\n onSelectToken,\n amount,\n onChangeAmount,\n price,\n onForceUpdate,\n poolFetchingState,\n } = props;\n\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n } = theme;\n\n const ref = useRef<HTMLInputElement>(null);\n\n const [hoverSelect, setHoverSelect] = useState<boolean>(false);\n\n const handleChange = (amount: string) => {\n if (onChangeAmount) {\n onChangeAmount(amount);\n }\n if (ref.current) {\n ref.current.value = amount;\n }\n };\n\n useEffect(() => {\n if (\n ref.current &&\n onChangeAmount &&\n token &&\n balance &&\n token.id === WRAP_NEAR_CONTRACT_ID &&\n Number(balance) - Number(ref.current.value) < 0.5\n ) {\n ref.current.setCustomValidity(\n 'Must have 0.5N or more left in wallet for gas fee.'\n );\n } else {\n ref.current?.setCustomValidity('');\n }\n }, [ref, balance, ref.current, ref.current?.value, token, amount]);\n\n const curMax = token ? getMax(token.id, balance || '0') : '0';\n\n return (\n <>\n <div\n className=\"__ref-swap-widger-token-amount \"\n style={{\n background: secondaryBg,\n flexDirection: isMobile() ? 'column' : 'row',\n }}\n >\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n width: isMobile() ? 'auto' : '40%',\n }}\n >\n <div\n className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-token-amount_token-select-button\"\n style={{\n color: primary,\n background: hoverSelect ? hover : 'transparent',\n border: `1px solide ${hoverSelect ? borderColor : 'transparent'}`,\n }}\n onClick={onSelectToken}\n onMouseEnter={() => setHoverSelect(true)}\n onMouseLeave={() => setHoverSelect(false)}\n >\n {!token ? (\n <>\n <span\n style={{\n whiteSpace: 'nowrap',\n height: '26px',\n }}\n className=\"__ref-swap-widget-row-flex-center\"\n >\n Select Token\n </span>\n </>\n ) : (\n <>\n <img\n src={token?.icon}\n alt=\"\"\n className=\"__ref-swap-widget_token_icon\"\n style={{\n height: '26px',\n width: '26px',\n marginRight: '8px',\n }}\n />\n <span>{toRealSymbol(token?.symbol)}</span>\n </>\n )}\n <FiChevronDown\n style={{\n marginLeft: '4px',\n flexShrink: 0,\n }}\n />\n </div>\n\n {onForceUpdate && (\n <RiRefreshLine\n className={`${\n poolFetchingState === 'loading'\n ? '__ref-swap-widget-loading '\n : ''\n }`}\n style={{\n cursor: 'pointer',\n color: secondary,\n }}\n size={18}\n onClick={() => {\n onForceUpdate();\n }}\n />\n )}\n </div>\n\n <div\n className=\" __ref-swap-widget-token-amount_input\"\n style={{\n width: isMobile() ? '100%' : '60%',\n }}\n >\n <input\n ref={ref}\n max={!!onChangeAmount ? curMax : undefined}\n min=\"0\"\n onWheel={() => {\n if (ref.current) {\n ref.current.blur();\n }\n }}\n className=\"__ref-swap-widget-input-class\"\n step=\"any\"\n value={amount}\n type=\"number\"\n placeholder={!onChangeAmount ? '-' : '0.0'}\n onChange={({ target }) => {\n target.setCustomValidity('');\n handleChange(target.value);\n }}\n disabled={!onChangeAmount}\n onKeyDown={e => symbolsArr.includes(e.key) && e.preventDefault()}\n style={{\n color: primary,\n marginBottom: '8px',\n width: '100%',\n textAlign: 'right',\n fontSize: '20px',\n }}\n />\n\n <div\n style={{\n fontSize: '12px',\n color: secondary,\n textAlign: 'right',\n }}\n >\n {!price\n ? '$-'\n : '~$' +\n toInternationalCurrencySystemLongString(\n multiply(price, amount || '0'),\n 2\n )}\n </div>\n </div>\n </div>\n\n {!balance || !token || !onChangeAmount ? null : (\n <div\n className=\"__ref-swap-widger-token-amount_balance __ref-swap-widget-row-flex-center\"\n style={{\n fontSize: '12px',\n color: secondary,\n }}\n >\n <span>\n Balance:&nbsp;\n {toPrecision(balance, 2)}\n </span>\n {token && (\n <HalfAndMaxAmount\n token={token}\n max={getMax(token.id, balance)}\n onChangeAmount={handleChange}\n amount={amount}\n />\n )}\n </div>\n )}\n </>\n );\n};\n\nexport const SlippageSelector = ({\n slippageTolerance,\n onChangeSlippageTolerance,\n showSlip,\n setShowSlip,\n}: {\n slippageTolerance: number;\n onChangeSlippageTolerance: (slippageTolerance: number) => void;\n showSlip: boolean;\n setShowSlip: (showSlip: boolean) => void;\n}) => {\n const [invalid, setInValid] = useState<boolean>(false);\n\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n } = theme;\n\n const ref = useRef<HTMLInputElement>(null);\n\n const handleChange = (amount: string) => {\n onChangeSlippageTolerance(Number(amount));\n\n if (Number(amount) > 0 && Number(amount) < 100) {\n setInValid(false);\n } else {\n setInValid(true);\n }\n\n if (ref.current) {\n ref.current.value = amount;\n }\n };\n\n useEffect(() => {\n if (!showSlip) return;\n\n document.onclick = () => setShowSlip(false);\n\n return () => {\n document.onclick = null;\n };\n }, [showSlip, setShowSlip]);\n\n if (!showSlip) return null;\n\n return (\n <div\n className=\"__ref-swap-widget_slippage_selector __ref-swap-widget-col-flex-start\"\n onClick={e => e.stopPropagation()}\n style={{\n background: container,\n border: `1px solid ${borderColor}`,\n }}\n >\n <span\n style={{\n color: primary,\n paddingBottom: '14px',\n }}\n >\n Slippage tolerance\n </span>\n\n <div\n className={`__ref-swap-widget-row-flex-center\n `}\n >\n <div\n className={`__ref-swap-widget-row-flex-center\n __ref-swap-widget_slippage_selector_input_container`}\n style={{\n border: `1px solid ${invalid ? '#FF7575' : borderColor}`,\n borderRadius,\n }}\n >\n <input\n ref={ref}\n max={99.99999}\n min={0.000001}\n defaultValue={slippageTolerance ? slippageTolerance : 0.5}\n onWheel={() => {\n if (ref.current) {\n ref.current.blur();\n }\n }}\n value={slippageTolerance}\n step=\"any\"\n type=\"number\"\n required={true}\n placeholder=\"\"\n onChange={({ target }) => handleChange(target.value)}\n onKeyDown={e => symbolsArr.includes(e.key) && e.preventDefault()}\n style={{\n width: '100%',\n color: invalid ? '#FF7575' : primary,\n }}\n className=\"__ref-swap-widget-input-class\"\n />\n <span className=\"ml-2\">%</span>\n </div>\n\n <button\n className={`__ref-swap-widget_slippage_selector_button __ref-swap-widget-button ${\n isMobile()\n ? '__ref-swap-widget-opacity-active'\n : '__ref-swap-widget-opacity-hover'\n }`}\n style={{\n color: primary,\n background: buttonBg,\n borderRadius,\n }}\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n onChangeSlippageTolerance(0.5);\n setInValid(false);\n }}\n >\n Auto\n </button>\n </div>\n {invalid && (\n <div\n className=\" text-xs py-3 __ref-swap-widget-row-flex-center\"\n style={{\n color: '#FF7575',\n fontSize: '12px',\n padding: '10px 0px',\n alignItems: 'start',\n }}\n >\n <IoWarning\n className=\"\"\n style={{\n marginRight: '4px',\n }}\n size={20}\n />\n <div>{'The slippage tolerance is invalid.'}</div>\n </div>\n )}\n </div>\n );\n};\n\nconst StarToken = ({\n price,\n token,\n onDelete,\n onClick,\n}: {\n token: TokenMetadata;\n price: string;\n onDelete: (token: TokenMetadata) => void;\n onClick: (token: TokenMetadata) => void;\n}) => {\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n const [hoverIcon, setHoverIcon] = useState(false);\n\n const [hoverClose, setHoverClose] = useState(false);\n\n return (\n <div\n className=\"__ref-swap-widget_star_token __ref-swap-widget-row-flex-center\"\n onMouseEnter={() => setHoverIcon(true)}\n onMouseLeave={() => setHoverIcon(false)}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onClick(token);\n }}\n style={{\n background: hoverIcon ? hover : 'transparent',\n border: `1px solid ${borderColor}`,\n }}\n >\n {hoverIcon && (\n <div\n style={{\n position: 'absolute',\n top: '-4px',\n right: '-4px',\n boxShadow: '0px 0px 2px rgba(0, 0, 0, 0.25)',\n border: `1px solid ${borderColor}`,\n borderRadius: '100%',\n width: '16px',\n height: '16px',\n background: '#E3E3E3',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onDelete(token);\n }}\n onMouseEnter={() => setHoverClose(true)}\n onMouseLeave={() => setHoverClose(false)}\n >\n <IoCloseOutline stroke={hoverClose ? 'black' : '#7e8a93'} />\n </div>\n )}\n\n <img\n src={token.icon}\n alt=\"\"\n className=\"__ref-swap-widget_token_icon\"\n style={{\n height: '26px',\n width: '26px',\n marginRight: '2px',\n }}\n />\n\n <div className=\"__ref-swap-widget-col-flex-start\">\n <span\n style={{\n fontSize: '14px',\n color: primary,\n }}\n >\n {toRealSymbol(token.symbol)}\n </span>\n\n <span\n style={{\n fontSize: '10px',\n color: secondary,\n }}\n >\n {!price\n ? '$-'\n : '$' + toInternationalCurrencySystemLongString(price, 2)}\n </span>\n </div>\n </div>\n );\n};\n\ninterface TokenProps {\n token: TokenMetadata;\n onClick: (token: TokenMetadata) => void;\n onClickPin: (token: TokenMetadata) => void;\n balance: string;\n price?: string;\n isSticky?: boolean;\n index: number;\n setHoverIndex: (index: number) => void;\n hoverIndex: number;\n}\n\nconst Token = ({\n token,\n onClick,\n price,\n balance,\n isSticky,\n onClickPin,\n index,\n setHoverIndex,\n hoverIndex,\n}: TokenProps) => {\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n const displayBalance =\n 0 < Number(balance) && Number(balance) < 0.001\n ? '< 0.001'\n : toPrecision(String(balance), 3);\n\n const [hoverOutLink, setHoverOutLink] = useState(false);\n\n const [hoverPin, setHoverPin] = useState(false);\n\n return (\n <div\n className=\"__ref-swap-widget_token-selector-token-list-item __ref-swap-widget-row-flex-center\"\n style={{\n background: hoverIndex === index ? hover : 'transparent',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onClick(token);\n }}\n onMouseEnter={() => setHoverIndex(index)}\n onMouseLeave={() => setHoverIndex(-1)}\n >\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n justifyContent: 'space-between',\n }}\n >\n <img\n src={token.icon}\n alt=\"\"\n className=\"__ref-swap-widget_token_icon\"\n style={{\n height: '36px',\n width: '36px',\n marginRight: '10px',\n }}\n />\n\n <div className=\"__ref-swap-widget-col-flex-start\">\n <span\n style={{\n fontSize: '14px',\n color: primary,\n }}\n className=\"__ref-swap-widget-row-flex-center\"\n >\n {toRealSymbol(token.symbol)}\n\n {TokenLinks[token.symbol] && (\n <HiOutlineExternalLink\n onMouseEnter={() => setHoverOutLink(true)}\n onMouseLeave={() => setHoverOutLink(false)}\n style={{\n marginLeft: '4px',\n marginTop: '2px',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n window.open(TokenLinks[token.symbol], '_blank');\n }}\n stroke={hoverOutLink ? iconHover : iconDefault}\n />\n )}\n </span>\n\n <span\n style={{\n fontSize: '10px',\n color: secondary,\n marginTop: '2px',\n }}\n >\n {!price\n ? '$-'\n : '$' + toInternationalCurrencySystemLongString(price, 2)}\n </span>\n </div>\n </div>\n\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n color: primary,\n }}\n >\n {displayBalance}\n\n {isSticky ? (\n <AiFillPushpin\n onMouseEnter={() => setHoverPin(true)}\n onMouseLeave={() => setHoverPin(false)}\n fill={hoverPin && hoverIndex === index ? iconHover : iconDefault}\n style={{\n marginLeft: '10px',\n cursor: 'pointer',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onClickPin(token);\n }}\n />\n ) : (\n <AiOutlinePushpin\n style={{\n marginLeft: '10px',\n cursor: 'pointer',\n }}\n onMouseEnter={() => setHoverPin(true)}\n onMouseLeave={() => setHoverPin(false)}\n fill={hoverPin && hoverIndex === index ? iconHover : iconDefault}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onClickPin(token);\n }}\n />\n )}\n </div>\n </div>\n );\n};\n\ninterface TokenListProps {\n tokens: TokenMetadata[];\n onClick: (token: TokenMetadata) => void;\n balances: { [tokenId: string]: string };\n tokenPriceList: Record<string, any> | null;\n starList: string[];\n setStarList: (starList: string[]) => void;\n onDelete: (token: TokenMetadata) => void;\n}\n\nexport const TokenListTable = ({\n tokens,\n onClick,\n balances,\n tokenPriceList,\n starList,\n setStarList,\n onDelete,\n}: TokenListProps) => {\n const [currentSort, setCurrentSort] = useState('down');\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n const onClickPin = (token: TokenMetadata) => {\n if (starList.includes(token.id)) {\n onDelete(token);\n } else {\n const newList = [...starList, token.id];\n setStarList(newList);\n }\n };\n\n const [hoverIndex, setHoverIndex] = useState(-1);\n\n const tokenSorting = (a: TokenMetadata, b: TokenMetadata) => {\n const b1 = balances[a.id];\n const b2 = balances[b.id];\n\n if (currentSort === 'up') {\n return Number(b1) - Number(b2);\n } else return Number(b2) - Number(b1);\n };\n\n return !tokens || tokens.length === 0 ? null : (\n <div className=\"__ref-swap-widget_token_list_table\">\n <div\n className=\"__ref-swap-widget_token_list_table_header\"\n style={{\n color: secondary,\n borderBottom: `1px solid ${borderColor}`,\n }}\n >\n <span className=\"\">Asset</span>\n\n <span\n onClick={() => {\n setCurrentSort(currentSort === 'up' ? 'down' : 'up');\n }}\n style={{\n cursor: 'pointer',\n }}\n className=\"__ref-swap-widget-row-flex-center\"\n >\n <span className=\"ml-1\">Balance</span>\n {currentSort === 'up' ? <TiArrowSortedUp /> : <TiArrowSortedDown />}\n </span>\n </div>\n\n <div className=\"__ref-swap-widget_token_list_table_content\">\n {tokens.sort(tokenSorting).map((token, index) => (\n <Token\n key={token.id + '-select-token-list-item-' + index}\n onClick={onClick}\n index={index}\n token={token}\n price={tokenPriceList?.[token.id]?.price}\n balance={balances?.[token.id] || '0'}\n onClickPin={onClickPin}\n isSticky={starList.includes(token.id)}\n setHoverIndex={setHoverIndex}\n hoverIndex={hoverIndex}\n />\n ))}\n </div>\n </div>\n );\n};\n\nexport const TokenSelector = ({\n onSelect,\n width,\n tokens,\n onClose,\n AccountId,\n balances,\n className,\n}: {\n onSelect: (token: TokenMetadata) => void;\n width: string;\n tokens: TokenMetadata[];\n onClose: () => void;\n AccountId: string;\n balances: { [tokenId: string]: string };\n className?: string;\n}) => {\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n iconDefault,\n iconHover,\n } = theme;\n\n const [searchValue, setSearchValue] = useState<string>('');\n\n const tokenPriceList = useContext(TokenPriceContext);\n\n const handleSearch = (value: string) => {\n setSearchValue(value);\n };\n\n const storagedStartList = localStorage.getItem(REF_WIDGET_STAR_TOKEN_LIST_KEY)\n ? JSON.parse(localStorage.getItem(REF_WIDGET_STAR_TOKEN_LIST_KEY) || '[]')\n : null;\n\n const DEFAULT_START_TOKEN_LIST =\n getConfig().networkId === 'testnet'\n ? DEFAULT_START_TOKEN_LIST_TESTNET\n : DEFAULT_START_TOKEN_LIST_MAINNET;\n\n const [starList, setStarList] = useState<string[]>(\n storagedStartList || DEFAULT_START_TOKEN_LIST\n );\n\n const onDelete = (token: TokenMetadata) => {\n const newStarList = starList.filter(starToken => starToken !== token.id);\n\n setStarList(newStarList);\n\n localStorage.setItem(\n REF_WIDGET_STAR_TOKEN_LIST_KEY,\n JSON.stringify(newStarList)\n );\n };\n\n const tableListFilter = (token: TokenMetadata) => {\n if (!searchValue) return true;\n\n const searchValueLower = searchValue.toLowerCase();\n\n return token.symbol?.toLowerCase().includes(searchValueLower) || false;\n };\n\n return (\n <div\n className={`__ref-swap_widget-token_selector __ref-swap-widget-container ${className}`}\n style={{\n position: 'relative',\n width,\n background: container,\n }}\n >\n <FiChevronLeft\n onClick={onClose}\n style={{\n color: primary,\n position: 'absolute',\n cursor: 'pointer',\n }}\n />\n <div\n className=\"__ref-swap-widget-header-title __ref-swap-widget-row-flex-center\"\n style={{\n color: primary,\n justifyContent: 'center',\n paddingBottom: '24px',\n }}\n >\n Select a token\n </div>\n\n <div\n className=\"__ref-swap-widget-select-token_input __ref-swap-widget-row-flex-center\"\n style={{\n border: `1px solid ${buttonBg}`,\n background: secondaryBg,\n }}\n >\n <FaSearch\n fill={iconDefault}\n style={{\n marginRight: '8px',\n }}\n />\n\n <input\n className=\"__ref-swap-widget-input-class\"\n placeholder=\"Search token...\"\n onChange={evt => handleSearch(evt.target.value)}\n style={{\n fontSize: '14px',\n color: primary,\n }}\n />\n </div>\n\n <div className=\"__ref-swap-widget_token-selector-star-tokens __ref-swap-widget-row-flex-center\">\n {starList.map(id => {\n if (!tokens || tokens.length === 0) return null;\n\n const token = tokens.find(token => token.id === id);\n\n return !token ? null : (\n <StarToken\n key={token.id + '-star-token'}\n token={token}\n price={tokenPriceList?.[token.id]?.price}\n onDelete={onDelete}\n onClick={onSelect}\n />\n );\n })}\n </div>\n\n <TokenListTable\n tokens={tokens.filter(tableListFilter)}\n tokenPriceList={tokenPriceList}\n onClick={onSelect}\n balances={balances}\n starList={starList}\n setStarList={starList => {\n setStarList(starList);\n localStorage.setItem(\n REF_WIDGET_STAR_TOKEN_LIST_KEY,\n JSON.stringify(starList)\n );\n }}\n onDelete={onDelete}\n />\n </div>\n );\n};\n\nexport const Slider = ({\n showSlip,\n setShowSlip,\n}: {\n showSlip: boolean;\n setShowSlip: (show: boolean) => void;\n}) => {\n const [hover, setHover] = useState(false);\n\n return (\n <svg\n width=\"17\"\n height=\"17\"\n viewBox=\"0 0 17 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n onClick={() => setShowSlip(true)}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12.6957 13.0652C12.6957 14.1338 11.8294 15 10.7609 15C9.69235 15 8.82611 14.1338 8.82611 13.0652C8.82612 11.9967 9.69235 11.1304 10.7609 11.1304C11.8294 11.1304 12.6957 11.9967 12.6957 13.0652ZM14.5749 12.0941C14.6145 12.0894 14.6548 12.0869 14.6957 12.0869L15.9565 12.0869C16.5088 12.0869 16.9565 12.5346 16.9565 13.0869C16.9565 13.6392 16.5088 14.0869 15.9565 14.0869L14.6957 14.0869C14.651 14.0869 14.6071 14.084 14.564 14.0783C14.1171 15.7605 12.5837 17 10.7609 17C8.93806 17 7.40472 15.7605 6.95777 14.0783C6.91471 14.084 6.87078 14.0869 6.82617 14.0869L1.00009 14.0869C0.447802 14.0869 8.61245e-05 13.6392 8.61728e-05 13.0869C8.62211e-05 12.5346 0.447802 12.0869 1.00009 12.0869L6.82617 12.0869C6.86702 12.0869 6.90729 12.0894 6.94686 12.0941C7.37926 10.3906 8.92291 9.13044 10.7609 9.13044C12.5989 9.13044 14.1425 10.3906 14.5749 12.0941ZM4.26086 3.93478C4.26086 2.86623 5.1271 2 6.19565 2C7.2642 2 8.13043 2.86623 8.13043 3.93478C8.13043 5.00333 7.2642 5.86957 6.19565 5.86957C5.1271 5.86956 4.26086 5.00333 4.26086 3.93478ZM6.19565 9.66601e-07C4.3728 8.07243e-07 2.83946 1.23952 2.39252 2.92168C2.34944 2.91601 2.3055 2.91309 2.26087 2.91309L0.999999 2.91309C0.447715 2.91309 -7.14972e-07 3.3608 -7.63254e-07 3.91309C-8.11537e-07 4.46537 0.447715 4.91309 0.999999 4.91309L2.26087 4.91309C2.30173 4.91309 2.34202 4.91063 2.3816 4.90587C2.81401 6.60936 4.35766 7.86956 6.19565 7.86957C8.03363 7.86957 9.57728 6.60936 10.0097 4.90588C10.0493 4.91064 10.0895 4.91309 10.1304 4.91309L15.9565 4.91309C16.5087 4.91309 16.9565 4.46537 16.9565 3.91309C16.9565 3.3608 16.5087 2.91309 15.9565 2.91309L10.1304 2.91309C10.0858 2.91309 10.0418 2.91601 9.99877 2.92167C9.55182 1.23952 8.01849 1.12596e-06 6.19565 9.66601e-07Z\"\n fill={hover || showSlip ? '#00C6A2' : '#7E8A93'}\n />\n </svg>\n );\n};\n\nexport const RefIcon = (props: any) => {\n return (\n <svg\n {...props}\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 10 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M6.36365 10H10L6.36365 6.36363V10Z\" fill=\"currentColor\" />\n <path\n d=\"M10 4.05312e-06L7.87879 3.86767e-06L10 2.12122L10 4.05312e-06Z\"\n fill=\"#00C6A2\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.51531 6.36364C6.46444 6.36364 6.41387 6.36232 6.36365 6.35971V4.08371L8.83901 1.78516C9.18802 2.26148 9.3941 2.8491 9.3941 3.48485C9.3941 5.07476 8.10522 6.36364 6.51531 6.36364ZM8.19255 1.14486L6.36365 2.84313V0.60999C6.41387 0.607383 6.46444 0.606064 6.51531 0.606064C7.14111 0.606064 7.72027 0.805743 8.19255 1.14486Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.06046 0.606064H3.33319V3.29661L4.55696 4.52039L6.06046 3.12428V0.606064ZM6.06046 4.36486L4.5336 5.78267L3.33319 4.58226V10H6.06046V4.36486Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.0303 0.606064H0V4.50881L2.27284 2.23598L3.0303 2.99344V0.606064ZM3.0303 4.27909L2.27284 3.52162L0 5.79446V10H3.0303V4.27909Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport const Loading = () => {\n return (\n <svg\n width=\"38\"\n height=\"38\"\n viewBox=\"0 0 38 38\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"__ref-swap-widget-loading\"\n >\n <circle\n cx=\"19\"\n cy=\"19\"\n r=\"16\"\n stroke=\"#EEEEEE\"\n strokeWidth=\"6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M19 35C27.8366 35 35 27.8366 35 19C35 10.1634 27.8366 3 19 3C10.1634 3 3 10.1634 3 19\"\n stroke=\"#00C6A2\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n};\n\nexport const Warning = () => {\n return (\n <svg\n width=\"49\"\n height=\"49\"\n viewBox=\"0 0 49 49\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M21.0359 5.99999C22.5755 3.33333 26.4245 3.33333 27.9641 6L42.2535 30.75C43.7931 33.4167 41.8686 36.75 38.7894 36.75H10.2106C7.13137 36.75 5.20688 33.4167 6.74648 30.75L21.0359 5.99999Z\"\n stroke=\"#FF689E\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n <line\n x1=\"24\"\n y1=\"14\"\n x2=\"24\"\n y2=\"24\"\n stroke=\"#FF689E\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n <circle cx=\"24\" cy=\"30\" r=\"2\" fill=\"#FF689E\" />\n </svg>\n );\n};\n\nexport const Success = () => {\n return (\n <div\n style={{\n position: 'relative',\n height: '32px',\n width: '32px',\n }}\n >\n <svg\n width=\"38\"\n height=\"38\"\n viewBox=\"0 0 38 38\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n }}\n >\n <circle\n cx=\"19\"\n cy=\"19\"\n r=\"16\"\n stroke=\"#EEEEEE\"\n strokeWidth=\"6\"\n strokeLinecap=\"round\"\n />\n </svg>\n\n <svg\n width=\"30\"\n height=\"23\"\n viewBox=\"0 0 30 23\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n position: 'absolute',\n top: 4,\n left: 4,\n }}\n >\n <path\n d=\"M2 11.2727L10.4898 20L28 2\"\n stroke=\"#00C6A2\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n </svg>\n </div>\n );\n};\n\nexport const RouterIcon = () => {\n return (\n <svg\n width=\"16\"\n height=\"12\"\n viewBox=\"0 0 16 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"mr-2\"\n >\n <path\n d=\"M13.4862 6.25488C12.2813 6.25488 11.2485 7.10159 11.019 8.28698H6.02703L4.7647 7.21448C4.93684 6.8758 5.05159 6.48067 5.10897 6.0291C5.10897 5.52107 4.93684 4.9566 4.59257 4.56147L6.02703 3.1503H11.0763C11.478 4.44858 12.8551 5.23884 14.1748 4.84371C15.4945 4.44858 16.2978 3.09385 15.8961 1.79557C15.4945 0.497295 14.1174 -0.292963 12.7977 0.102166C11.937 0.327954 11.3059 1.00532 11.0763 1.79557H5.51062L3.50237 3.77122C3.21548 3.65832 2.92859 3.60188 2.58432 3.60188C1.20723 3.54543 0.0596573 4.61792 0.00227872 5.97265C-0.0550999 7.32738 0.977715 8.45632 2.3548 8.51276H2.58432C3.04334 8.51276 3.44499 8.39987 3.84664 8.17408L5.568 9.6417H11.1911C11.7075 10.8835 13.142 11.5045 14.4043 11.0529C15.6666 10.5449 16.2978 9.13368 15.8388 7.89185C15.4371 6.8758 14.5191 6.25488 13.4862 6.25488V6.25488ZM13.4862 1.344C14.1174 1.344 14.6338 1.85202 14.6338 2.47294C14.6338 3.09385 14.1174 3.60188 13.4862 3.60188C12.8551 3.60188 12.3387 3.09385 12.3387 2.47294C12.3387 1.85202 12.8551 1.344 13.4862 1.344ZM2.58432 7.15804C1.95315 7.15804 1.43674 6.65001 1.43674 6.0291C1.43674 5.40818 1.95315 4.90016 2.58432 4.90016C3.21548 4.90016 3.73189 5.40818 3.73189 6.0291C3.73189 6.65001 3.21548 7.15804 2.58432 7.15804ZM13.4862 9.86749C12.8551 9.86749 12.3387 9.35947 12.3387 8.73855C12.3387 8.11763 12.8551 7.60961 13.4862 7.60961C14.1174 7.60961 14.6338 8.11763 14.6338 8.73855C14.6338 9.35947 14.1174 9.86749 13.4862 9.86749Z\"\n fill=\"url(#paint0_linear_12461_2312)\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_12461_2312\"\n x1=\"8\"\n y1=\"0\"\n x2=\"8\"\n y2=\"11.2\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#00C6A2\" />\n <stop offset=\"1\" stopColor=\"#8C78FF\" />\n </linearGradient>\n </defs>\n </svg>\n );\n};\n\nexport const Notification = ({\n state,\n tx,\n detail,\n open,\n setOpen,\n setState,\n}: {\n state?: 'success' | 'fail' | null;\n setState?: (state: 'success' | 'fail' | null) => void;\n tx?: string;\n detail?: string;\n\n open: boolean;\n setOpen: (open: boolean) => void;\n}) => {\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n } = theme;\n\n if (!open) return null;\n\n return (\n <div\n className=\"__ref-swap-widget-notification\"\n style={{\n color: primary,\n background: container,\n }}\n >\n <div className=\"__ref-swap-widget-notification__icon\">\n {state === null && <Loading />}\n {state === 'fail' && <Warning />}\n {state === 'success' && <Success />}\n </div>\n\n <div\n style={{\n fontSize: '16px',\n marginTop: '10px',\n marginBottom: '6px',\n }}\n >\n {state === 'success' && <p>Success!</p>}\n {state === 'fail' && <p>Swap Failed!</p>}\n </div>\n <div\n className=\"__ref-swap-widget-notification__text\"\n style={{\n color: primary,\n }}\n >\n {(state === null || state === undefined) && (\n <p>Waiting for confirmation</p>\n )}\n {state === 'fail' && !!tx && (\n <a\n className=\"text-primary font-semibold\"\n href={`${config.explorerUrl}/txns/${tx}`}\n target=\"_blank\"\n style={{\n textDecoration: 'underline',\n fontSize: '14px',\n color: primary,\n }}\n rel=\"noreferrer\"\n >\n Click to view.\n </a>\n )}\n\n {state === 'success' && detail}\n </div>\n {state !== null && (\n <button\n className=\"__ref-swap-widget-notification__button __ref-swap-widget-button\"\n style={{\n background: buttonBg,\n fontWeight: 700,\n color: 'white',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n setOpen(false);\n setState && setState(null);\n }}\n >\n Close\n </button>\n )}\n </div>\n );\n};\n\nexport const ArrowRight = () => {\n return (\n <div className=\"mx-1\">\n <svg\n width=\"12\"\n height=\"5\"\n viewBox=\"0 0 12 5\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.864 4.4C9.024 4.05867 9.17867 3.76 9.328 3.504C9.488 3.248 9.64267 3.03467 9.792 2.864H0.464V2.192H9.792C9.64267 2.01067 9.488 1.792 9.328 1.536C9.17867 1.28 9.024 0.986666 8.864 0.656H9.424C10.096 1.43467 10.8 2.01067 11.536 2.384V2.672C10.8 3.03467 10.096 3.61067 9.424 4.4H8.864Z\"\n fill=\"#7E8A93\"\n />\n </svg>\n </div>\n );\n};\n\nexport const AccountButton = ({\n AccountId,\n onDisConnect,\n}: {\n AccountId: string;\n onDisConnect: () => void;\n}) => {\n const [hoverAccount, setHoverAccount] = useState<boolean>(false);\n\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n iconDefault,\n iconHover,\n borderColor,\n } = theme;\n\n return !AccountId ? null : (\n <div\n className=\"__ref-swap-widget-header-button-account __ref-swap-widget-row-flex-center\"\n style={{\n color: primary,\n background: secondaryBg,\n border: `1px solid ${borderColor}`,\n cursor: 'pointer',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n hoverAccount && onDisConnect();\n }}\n onMouseEnter={() => setHoverAccount(true)}\n onMouseLeave={() => setHoverAccount(false)}\n >\n {hoverAccount ? 'Disconnect' : getAccountName(AccountId)}\n </div>\n );\n};\n","import React, { useEffect, useMemo, useState } from 'react';\n\nimport { SwapWidgetProps } from './types';\nimport { TokenMetadata } from '../types';\nimport {\n useRefPools,\n useSwap,\n ThemeContextProvider,\n TokenPriceContextProvider,\n useAllTokens,\n} from './state';\nimport { ftGetBalance, ftGetTokenMetadata } from '../ref';\nimport {\n getAccountName,\n toReadableNumber,\n toPrecision,\n getPriceImpact,\n isMobile,\n} from '../utils';\nimport {\n Slider,\n SlippageSelector,\n TokenSelector,\n TokenAmount,\n DetailView,\n Notification,\n} from './components';\nimport { FiChevronDown } from '@react-icons/all-files/fi/FiChevronDown';\n\nimport { TiWarning } from '@react-icons/all-files/ti/TiWarning';\n\nimport './style.css';\nimport { useTokenPriceList, useTokenBalnces, useTokensIndexer } from './state';\n\nimport { CgArrowsExchangeAltV } from '@react-icons/all-files/cg/CgArrowsExchangeAltV';\nimport { RefIcon, AccountButton } from './components';\nimport Big from 'big.js';\nimport { ONLY_ZEROS } from '../utils';\nimport {\n defaultTheme,\n defaultDarkModeTheme,\n REF_WIDGET_SWAP_IN_KEY,\n REF_WIDGET_SWAP_OUT_KEY,\n} from './constant';\nimport {\n WRAP_NEAR_CONTRACT_ID,\n NEAR_META_DATA,\n REF_TOKEN_ID,\n REF_META_DATA,\n} from '../constant';\n\nexport const SwapWidget = (props: SwapWidgetProps) => {\n const {\n theme,\n defaultTokenList,\n onSwap,\n connection,\n width,\n height,\n enableSmartRouting,\n className,\n transactionState,\n onConnect,\n defaultTokenIn,\n defaultTokenOut,\n onDisConnect,\n darkMode,\n referralId,\n } = props;\n\n const curTheme = theme || (darkMode ? defaultDarkModeTheme : defaultTheme);\n\n const STORAGED_TOKEN_IN = localStorage.getItem(REF_WIDGET_SWAP_IN_KEY);\n\n const STORAGED_TOKEN_OUT = localStorage.getItem(REF_WIDGET_SWAP_OUT_KEY);\n\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n refIcon,\n } = curTheme;\n\n const { AccountId, isSignedIn: isSignedInProp } = connection;\n\n const isSignedIn = !!AccountId && isSignedInProp;\n\n const [tokenIn, setTokenIn] = useState<TokenMetadata>();\n\n const handleSetTokenIn = (token: TokenMetadata) => {\n setTokenIn(token);\n localStorage.setItem(REF_WIDGET_SWAP_IN_KEY, token.id);\n };\n\n const handleSetTokenOut = (token: TokenMetadata) => {\n setTokenOut(token);\n localStorage.setItem(REF_WIDGET_SWAP_OUT_KEY, token.id);\n };\n\n const [tokenOut, setTokenOut] = useState<TokenMetadata>();\n const [tokenInBalance, setTokenInBalance] = useState<string>('');\n\n const [tokenOutBalance, setTokenOutBalance] = useState<string>('');\n\n const [notOpen, setNotOpen] = useState<boolean>(false);\n\n useEffect(() => {\n if (!transactionState) return;\n\n if (transactionState && transactionState.state !== null) {\n setNotOpen(true);\n }\n transactionState?.setState(transactionState?.state || null);\n }, [transactionState]);\n\n const [widgetRoute, setWidgetRoute] = useState<\n 'swap' | 'token-selector-in' | 'token-selector-out'\n >('swap');\n\n const [amountIn, setAmountIn] = useState<string>('1');\n\n const [showSlip, setShowSlip] = useState<boolean>(false);\n\n const [slippageTolerance, setSlippageTolerance] = useState<number>(0.5);\n\n const { tokens, tokenLoading } = useTokensIndexer({\n defaultTokenList,\n AccountId,\n });\n\n // cache list tokens\n useAllTokens({ reload: true });\n\n const balances = useTokenBalnces(tokens, AccountId);\n\n const [refreshTrigger, setRreshTrigger] = useState<boolean>(false);\n\n const tokenPriceList = useTokenPriceList();\n\n const { allPools, allStablePools, poolFetchingState } = useRefPools(\n refreshTrigger\n );\n\n useEffect(() => {\n const defaultIn =\n STORAGED_TOKEN_IN || defaultTokenIn || WRAP_NEAR_CONTRACT_ID;\n\n const defaultOut = STORAGED_TOKEN_OUT || defaultTokenOut || REF_TOKEN_ID;\n\n if (\n tokens.length > 0 &&\n defaultIn &&\n tokens.findIndex(t => t.id === defaultIn) !== -1\n ) {\n if (defaultIn === WRAP_NEAR_CONTRACT_ID || defaultIn === 'NEAR') {\n handleSetTokenIn({\n ...NEAR_META_DATA,\n id: WRAP_NEAR_CONTRACT_ID,\n });\n } else {\n ftGetTokenMetadata(defaultIn).then(handleSetTokenIn);\n }\n } else if (\n tokens.length > 0 &&\n defaultIn &&\n tokens.findIndex(t => t.id === defaultIn) === -1\n ) {\n handleSetTokenIn({\n ...NEAR_META_DATA,\n id: WRAP_NEAR_CONTRACT_ID,\n });\n }\n if (\n tokens.length > 0 &&\n defaultOut &&\n tokens.findIndex(t => t.id === defaultOut) !== -1\n ) {\n if (defaultOut === WRAP_NEAR_CONTRACT_ID || defaultOut === 'NEAR') {\n handleSetTokenOut({\n ...NEAR_META_DATA,\n id: WRAP_NEAR_CONTRACT_ID,\n });\n } else {\n ftGetTokenMetadata(defaultOut).then(handleSetTokenOut);\n }\n } else if (\n tokens.length > 0 &&\n defaultOut &&\n tokens.findIndex(t => t.id === defaultOut) === -1\n ) {\n handleSetTokenOut(REF_META_DATA);\n }\n }, [tokens, tokenLoading]);\n\n useEffect(() => {\n if (!tokenIn) return;\n\n const wrapedId = tokenIn.id === WRAP_NEAR_CONTRACT_ID ? 'NEAR' : tokenIn.id;\n\n if (balances[wrapedId]) {\n setTokenInBalance(balances[wrapedId]);\n return;\n }\n\n ftGetBalance(wrapedId, AccountId).then(available => {\n setTokenInBalance(toReadableNumber(tokenIn.decimals, available));\n });\n }, [tokenIn, AccountId, balances]);\n\n useEffect(() => {\n if (!tokenOut) return;\n\n const wrapedId =\n tokenOut.id === WRAP_NEAR_CONTRACT_ID ? 'NEAR' : tokenOut.id;\n\n if (balances[wrapedId]) {\n setTokenOutBalance(balances[wrapedId]);\n return;\n }\n ftGetBalance(wrapedId, AccountId).then(available => {\n setTokenOutBalance(toReadableNumber(tokenOut.decimals, available));\n });\n }, [tokenOut, AccountId, balances]);\n\n const {\n amountOut,\n minAmountOut,\n rate,\n fee,\n estimates,\n canSwap,\n swapError,\n makeSwap,\n setAmountOut,\n } = useSwap({\n tokenIn: tokenIn,\n tokenOut: tokenOut,\n amountIn,\n simplePools: allPools.simplePools.filter(p => Number(p.shareSupply) > 0),\n options: {\n enableSmartRouting,\n stablePools: allPools.ratedPools\n .concat(allPools.unRatedPools)\n .filter(p => Number(p.shareSupply) > 0),\n stablePoolsDetail: allStablePools.filter(\n p => Number(p.shares_total_supply) > 0\n ),\n },\n slippageTolerance,\n onSwap,\n AccountId,\n refreshTrigger,\n poolFetchingState,\n referralId,\n });\n\n const priceImpact = useMemo(() => {\n if (!tokenIn || !tokenOut) return '0';\n\n return getPriceImpact({\n estimates,\n tokenIn,\n tokenOut,\n amountIn,\n amountOut,\n stablePools: allStablePools,\n });\n }, [estimates, tokenIn, tokenOut, amountIn, amountOut, allStablePools]);\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n setNotOpen(true);\n makeSwap();\n };\n\n const canSubmit =\n tokenIn &&\n tokenOut &&\n canSwap &&\n !swapError &&\n isSignedIn &&\n new Big(tokenInBalance || '0').gte(amountIn || '0') &&\n slippageTolerance > 0 &&\n slippageTolerance < 100 &&\n !ONLY_ZEROS.test(tokenInBalance);\n\n return (\n <ThemeContextProvider customTheme={curTheme}>\n <TokenPriceContextProvider>\n {widgetRoute === 'swap' && (\n <form\n className={`__ref-swap-widget-container ${className}`}\n onSubmit={handleSubmit}\n style={{\n background: container,\n fontFamily,\n width,\n height,\n }}\n >\n <div className=\"__ref-swap-widget-header __ref-swap-widget-row-flex-center\">\n <div\n style={{\n color: primary,\n }}\n className=\"__ref-swap-widget-header-title\"\n >\n Swap\n </div>\n\n <div\n className=\"__ref-swap-widget-header-button __ref-swap-widget-row-flex-center\"\n style={{\n position: 'relative',\n }}\n >\n <AccountButton\n onDisConnect={onDisConnect}\n AccountId={AccountId}\n />\n\n <Slider showSlip={showSlip} setShowSlip={setShowSlip} />\n\n <SlippageSelector\n slippageTolerance={slippageTolerance}\n onChangeSlippageTolerance={setSlippageTolerance}\n showSlip={showSlip}\n setShowSlip={setShowSlip}\n />\n </div>\n </div>\n\n <TokenAmount\n amount={amountIn}\n balance={tokenInBalance}\n token={tokenIn}\n price={!tokenIn ? null : tokenPriceList?.[tokenIn.id]?.price}\n onChangeAmount={setAmountIn}\n onSelectToken={() => {\n setWidgetRoute('token-selector-in');\n }}\n />\n\n <div\n className={`__ref-swap-widget-exchange-button __ref-swap-widget-row-flex-center `}\n style={{\n color: iconDefault,\n }}\n >\n <CgArrowsExchangeAltV\n style={{\n cursor: 'pointer',\n }}\n className={`__ref-swap-widget-exchange-button-icon ${\n isMobile()\n ? '__ref-swap-widget-active'\n : '__ref-swap-widget-hover'\n }`}\n size={30}\n onClick={() => {\n tokenOut && handleSetTokenIn(tokenOut);\n tokenIn && handleSetTokenOut(tokenIn);\n setAmountIn('1');\n setAmountOut('');\n }}\n />\n </div>\n\n <TokenAmount\n amount={toPrecision(amountOut, 8)}\n balance={tokenOutBalance}\n token={tokenOut}\n price={!tokenOut ? null : tokenPriceList?.[tokenOut.id]?.price}\n onSelectToken={() => {\n setWidgetRoute('token-selector-out');\n }}\n onForceUpdate={() => {\n setRreshTrigger(!refreshTrigger);\n }}\n poolFetchingState={poolFetchingState}\n />\n {!swapError && amountIn && amountOut && (\n <DetailView\n fee={fee}\n rate={rate}\n amountIn={amountIn}\n minReceived={minAmountOut}\n tokenIn={tokenIn}\n tokenOut={tokenOut}\n amountOut={amountOut}\n priceImpact={priceImpact}\n estimates={estimates}\n />\n )}\n\n {swapError && (\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n color: '#DE9450',\n fontSize: '14px',\n\n paddingTop: '16px',\n }}\n >\n <TiWarning fill=\"#DE9450\" size={20} />\n &nbsp;\n {swapError.message}\n </div>\n )}\n {isSignedIn ? (\n <button\n type=\"submit\"\n className=\"__ref-swap-widget-submit-button __ref-swap-widget-button\"\n style={{\n color: 'white',\n background: buttonBg,\n opacity: !canSubmit ? 0.5 : 1,\n cursor: !canSubmit ? 'not-allowed' : 'pointer',\n }}\n disabled={!canSubmit}\n >\n {'Swap'}\n </button>\n ) : (\n <button\n type=\"button\"\n className=\"__ref-swap-widget-submit-button __ref-swap-widget-button\"\n onClick={onConnect}\n style={{\n color: 'white',\n background: buttonBg,\n cursor: 'pointer',\n }}\n >\n {'Connect Wallet'}\n </button>\n )}\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n justifyContent: 'center',\n }}\n >\n <a\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n color: secondary,\n justifyContent: 'center',\n paddingTop: '12px',\n fontSize: '14px',\n display: 'inline-flex',\n }}\n href=\"https://ref.finance\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <RefIcon\n style={{\n color: refIcon || 'black',\n }}\n />\n &nbsp; Powered by Ref.finance\n </a>\n </div>\n\n <Notification\n state={transactionState?.state}\n setState={transactionState?.setState}\n open={notOpen}\n setOpen={setNotOpen}\n tx={transactionState?.tx}\n detail={transactionState?.detail}\n />\n </form>\n )}\n\n {widgetRoute === 'token-selector-in' && (\n <TokenSelector\n balances={balances}\n tokens={tokens}\n width={width}\n onSelect={token => {\n handleSetTokenIn(token);\n setWidgetRoute('swap');\n }}\n onClose={() => setWidgetRoute('swap')}\n AccountId={AccountId}\n className={className}\n />\n )}\n\n {widgetRoute === 'token-selector-out' && (\n <TokenSelector\n tokens={tokens}\n balances={balances}\n width={width}\n onSelect={token => {\n handleSetTokenOut(token);\n setWidgetRoute('swap');\n }}\n onClose={() => setWidgetRoute('swap')}\n AccountId={AccountId}\n className={className}\n />\n )}\n </TokenPriceContextProvider>\n </ThemeContextProvider>\n );\n};\n","import { getConfig } from '../constant';\n\nexport const DefaultTestnetTokenList = [\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped NEAR fungible token',\n symbol: 'wNEAR',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'wrap.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Banana',\n symbol: 'BANANA',\n icon:\n 'https://assets.onlinelabels.com/images/clip-art/pitr/pitr_Bananas_icon.png',\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'banana.ft-fin.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NEAR Wrapped USDC',\n symbol: 'nUSDC',\n icon: 'https://s2.coinmarketcap.com/static/img/coins/64x64/3408.png',\n reference: null,\n reference_hash: null,\n decimals: 2,\n id: 'nusdc.ft-fin.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NEAR Wrapped Tether',\n symbol: 'nUSDT',\n icon: 'https://s2.coinmarketcap.com/static/img/coins/64x64/825.png',\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'nusdt.ft-fin.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Ref Finance Token',\n symbol: 'RFT',\n icon: '',\n reference: null,\n reference_hash: null,\n decimals: 8,\n id: 'rft.tokenfactory.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USD Coin',\n symbol: 'USDC',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle cx='16' cy='16' r='16' fill='%232775C9'/%3E%3Cpath d='M15.75 27.5C9.26 27.5 4 22.24 4 15.75S9.26 4 15.75 4 27.5 9.26 27.5 15.75A11.75 11.75 0 0115.75 27.5zm-.7-16.11a2.58 2.58 0 00-2.45 2.47c0 1.21.74 2 2.31 2.33l1.1.26c1.07.25 1.51.61 1.51 1.22s-.77 1.21-1.77 1.21a1.9 1.9 0 01-1.8-.91.68.68 0 00-.61-.39h-.59a.35.35 0 00-.28.41 2.73 2.73 0 002.61 2.08v.84a.705.705 0 001.41 0v-.85a2.62 2.62 0 002.59-2.58c0-1.27-.73-2-2.46-2.37l-1-.22c-1-.25-1.47-.58-1.47-1.14 0-.56.6-1.18 1.6-1.18a1.64 1.64 0 011.59.81.8.8 0 00.72.46h.47a.42.42 0 00.31-.5 2.65 2.65 0 00-2.38-2v-.69a.705.705 0 00-1.41 0v.74zm-8.11 4.36a8.79 8.79 0 006 8.33h.14a.45.45 0 00.45-.45v-.21a.94.94 0 00-.58-.87 7.36 7.36 0 010-13.65.93.93 0 00.58-.86v-.23a.42.42 0 00-.56-.4 8.79 8.79 0 00-6.03 8.34zm17.62 0a8.79 8.79 0 00-6-8.32h-.15a.47.47 0 00-.47.47v.15a1 1 0 00.61.9 7.36 7.36 0 010 13.64 1 1 0 00-.6.89v.17a.47.47 0 00.62.44 8.79 8.79 0 005.99-8.34z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'usdc.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tether USD',\n symbol: 'USDT.e',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle cx='16' cy='16' r='16' fill='%2326A17B'/%3E%3Cpath fill='%23FFF' d='M17.922 17.383v-.002c-.11.008-.677.042-1.942.042-1.01 0-1.721-.03-1.971-.042v.003c-3.888-.171-6.79-.848-6.79-1.658 0-.809 2.902-1.486 6.79-1.66v2.644c.254.018.982.061 1.988.061 1.207 0 1.812-.05 1.925-.06v-2.643c3.88.173 6.775.85 6.775 1.658 0 .81-2.895 1.485-6.775 1.657m0-3.59v-2.366h5.414V7.819H8.595v3.608h5.414v2.365c-4.4.202-7.709 1.074-7.709 2.118 0 1.044 3.309 1.915 7.709 2.118v7.582h3.913v-7.584c4.393-.202 7.694-1.073 7.694-2.116 0-1.043-3.301-1.914-7.694-2.117'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'usdt.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Dai Stablecoin',\n symbol: 'DAI',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle fill='%23F4B731' fill-rule='nonzero' cx='16' cy='16' r='16'/%3E%3Cpath d='M9.277 8h6.552c3.985 0 7.006 2.116 8.13 5.194H26v1.861h-1.611c.031.294.047.594.047.898v.046c0 .342-.02.68-.06 1.01H26v1.86h-2.08C22.767 21.905 19.77 24 15.83 24H9.277v-5.131H7v-1.86h2.277v-1.954H7v-1.86h2.277V8zm1.831 10.869v3.462h4.72c2.914 0 5.078-1.387 6.085-3.462H11.108zm11.366-1.86H11.108v-1.954h11.37c.041.307.063.622.063.944v.045c0 .329-.023.65-.067.964zM15.83 9.665c2.926 0 5.097 1.424 6.098 3.528h-10.82V9.666h4.72z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'dai.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='256' height='256'%3E%3Cdefs%3E%3Ctext id='A' x='50' y='180' font-size='180'%3E🍌%3C/text%3E%3C/defs%3E%3Cuse xlink:href='%23A'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'weth.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'HAPI',\n symbol: 'HAPI',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_2' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' width='600px' height='600px' viewBox='0 0 600 600' enable-background='new 0 0 600 600' xml:space='preserve'%3E %3Cg%3E %3Cg%3E %3Cpath fill='%23141414' d='M263.7,122.8c-3.6,0.3-7.1,0.9-10.7,1.8c-24.5,6-40.3,18.1-50.4,31c24.5-4.7,49.9,1.3,67.3,7.4 c0.5,0.2,1,0.4,1.6,0.6c-2.7-4.2-5.2-9-7.2-14.4C261.2,141.1,261.6,131.6,263.7,122.8z'/%3E %3Cpath fill='%23141414' d='M201.2,197.7c-9.8-1.1-19.1-2.1-24.6-2.1c-0.7,0-1.4,0-2,0.1c-38.1,2.6-67.2,37.3-69.1,82.4 c-1.4,32.2,13.5,53.1,23.3,63.4c-1.5-12.5-0.1-25,4.3-37.3c11.7-32.6,34.3-42.1,60.6-53.1c10.8-4.5,22.5-9.5,34.3-16.6l50.1-39.6 c-10.1,2.2-24.4,4.5-42.9,5.3C227.1,200.6,213.9,199.1,201.2,197.7z'/%3E %3Cpath fill='%23141414' d='M319.1,176.5c-0.5,1.1,0.9,2.1,1.8,1.2c5.3-5.4,16.3-14.3,30.8-14.2c15.6,0.1,35.5,10.2,40.5,22.1 c4,9.8-6.6,16.5-6.6,16.5l0,0c-2.5-2.7-8-6.3-18.2-6.6c-15-0.5-25.3,12.1-24.1,12.9c7.5,4.7,17.3,3.7,23.1,3.5 c5.8-0.2,15.1-2.5,17.8-3.5c4.7-1.8,11.7-7.8,14.9-16.1c2.5-6.5,8.4-28.7-25.2-34.4C352.7,154.3,327,159.6,319.1,176.5z'/%3E %3Cpath fill='%23141414' d='M473.1,225.1c-0.5-0.6-1.1-1.3-1.7-2l-0.3-0.3c-3.9-4.4-7.6-8.3-9.4-10.1c1.2-4.2,4-16.2,1-26.1 c-2.3-7.7-6.8-15.5-9.2-19.4l-0.8-1.2h0c-0.4-0.6-0.8-1.2-1.1-1.7c-0.3-0.4-0.5-0.7-0.6-1l-0.2-0.7c-2.5-7-8.6-22.3-16.4-28.1 l59.4-91.7c2.3-3.5-2.1-7.5-5.4-5l-86.8,66.5c-8.7-12.3-21.1-21.8-21.8-22.4c-0.8-0.6-2-0.7-2.9-0.2c-0.9,0.5-1.4,1.6-1.3,2.6 c0,0.1,0.6,5.9-2.9,17.6c7.5,2.7,13.9,6,19.3,9.7l-4.5,3.5c-8.8-5.7-20-10.5-34.3-12.6c-17.7-2.6-31.9,1-42.1,10.7c0,0,0,0,0,0 c5.9,3.8,13.1,8.7,17,12.4c0.8,0.7,1.5,1.5,2.2,2.3c-3.1,0.9-6.2,1.9-9.3,2.9c-0.3-0.2-0.5-0.5-0.8-0.7c-1.9-1.7-4.4-3.4-7-5.3 c-5.4-3.8-11.7-8.3-15.8-14c-2.2-3.1-3.8-6.5-4.3-10.4c-0.3-2.4-1-4-2.2-4.9c0,0,0,0,0,0c0,0,0,0,0,0c-0.6-0.5-2.8-2-5.8,0.3 c-2,1.6-4.4,5.3-6.5,10.3c-5.2,12.3-8.7,32.1-1.8,46.1c1.2,2.3,2.4,4.5,3.7,6.6c-0.4,1-0.7,2.1-0.9,3.1c-0.6,3.4-0.9,7.8-1.2,12.7 c-19.8-8.3-50.5-17.5-78.5-10.7c-23.9,5.8-39.4,17.5-49.6,30c7.4-3.1,15.2-5,23.5-5.6c5.6-0.4,16.4,0.8,27.9,2.1 c11.8,1.3,25.3,2.8,32.9,2.4c19.2-0.8,33.7-3.3,43.5-5.6c0,5.4,0.1,11.1,0.4,16.9c0.7,16.8,2.5,34.3,5,46.5 c3.6,17.9,16.5,55.2,31.4,64.6c5.5,3.5,13.5,8.2,22.9,13.4c-2.5,6.4-5.1,15.1-5.1,23.5c0,15.2,5.2,26.6,11,37 c4.6,8.2,9.6,15.7,12.8,24c2.5,6.5-2.7,27.7-5.6,38.9c-1.2,4.5-1.9,7.3-1.7,7c3.7-5.1,7.5-10.8,11.3-16.8 c15.3-24.2,19.4-47,19.5-48l0.2-1.4l-1.1-1c-0.2-0.2-17.2-15.7-18.3-33.3c-0.4-6.9,1-11.5,4.3-13.8c0.5-0.3,1-0.6,1.6-0.9 c7.5,3.7,15,7.3,22.2,10.5c2.8,3.5,9,9.4,11.8,12c3.4,3.2,6.9,7.8,12.2,7.8c5.3,0,15.9,0,21.3,0s13.1,0,17.3-2.1 c4.2-2.1,10.9-5.6,11-12.6c0-1.5,0.4-3.9,0.9-6.8c3.7-4.9,4.1-10.6,4.8-19.2c0.5-5.7,1.7-15.5,3-25.9c2-15.7,4.1-32,3.9-37.9 c-0.2-8.2-1.1-14.3-1.4-16.2C475.3,249.4,479.5,232.4,473.1,225.1z M318,310.6c-13.3-8.4-25.6-44.6-29-61.2 c-4.8-23.9-6.9-68.5-3.9-86.8c2.7-16.7,49-34.5,81.7-35.6c1.9-0.1,3.8-0.1,5.6-0.1c1,0,2,0,3,0c-0.1,4.9,1.3,15.6,13.8,25.5 c13.9,11,30.4,5,30.4,5l12.1-18.7c4.5,3.5,9.4,12.7,13,22.1c-0.9-0.4-1.9-0.7-3.1-0.9c-8.1-1.3-31.6-0.9-24,31.3 c1,4,5.2,9.4,17.2,22.3c2.8,3,5.1,5.3,7,7.2c5.6,5.6,7.4,7.4,7.5,11.8c0,0.3-0.2,1.6-0.4,3c-0.8-0.6-1.9-1.1-3.4-1 c-3.6-0.2-33.7,5.6-42.4,15.1c-1.7,1.9-4.5,2.6-6.7,1.4c-0.1-0.1-0.2-0.1-0.3-0.2c-1.4-0.8-2.3-1.9-2.8-3.5 c-1.3-5.1,2.9-13.2,4.6-16c0.6-1,0.3-2.3-0.6-2.9c-1-0.6-2.3-0.3-2.9,0.6c-0.1,0.2-0.9,1.5-1.9,3.5c-3.3,6.6-8.2,12.2-14.3,16.3 c-9.8,6.6-24,15.2-35.5,18.2c-18,4.7-24.9-8.2-25.2-8.8c-0.5-1-1.8-1.4-2.8-0.9c-1,0.5-1.5,1.8-0.9,2.8 c0.1,0.1,6.3,12.1,21.5,12.1c0.6,0,1.4-0.1,2.2-0.2c4.3-0.5,8.6,0.5,12.3,2.7c3.5,2.1,8,4.7,12.5,7c12.6,6.3,14.7,6.2,19.5,5.4 c1.1-0.2,49.8-2.4,80.1-8.2l3.6,0.2c2.4,0.1,4.3,2.3,4,4.7l0,0.1c-0.2,1.4-1,2.6-2.2,3.3c-2.7,1.5-6.5,3.5-9.9,4.9 c-1.6,0.6-3.3,1.2-5.1,1.6c-5.5,1.3-11.1,1.6-11.1,1.6s-5.4,1.2-13.5,2.1c-3.4,0.4-7.2,0.7-11.3,0.9c-14,0.7-13,1.6-24.8,1 c-2.9-0.1-5.7-0.3-8.3-0.6c-2.5-0.3-3.2,3.4-0.7,4c6.1,1.5,13.3,2.6,21.3,2.5c1,0,1.9,0,2.9,0c12.8-0.1,24.4,7.5,29.4,19.3 c2.1,5,4.1,12,5.4,18.5c1.8,8.4-5.3,16.1-13.8,15.3c-12.5-1.3-26.6-4.8-34.6-8.3C365.3,338.1,332.4,319.8,318,310.6z M448.7,169.2 l1.2,1.9c2.4,4,5.9,10.5,7.9,16.9c3.1,10.4-1.4,24.4-1.4,24.5l-0.5,1.5l1.1,1.1c0,0.1,5,5.2,10.3,11.1l0.1,0.2 c0.6,0.7,1.2,1.3,1.8,2c3.7,4.3,1.9,17-0.1,23.9l-0.2,0.6l0.1,0.6c0,0,0.3,1.5,0.6,3.9c-2.7,0.3-4.7,2.7-4.4,5.5l0.8,7.5l-8.6,0.1 l-13.5-15.3c-1-1.2-1-3,0.2-4c0,0,0,0,0,0c7.1-6.4,8.1-9.5,8.3-10.7c0.9-5.4,1.2-7.4,1.2-8.1c0-6.1-2.9-9-8.7-14.8 c-1.9-1.9-4.2-4.2-6.9-7.1c-0.6-0.6-1.1-1.2-1.7-1.8c2.1,0.6,4.9,1.2,8.5,1.5c8.4,0.7,10.9-1.4,10.9-1.4s1.5-2.7-1.1-6.6 c-2.6-3.9-6.2-6.7-13.2-6.9c-5-0.2-9.5,3.7-11.7,6c-0.9-1-2.9-4.7-3.8-10.9c-1.5-9.7,2.1-14.2,4.7-16.4c4.6-3.9,10.9-7.7,14.4-7.5 c0.9,0.1,1.9,0.2,2.7,0.4C447.8,167.7,448.2,168.4,448.7,169.2z M463.4,332.9c-0.7,8.2-1.1,12.8-3.8,16.5c-2.3,3.1-7.3,0.8-6.6-3 c0.4-2.1,0.7-4.3,0.8-6.4c0.3-10.7-4.9-20.9-6.7-27.7c0,0,0-0.1,0-0.1c-0.9-3.8,1.2-7.7,4.8-9.3c1.6-0.7,3.4-1.6,5.3-2.6 c4.6-2.3,9.9,1.3,9.2,6.4l0,0.1C465.2,317.2,463.9,327.1,463.4,332.9z M385.1,249.4c1.8-1.3,4.4-0.8,5.6,1.2 c0.8,1.4,1.9,2.9,3.4,4.1c4.5,3.7,9.8,3.5,13.2,3.5c3.3,0,5.4-0.6,6-0.8c0,0,0,0,0,0c2.4-0.5,4.3,2,3.1,4.2 c-2.6,4.8-6.1,11.1-6.5,11.4c-0.7,0.5-22.8,5.1-25.6,5.4s-11.6,1.2-18.2-3c-2.8-1.7-5.5-3.7-7.7-5.3c-1.7-1.2-1.4-3.8,0.4-4.7 C368.8,260.4,378.7,253.9,385.1,249.4z M436.8,263.8l8.3,9.1c1.5,1.7,0.5,4.4-1.7,4.7c-5,0.6-10,1.2-14.9,1.7 c-2.3,0.2-3.9-2.3-2.7-4.3c1.9-3,4.3-7,6.5-10.8C433.2,262.6,435.5,262.4,436.8,263.8z M396.4,117.1l83.5-69.1l-76.9,76.9 c-2.5,2.4-6.6,1.6-8.1-1.5h0C393.9,121.2,394.5,118.5,396.4,117.1z'/%3E %3Cpath fill='%23141414' d='M196.6,258.1c-25.6,10.7-45.8,19.2-56.4,48.7c-15.1,42,9.4,88.5,62.5,120.1c-17.4-68,3.5-93.1,22.1-115.3 c6.4-7.7,12.5-15,16.9-23.7c12.9-25.8,12.3-50.5,11.1-62C233.7,242.5,214.1,250.8,196.6,258.1z'/%3E %3C/g%3E %3Cg%3E %3Cpath d='M201.6,477.1h-9.1l-2.8,17.1h-14.3l2.8-17.1h-9.1l-2.8,17.1h-9.3l-1.5,9.1h9.3l-2.3,14h-9.4l-1.5,9.1h9.4l-2.8,17.1h9.1 l2.8-17.1h14.3l-2.8,17.1h9.1l2.8-17.1h9.3l1.5-9.1h-9.3l2.3-14h9.4l1.5-9.1h-9.4L201.6,477.1z M186,517.4h-14.3l2.3-14h14.3 L186,517.4z'/%3E %3Cpolygon points='260.8,505.3 230,505.3 230,477.1 218,477.1 218,543.6 230,543.6 230,515.4 260.8,515.4 260.8,543.6 272.9,543.6 272.9,477.1 260.8,477.1 '/%3E %3Cpath d='M307.1,477.1l-23.4,66.4h12.8l5.5-16.4h25l5.5,16.4h12.8l-23.4-66.4H307.1z M305.3,517.5l9-26.8h0.5l9,26.8H305.3z'/%3E %3Cpath d='M394,480c-3.5-1.9-7.8-2.9-12.9-2.9h-24.9v66.4h12v-22.4H381c5.1,0,9.4-0.9,12.9-2.8s6.2-4.5,7.9-7.8 c1.8-3.3,2.7-7.1,2.7-11.3c0-4.2-0.9-8-2.7-11.3C400.1,484.5,397.4,481.9,394,480z M390.9,505.4c-0.9,1.8-2.3,3.2-4.2,4.3 c-1.9,1-4.3,1.6-7.3,1.6h-11.1v-24h11c3,0,5.5,0.5,7.4,1.5c1.9,1,3.3,2.4,4.2,4.2c0.9,1.8,1.4,3.9,1.4,6.2 S391.8,503.6,390.9,505.4z'/%3E %3Crect x='417.1' y='477.1' width='12' height='66.4'/%3E %3C/g%3E %3C/g%3E %3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'hapi.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'PARAS',\n symbol: 'PARAS',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'paras.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Ref Finance Token',\n symbol: 'REF',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'ref.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Pulse',\n symbol: 'PULSE',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgdmlld0JveD0iMCAwIDIwMCAyMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxjaXJjbGUgY3g9IjEwMCIgY3k9IjEwMCIgcj0iMTAwIiBmaWxsPSIjMEYyQUMzIi8+CjxwYXRoIGQ9Ik0xMDMuNTc0IDg0LjU3M0MxMDIuMDUyIDg2LjU4MDggMTAwLjg1MyA4OS4xNDAyIDk5LjY5NzIgOTEuNjU1OUM5OC41NDA5IDk0LjE3MTYgOTcuMzkyIDk2LjY1OTYgOTYuMjE0OSA5OC40MjU1Qzk1LjAzNzggMTAwLjE5MSA5My45Mjg0IDEwMS4wNTggOTIuNzMyNiAxMDEuMDU4QzkxLjI3MDMgMTAxLjA1OCA5MC40NDI1IDEwMC42NDMgODkuNzEwMiA5OS44NjcyQzg4Ljk3NzYgOTkuMDkxNiA4OC40MDY1IDk3LjkwNSA4Ny44NzAzIDk2LjY3MDRDODcuMzMzOSA5NS40MzU4IDg2Ljg0NzcgOTQuMTM1MSA4Ni4wMzA1IDkzLjAzNDlDODUuMjEzMyA5MS45MzQ3IDgzLjkxMDQgOTEuMDI5MSA4Mi4yMTk4IDkxLjAyOTFDODEuMjYzMyA5MS4wMjkxIDgwLjQyMzcgOTEuNDQ1MSA3OS43ODg2IDkyLjAzMkM3OS4xNTM0IDkyLjYxODkgNzguNjkwMSA5My4zOTAxIDc4LjI3NzQgOTQuMjI1OUM3Ny40NTIxIDk1Ljg5NjggNzYuODM1NCA5Ny45NjgyIDc2LjA0MzUgOTkuOTkyN0M3NS4yNTE2IDEwMi4wMTcgNzQuMjc3MSAxMDMuOTk1IDcyLjk1NTUgMTA1LjM4M0M3MS42MzM2IDEwNi43NzIgNjkuOTk5MiAxMDcuNjQgNjcuNTAxOCAxMDcuNjRIMzguMDY2MkMzNy42ODcxIDEwNy42MzUgMzcuMzM0NSAxMDcuODI1IDM3LjE0MzMgMTA4LjEzN0MzNi45NTIyIDEwOC40NDkgMzYuOTUyMiAxMDguODM2IDM3LjE0MzMgMTA5LjE0OEMzNy4zMzQ1IDEwOS40NjEgMzcuNjg3MSAxMDkuNjUxIDM4LjA2NjIgMTA5LjY0Nkg2Ny41MDE4QzcwLjU0NzkgMTA5LjY0NiA3Mi44OTg1IDEwOC40MTYgNzQuNTMyMyAxMDYuN0M3Ni4xNjYyIDEwNC45ODQgNzcuMTg3NSAxMDIuNzk3IDc4LjAxNDYgMTAwLjY4MkM3OC44NDE3IDk4LjU2NzUgNzkuNDc1IDk2LjQ3NDEgODAuMTgyOCA5NS4wNDA3QzgwLjUzNyA5NC4zMjQgODAuODg5MyA5My43OTE5IDgxLjIzNDEgOTMuNDczOEM4MS41Nzg5IDkzLjE1NTIgODEuODI2NiA5My4wMzQ5IDgyLjIxOTggOTMuMDM0OUM4My4yMjc5IDkzLjAzNDkgODMuNzQyNyA5My40NDUzIDg0LjMyMjIgOTQuMjI1OUM4NC45MDE4IDk1LjAwNiA4NS40MTIgOTYuMjEyNyA4NS45NjQ5IDk3LjQ4NTRDODYuNTE3NyA5OC43NTc3IDg3LjA4OTYgMTAwLjA3OCA4OC4xMzMxIDEwMS4xODRDODkuMTc2NiAxMDIuMjg5IDkwLjczNzUgMTAzLjA2NCA5Mi43MzI2IDEwMy4wNjRDOTQuOTkzOCAxMDMuMDY0IDk2LjY1OTEgMTAxLjQ4NiA5Ny45ODg4IDk5LjQ5MTJDOTkuMzE4NSA5Ny40OTYyIDEwMC40NTQgOTQuOTY5NSAxMDEuNjAzIDkyLjQ3MDlDMTAyLjc1MSA4OS45NzE4IDEwMy45NTMgODcuNTE2OSAxMDUuMjgyIDg1Ljc2MzhDMTA2LjYxMSA4NC4wMTA3IDEwNy45MjUgODMuMDA1OCAxMDkuNTUzIDgzLjAwNThDMTEwLjI5NSA4My4wMDU4IDExMC45NDYgODMuMjcyOCAxMTEuNjU2IDgzLjg4MzRDMTEyLjM2NSA4NC40OTM5IDExMy4wNjggODUuNDUxNyAxMTMuNzU4IDg2LjY0MTRDMTE1LjEzOCA4OS4wMjA3IDExNi40NDcgOTIuMzI4OCAxMTcuODMyIDk1LjY2NzVDMTE5LjIxNiA5OS4wMDYyIDEyMC43MTcgMTAyLjM3NiAxMjIuNjk0IDEwNS4wMDdDMTI0LjY3MSAxMDcuNjM4IDEyNy4yMzQgMTA5LjU4MyAxMzAuNTc4IDEwOS41ODNIMTYwLjkzNEMxNjEuMzEzIDEwOS41ODggMTYxLjY2NiAxMDkuMzk4IDE2MS44NTcgMTA5LjA4NkMxNjIuMDQ4IDEwOC43NzMgMTYyLjA0OCAxMDguMzg3IDE2MS44NTcgMTA4LjA3NEMxNjEuNjY2IDEwNy43NjIgMTYxLjMxMyAxMDcuNTcyIDE2MC45MzQgMTA3LjU3N0gxMzAuNTc4QzEyOC4wNjcgMTA3LjU3NyAxMjYuMTcgMTA2LjIzMiAxMjQuNDAyIDEwMy44NzlDMTIyLjYzNCAxMDEuNTI2IDEyMS4xMDggOTguMjgzNyAxMTkuNzM3IDk0Ljk3ODFDMTE4LjM2NiA5MS42NzIxIDExNy4xMDggODguMzA1MiAxMTUuNTk4IDg1LjcwMTJDMTE0Ljg0MyA4NC4zOTkxIDExNC4wOCA4My4yODQ2IDExMy4xMDEgODIuNDQxOEMxMTIuMTIyIDgxLjU5ODcgMTEwLjg4MyA4MSAxMDkuNTUzIDgxQzEwNy4wMzYgODEgMTA1LjA5NiA4Mi41NjUzIDEwMy41NzQgODQuNTczWiIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSI1Ii8+Cjwvc3ZnPgo=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'pulse.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Ether',\n symbol: 'ETH',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'eth.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Aurora',\n symbol: 'AURORA',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 288 288' style='enable-background:new 0 0 288 288;' xml:space='preserve'%3E %3Cstyle type='text/css'%3E .st0%7Bfill:%2370D44B;%7D .st1%7Bfill:%23FFFFFF;%7D %3C/style%3E %3Cpath class='st0' d='M144,0L144,0c79.5,0,144,64.5,144,144v0c0,79.5-64.5,144-144,144h0C64.5,288,0,223.5,0,144v0 C0,64.5,64.5,0,144,0z'/%3E %3Cpath class='st1' d='M144,58.8c7.6,0,14.5,4.3,17.9,11.1l56.2,112.5c4.9,9.9,0.9,21.9-9,26.8c-2.8,1.4-5.8,2.1-8.9,2.1H87.8 c-11,0-20-9-20-20c0-3.1,0.7-6.2,2.1-8.9l56.2-112.5C129.5,63,136.4,58.7,144,58.8 M144,45c-12.8,0-24.5,7.2-30.2,18.7L57.6,176.2 c-8.3,16.7-1.6,36.9,15.1,45.3c4.7,2.3,9.9,3.6,15.1,3.6h112.5c18.6,0,33.8-15.1,33.8-33.7c0-5.2-1.2-10.4-3.6-15.1L174.2,63.7 C168.5,52.2,156.8,45,144,45z'/%3E %3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'aurora.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Skyward Finance Token',\n symbol: 'SKYWARD',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'skyward.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked NEAR',\n symbol: 'STNEAR',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 67.79 67.79' version='1.1'%3E%3Cpath style='fill:%23fff' d='M33.934.311a33.9 33.9 0 1 0 33.89 33.9 33.9 33.9 0 0 0-33.89-33.9z' id='path505'%3E%3C/path%3E%3Cpath style='fill:%23ffbd00;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1' d='m11.803 27.8 12.387.359 2.361 5.959 7.616 3.31 8.523-3.322 2.348-5.87 12.269.03L54.822 54.2 31.837 58.86 12.89 52.648z' id='path1051'%3E%3C/path%3E%3Cpath style='fill:%23a0a0ff;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1' d='m34.657 12.575-10.43 9.633 1.096 10.01 8.844 5.21 9.785-5.287 1.086-11.33z' id='path1815'%3E%3C/path%3E%3Cpath id='path928' style='fill:%23666;fill-opacity:1' d='M33.928 4.282a29.93 29.93 0 0 1 4.682.367 29.93 29.93 0 0 1 25.244 29.572 29.93 29.93 0 0 1-29.92 29.92 29.93 29.93 0 0 1-.006-59.86zm.729 8.293c-2.03 5.668-8.815 9.76-8.815 14.521 0 4.76 3.912 8.62 8.737 8.62 4.824 0 8.736-3.86 8.736-8.62s-6.707-8.697-8.658-14.521zM37.84 22.67a2.524 2.446 0 0 1 .246.012 2.524 2.446 0 0 1 .246.035 2.524 2.446 0 0 1 .24.059 2.524 2.446 0 0 1 .233.08 2.524 2.446 0 0 1 .225.104 2.524 2.446 0 0 1 .213.123 2.524 2.446 0 0 1 .197.142 2.524 2.446 0 0 1 .183.162 2.524 2.446 0 0 1 .168.178 2.524 2.446 0 0 1 .147.191 2.524 2.446 0 0 1 .127.207 2.524 2.446 0 0 1 .105.217 2.524 2.446 0 0 1 .084.227 2.524 2.446 0 0 1 .06.232 2.524 2.446 0 0 1 .038.237 2.524 2.446 0 0 1 .012.24 2.524 2.446 0 0 1-.086.633 2.524 2.446 0 0 1-.252.59 2.524 2.446 0 0 1-.403.507 2.524 2.446 0 0 1-.521.389 2.524 2.446 0 0 1-.61.244 2.524 2.446 0 0 1-.652.084 2.524 2.446 0 0 1-.654-.084 2.524 2.446 0 0 1-.607-.244 2.524 2.446 0 0 1-.524-.389 2.524 2.446 0 0 1-.4-.508 2.524 2.446 0 0 1-.252-.59 2.524 2.446 0 0 1-.086-.632 2.524 2.446 0 0 1 .086-.633 2.524 2.446 0 0 1 .252-.59 2.524 2.446 0 0 1 .4-.506A2.524 2.446 0 0 1 36.58 23a2.524 2.446 0 0 1 .607-.247 2.524 2.446 0 0 1 .654-.082zM24.19 28.16a16.579 2.485 0 0 0-6.502 1.965 16.579 2.485 0 0 0 7.635 2.093 10.483 10.6 0 0 1-1.133-4.058zm20.848.078a10.483 10.6 0 0 1-1.086 3.904 16.579 2.485 0 0 0 6.894-2.017 16.579 2.485 0 0 0-5.808-1.887zm6.925 3.21c-.455 1.177-4.097 2.154-9.273 2.659a10.483 10.6 0 0 1-8.072 3.861 10.483 10.6 0 0 1-8.067-3.85c-5.276-.506-8.978-1.498-9.398-2.64h-.049v5.17h.049a.69.69 0 0 0-.049.24c0 1.8 7.81 3.25 17.43 3.25 9.62 0 17.43-1.45 17.43-3.25a.69.69 0 0 0 0-.24zm.032 7.323c-.67 1.73-8.22 3.03-17.43 3.03-9.23 0-16.771-1.34-17.381-3h-.049v5.17h.049a.69.69 0 0 0-.049.24c0 1.8 7.81 3.25 17.43 3.25 9.62 0 17.43-1.45 17.43-3.25a.69.69 0 0 0 0-.24zm0 7.21c-.67 1.69-8.22 3.03-17.43 3.03-9.23 0-16.771-1.34-17.381-3h-.049v5.17h.049a.69.69 0 0 0-.049.24c0 1.8 7.81 3.25 17.43 3.25 9.62 0 17.43-1.45 17.43-3.25a.69.69 0 0 0 0-.24z'%3E%3C/path%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'stnear.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Octopus Network Token',\n symbol: 'OCT',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='O' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 113.39 113.39' style='enable-background:new 0 0 113.39 113.39;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23014299;%7D .st1%7Bfill:%23FFFFFF;%7D %3C/style%3E%3Ccircle class='st0' cx='56.69' cy='56.69' r='56.69'/%3E%3Cg%3E%3Cpath class='st1' d='M44.25,59.41c-1.43,0-2.59,1.16-2.59,2.59v20.28c0,1.43,1.16,2.59,2.59,2.59c1.43,0,2.59-1.16,2.59-2.59V62 C46.84,60.57,45.68,59.41,44.25,59.41z'/%3E%3Cpath class='st1' d='M56.69,59.41c-1.45,0-2.62,1.17-2.62,2.62v26.47c0,1.45,1.17,2.62,2.62,2.62s2.62-1.17,2.62-2.62V62.02 C59.31,60.58,58.14,59.41,56.69,59.41z'/%3E%3Cpath class='st1' d='M79.26,78.87c-0.33,0.15-0.64,0.28-0.95,0.38c0,0-0.01,0-0.01,0c-0.59,0.19-1.13,0.29-1.63,0.31h-0.06 c-1,0.03-1.84-0.27-2.59-0.75c-0.49-0.32-0.91-0.73-1.25-1.23c-0.3-0.43-0.53-0.93-0.71-1.51c0-0.01-0.01-0.02-0.01-0.03 c-0.22-0.74-0.34-1.61-0.34-2.59V62.02c0-1.45-1.17-2.62-2.62-2.62c-1.45,0-2.62,1.17-2.62,2.62v11.43c0,4.5,1.64,8.03,4.63,9.96 c1.5,0.97,3.21,1.45,5.04,1.45c1.68,0,3.45-0.41,5.25-1.22c1.32-0.59,1.9-2.14,1.31-3.46C82.13,78.86,80.57,78.27,79.26,78.87z'/%3E%3Cpath class='st1' d='M68.33,45.9c0-2.15-1.75-3.9-3.9-3.9c-2.15,0-3.9,1.75-3.9,3.9s1.75,3.9,3.9,3.9 C66.58,49.8,68.33,48.05,68.33,45.9z'/%3E%3Cpath class='st1' d='M48.96,41.99c-2.15,0-3.9,1.75-3.9,3.9s1.75,3.9,3.9,3.9s3.9-1.75,3.9-3.9S51.11,41.99,48.96,41.99z'/%3E%3Cpath class='st1' d='M56.69,22.28c-15.17,0-27.52,12.34-27.52,27.52v15.09c0,1.46,1.18,2.64,2.64,2.64s2.64-1.18,2.64-2.64V49.8 c0-12.26,9.98-22.24,22.24-22.24c12.26,0,22.24,9.98,22.24,22.24v15.09c0,1.46,1.18,2.64,2.64,2.64s2.64-1.18,2.64-2.64V49.8 C84.21,34.62,71.87,22.28,56.69,22.28z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'oct.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Debio',\n symbol: 'DBIO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIxOTAgOTcgNDIwIDQyMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgODAwIDgwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48c3R5bGU+LnN0MHtmaWxsOiMzNjM2MzZ9LnN0M3tmaWxsOiNmZjU2ZTB9PC9zdHlsZT48L2RlZnM+PGNpcmNsZSBjbGFzcz0ic3QzIiBjeD0iNDAwIiBjeT0iMzA3LjM5IiByPSIyMDguNTgiLz48cGF0aCBkPSJNNDczLjk5IDIxMS4zczIuMzQgNTYuMjUtNzcuMzQgOTguNDMtNzAuMzEgOTMuNzQtNzAuMzEgOTMuNzQiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNlNmU2ZTY7c3Ryb2tlLXdpZHRoOjM3LjQ5NzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTAiLz48cGF0aCBkPSJNMzI2LjAxIDIxMS4zcy0yLjM0IDU2LjI1IDc3LjM0IDk4LjQzIDcwLjMxIDkzLjc0IDcwLjMxIDkzLjc0IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDozNy40OTc1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwIi8+PGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iNDAwIiBjeT0iMjE2LjQyIiByPSIyMC40OSIvPjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjQwMCIgY3k9IjM5OC4zNiIgcj0iMjAuNDkiLz48dGV4dCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMzYuMzQyIDY1OC4wNzUpIiBjbGFzcz0ic3QzIiBzdHlsZT0id2hpdGUtc3BhY2U6cHJlO2ZvbnQtc2l6ZToxMTIuNDkyNXB4O2ZvbnQtZmFtaWx5OidBcnRlZ3JhU2Fucy1TZW1pQm9sZCciPkRlQmlvPC90ZXh0Pjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'dbio.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Game GEM!!',\n symbol: 'gGEM',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 4,\n id: 'gem.thegame.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Game Gold!!',\n symbol: 'gGOLD',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 2,\n id: 'gold.thegame.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Game Elixir!!',\n symbol: 'gELXR',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 2,\n id: 'elixir.thegame.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USN',\n symbol: 'USN',\n icon:\n \"data:image/svg+xml;charset=UTF-8,%3Csvg width='38' height='38' viewBox='0 0 38 38' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='38' height='38' rx='19' fill='black'/%3E%3Cpath d='M14.8388 10.6601C14.4203 10.1008 13.6748 9.86519 12.9933 10.0768C12.3119 10.2885 11.85 10.8991 11.85 11.5883V14.7648H8V17.9412H11.85V20.0589H8V23.2353H11.85V28H15.15V16.5108L23.1612 27.2165C23.5797 27.7758 24.3252 28.0114 25.0067 27.7997C25.6881 27.5881 26.15 26.9775 26.15 26.2882V23.2353H30V20.0589H26.15V17.9412H30V14.7648H26.15V10.0001H22.85V21.3658L14.8388 10.6601Z' fill='white'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'usdn.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Learn NEAR Club',\n symbol: 'LNC',\n icon:\n 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAQwAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAAHRyWFlaAAABZAAAABRnWFlaAAABeAAAABRiWFlaAAABjAAAABRyVFJDAAABoAAAAChnVFJDAAABoAAAAChiVFJDAAABoAAAACh3dHB0AAAByAAAABRjcHJ0AAAB3AAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAFgAAAAcAHMAUgBHAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z3BhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABYWVogAAAAAAAA9tYAAQAAAADTLW1sdWMAAAAAAAAAAQAAAAxlblVTAAAAIAAAABwARwBvAG8AZwBsAGUAIABJAG4AYwAuACAAMgAwADEANv/bAEMAAwICAgICAwICAgMDAwMEBgQEBAQECAYGBQYJCAoKCQgJCQoMDwwKCw4LCQkNEQ0ODxAQERAKDBITEhATDxAQEP/bAEMBAwMDBAMECAQECBALCQsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/AABEIACAAIAMBIgACEQEDEQH/xAAZAAADAAMAAAAAAAAAAAAAAAAABgcDBAj/xAAjEAACAgICAgMAAwAAAAAAAAABAgMEBQYAEQcSEyExFCJB/8QAGAEAAgMAAAAAAAAAAAAAAAAAAQMABwj/xAAlEQACAQMDBAIDAAAAAAAAAAABEQMAAgQxQWESIZHwUXGBwfH/2gAMAwEAAhEDEQA/AOqOHNHN5vF67jnyuZtCtVSSKJpCjN00kixoOlBP27qPz/fv64qZDzBq+L8h2/Gt2rk0yVXFJlROK3tVlVhMwhEoPSzeteZgr+vsqMVJ9W6zZHBLKCbLSV38J+GKva+aONC8p/v+U88ORWv5t3fyTFTbwTpWPvxpjMfl8lc2O49SvCLldbENGMwLJ72vidWf7CxB4ifcSDqmaPseS2rXIMtmdYva9kRJLWuY632TDPE5jf436HyxFlJjlAAdCrADvrjZ8OXHt6pEOGGPhjUP3alxZUc9ys78oo/R0rD5E1O3u+oXdboZaPGWrD15oLctU2EikhnjlUtGHQuCYwCPZf394jZDwNc2pdht75uMF3LZ2ji4I72LxQpGhZoT25YLMKySzdN1aVSpJBCOD2shVa7w5IcyaC3ojKDegex1T2HbTtRkxYpruq8MpannbTc1EcB4D3jx3UxaeLPK1fFSpgcfhsxBkcH/AC6V+epWirR5CKFZ42gn+OPpv7uHCQq31GDymeP9XymnarTwed27JbPk0LzXcrfIElmeRy8jKgJEUfsxCRKSqIFUdgd8YuHDPmzZIUpB5QB4ZAZ9+BQhxIoC4wR+SvDXvNf/2Q==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'lnc.factory.tokenhub.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped BTC',\n symbol: 'WBTC',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle fill='%23201A2D' cx='16' cy='16' r='16'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M22.818 9.586l-.6.6a8.494 8.494 0 010 11.464l.6.6a9.352 9.352 0 000-12.678v.014zM10.2 9.638a8.494 8.494 0 0111.464 0l.6-.6a9.352 9.352 0 00-12.678 0l.614.6zm-.562 12.018a8.494 8.494 0 010-11.458l-.6-.6a9.352 9.352 0 000 12.678l.6-.62zm12.018.554a8.494 8.494 0 01-11.464 0l-.6.6a9.352 9.352 0 0012.678 0l-.614-.6zm-1.942-8.286c-.12-1.252-1.2-1.672-2.566-1.8V10.4h-1.056v1.692h-.844V10.4H14.2v1.736h-2.142v1.13s.78-.014.768 0a.546.546 0 01.6.464v4.752a.37.37 0 01-.128.258.366.366 0 01-.272.092c.014.012-.768 0-.768 0l-.2 1.262h2.122v1.764h1.056V20.12h.844v1.73h1.058v-1.744c1.784-.108 3.028-.548 3.184-2.218.126-1.344-.506-1.944-1.516-2.186.614-.302.994-.862.908-1.778zm-1.48 3.756c0 1.312-2.248 1.162-2.964 1.162v-2.328c.716.002 2.964-.204 2.964 1.166zm-.49-3.28c0 1.2-1.876 1.054-2.472 1.054v-2.116c.596 0 2.472-.188 2.472 1.062z'/%3E%3Cpath d='M15.924 26.852C9.89 26.851 5 21.959 5 15.925 5 9.892 9.892 5 15.925 5c6.034 0 10.926 4.89 10.927 10.924a10.926 10.926 0 01-10.928 10.928zm0-21c-5.559.004-10.062 4.513-10.06 10.072.002 5.559 4.51 10.064 10.068 10.064 5.559 0 10.066-4.505 10.068-10.064A10.068 10.068 0 0015.924 5.852z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 8,\n id: 'wbtc.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Huobi BTC',\n symbol: 'HBTC',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'hbtc.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Celo Dollar',\n symbol: 'cUSD',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTEwMCA1MGMwLTI3LjYxNDItMjIuMzg1OC01MC01MC01MHMtNTAgMjIuMzg1OC01MCA1MCAyMi4zODU4IDUwIDUwIDUwIDUwLTIyLjM4NTggNTAtNTB6IiBmaWxsPSIjNDVjZDg1Ii8+PGcgZmlsbD0iI2ZmZiI+PHBhdGggZD0ibTY5Ljg4MDUgNjIuNjQzOGMtMS41NjcxIDMuMzkzMS0zLjkzNzUgNi4zNTMyLTYuOTA2MSA4LjYyNDEtMi45Njg1IDIuMjcwOC02LjQ0NTggMy43ODQxLTEwLjEzMDcgNC40MDg3LTMuNjg1LjYyNDYtNy40NjY3LjM0MTctMTEuMDE3Ny0uODI0MS0zLjU1MTEtMS4xNjU4LTYuNzY0Ni0zLjE3OTQtOS4zNjIzLTUuODY2Ni0yLjU5NzgtMi42ODcxLTQuNTAxNS01Ljk2NjktNS41NDY1LTkuNTU1NC0xLjA0NDktMy41ODg1LTEuMTk5Ni03LjM3NzUtLjQ1MDctMTEuMDM5My43NDg5LTMuNjYxNyAyLjM3ODktNy4wODU3IDQuNzQ4OS05Ljk3NTggMi4zNzAxLTIuODkgNS40MDg3LTUuMTU4OSA4Ljg1MjktNi42MTAzbDIuMjY2OCA1LjM3OTJjLTIuNTcgMS4wODMxLTQuODM3NSAyLjc3NjEtNi42MDYgNC45MzI3LTEuNzY4NSAyLjE1NjUtMi45ODQ4IDQuNzExNS0zLjU0MzYgNy40NDM5LS41NTg5IDIuNzMyNC0uNDQzNSA1LjU1OTguMzM2MyA4LjIzNzYuNzc5OCAyLjY3NzcgMi4yMDAzIDUuMTI1MSA0LjEzODggNy4xMzAyIDEuOTM4NCAyLjAwNTIgNC4zMzYzIDMuNTA3OCA2Ljk4NjEgNC4zNzc3czUuNDcxNyAxLjA4MSA4LjIyMTUuNjE0OWMyLjc0OTctLjQ2NjEgNS4zNDQ0LTEuNTk1MyA3LjU1OTUtMy4yODk4IDIuMjE1Mi0xLjY5NDUgMy45ODQtMy45MDMzIDUuMTUzNC02LjQzNTNsNS45MTg5LjMwNDJ6Ii8+PHBhdGggZD0ibTU2LjEwNjEgMjQuNXYtNGg0LjUwMDV2NGMyIDAgNS4xNjY3LjY2NjcgNi41IDF2NC41Yy0xOS0zLTE1LjUwMTEgMy44NDYyLTggNSA2LjcyMTcgMS4wMzM5IDExIDIgMTEuNSA5IC40IDUuNi01LjgzMzMgNy42NjY3LTkgOHYzLjVoLTV2LTMuNWMtMi40IDAtNi42NjY3LTEuNjY2Ny04LjUtMi41di01LjVjNC41IDIuNSAxNyA0LjUgMTcgMHMtMTYuNTAxMS0zLTE4LjAwMDUtMTFjLTEuMDAyMy01LjM0NzUgNS4zMzMzLTcuODMzMyA5LTguNXoiLz48L2c+PC9zdmc+',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'cusd.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'LiNEAR',\n symbol: 'LINEAR',\n icon:\n \"data:image/svg+xml,%3Csvg width='40' height='40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M30.74 28.78c.21-.36.32-.78.32-1.21v-6.33c0-.24-.06-.46-.17-.66-.12-.21-.28-.38-.48-.49l-16.86-9.77c-.35-.2-.73-.31-1.13-.32-.64 0-1.24.26-1.69.72-.45.45-.7 1.07-.71 1.71v6.39c0 .24.06.47.18.67.11.21.28.37.48.48l16.82 9.71c.36.22.77.32 1.19.32.41 0 .82-.12 1.19-.33.36-.21.66-.52.86-.89zm.32-16.27c0-.42-.1-.84-.29-1.21-.2-.38-.49-.7-.85-.93-.36-.22-.78-.34-1.21-.34-.42 0-.84.12-1.21.34l-4.97 2.81c-.04.02-.08.07-.1.12-.03.04-.04.1-.04.14 0 .06.01.11.04.16.02.04.06.08.1.1l8.05 4.62c.05.02.1.04.15.04.05 0 .1-.02.15-.05.04-.02.08-.06.11-.11.02-.04.04-.1.03-.15l.04-5.54zM10.05 27.5c-.01.43.08.86.28 1.23.2.38.49.7.85.93.36.22.78.34 1.2.34.42 0 .83-.12 1.2-.34l4.92-2.85c.04-.02.08-.06.1-.11.03-.04.05-.1.05-.15 0-.05-.02-.11-.05-.15-.02-.05-.06-.09-.1-.12l-8.05-4.6c-.05-.03-.09-.04-.15-.04-.05 0-.1.01-.15.04-.05.02-.08.07-.11.12-.02.04-.04.09-.04.14l.05 5.56z' fill='url(%23paint0_linear_186_370)'/%3E%3Cdefs%3E%3ClinearGradient id='paint0_linear_186_370' x1='11.135' y1='11.152' x2='30.145' y2='30.457' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%231BB3CC'/%3E%3Cstop offset='1' stop-color='%23824ACC'/%3E%3C/linearGradient%3E%3C/defs%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'linear-protocol.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked NEAR',\n symbol: 'STNEAR',\n icon:\n \"data:image/svg+xml,%3Csvg width='96' height='96' viewBox='0 0 96 96' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='96' height='96' rx='48' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M48.0006 20L41.2575 26.7431L48.0006 33.4862L54.7437 26.7431L48.0006 20ZM37.281 30.7188L30.7144 37.2853L47.9998 54.5707L65.2851 37.2853L58.7186 30.7188L47.9998 41.4376L37.281 30.7188ZM26.7384 41.261L19.9953 48.0041L47.9995 76.0083L76.0037 48.0041L69.2606 41.2611L47.9995 62.5221L26.7384 41.261Z' fill='%23231B51'/%3E%3C/svg%3E\",\n reference: 'https://metapool.app',\n reference_hash: null,\n decimals: 24,\n id: 'meta-v2.pool.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NearX',\n symbol: 'NearX',\n icon:\n \"data:image/svg+xml,%0A%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24 12C24 18.6274 18.6274 24 12 24C5.37258 24 0 18.6274 0 12C0 5.37258 5.37258 0 12 0C18.6274 0 24 5.37258 24 12ZM17.1421 21.3848L21.3848 17.1421L19.3669 15.1243C18.5576 17.0303 17.0303 18.5576 15.1243 19.3669L17.1421 21.3848ZM9.43294 19.5793C7.45322 18.909 5.82115 17.4848 4.87848 15.6484L3.24264 17.2843L7.48528 21.5269L9.43294 19.5793ZM4.63306 8.8757C5.44239 6.96975 6.96975 5.44239 8.8757 4.63306L7.24264 3L3 7.24264L4.63306 8.8757ZM15.6484 4.87848L17.3848 3.14214L21.6274 7.38478L19.5793 9.43294C18.909 7.45322 17.4848 5.82115 15.6484 4.87848Z' fill='black'/%3E%3Cpath d='M8.00119 11.9921C8.00119 11.0268 8.00119 10.0615 8.00119 9.09612C8.00119 8.50505 8.16497 8.1743 8.56285 8.05781C8.97778 7.93628 9.40619 7.97917 9.79565 8.45228C11.3533 10.3447 12.9343 12.218 14.5092 14.0959C14.5692 14.1676 14.6117 14.3122 14.734 14.2626C14.8496 14.2157 14.7858 14.0805 14.786 13.9878C14.7904 12.6326 14.7898 11.2774 14.7868 9.92226C14.7868 9.83668 14.838 9.7162 14.7271 9.67372C14.6401 9.64029 14.5824 9.74185 14.522 9.79358C14.0492 10.1981 13.5804 10.6073 13.1088 11.0133C13.0208 11.089 12.9332 11.2118 12.8002 11.1012C12.6657 10.9894 12.7696 10.8872 12.8364 10.7881C13.3547 10.0186 13.8728 9.24898 14.3909 8.47919C14.6656 8.07085 15.0079 7.92282 15.4056 8.04141C15.786 8.15475 15.9986 8.48592 15.9992 8.97668C16.0007 10.0905 15.9996 11.2045 15.9996 12.3183C15.9996 13.2094 16.0003 14.1005 15.9994 14.9916C15.999 15.4826 15.8137 15.798 15.4512 15.9324C15.0256 16.0901 14.5767 15.9683 14.2734 15.6058C12.6823 13.705 11.0924 11.8029 9.50198 9.90144C9.46029 9.85161 9.42303 9.7961 9.37377 9.75489C9.28998 9.68487 9.21967 9.68108 9.21314 9.81797C9.20999 9.88273 9.21188 9.94791 9.21188 10.0129C9.21188 11.3496 9.21062 12.6862 9.2142 14.0227C9.21441 14.1186 9.15609 14.2557 9.26114 14.3038C9.38093 14.3587 9.45061 14.2178 9.52998 14.1503C9.98259 13.7651 10.4291 13.3728 10.8805 12.9859C10.9729 12.9066 11.0626 12.7651 11.208 12.8973C11.3402 13.0176 11.2213 13.1196 11.159 13.2127C10.6323 13.9989 10.1032 14.7837 9.57145 15.5663C9.32788 15.9248 8.9881 16.056 8.61085 15.9488C8.23739 15.8428 8.00498 15.5246 8.00287 15.0827C7.99761 14.0523 8.00119 13.022 8.00119 11.9917V11.9921Z' fill='white'/%3E%3C/svg%3E\",\n reference: 'https://near.staderlabs.com',\n reference_hash: null,\n decimals: 24,\n id: 'v2-nearx.staderlabs.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'refLove Finance Token',\n symbol: 'refLove',\n icon:\n 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDIxLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAyODggMzI0IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyODggMzI0OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuc3Qwe2ZpbGw6IzAwQzA4Qjt9Cjwvc3R5bGU+CjxnPgoJPHBhdGggZD0iTTE3My40LDE5MS40VjI2OEgyNTBMMTczLjQsMTkxLjR6IE0xMDcuMiwxMjUuMmwzMCwzMGwzMC4zLTMwLjNWNjkuMmgtNjAuNFYxMjUuMnogTTEwNy4yLDE1Mi4zVjI2OGg2MC40VjE1MmwtMzAuMywzMC4zCgkJTDEwNy4yLDE1Mi4zeiBNMTc3LjEsNjkuMmgtMy43VjExOUwyMTIsODAuNUMyMDEuOCw3My4yLDE4OS42LDY5LjIsMTc3LjEsNjkuMnogTTM4LDE3NS41VjI2OGg2My4zVjE0Ni40bC0xNy4xLTE3LjFMMzgsMTc1LjV6CgkJIE0zOCwxNDguNWw0Ni4yLTQ2LjJsMTcuMSwxNy4xVjY5LjJIMzhWMTQ4LjV6IE0yMzYuOCwxMjguOUwyMzYuOCwxMjguOWMwLTEyLjUtMy45LTI0LjctMTEuMi0zNC44bC01Mi4xLDUydjQyLjRoMy43CgkJQzIxMC4xLDE4OC41LDIzNi44LDE2MS44LDIzNi44LDEyOC45eiIvPgoJPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIyMTAuMiw1NiAyNTAsOTUuOCAyNTAsNTYgCSIvPgo8L2c+Cjwvc3ZnPgo=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'v010.refve.testnet',\n },\n {\n decimals: 18,\n icon:\n 'data:image/png;base64,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',\n name: 'Ether',\n reference: null,\n reference_hash: null,\n spec: 'ft-1.0.0',\n symbol: 'ETH',\n id: 'aurora',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USDT',\n symbol: 'USDT',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 288 288'%3E%3Cg id='l' data-name='l'%3E%3Cpath d='M187.58,79.81l-30.1,44.69a3.2,3.2,0,0,0,4.75,4.2L191.86,103a1.2,1.2,0,0,1,2,.91v80.46a1.2,1.2,0,0,1-2.12.77L102.18,77.93A15.35,15.35,0,0,0,90.47,72.5H87.34A15.34,15.34,0,0,0,72,87.84V201.16A15.34,15.34,0,0,0,87.34,216.5h0a15.35,15.35,0,0,0,13.08-7.31l30.1-44.69a3.2,3.2,0,0,0-4.75-4.2L96.14,186a1.2,1.2,0,0,1-2-.91V104.61a1.2,1.2,0,0,1,2.12-.77l89.55,107.23a15.35,15.35,0,0,0,11.71,5.43h3.13A15.34,15.34,0,0,0,216,201.16V87.84A15.34,15.34,0,0,0,200.66,72.5h0A15.35,15.35,0,0,0,187.58,79.81Z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'usdt.itachicara.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USDC',\n symbol: 'USDC',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 288 288'%3E%3Cg id='l' data-name='l'%3E%3Cpath d='M187.58,79.81l-30.1,44.69a3.2,3.2,0,0,0,4.75,4.2L191.86,103a1.2,1.2,0,0,1,2,.91v80.46a1.2,1.2,0,0,1-2.12.77L102.18,77.93A15.35,15.35,0,0,0,90.47,72.5H87.34A15.34,15.34,0,0,0,72,87.84V201.16A15.34,15.34,0,0,0,87.34,216.5h0a15.35,15.35,0,0,0,13.08-7.31l30.1-44.69a3.2,3.2,0,0,0-4.75-4.2L96.14,186a1.2,1.2,0,0,1-2-.91V104.61a1.2,1.2,0,0,1,2.12-.77l89.55,107.23a15.35,15.35,0,0,0,11.71,5.43h3.13A15.34,15.34,0,0,0,216,201.16V87.84A15.34,15.34,0,0,0,200.66,72.5h0A15.35,15.35,0,0,0,187.58,79.81Z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'usdc.itachicara.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked CORN',\n symbol: 'xCORN',\n icon:\n \"data:image/svg+xml,%3Csvg width='300' height='300' viewBox='0 0 300 300' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M150.43 32L99.7144 61.4389L150.43 90.8705L201.145 61.4389L150.43 32Z' fill='%235C65A5'/%3E%3Cpath d='M201.146 61.4388L150.431 90.8703L201.146 120.309L251.854 90.8703L201.146 61.4388Z' fill='%233B4274'/%3E%3Cpath d='M99.7152 61.4388L49 90.8703L99.7152 120.309L150.43 90.8703L99.7152 61.4388Z' fill='%233B4274'/%3E%3Cpath d='M150.43 90.8707L99.7144 120.31L150.43 149.749L201.145 120.31L150.43 90.8707Z' fill='%235C65A5'/%3E%3Cpath d='M99.7152 120.31L49 90.8707V149.749L99.7152 179.187V120.31Z' fill='%235C65A5'/%3E%3Cpath d='M150.43 149.748L99.7144 120.309V179.187L150.43 208.626V149.748Z' fill='%233B4274'/%3E%3Cpath d='M99.7152 179.187L49 149.748V208.626L99.7152 238.058V179.187Z' fill='%233B4274'/%3E%3Cpath d='M150.43 208.626L99.7144 179.187V238.057L150.43 267.496V208.626Z' fill='%235C65A5'/%3E%3Cpath d='M150.431 267.496L201.146 238.057L150.431 208.626V267.496Z' fill='%233B4274'/%3E%3Cpath d='M224.085 213.702L209.447 198.197L194.809 213.702H167.656L195.643 182.183L167.656 150.665H194.809L209.447 166.933L224.085 150.665H251.086L223.175 182.183L251.086 213.702H224.085Z' fill='%233B4274'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'xcorn.corndao.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tether USD',\n symbol: 'USDt',\n icon:\n \"data:image/svg+xml,%3Csvg width='111' height='90' viewBox='0 0 111 90' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24.4825 0.862305H88.0496C89.5663 0.862305 90.9675 1.64827 91.7239 2.92338L110.244 34.1419C111.204 35.7609 110.919 37.8043 109.549 39.1171L58.5729 87.9703C56.9216 89.5528 54.2652 89.5528 52.6139 87.9703L1.70699 39.1831C0.305262 37.8398 0.0427812 35.7367 1.07354 34.1077L20.8696 2.82322C21.6406 1.60483 23.0087 0.862305 24.4825 0.862305ZM79.8419 14.8003V23.5597H61.7343V29.6329C74.4518 30.2819 83.9934 32.9475 84.0642 36.1425L84.0638 42.803C83.993 45.998 74.4518 48.6635 61.7343 49.3125V64.2168H49.7105V49.3125C36.9929 48.6635 27.4513 45.998 27.3805 42.803L27.381 36.1425C27.4517 32.9475 36.9929 30.2819 49.7105 29.6329V23.5597H31.6028V14.8003H79.8419ZM55.7224 44.7367C69.2943 44.7367 80.6382 42.4827 83.4143 39.4727C81.0601 36.9202 72.5448 34.9114 61.7343 34.3597V40.7183C59.7966 40.8172 57.7852 40.8693 55.7224 40.8693C53.6595 40.8693 51.6481 40.8172 49.7105 40.7183V34.3597C38.8999 34.9114 30.3846 36.9202 28.0304 39.4727C30.8066 42.4827 42.1504 44.7367 55.7224 44.7367Z' fill='%23009393'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'usdtt.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked CORN',\n symbol: 'xCORN',\n icon:\n \"data:image/svg+xml,%3Csvg width='300' height='300' viewBox='0 0 300 300' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M150.43 32L99.7144 61.4389L150.43 90.8705L201.145 61.4389L150.43 32Z' fill='%235C65A5'/%3E%3Cpath d='M201.146 61.4388L150.431 90.8703L201.146 120.309L251.854 90.8703L201.146 61.4388Z' fill='%233B4274'/%3E%3Cpath d='M99.7152 61.4388L49 90.8703L99.7152 120.309L150.43 90.8703L99.7152 61.4388Z' fill='%233B4274'/%3E%3Cpath d='M150.43 90.8707L99.7144 120.31L150.43 149.749L201.145 120.31L150.43 90.8707Z' fill='%235C65A5'/%3E%3Cpath d='M99.7152 120.31L49 90.8707V149.749L99.7152 179.187V120.31Z' fill='%235C65A5'/%3E%3Cpath d='M150.43 149.748L99.7144 120.309V179.187L150.43 208.626V149.748Z' fill='%233B4274'/%3E%3Cpath d='M99.7152 179.187L49 149.748V208.626L99.7152 238.058V179.187Z' fill='%233B4274'/%3E%3Cpath d='M150.43 208.626L99.7144 179.187V238.057L150.43 267.496V208.626Z' fill='%235C65A5'/%3E%3Cpath d='M150.431 267.496L201.146 238.057L150.431 208.626V267.496Z' fill='%233B4274'/%3E%3Cpath d='M224.085 213.702L209.447 198.197L194.809 213.702H167.656L195.643 182.183L167.656 150.665H194.809L209.447 166.933L224.085 150.665H251.086L223.175 182.183L251.086 213.702H224.085Z' fill='%233B4274'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'xcorn.v1.corndao.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tiptoken',\n symbol: 'TT',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'tiptoken.testnet',\n },\n];\n\nexport const DefaultMainnetTokenList = [\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped NEAR fungible token',\n symbol: 'wNEAR',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'wrap.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USD Coin',\n symbol: 'USDC',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle cx='16' cy='16' r='16' fill='%232775C9'/%3E%3Cpath d='M15.75 27.5C9.26 27.5 4 22.24 4 15.75S9.26 4 15.75 4 27.5 9.26 27.5 15.75A11.75 11.75 0 0115.75 27.5zm-.7-16.11a2.58 2.58 0 00-2.45 2.47c0 1.21.74 2 2.31 2.33l1.1.26c1.07.25 1.51.61 1.51 1.22s-.77 1.21-1.77 1.21a1.9 1.9 0 01-1.8-.91.68.68 0 00-.61-.39h-.59a.35.35 0 00-.28.41 2.73 2.73 0 002.61 2.08v.84a.705.705 0 001.41 0v-.85a2.62 2.62 0 002.59-2.58c0-1.27-.73-2-2.46-2.37l-1-.22c-1-.25-1.47-.58-1.47-1.14 0-.56.6-1.18 1.6-1.18a1.64 1.64 0 011.59.81.8.8 0 00.72.46h.47a.42.42 0 00.31-.5 2.65 2.65 0 00-2.38-2v-.69a.705.705 0 00-1.41 0v.74zm-8.11 4.36a8.79 8.79 0 006 8.33h.14a.45.45 0 00.45-.45v-.21a.94.94 0 00-.58-.87 7.36 7.36 0 010-13.65.93.93 0 00.58-.86v-.23a.42.42 0 00-.56-.4 8.79 8.79 0 00-6.03 8.34zm17.62 0a8.79 8.79 0 00-6-8.32h-.15a.47.47 0 00-.47.47v.15a1 1 0 00.61.9 7.36 7.36 0 010 13.64 1 1 0 00-.6.89v.17a.47.47 0 00.62.44 8.79 8.79 0 005.99-8.34z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 6,\n id: 'a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tether USD',\n symbol: 'USDT.e',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle cx='16' cy='16' r='16' fill='%2326A17B'/%3E%3Cpath fill='%23FFF' d='M17.922 17.383v-.002c-.11.008-.677.042-1.942.042-1.01 0-1.721-.03-1.971-.042v.003c-3.888-.171-6.79-.848-6.79-1.658 0-.809 2.902-1.486 6.79-1.66v2.644c.254.018.982.061 1.988.061 1.207 0 1.812-.05 1.925-.06v-2.643c3.88.173 6.775.85 6.775 1.658 0 .81-2.895 1.485-6.775 1.657m0-3.59v-2.366h5.414V7.819H8.595v3.608h5.414v2.365c-4.4.202-7.709 1.074-7.709 2.118 0 1.044 3.309 1.915 7.709 2.118v7.582h3.913v-7.584c4.393-.202 7.694-1.073 7.694-2.116 0-1.043-3.301-1.914-7.694-2.117'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 6,\n id: 'dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Dai Stablecoin',\n symbol: 'DAI',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle fill='%23F4B731' fill-rule='nonzero' cx='16' cy='16' r='16'/%3E%3Cpath d='M9.277 8h6.552c3.985 0 7.006 2.116 8.13 5.194H26v1.861h-1.611c.031.294.047.594.047.898v.046c0 .342-.02.68-.06 1.01H26v1.86h-2.08C22.767 21.905 19.77 24 15.83 24H9.277v-5.131H7v-1.86h2.277v-1.954H7v-1.86h2.277V8zm1.831 10.869v3.462h4.72c2.914 0 5.078-1.387 6.085-3.462H11.108zm11.366-1.86H11.108v-1.954h11.37c.041.307.063.622.063.944v.045c0 .329-.023.65-.067.964zM15.83 9.665c2.926 0 5.097 1.424 6.098 3.528h-10.82V9.666h4.72z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '6b175474e89094c44da98b954eedeac495271d0f.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: '1INCH Token',\n symbol: '1INCH',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '111111111117dc0aa78b770fa6a738034120c302.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Graph Token',\n symbol: 'GRT',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'c944e90c64b2c07662a292be6244bdf05cda44a7.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Skyward Finance Token',\n symbol: 'SKYWARD',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.skyward.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Banana',\n symbol: 'BANANA',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='256' height='256'%3E%3Cdefs%3E%3Ctext id='A' x='50' y='180' font-size='180'%3E🍌%3C/text%3E%3C/defs%3E%3Cuse xlink:href='%23A'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'berryclub.ek.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Cucumber',\n symbol: 'CUCUMBER',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='256' height='256'%3E%3Cdefs%3E%3Ctext id='A' x='50' y='180' font-size='180'%3E🥒%3C/text%3E%3C/defs%3E%3Cuse xlink:href='%23A'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'farm.berryclub.ek.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'HuobiToken',\n symbol: 'HT',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '6f259637dcd74c767781e37bc6133cd6a68aa161.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Gitcoin',\n symbol: 'GTC',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'de30da39c46104798bb5aa3fe8b9e0e1f348163f.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Uniswap',\n symbol: 'UNI',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle fill='%23FF007A' fill-rule='nonzero' cx='16' cy='16' r='16'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M12.261 5.767c-.285-.044-.297-.05-.163-.07.257-.04.865.015 1.284.114.977.233 1.866.828 2.816 1.885l.252.28.36-.057c1.52-.245 3.067-.05 4.36.547.356.164.917.491.987.576.023.026.064.199.091.383.096.637.048 1.125-.146 1.49-.106.198-.112.26-.041.43a.416.416 0 00.372.236c.322 0 .668-.52.828-1.243l.064-.287.126.143c.692.784 1.235 1.853 1.328 2.613l.025.199-.117-.18c-.2-.31-.4-.522-.658-.693-.464-.307-.955-.411-2.255-.48-1.174-.062-1.839-.162-2.497-.377-1.121-.365-1.686-.852-3.018-2.599-.591-.776-.957-1.205-1.32-1.55-.827-.786-1.639-1.198-2.678-1.36z' fill-rule='nonzero'/%3E%3Cpath d='M22.422 7.5c.03-.52.1-.863.242-1.176.056-.124.109-.226.117-.226a.773.773 0 01-.055.204c-.103.304-.12.72-.049 1.203.09.614.142.702.79 1.365.305.311.659.703.787.872l.233.306-.233-.219c-.285-.267-.941-.79-1.086-.864-.097-.05-.112-.049-.172.01-.055.056-.067.138-.074.529-.012.608-.095 1-.296 1.39-.108.21-.125.166-.027-.073.073-.178.08-.256.08-.845 0-1.184-.141-1.468-.966-1.956a9.046 9.046 0 00-.764-.396 2.916 2.916 0 01-.374-.182c.023-.023.827.211 1.15.336.482.185.561.209.62.186.039-.015.058-.129.077-.464zm-9.607 2.025c-.579-.797-.937-2.02-.86-2.934l.024-.283.132.024c.248.045.675.204.875.326.548.333.786.772 1.027 1.898.071.33.164.703.207.83.068.203.328.678.54.987.152.222.05.327-.286.297-.514-.047-1.21-.527-1.659-1.145zm8.905 5.935c-2.707-1.09-3.66-2.036-3.66-3.632 0-.235.008-.427.017-.427.01 0 .115.077.233.172.549.44 1.164.628 2.865.876 1.001.147 1.565.265 2.085.437 1.652.548 2.674 1.66 2.918 3.174.07.44.029 1.265-.086 1.7-.09.344-.367.963-.44.987-.02.006-.04-.071-.046-.178-.028-.568-.315-1.122-.798-1.537-.549-.471-1.286-.847-3.089-1.572zm-1.9.452a4.808 4.808 0 00-.131-.572l-.07-.206.129.144c.177.2.318.454.436.794.091.259.101.336.1.757 0 .414-.011.5-.095.734a2.32 2.32 0 01-.571.908c-.495.504-1.13.782-2.048.898-.16.02-.624.054-1.033.075-1.03.054-1.707.164-2.316.378a.488.488 0 01-.174.042c-.024-.025.39-.272.733-.437.483-.233.963-.36 2.04-.539.532-.089 1.082-.196 1.221-.239 1.318-.404 1.995-1.446 1.778-2.737z' fill-rule='nonzero'/%3E%3Cpath d='M21.06 18.116c-.36-.773-.442-1.52-.245-2.216.021-.074.055-.135.075-.135a.73.73 0 01.189.102c.166.112.498.3 1.383.782 1.105.603 1.735 1.07 2.164 1.602.375.467.607.999.719 1.647.063.367.026 1.25-.068 1.62-.297 1.166-.988 2.082-1.972 2.616a2.53 2.53 0 01-.288.143c-.014 0 .038-.133.117-.297.33-.692.369-1.366.118-2.116-.153-.459-.466-1.02-1.097-1.966-.734-1.1-.914-1.394-1.095-1.782zm-10.167 4.171c1.005-.848 2.254-1.45 3.393-1.635.49-.08 1.308-.048 1.762.068.728.186 1.38.604 1.719 1.101.33.486.473.91.62 1.852.06.372.123.745.142.83.11.488.327.879.595 1.075.425.311 1.158.33 1.878.05a.981.981 0 01.236-.074c.026.026-.336.269-.592.397a2.014 2.014 0 01-.983.238c-.66 0-1.208-.335-1.665-1.02-.09-.135-.292-.538-.45-.897-.482-1.1-.72-1.436-1.28-1.803-.489-.32-1.118-.377-1.591-.145-.622.305-.795 1.1-.35 1.603.177.2.507.373.777.406a.83.83 0 00.939-.83c0-.332-.128-.52-.448-.665-.437-.197-.907.033-.905.444.001.175.077.285.253.365.113.05.115.055.023.036-.401-.084-.495-.567-.172-.888.387-.386 1.188-.216 1.463.31.116.221.129.662.028.928-.225.595-.883.907-1.55.737-.454-.116-.639-.241-1.186-.805-.951-.98-1.32-1.17-2.692-1.384l-.263-.041.3-.253z' fill-rule='nonzero'/%3E%3Cpath d='M6.196 3.35l.096.117c3.708 4.54 5.624 6.896 5.746 7.064.2.278.125.527-.219.723-.191.109-.585.219-.781.219-.223 0-.474-.107-.657-.28-.129-.123-.65-.901-1.853-2.768a188.53 188.53 0 00-1.712-2.633c-.049-.046-.048-.045 1.618 2.936 1.046 1.872 1.4 2.533 1.4 2.622 0 .18-.05.274-.272.522-.37.413-.535.877-.655 1.837-.134 1.077-.51 1.837-1.554 3.138-.61.762-.71.902-.865 1.209-.194.386-.247.603-.269 1.091-.023.516.022.85.18 1.343.138.432.282.718.65 1.288.318.493.501.859.501 1.002 0 .114.022.114.515.003 1.179-.266 2.136-.735 2.675-1.309.333-.355.411-.551.414-1.038.001-.318-.01-.385-.096-.568-.14-.298-.395-.546-.957-.93-.737-.504-1.051-.91-1.138-1.467-.072-.457.011-.78.419-1.634.421-.884.526-1.26.597-2.151.045-.576.108-.803.274-.985.172-.19.328-.255.755-.313.696-.095 1.139-.275 1.503-.61.316-.292.448-.573.468-.995l.016-.32-.177-.206c-.254-.296-2.355-2.614-6.304-6.956l-.106-.115-.212.165zM7.91 19.732a.566.566 0 00-.174-.746c-.228-.152-.583-.08-.583.118 0 .06.033.104.108.143.127.065.136.139.037.288-.101.152-.093.286.023.377.186.146.45.065.59-.18zm5.524-7.176c-.327.1-.644.447-.743.81-.06.221-.026.61.064.73.145.194.286.245.666.242.744-.005 1.39-.324 1.466-.723.062-.327-.223-.78-.614-.98-.202-.102-.631-.143-.839-.079zm.87.68c.115-.163.064-.34-.13-.458-.372-.227-.934-.04-.934.312 0 .174.293.365.561.365.18 0 .424-.107.503-.219z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '1f9840a85d5af5bf1d1762f925bdaddc4201f984.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped BTC',\n symbol: 'WBTC',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle fill='%23201A2D' cx='16' cy='16' r='16'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M22.818 9.586l-.6.6a8.494 8.494 0 010 11.464l.6.6a9.352 9.352 0 000-12.678v.014zM10.2 9.638a8.494 8.494 0 0111.464 0l.6-.6a9.352 9.352 0 00-12.678 0l.614.6zm-.562 12.018a8.494 8.494 0 010-11.458l-.6-.6a9.352 9.352 0 000 12.678l.6-.62zm12.018.554a8.494 8.494 0 01-11.464 0l-.6.6a9.352 9.352 0 0012.678 0l-.614-.6zm-1.942-8.286c-.12-1.252-1.2-1.672-2.566-1.8V10.4h-1.056v1.692h-.844V10.4H14.2v1.736h-2.142v1.13s.78-.014.768 0a.546.546 0 01.6.464v4.752a.37.37 0 01-.128.258.366.366 0 01-.272.092c.014.012-.768 0-.768 0l-.2 1.262h2.122v1.764h1.056V20.12h.844v1.73h1.058v-1.744c1.784-.108 3.028-.548 3.184-2.218.126-1.344-.506-1.944-1.516-2.186.614-.302.994-.862.908-1.778zm-1.48 3.756c0 1.312-2.248 1.162-2.964 1.162v-2.328c.716.002 2.964-.204 2.964 1.166zm-.49-3.28c0 1.2-1.876 1.054-2.472 1.054v-2.116c.596 0 2.472-.188 2.472 1.062z'/%3E%3Cpath d='M15.924 26.852C9.89 26.851 5 21.959 5 15.925 5 9.892 9.892 5 15.925 5c6.034 0 10.926 4.89 10.927 10.924a10.926 10.926 0 01-10.928 10.928zm0-21c-5.559.004-10.062 4.513-10.06 10.072.002 5.559 4.51 10.064 10.068 10.064 5.559 0 10.066-4.505 10.068-10.064A10.068 10.068 0 0015.924 5.852z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 8,\n id: '2260fac5e5542a773aa44fbcfedf7c193bc2c599.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'ChainLink Token',\n symbol: 'LINK',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle fill='%232A5ADA' cx='16' cy='16' r='16'/%3E%3Cpath d='M16 6l-1.799 1.055L9.3 9.945 7.5 11v10l1.799 1.055 4.947 2.89L16.045 26l1.799-1.055 4.857-2.89L24.5 21V11l-1.799-1.055-4.902-2.89L16 6zm-4.902 12.89v-5.78L16 10.22l4.902 2.89v5.78L16 21.78l-4.902-2.89z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '514910771af9ca656af840dff83e8264ecf986ca.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Octopus Network Token',\n symbol: 'OCT',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='O' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 113.39 113.39' style='enable-background:new 0 0 113.39 113.39;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23014299;%7D .st1%7Bfill:%23FFFFFF;%7D %3C/style%3E%3Ccircle class='st0' cx='56.69' cy='56.69' r='56.69'/%3E%3Cg%3E%3Cpath class='st1' d='M44.25,59.41c-1.43,0-2.59,1.16-2.59,2.59v20.28c0,1.43,1.16,2.59,2.59,2.59c1.43,0,2.59-1.16,2.59-2.59V62 C46.84,60.57,45.68,59.41,44.25,59.41z'/%3E%3Cpath class='st1' d='M56.69,59.41c-1.45,0-2.62,1.17-2.62,2.62v26.47c0,1.45,1.17,2.62,2.62,2.62s2.62-1.17,2.62-2.62V62.02 C59.31,60.58,58.14,59.41,56.69,59.41z'/%3E%3Cpath class='st1' d='M79.26,78.87c-0.33,0.15-0.64,0.28-0.95,0.38c0,0-0.01,0-0.01,0c-0.59,0.19-1.13,0.29-1.63,0.31h-0.06 c-1,0.03-1.84-0.27-2.59-0.75c-0.49-0.32-0.91-0.73-1.25-1.23c-0.3-0.43-0.53-0.93-0.71-1.51c0-0.01-0.01-0.02-0.01-0.03 c-0.22-0.74-0.34-1.61-0.34-2.59V62.02c0-1.45-1.17-2.62-2.62-2.62c-1.45,0-2.62,1.17-2.62,2.62v11.43c0,4.5,1.64,8.03,4.63,9.96 c1.5,0.97,3.21,1.45,5.04,1.45c1.68,0,3.45-0.41,5.25-1.22c1.32-0.59,1.9-2.14,1.31-3.46C82.13,78.86,80.57,78.27,79.26,78.87z'/%3E%3Cpath class='st1' d='M68.33,45.9c0-2.15-1.75-3.9-3.9-3.9c-2.15,0-3.9,1.75-3.9,3.9s1.75,3.9,3.9,3.9 C66.58,49.8,68.33,48.05,68.33,45.9z'/%3E%3Cpath class='st1' d='M48.96,41.99c-2.15,0-3.9,1.75-3.9,3.9s1.75,3.9,3.9,3.9s3.9-1.75,3.9-3.9S51.11,41.99,48.96,41.99z'/%3E%3Cpath class='st1' d='M56.69,22.28c-15.17,0-27.52,12.34-27.52,27.52v15.09c0,1.46,1.18,2.64,2.64,2.64s2.64-1.18,2.64-2.64V49.8 c0-12.26,9.98-22.24,22.24-22.24c12.26,0,22.24,9.98,22.24,22.24v15.09c0,1.46,1.18,2.64,2.64,2.64s2.64-1.18,2.64-2.64V49.8 C84.21,34.62,71.87,22.28,56.69,22.28z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'f5cfbc74057c610c8ef151a439252680ac68c6dc.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Ref Finance Token',\n symbol: 'REF',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.v2.ref-finance.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'HAPI',\n symbol: 'HAPI',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_2' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' width='600px' height='600px' viewBox='0 0 600 600' enable-background='new 0 0 600 600' xml:space='preserve'%3E %3Cg%3E %3Cg%3E %3Cpath fill='%23141414' d='M263.7,122.8c-3.6,0.3-7.1,0.9-10.7,1.8c-24.5,6-40.3,18.1-50.4,31c24.5-4.7,49.9,1.3,67.3,7.4 c0.5,0.2,1,0.4,1.6,0.6c-2.7-4.2-5.2-9-7.2-14.4C261.2,141.1,261.6,131.6,263.7,122.8z'/%3E %3Cpath fill='%23141414' d='M201.2,197.7c-9.8-1.1-19.1-2.1-24.6-2.1c-0.7,0-1.4,0-2,0.1c-38.1,2.6-67.2,37.3-69.1,82.4 c-1.4,32.2,13.5,53.1,23.3,63.4c-1.5-12.5-0.1-25,4.3-37.3c11.7-32.6,34.3-42.1,60.6-53.1c10.8-4.5,22.5-9.5,34.3-16.6l50.1-39.6 c-10.1,2.2-24.4,4.5-42.9,5.3C227.1,200.6,213.9,199.1,201.2,197.7z'/%3E %3Cpath fill='%23141414' d='M319.1,176.5c-0.5,1.1,0.9,2.1,1.8,1.2c5.3-5.4,16.3-14.3,30.8-14.2c15.6,0.1,35.5,10.2,40.5,22.1 c4,9.8-6.6,16.5-6.6,16.5l0,0c-2.5-2.7-8-6.3-18.2-6.6c-15-0.5-25.3,12.1-24.1,12.9c7.5,4.7,17.3,3.7,23.1,3.5 c5.8-0.2,15.1-2.5,17.8-3.5c4.7-1.8,11.7-7.8,14.9-16.1c2.5-6.5,8.4-28.7-25.2-34.4C352.7,154.3,327,159.6,319.1,176.5z'/%3E %3Cpath fill='%23141414' d='M473.1,225.1c-0.5-0.6-1.1-1.3-1.7-2l-0.3-0.3c-3.9-4.4-7.6-8.3-9.4-10.1c1.2-4.2,4-16.2,1-26.1 c-2.3-7.7-6.8-15.5-9.2-19.4l-0.8-1.2h0c-0.4-0.6-0.8-1.2-1.1-1.7c-0.3-0.4-0.5-0.7-0.6-1l-0.2-0.7c-2.5-7-8.6-22.3-16.4-28.1 l59.4-91.7c2.3-3.5-2.1-7.5-5.4-5l-86.8,66.5c-8.7-12.3-21.1-21.8-21.8-22.4c-0.8-0.6-2-0.7-2.9-0.2c-0.9,0.5-1.4,1.6-1.3,2.6 c0,0.1,0.6,5.9-2.9,17.6c7.5,2.7,13.9,6,19.3,9.7l-4.5,3.5c-8.8-5.7-20-10.5-34.3-12.6c-17.7-2.6-31.9,1-42.1,10.7c0,0,0,0,0,0 c5.9,3.8,13.1,8.7,17,12.4c0.8,0.7,1.5,1.5,2.2,2.3c-3.1,0.9-6.2,1.9-9.3,2.9c-0.3-0.2-0.5-0.5-0.8-0.7c-1.9-1.7-4.4-3.4-7-5.3 c-5.4-3.8-11.7-8.3-15.8-14c-2.2-3.1-3.8-6.5-4.3-10.4c-0.3-2.4-1-4-2.2-4.9c0,0,0,0,0,0c0,0,0,0,0,0c-0.6-0.5-2.8-2-5.8,0.3 c-2,1.6-4.4,5.3-6.5,10.3c-5.2,12.3-8.7,32.1-1.8,46.1c1.2,2.3,2.4,4.5,3.7,6.6c-0.4,1-0.7,2.1-0.9,3.1c-0.6,3.4-0.9,7.8-1.2,12.7 c-19.8-8.3-50.5-17.5-78.5-10.7c-23.9,5.8-39.4,17.5-49.6,30c7.4-3.1,15.2-5,23.5-5.6c5.6-0.4,16.4,0.8,27.9,2.1 c11.8,1.3,25.3,2.8,32.9,2.4c19.2-0.8,33.7-3.3,43.5-5.6c0,5.4,0.1,11.1,0.4,16.9c0.7,16.8,2.5,34.3,5,46.5 c3.6,17.9,16.5,55.2,31.4,64.6c5.5,3.5,13.5,8.2,22.9,13.4c-2.5,6.4-5.1,15.1-5.1,23.5c0,15.2,5.2,26.6,11,37 c4.6,8.2,9.6,15.7,12.8,24c2.5,6.5-2.7,27.7-5.6,38.9c-1.2,4.5-1.9,7.3-1.7,7c3.7-5.1,7.5-10.8,11.3-16.8 c15.3-24.2,19.4-47,19.5-48l0.2-1.4l-1.1-1c-0.2-0.2-17.2-15.7-18.3-33.3c-0.4-6.9,1-11.5,4.3-13.8c0.5-0.3,1-0.6,1.6-0.9 c7.5,3.7,15,7.3,22.2,10.5c2.8,3.5,9,9.4,11.8,12c3.4,3.2,6.9,7.8,12.2,7.8c5.3,0,15.9,0,21.3,0s13.1,0,17.3-2.1 c4.2-2.1,10.9-5.6,11-12.6c0-1.5,0.4-3.9,0.9-6.8c3.7-4.9,4.1-10.6,4.8-19.2c0.5-5.7,1.7-15.5,3-25.9c2-15.7,4.1-32,3.9-37.9 c-0.2-8.2-1.1-14.3-1.4-16.2C475.3,249.4,479.5,232.4,473.1,225.1z M318,310.6c-13.3-8.4-25.6-44.6-29-61.2 c-4.8-23.9-6.9-68.5-3.9-86.8c2.7-16.7,49-34.5,81.7-35.6c1.9-0.1,3.8-0.1,5.6-0.1c1,0,2,0,3,0c-0.1,4.9,1.3,15.6,13.8,25.5 c13.9,11,30.4,5,30.4,5l12.1-18.7c4.5,3.5,9.4,12.7,13,22.1c-0.9-0.4-1.9-0.7-3.1-0.9c-8.1-1.3-31.6-0.9-24,31.3 c1,4,5.2,9.4,17.2,22.3c2.8,3,5.1,5.3,7,7.2c5.6,5.6,7.4,7.4,7.5,11.8c0,0.3-0.2,1.6-0.4,3c-0.8-0.6-1.9-1.1-3.4-1 c-3.6-0.2-33.7,5.6-42.4,15.1c-1.7,1.9-4.5,2.6-6.7,1.4c-0.1-0.1-0.2-0.1-0.3-0.2c-1.4-0.8-2.3-1.9-2.8-3.5 c-1.3-5.1,2.9-13.2,4.6-16c0.6-1,0.3-2.3-0.6-2.9c-1-0.6-2.3-0.3-2.9,0.6c-0.1,0.2-0.9,1.5-1.9,3.5c-3.3,6.6-8.2,12.2-14.3,16.3 c-9.8,6.6-24,15.2-35.5,18.2c-18,4.7-24.9-8.2-25.2-8.8c-0.5-1-1.8-1.4-2.8-0.9c-1,0.5-1.5,1.8-0.9,2.8 c0.1,0.1,6.3,12.1,21.5,12.1c0.6,0,1.4-0.1,2.2-0.2c4.3-0.5,8.6,0.5,12.3,2.7c3.5,2.1,8,4.7,12.5,7c12.6,6.3,14.7,6.2,19.5,5.4 c1.1-0.2,49.8-2.4,80.1-8.2l3.6,0.2c2.4,0.1,4.3,2.3,4,4.7l0,0.1c-0.2,1.4-1,2.6-2.2,3.3c-2.7,1.5-6.5,3.5-9.9,4.9 c-1.6,0.6-3.3,1.2-5.1,1.6c-5.5,1.3-11.1,1.6-11.1,1.6s-5.4,1.2-13.5,2.1c-3.4,0.4-7.2,0.7-11.3,0.9c-14,0.7-13,1.6-24.8,1 c-2.9-0.1-5.7-0.3-8.3-0.6c-2.5-0.3-3.2,3.4-0.7,4c6.1,1.5,13.3,2.6,21.3,2.5c1,0,1.9,0,2.9,0c12.8-0.1,24.4,7.5,29.4,19.3 c2.1,5,4.1,12,5.4,18.5c1.8,8.4-5.3,16.1-13.8,15.3c-12.5-1.3-26.6-4.8-34.6-8.3C365.3,338.1,332.4,319.8,318,310.6z M448.7,169.2 l1.2,1.9c2.4,4,5.9,10.5,7.9,16.9c3.1,10.4-1.4,24.4-1.4,24.5l-0.5,1.5l1.1,1.1c0,0.1,5,5.2,10.3,11.1l0.1,0.2 c0.6,0.7,1.2,1.3,1.8,2c3.7,4.3,1.9,17-0.1,23.9l-0.2,0.6l0.1,0.6c0,0,0.3,1.5,0.6,3.9c-2.7,0.3-4.7,2.7-4.4,5.5l0.8,7.5l-8.6,0.1 l-13.5-15.3c-1-1.2-1-3,0.2-4c0,0,0,0,0,0c7.1-6.4,8.1-9.5,8.3-10.7c0.9-5.4,1.2-7.4,1.2-8.1c0-6.1-2.9-9-8.7-14.8 c-1.9-1.9-4.2-4.2-6.9-7.1c-0.6-0.6-1.1-1.2-1.7-1.8c2.1,0.6,4.9,1.2,8.5,1.5c8.4,0.7,10.9-1.4,10.9-1.4s1.5-2.7-1.1-6.6 c-2.6-3.9-6.2-6.7-13.2-6.9c-5-0.2-9.5,3.7-11.7,6c-0.9-1-2.9-4.7-3.8-10.9c-1.5-9.7,2.1-14.2,4.7-16.4c4.6-3.9,10.9-7.7,14.4-7.5 c0.9,0.1,1.9,0.2,2.7,0.4C447.8,167.7,448.2,168.4,448.7,169.2z M463.4,332.9c-0.7,8.2-1.1,12.8-3.8,16.5c-2.3,3.1-7.3,0.8-6.6-3 c0.4-2.1,0.7-4.3,0.8-6.4c0.3-10.7-4.9-20.9-6.7-27.7c0,0,0-0.1,0-0.1c-0.9-3.8,1.2-7.7,4.8-9.3c1.6-0.7,3.4-1.6,5.3-2.6 c4.6-2.3,9.9,1.3,9.2,6.4l0,0.1C465.2,317.2,463.9,327.1,463.4,332.9z M385.1,249.4c1.8-1.3,4.4-0.8,5.6,1.2 c0.8,1.4,1.9,2.9,3.4,4.1c4.5,3.7,9.8,3.5,13.2,3.5c3.3,0,5.4-0.6,6-0.8c0,0,0,0,0,0c2.4-0.5,4.3,2,3.1,4.2 c-2.6,4.8-6.1,11.1-6.5,11.4c-0.7,0.5-22.8,5.1-25.6,5.4s-11.6,1.2-18.2-3c-2.8-1.7-5.5-3.7-7.7-5.3c-1.7-1.2-1.4-3.8,0.4-4.7 C368.8,260.4,378.7,253.9,385.1,249.4z M436.8,263.8l8.3,9.1c1.5,1.7,0.5,4.4-1.7,4.7c-5,0.6-10,1.2-14.9,1.7 c-2.3,0.2-3.9-2.3-2.7-4.3c1.9-3,4.3-7,6.5-10.8C433.2,262.6,435.5,262.4,436.8,263.8z M396.4,117.1l83.5-69.1l-76.9,76.9 c-2.5,2.4-6.6,1.6-8.1-1.5h0C393.9,121.2,394.5,118.5,396.4,117.1z'/%3E %3Cpath fill='%23141414' d='M196.6,258.1c-25.6,10.7-45.8,19.2-56.4,48.7c-15.1,42,9.4,88.5,62.5,120.1c-17.4-68,3.5-93.1,22.1-115.3 c6.4-7.7,12.5-15,16.9-23.7c12.9-25.8,12.3-50.5,11.1-62C233.7,242.5,214.1,250.8,196.6,258.1z'/%3E %3C/g%3E %3Cg%3E %3Cpath d='M201.6,477.1h-9.1l-2.8,17.1h-14.3l2.8-17.1h-9.1l-2.8,17.1h-9.3l-1.5,9.1h9.3l-2.3,14h-9.4l-1.5,9.1h9.4l-2.8,17.1h9.1 l2.8-17.1h14.3l-2.8,17.1h9.1l2.8-17.1h9.3l1.5-9.1h-9.3l2.3-14h9.4l1.5-9.1h-9.4L201.6,477.1z M186,517.4h-14.3l2.3-14h14.3 L186,517.4z'/%3E %3Cpolygon points='260.8,505.3 230,505.3 230,477.1 218,477.1 218,543.6 230,543.6 230,515.4 260.8,515.4 260.8,543.6 272.9,543.6 272.9,477.1 260.8,477.1 '/%3E %3Cpath d='M307.1,477.1l-23.4,66.4h12.8l5.5-16.4h25l5.5,16.4h12.8l-23.4-66.4H307.1z M305.3,517.5l9-26.8h0.5l9,26.8H305.3z'/%3E %3Cpath d='M394,480c-3.5-1.9-7.8-2.9-12.9-2.9h-24.9v66.4h12v-22.4H381c5.1,0,9.4-0.9,12.9-2.8s6.2-4.5,7.9-7.8 c1.8-3.3,2.7-7.1,2.7-11.3c0-4.2-0.9-8-2.7-11.3C400.1,484.5,397.4,481.9,394,480z M390.9,505.4c-0.9,1.8-2.3,3.2-4.2,4.3 c-1.9,1-4.3,1.6-7.3,1.6h-11.1v-24h11c3,0,5.5,0.5,7.4,1.5c1.9,1,3.3,2.4,4.2,4.2c0.9,1.8,1.4,3.9,1.4,6.2 S391.8,503.6,390.9,505.4z'/%3E %3Crect x='417.1' y='477.1' width='12' height='66.4'/%3E %3C/g%3E %3C/g%3E %3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'd9c2d319cd7e6177336b0a9c93c21cb48d84fb54.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'PARAS',\n symbol: 'PARAS',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.paras.near',\n },\n {\n spec: 'ft-1.0.0',\n name: '1MILNFT',\n symbol: '1MIL',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='O' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 146 146' xml:space='preserve'%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M0 0L0 31L31 31L31 0L0 0z'/%3E %3Cpath style='fill:%23df01ae; stroke:none;' d='M31 0L31 31L32 31L31 0z'/%3E %3Cpath style='fill:%23000000; stroke:none;' d='M32 0L32 32L0 32L0 38L32 38L32 70L0 70L0 76L32 76L32 109L0 109L0 114L32 114L32 146L38 146L38 114L70 114L70 146L76 146L76 114C82.7843 114 102.446 110.653 107.397 115.603C112.241 120.448 109 139.378 109 146L114 146L114 114L146 114L146 109C139.378 109 120.448 112.241 115.603 107.397C110.653 102.446 114 82.7843 114 76L146 76L146 70L114 70L114 38L146 38L146 32C139.378 32 120.448 35.2414 115.603 30.3966C110.759 25.5518 114 6.6225 114 0L109 0L109 32L76 32L76 0L71 0L71 32L38 32L38 0L32 0z'/%3E %3Cpath style='fill:%23459f00; stroke:none;' d='M38 0L38 32L70 32L70 31L39 31L38 0z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M39 0L39 31L70 31L70 0L39 0z'/%3E %3Cpath style='fill:%230d2000; stroke:none;' d='M70 0L70 32L71 32L70 0z'/%3E %3Cpath style='fill:%233f0180; stroke:none;' d='M76 0L76 32L108 32L108 31L77 31L76 0z'/%3E %3Cpath style='fill:%237f00ff; stroke:none;' d='M77 0L77 31L108 31L108 0L77 0z'/%3E %3Cpath style='fill:%232f0060; stroke:none;' d='M108 0L108 32L109 32L108 0z'/%3E %3Cpath style='fill:%231d4101; stroke:none;' d='M114 0L114 31L115 31L114 0z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M115 0L115 31L146 31L146 0L115 0z'/%3E %3Cpath style='fill:%239f017c; stroke:none;' d='M0 31L0 32L32 32L0 31z'/%3E %3Cpath style='fill:%23459f00; stroke:none;' d='M115 31L115 32L146 32L115 31z'/%3E %3Cpath style='fill:%2300f0ff; stroke:none;' d='M0 38L0 69L31 69L31 38L0 38z'/%3E %3Cpath style='fill:%2300d2df; stroke:none;' d='M31 38L31 69L0 69L0 70L32 70L31 38z'/%3E %3Cpath style='fill:%23be0094; stroke:none;' d='M38 38L38 70L39 70L38 38z'/%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M39 38L39 69L70 69L70 38L39 38z'/%3E %3Cpath style='fill:%23200018; stroke:none;' d='M70 38L70 70L71 70L70 38z'/%3E %3Cpath style='fill:%23007880; stroke:none;' d='M76 38L76 70L77 70L76 38z'/%3E %3Cpath style='fill:%2300f0ff; stroke:none;' d='M77 38L77 69L108 69L108 38L77 38z'/%3E %3Cpath style='fill:%23015a60; stroke:none;' d='M108 38L108 70L109 70L108 38z'/%3E %3Cpath style='fill:%23400032; stroke:none;' d='M114 38L114 70L115 70L114 38z'/%3E %3Cpath style='fill:%23de00ad; stroke:none;' d='M115 38L115 39L146 39L115 38z'/%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M115 39L115 70L146 70L146 39L115 39z'/%3E %3Cpath style='fill:%23df01ae; stroke:none;' d='M39 69L39 70L70 70L39 69z'/%3E %3Cpath style='fill:%2300d2df; stroke:none;' d='M77 69L77 70L108 70L77 69z'/%3E %3Cpath style='fill:%2354bf00; stroke:none;' d='M0 76L0 77L32 77L0 76z'/%3E %3Cpath style='fill:%235f00be; stroke:none;' d='M38 76L38 108L39 108L39 77L70 77L38 76z'/%3E %3Cpath style='fill:%230f001f; stroke:none;' d='M70 76L70 108L71 108L70 76z'/%3E %3Cpath style='fill:%23388000; stroke:none;' d='M76 76L76 108L77 108L76 76z'/%3E %3Cpath style='fill:%2354bf00; stroke:none;' d='M77 76L77 77L108 77L77 76z'/%3E %3Cpath style='fill:%232a6000; stroke:none;' d='M108 76L108 108L109 108L108 76z'/%3E %3Cpath style='fill:%23003d40; stroke:none;' d='M114 76L114 108L115 108L114 76z'/%3E %3Cpath style='fill:%2300b4bf; stroke:none;' d='M115 76L115 77L146 77L115 76z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M0 77L0 108L32 108L32 77L0 77z'/%3E %3Cpath style='fill:%237f00ff; stroke:none;' d='M39 77L39 108L70 108L70 77L39 77z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M77 77L77 108L108 108L108 77L77 77z'/%3E %3Cpath style='fill:%2300f0ff; stroke:none;' d='M115 77L115 108L146 108L146 77L115 77z'/%3E %3Cpath style='fill:%230f2000; stroke:none;' d='M0 108L0 109L32 109L0 108M76 108L76 109L108 109L76 108z'/%3E %3Cpath style='fill:%23001e20; stroke:none;' d='M115 108L115 109L146 109L115 108z'/%3E %3Cpath style='fill:%23810064; stroke:none;' d='M0 114L0 115L32 115L0 114z'/%3E %3Cpath style='fill:%23398000; stroke:none;' d='M38 114L38 115L70 115L38 114z'/%3E %3Cpath style='fill:%23800063; stroke:none;' d='M76 114L76 146L77 146L77 115L108 115L76 114z'/%3E %3Cpath style='fill:%23200041; stroke:none;' d='M114 114L114 146L115 146L114 114z'/%3E %3Cpath style='fill:%23410080; stroke:none;' d='M115 114L115 115L146 115L115 114z'/%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M0 115L0 146L31 146L31 115L0 115z'/%3E %3Cpath style='fill:%23df01ae; stroke:none;' d='M31 115L31 146L32 146L31 115z'/%3E %3Cpath style='fill:%2354bf00; stroke:none;' d='M38 115L38 146L39 146L38 115z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M39 115L39 146L70 146L70 115L39 115z'/%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M77 115L77 146L108 146L108 115L77 115z'/%3E %3Cpath style='fill:%2360004a; stroke:none;' d='M108 115L108 146L109 146L108 115z'/%3E %3Cpath style='fill:%237f00ff; stroke:none;' d='M115 115L115 146L146 146L146 115L115 115z'/%3E %3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'a4ef4b0b23c1fc81d3f9ecf93510e64f58a4a016.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'marma j token',\n symbol: 'marmaj',\n icon:\n 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCABgAGADASIAAhEBAxEB/8QAGwAAAwADAQEAAAAAAAAAAAAABQYHAgQIAAP/xAAwEAACAgIBAwQCAgIBBAMBAAABAgMEBRESBhMhAAciMQgUFUEyQlIkUWFyFhcjcf/EABoBAAMBAQEBAAAAAAAAAAAAAAMEBQAGAgH/xAAzEQABAwIFAgQEBgIDAAAAAAABAgMEESEABQYxURJBYXGBsRMikaEjM8HR8PEU4TJCUv/aAAwDAQACEQMRAD8A589vPx06I6g9vsD1jlopMobSxWMhahsHnAG0WVgQdgK33rYOt6AJ9NT/AIt+2NXKZafI4mxFjaQWGBjMQ0kjIp8H+yNgKP7LHf16+347xnLdEYjGdJfuxZKeisc7QzKsCHtKO7KrDXjY/okgDXj0z+1eD6y6HgmrZXqbH5K9kP8ArMMt6Sa9XMIXg0sMjlTHI6mNmHEniV0fLAc48/J1LIKGqsoasSO/Jr6ffHfSHoGlojbrzQdW4AQKVoaWFKX3qfLCEn41dF0uoaFirgq2Qx4hlazBJDamVJWbUY5RnXELy34OyAdefU3656L9sekcvcizXT5ihhkavGwjmiikfmpT5aPBwj8G58QdBgAfvqmbOddZHJVsZarrVNmVkknrRKqxRhSe5uRmDDYUaHkchsaO/SN/9adPX+sHnz+Re1lZMpJF+njbEYSzEjIknfbWlnCuCU+OwRr/AC5BefqOAwn4EdRJTue559t8Ro2VT33FS56UpCtk9hxb9MT1fxz6Ow2Akms4xcvJZjjNaWoxVa0UhCrIWYnmfmCq/ItxJ8jyDnUf41e0axQ3cPXZqn8c9szCdkDM4+HykUAEBWGgrEnfga2Lp+rhrvHHSQQxyfyk/wAZKaxNBBWn4xcZipQeEgQDkn+Q0fPpPs2RH/JyQd5Wetc5yzI8Qj5N3wiyyKdKVmJPDmxZSOXx36mQJk1785Cwd6moBGFs/lxm4jpiFBTQBNNwa3vie9OfjT7PyCfI5yBhVbGra7pnZlV1X5kNGNEnkoClVIIXw29kLJ+OfQ2a6ahlgxww81NJWtT2uTi1ChYNJtW0hHEll0rLyB8D7rlayJP4x5+8zLWp8JYUeUScW75RpY1G1CwgjmEYMwHL5b9OH6uGpc8dHBDJJ/KQfGOmsrTwWZ+MvKYKEPh50I5P/idnx6+T5k1n8lKyd6ipAHtjafmRlxGjLKAmhCq7k1tfeuOOOh+iOgevMzWjwPRVyON5o4mWaRVQHkxbfcdSSyR8VH9A8iG34pEX4jdLnM2rFzFZCvV7Cfq1hqRFlVtuXkTl8GU6GypGmJ/rbzJ0BhYOp44sTkTFkYsnFAlTKzp/0UDPIsQrSgb7pCswiBKgb5DxsuFW77hY7KW8bDKthKsyJDbZ0dJUKAlnIQdttkjiOR0N/R9VMv1JBfT8GSSkq25HH94YlZPOacTKgBKwNwe/c/1iTVfxZ9rruSxVmrjLbVnmevdhawNxScCw2QNjXE/+DsH69KPu1+OHRPS/t5mOucbjZqorvypd2Ys00Rk0CQBpQUXeyN7J+h92j3c6Xy3ubjRSHVNZMpgI3yGSnFLjW/WEbDtsqEPJKAHKAtrw3hSR6S/yMxLYL2/yeM6hFyXIQVEWtkDellitRjQLBS2k3oFlAIBI8nwfTLT0jTkgNvEvIdsK36b2Na+P2xXjuwtURHXWWg0psEntU0valtqjtfDh7J5HEdA/jvjjUiVszmajS2rESGWeOMDgfiuyeIAUAD7O9Hzs3MkWV6MoSRbf+DkEDBfEixryVRoeQSFU/wBf9/69QPo/O5fBdKYTJxZv9ZchQi5Gacr3IlXRTRRkQqWZlddA6Ct5Hl3xGbvQSS15sxmDl8paXF4Jo5mihyojCd+xG6oR3gF5gsCOJUab5aVz2alEQxIvyqJqTzzf34A4BxOgMuvSxmM0ghIokdhwac+588UTF+5+SzXSEWIfpyaTGN3a2ay6PCbWCbgwR2RWYNIGKMW0OKhiQfBKji87TzPUuf6cg68a9msRbr3KANNYEkUxDnE7cV5zsY9kNsa0672QpzG8zR6sxVXK5LGZDIRIlen+rAjIFiCu8RKqJpG1z02h54n736VcNhsXZxcEMNWSxTsPHbjjtwmvYgsREKfKhT3OSP8A7H7Pliyr6NlOTw8sYD626uLPUaja3r+m3qROPTc+klHXRpNhQ70/njv9C3W/uHhcJnITdWxbbNXJKt+OrF8qjJEPFgRqXCfEllA1sk6OvArpzLZrNYe7VtWKurxa3iX/AGnmn0iLEwBePlxTlxMgGySCNgj0ThxkUmdpZjCYilYtZi6Z57YgNexznHbijZWX+lcKS2j8R4Oz6IW/bSx0XNPj7rV6FC4v8lEqtw4Scg03J96+/BGvpx5+9gmalZChHauo2A8t6De2KKtPxctQXJQHTx5ix4v784XOpMtmsLh6VWtYq6o8beWf9p4Z9OjRKCUj5cX48RIRsEEnQB9FeiPcPC5vOTGktio2FuR1aEdqL5W2eI+K4kUOU+QKqRrYB0N+d6p7aWOtJoMfSavfoU1/kpVZufOTkWh4vvX34A19IfP1ofNjIo87dzGbxFKvaw90TwWzAbFjnAO3LGqqv9qhUFdn5HwND1oepWSox3LKFAR57VG98ZOn4uZIDkYDp48hc8W9+Ma+YzKYXqTp/AWOsLlLI5q1as35oaKzpE6wkxwI5Vgk69wt414HJtHjtty3uLmsV0PJgYen5a+NrwpUweSknrrZzZWIcmUlwqyM6s3IAhlbkDv0jZnDYuti54ZqslenXeS3JHUhNixPYlJUeWDHucnT/YfQG1KsvpsvPNFT6Sxs2YyeQyWPidJ6q1oGdw0RVXlYKwhkXly0ux44j636Pm2Tw8yYMhtujiD1Cg3t32/Xf1E5t2ZkUkI6/wAJVjU7VP8AONvqUpR/xHR2QM0bV3zbNViRk1Lp1CeV87I5ltAkefBO9+k33+zmM6r/ABuu08nCkGQx3alqTWk7c7xK3HXE6II8r/5Gj/foXn8vkpbccC5PMplsbZXG5t5JmmhxayRkQWZHZADOeXMlRrirDS/Hc29zMxlequjMzdt5iO4tGLuRlbBYRKQVAAVVRnIBJdt65sq7LeA5DOS5FEWT8ygag8cX9vC+xGCZgw4zLOYQjRKk9Kh2PNvfx8sO3svD0zgejsPYNtbkubx9etPVMffhqABmbmqhv8hx4oQOTOdnydWxaFHMYulbgoZWaxjxBZqu881OGnKiKJuMY1xPakmACRnwjjR+vUs9i+rUm9osVhchBhDVSisU37EvdYqjCRtodaYL2wNH7dfI4tprs2e2Ow+cpMyyrNK/8m0nbCOkkqoJ+4rKNhNnTFpW1x8+pT8Auy0Pf9guprsR/WFcw1DCDBi/FBSUAdIBBB735rgV7idb5zCYUXTWyGaa3NHVjv1ZoomqN8YxZHgbQOwAYknQXZG/GOMhzskVDCZjF5LMWrFaMW552Fp/2IijK0cUfJV/5FlA8qvg736GZbpzD5rNS2quUN4frz88TbdIh35HicqGiU9teQAcr5J8EEHXpj9tLc3RdhruPtrcoUISqxZLl3E48ubd5hseANEch4Pj+zU1LMUGfhRxVR2ANPIV7XxX0+pGWxRJcPy0tsfqO9vX640Y47kVywiXJ6+TrygBQOyZjH5UlTwZCrxKfIcIJf8AYt8ad1tLj+uugUyt+vFP2ULSQsAyEEGOeNwfseWBB8bUE/Xr0vW3QPXWPiv5WKOHvoGhkZgwKEbDxzxk+CNkEEHXkgeoD7o+6UnRE2R6V6Yz1e5ishGY2kEiPIJnQAqCAUIKsuzoa1s/7MC6X0uhSBNmChH258645POc5k6kkrYYXRAuSe/gMX7omXH9C9AvlaFeKDvIGjhUBUAAEcEaAfQ8KAB42xI+/UxkjuS3K6PcnsZOxKQQR3jCZPLEKObOWeVj4CBxF/qV+Sf7Xe6MnW82O6V6nz1elisegjVzIiSmZEICkkBAAqto6O97H+rG/RdbdA9C4+W/ioo5uwhaaRWCgIBsvJPIR4Hgkkk68gH1tT6YQlBmwhUn7+vamNk2cydOSUMPrqg3BHbwOJfk4c7HFfwmHxeSw9qvWkFSeBhVf9iUuzNJFJxVv+QZgfLN4Gt+svbzrfOZvCm6K2QwrVJpKsl+1NFK1tvlGbJ8HSF1ILAg6LaJ153vcu3N1pYW7kLa06F+EK0WN5dx+XHg3eUbPgnZPEeR4/sLmJ6cw+FzUVq1lDRH68HDE1HSUd+N5XClpVHcXkSELeQfAAA16FpqYos/DkCihuDe/cE9746zP1IzKKZTZ+Wl9h6gdrev0xVZatbF4q1atU8tHPcWeedksTXIbbujdgNGd8j20iBDxjxIo0Pr1z37+npnLdK5Ccy/rvjIWpV6scXZhn2Oasqso8KFIZADxZRo6A3Wa1nuDsR5ymrNK00T/wAm0fcDu8kSuIO2qqdFNjbBol3y8ekL8i+oI39pbOKoR4hKqInZFRwjFWLOo4DkCeLSbJYEGNvJ5LymxIBamLeO5XUU2AP+sRYWoIaowiB0dIRTpINSe1+cb/sN0nFF7P4rN3beEaq9ISz/ALEXbZQ79tgXOwW49sgAeDGvg8m23Wa3cHffB0lZpVhlT+MaPuB3SOVkM/bVVOg+jtg0Ta5efUz9jYsLk+kcZWtQQ02xFCvbeYOIIbCtzDmR0I2VHHTkni0Z2PB9XeK1WxeJq1qtzLRT3FgrwK9ea5DbkdF73GQb5HtpKQUkB07nY+/XmTPLUxDI/wCRXQ12AJ/bHqfp+GqOZZZASEVqCSSe9vPEqy3UeHwualq1cWaI/Xn55a2iSjvxvEhYLEw7i8iC4XyD5JAG/TH7aVJutLDUsfUWnQvwlllyXLuPy5c17LHZ8EaA4jyfP9DR9xOiM5m8KKRs5DCtUmjtR0KsMUrW2+MgrDydIXUEKQDorsHXnHGTZ2OKhm8xlMlh7VetGbcE6iq/7EpRVVJY+Kt/xKqT5ZfI1r1U1LDUWfixzRQ2Iv5Gne+LGn0ozKKIzg+Wlth9T2t6/TFQl6J6B6Fx8VDKyxzdhAsMbKFAQDQSOCMDwBsAAE68En1Bfcr21s9XWsj1f0hhYMfjcdEzlVjjSXvKgJdR4ReKKvjZOz/7KWyOS5LcsOlOexk7EoIIPeMJk8KCx5s5Z5VHkoHEX+pX5U7raLH9C9Apir9iKDvIVkmYhUAAMk8jk/Q8MST42wB+/RdManQlAhTT1FX35t2pjk85yaTpuSt9hFUGxBrbxGIL7a+2tnpG1jur+r8LBkMdkY1cBo43lMzISHYeUbkrN42Dsf8AqovUXRPQPXWPloYqWOHvoVmjVQwKEaKSQSA+CNAggHXgEevdExY/rroF8VQsRT9lAscykMhBAkgkQj7HlSCPG1IH16mMklyK5Xd6c9fJ15SSSeyZjH4YBhwZCrxMPBcIJf8AYt8dqfU6FI/woXylP24t3rjZNk0nUklD76KIFgB38Tje9y6k3RdhaWQqLcoUIQzS43l3E48eC9lTseAdg8h4Hn+iuYnqTD5rNRVrWLN4frwcMtURIh35HlQMVlY9teQJQN5J8gkHfonk5s7JFfzeHymSzFqxWkNSCBRaf9iIurLJLJyVf+IViPKt5O9esvbzojOYTCmkLOQzTW5pLUlC1DFE1RvlIax8jaB2JKgE6DaA34FpqGoM/EkGqjuTa/ckdr46zUCUZbFMVsfLS+x9Ae9vX64K1q3bHfjwdNmWVoYk/jGk7YR3jiZzB3FZRsvoaYtKu+Pj1PvyT6VVvaVs3jr2HSqpEkS1UV2lVQ8Srz8eQvcYjW9sTocRq2S2quUxVqrauZaSems8E6pXmpw1HRG7HKQ64ntvESXkPiNTs/frnb8jf/juJ6OmrRETS5bndisLJ34YlVOKojMx/wAtks4I5MR4IPidDnl2atk7hdBTYgf6xFh5BDRGEsNApKK9RJBB7W88Dug+ms1m+j8HRhxn70dajHJwlqk/rxOORJJdUctohUXYAZWbyTqgYjE5KXuNJicyuUxltMthEigaWLF90J3q6IrgGYh+ChtDiAdrttm/YbF1utvx1pT1544sli67QyxV5GjsSwDbH5DRB/2Ug62CP736Z7Eq4noyn2pHhOclEzSK2pWRuTIeWj5ClQNgj6Gj9eqOfQUuRTLjfMoGhHHNvsfDwJw9l77rMsZdNHSlSapPY8XP28fLAzHrLHS6sydfEZPI5HHxI8Fs2YGdw0QZkiBZhDIu+O22PHI/WvSphszi62LgmhtSV6dd46kcluY2LE9iUhj4Use5yd/9R9HwpVW9PGJ9t8vh+i1z8nUU8OMiWW5m8WkNdbOcIRiiNxQKsjMFXiSeSsVPnXpUxGFhwvUnUGfr9GWqWTzNurVoRy3lnjiZYQJJ3QMwSde4F22vACro8tnynOIeZMBhblHEHpNTvbtt+u/oAuNTMiklfR+Eq4oNq+v7bfX7w5OKPO0sPhMvSr2sPdME9QTmxY5wDuRSMzN/aoGIbZ+Q8jR9ELfuXY60mnyF1a9+hTX+NiZV585OQWbkmtffknf0g8fetHrf27wubzkIutYqNhbklq/JVl+VtniHmwY2DlPkQzA62CNjfkV03ic1hcPdtWa9XVHlUxKfqvDPp0WViA8nLi/HkYwdggAaAHoEzTTJUJDVlC4PnvQ73xSVqCLmSC3KI6efIWHFvfjDHU9y7HRc0GQpLXoULi/xsrMvDhJyKw8U1r78g7+nPj62PmycUmdu4fN5elYtZi6IIKhnNexznHclkVlb+lcsAuj8T5Ox6GdR4nNZrD0rVWvV1eK1Msn6rzT6RGlUkJJy4py5CMnZJIOwT6K9Ee3eFwmcmFJrFts1cjtUJLUvyqMkR81zIxcJ8QFYnWyBs68aHplkKMhy6jQk97bVO9sZOoIuWoDcYjp58xccX9+cCczmcXZxc801qSxTsPJUkkqTGvYgsREsPDFT3OSJ/qfseGLM3psvpNLT6SyU2IyePyWQikee0tmBXQLEWVJVDKJpG48droeeQ+9el/MYZM11J0/n7HR9y7ksLatVr8UN5YEldoSI50Qsoedu2V2N+CVbZ46bct7dZnK9DyZ6HqCWxjZ4kt4PGyQV2s4QtEOSqChVpFdmXiCAqrxUb9HzbOIeWsGO25VxZ6RQ7W77/pt6Ga21Mz2SF9FGk3NRvQ/znf6IHUGIyMVqOdcZmHy2Ssrks2skLQw5RY4yYK0iM5AnHHgQp1xZjtvjqS+8GNzHSfR96jYwZrJel7QMVYqCgikcMSrsqEf4FG+yCyga366gpSDL9HZASyPYfCM1qJ2fcukUP5bxongV8ADx4A1r1MPyVwcHS34+x2bF1hcyeRSFYpn7s7VTVlkALHz5fi5/oAKP69C0/BDcUSpPyqJoBzxb28LbAY95nJcckqy+GKpSKqPYc39/HGX415ObHdE4m90y96XJ1qhaWtHWaSGdfJ4O2uK71oHkCD/3+i4e0/UnUnuLWmns9KUKeQww/TwyTzvBT/XI5MIyyl5ZY1EavpRocP8AAk7lvs5759F4foTEdA5HqeljY6yolvi2hPFzPP5a8bAOx9nQ/o+XK3+RvtZNl8tTyPVkElCdknquoJMcoQDa+PH0CD9eCDsHXph9qRpmQXGgXkO3IF+m9xT1+2LDsaHqqG0066GltgAEkCppa5NtqHz2xQ7GL6/x2SqZGyy2P1ZmkmrQlGjlQow4IHI4nZB5a38df/xLX3EwNTqx1zVAwZSLJzTNaxcMZ/UhZ42lNiMnZl4qqmQ8gBrR+PEqU35PdGyZiolLqmKvTjgk/YkDzACZW1Hxj2FZWGyx1sfHwdHcy62609v+u8tPP1B1ZLKkszzosbKiRsHAUkJwDMyIGYnegQqknel5+nIEhPx46Skq3Hcc/wBHEWNm09hxUSeUrA2UDUHsL3+uOw/2sNS45GSeGST+Un+UlxZTPBZn5RcYSwQ+HgcHi/8AiNDx6T7NYSfyaQd5mWtc5xTO8ok4t2A6xSMNqFhIPAowZiePy16k7fkL0blsA9ae/Fipa0cX60dKdZEniTTLEVbXAjgArAgryI8D0Y6i/Iz2olWPH4a9DHUGLav2uIdQy+EHGRyC3zYkhlPhiC29GXl8Oazd5aydqG4AwtqCHGXEdEQICaAim5Nb2xQK1YR/xiT95WatT4RQu8Qj5N2C7RRsdKVmAHMuxZQePx16cP2sNd5ZGOeGOT+Ug+UdxYjBBWn5S8oQxQeEncnin+R2PPqHdO/kZ7UJHLRy1+GWscalUVwoQMX8OeKOFBAVW2XZj48jXEA2/IrovD4OGlVvx5qa7HILEdqwkSVopOTNDoeGJ5kMxJJ0Ad/Q0+HNe/JWsHagsKY2n4cZuI0JYQUkEmu4NbW3rijSe4GFn6njlxOOMuRlycU6W8rAg/dgV5GiNaIHfdAZlEoAUjfI+dBxrUfcLI5O3kYYlrpamV4arLGiRIEAKuFc9w7BPL4nR19D1yL0b7hdE+3mUrWMLn8lKsdiOR1klqON8nDE9xm0VV9qd7P+JK69VSP8tulxl7Fe/evvCa0ZrzG1Aq95m+ayJG6qFVdH/YnbA/0RUy/TcFhPxpIKinbx4wxJzic84mLAKUA7k9uxp++KP7u9T5f2zxYvDparJlM7G+PyUIucq36xRv8A9HKAvHKQXCErryw+RA9S38ssrLmuhY8pnv24L9meOSGi1OSGKnGa0nxViupCDxViDonXgaAG+35R+3mPyWOr43IZBq0VhprksbVAZn4FQ3yk/vZ+9aAUa16nXv3774nrjoN+iMHZntQwZAzo1gw8oYVjm4IOL7YadDvzryP+wDbKJGfSA86C0lq4H/rgUpikhiFpuE6wy6HVOCh70Pe9b704tj//2Q==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'marmaj.tkn.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked NEAR',\n symbol: 'STNEAR',\n icon:\n \"data:image/svg+xml,%3csvg width='96' height='96' viewBox='0 0 96 96' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='96' height='96' rx='48' fill='white'/%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M48.0006 20L41.2575 26.7431L48.0006 33.4862L54.7437 26.7431L48.0006 20ZM37.281 30.7188L30.7144 37.2853L47.9998 54.5707L65.2851 37.2853L58.7186 30.7188L47.9998 41.4376L37.281 30.7188ZM26.7384 41.261L19.9953 48.0041L47.9995 76.0083L76.0037 48.0041L69.2606 41.2611L47.9995 62.5221L26.7384 41.261Z' fill='%23231B51'/%3e%3c/svg%3e\",\n reference: 'https://metapool.app',\n reference_hash: null,\n decimals: 24,\n id: 'meta-pool.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Cheddar',\n symbol: 'Cheddar',\n icon:\n 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI1LjMuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA2NCA2NCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjQgNjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDp1cmwoI1hNTElEXzE2Xyk7fQoJLnN0MXtmaWxsOiNGRkU5NTk7fQoJLnN0MntvcGFjaXR5OjAuMjt9Cgkuc3Qze2ZpbGw6IzQyNDI0Mjt9Cgkuc3Q0e29wYWNpdHk6MC45O2ZpbGw6dXJsKCNYTUxJRF8xN18pO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyAgICA7fQoJLnN0NXtmaWxsOnVybCgjU1ZHSURfMV8pO30KCS5zdDZ7ZmlsbDp1cmwoI1hNTElEXzE4Xyk7fQoJLnN0N3tvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMTlfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDh7ZmlsbDp1cmwoI1hNTElEXzIwXyk7fQoJLnN0OXtvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMjFfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDEwe2ZpbGw6dXJsKCNTVkdJRF8yXyk7fQoJLnN0MTF7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzIyXyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3QxMntmaWxsOnVybCgjWE1MSURfMjNfKTt9Cgkuc3QxM3tvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMjRfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDE0e2ZpbGw6dXJsKCNTVkdJRF8zXyk7fQoJLnN0MTV7ZmlsbDp1cmwoI1hNTElEXzI2Xyk7fQoJLnN0MTZ7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzI3Xyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3QxN3tmaWxsOnVybCgjWE1MSURfMzFfKTt9Cgkuc3QxOHtvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMzNfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDE5e2ZpbGw6dXJsKCNTVkdJRF80Xyk7fQoJLnN0MjB7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzM0Xyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3QyMXtmaWxsOnVybCgjWE1MSURfMzZfKTt9Cgkuc3QyMntvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMzdfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDIze2ZpbGw6dXJsKCNTVkdJRF81Xyk7fQoJLnN0MjR7ZmlsbDp1cmwoI1hNTElEXzM4Xyk7fQoJLnN0MjV7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzM5Xyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3QyNntmaWxsOnVybCgjWE1MSURfNDBfKTt9Cgkuc3QyN3tvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfNDFfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDI4e2ZpbGw6dXJsKCNTVkdJRF82Xyk7fQoJLnN0Mjl7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzQyXyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cjwvc3R5bGU+CjxnIGlkPSJMYXllcl8xXzFfIj4KCQoJCTxsaW5lYXJHcmFkaWVudCBpZD0iWE1MSURfMTZfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9Ii0xODIxLjEzNTMiIHkxPSI5ODMuMTc0MyIgeDI9Ii0xODIxLjEzNTMiIHkyPSI5OTguMDU0MyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMSAwIDAgMSAtMTc5MC4yNzUzIC05NDYpIj4KCQk8c3RvcCAgb2Zmc2V0PSIxLjk3MDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNGN0JDMDAiLz4KCQk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojRkNENzNFIi8+Cgk8L2xpbmVhckdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzY4XyIgY2xhc3M9InN0MCIgZD0iTTUyLjMsNDAuMnYxNC4xbC00MC4yLTYuMWMtMS41LTAuMy0yLjYtMS4zLTIuNi0yLjNjMC4xLTMuOC0wLjEtNy41LDAtMTEuMQoJCWMwLTAuNywwLjEtMS41LDEuMi0xLjdjMC43LTAuMSwxLjYsMC4yLDIuMywwLjNsNC45LDAuOGMwLDAuMSwwLDAuMywwLDAuNGMwLDEuNiwxLjcsMyw0LDMuMWMyLDAuMSwzLjYtMC44LDMuOS0yLjJMNDAuNiwzOAoJCWMtMC4xLDAuMi0wLjIsMC40LTAuMiwwLjVjMCwwLjcsMC45LDEuMywxLjksMS40YzEuMSwwLjEsMS45LTAuNCwxLjktMS4yYzAtMC4xLDAtMC4xLDAtMC4yQzQ0LjEsMzguNiw1Mi4zLDQwLjIsNTIuMyw0MC4yeiIvPgoJPHBhdGggY2xhc3M9InN0MSIgZD0iTTkuNSwzNC44YzAuMy0xLjItMC40LTIuNiwzLjUtMS41bDQuOSwwLjhjMC40LTEsMi0xLjYsMy44LTEuNGMyLjIsMC4xLDQsMS4zLDQsMi41YzAsMC4xLDAsMC4yLDAsMC4zCgkJTDQwLjUsMzhsMCwwYzAuMy0wLjMsMS0wLjQsMS43LTAuNGMxLDAuMSwxLjksMC41LDEuOSwxLjFsOC4yLDEuNkwzMC44LDI3LjVjLTItMS4yLTQuNS0xLjctNi43LTEuM2MtMi4yLDAuMy01LDAuOC03LjEsMS42CgkJYy0yLjUsMC45LTQuOCwyLjQtNi4yLDMuNmMtMC4xLDAuMS0wLjYsMC41LTAuOSwxLjFDOS41LDMzLDkuNSwzMy44LDkuNSwzNC44eiIvPgoJPGcgY2xhc3M9InN0MiI+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI1LjQsMjdjMS42LDAsMy4zLDAuNCw0LjcsMS4zbDIxLDEyLjV2MTIuNmwtMzguOC01LjljLTAuOS0wLjItMS43LTAuOC0xLjYtMS40YzAtMi4yLDAtNC4zLDAtNi41CgkJCWMwLTEuNSwwLTMuMSwwLTQuN2MwLTAuMSwwLTAuMiwwLTAuNGwwLDBjMC0wLjUsMC4xLTEuMiwwLjMtMS42YzAuMi0wLjQsMC41LTAuNywwLjYtMC44YzEuNC0xLjEsMy42LTIuNSw1LjgtMy40CgkJCWMxLjYtMC42LDQtMS4xLDYuOC0xLjVDMjQuNiwyNywyNC45LDI3LDI1LjQsMjcgTTI1LjQsMjYuMWMtMC40LDAtMC45LDAtMS4zLDAuMWMtMi4yLDAuMy01LDAuOC03LjEsMS42CgkJCWMtMi41LDAuOS00LjgsMi40LTYuMiwzLjZjLTAuMSwwLjEtMC42LDAuNS0wLjksMS4xYy0wLjMsMC41LTAuMywxLjItMC40LDEuOWMwLDAuMiwwLDAuMywwLDAuNGMwLDMuNywwLjEsNy41LDAuMSwxMS4xCgkJCWMwLDEuMSwxLjEsMi4xLDIuNiwyLjNsNDAuMiw2LjFWNDAuMkwzMC44LDI3LjVDMjkuMiwyNi42LDI3LjMsMjYuMSwyNS40LDI2LjFMMjUuNCwyNi4xeiIvPgoJPC9nPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF8xN18iIGN4PSItMzA0NS4xOTg3IiBjeT0iMjA0Ny40NDY5IiByPSI2Ljg2ODciIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuNDI1OCAwIDAgMC4zMjI1IC0xMjc5Ljk4MTMgLTYxNy4xODk5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzM1XyIgY2xhc3M9InN0NCIgZD0iTTE4LjQsNDMuOGMwLDEuMi0xLjMsMi4xLTMsMmMtMS42LTAuMS0zLTEuMi0zLTIuM3MxLjMtMi4xLDMtMkMxNyw0MS41LDE4LjQsNDIuNiwxOC40LDQzLjh6IgoJCS8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlNWR0lEXzFfIiBjeD0iLTMwNjQuNDI3NSIgY3k9IjIwMTUuOTU3IiByPSIxNC4xMzIxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjQyNTggMCAwIDAuMzIyNSAtMTI3OS45ODEzIC02MTcuMTg5OSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjEzMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNERTdGMTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjMzODkiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQTdEMTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU5OTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRTc2MEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjg2MDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTZDMDUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0FENjUwMCIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGNsYXNzPSJzdDUiIGQ9Ik0xNy44LDM0LjRjMCwxLjYsMS43LDMsNCwzLjFjMiwwLjEsMy42LTAuOCwzLjktMi4yaC0wLjFsLTAuMy0wLjFsMC40LDAuMWMwLTAuMSwwLTAuMiwwLTAuMwoJCWMwLTEuMy0xLjgtMi40LTQtMi41Yy0xLjgtMC4xLTMuNCwwLjUtMy44LDEuNEMxNy44LDM0LjIsMTcuOCwzNC40LDE3LjgsMzQuNHoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMThfIiBjeD0iLTEzMjguMjIwMiIgY3k9IjM0ODEuNzQ3MSIgcj0iNy4xMDIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMzA3OCAwLjIyMjggMC4yNDA5IDAuMTkwOSAtMTIyMS41MjUxIC0zNDAuNzk4NCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4Ljc1MDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNEOTk5MTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjQwOTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNENTk2MTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjczNSIgc3R5bGU9InN0b3AtY29sb3I6I0M5OEQwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQkE4MjA3Ii8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzMyXyIgY2xhc3M9InN0NiIgZD0iTTI2LjgsMjkuNGMwLDAuNS0wLjksMS0yLDAuOXMtMi0wLjYtMi0xLjJzMC45LTEsMi0wLjlDMjYsMjguMiwyNi44LDI4LjgsMjYuOCwyOS40eiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF8xOV8iIGN4PSItMzA3OS41NTMiIGN5PSIyMDQ0LjQxMSIgcj0iMTUuNjcyNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC40MjU4IDAgMCAwLjMyMjUgLTEyNzkuOTgxMyAtNjE3LjE4OTkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC4xMzAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojREU3RjE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zMzg5IiBzdHlsZT0ic3RvcC1jb2xvcjojREE3RDEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC41OTkzIiBzdHlsZT0ic3RvcC1jb2xvcjojQ0U3NjBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC44NjAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQkE2QzA1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBRDY1MDAiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMzBfIiBjbGFzcz0ic3Q3IiBkPSJNMzUuMSw0My40YzAsMi4xLTIuMiwzLjUtNSwzLjNzLTUtMi01LTRjMC0yLjEsMi4yLTMuNSw1LTMuM0MzMi44LDM5LjYsMzUuMSw0MS40LDM1LjEsNDMuNHoiCgkJLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMjBfIiBjeD0iLTMwNzYuMzYxNiIgY3k9IjIwMTEuMTY0OCIgcj0iMTAuOTExOCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC40MjU4IDAgMCAwLjMyMjUgLTEyNzkuOTgxMyAtNjE3LjE4OTkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC43NTAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojRDk5OTE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC40MDk4IiBzdHlsZT0ic3RvcC1jb2xvcjojRDU5NjEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC43MzUiIHN0eWxlPSJzdG9wLWNvbG9yOiNDOThEMEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0JBODIwNyIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGlkPSJYTUxJRF8yOV8iIGNsYXNzPSJzdDgiIGQ9Ik0zNS44LDMzLjFjMCwwLjgtMS4zLDEuMy0yLjksMS4yYy0xLjYtMC4yLTIuOS0wLjgtMi45LTEuNmMwLTAuOCwxLjMtMS4zLDIuOS0xLjIKCQlDMzQuNiwzMS43LDM1LjgsMzIuMywzNS44LDMzLjF6Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlhNTElEXzIxXyIgY3g9Ii0zMTAyLjMwMzUiIGN5PSIyMDU5Ljc2NjgiIHI9IjUuOTI4NSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC40MjU4IDAgMCAwLjMyMjUgLTEyNzkuOTgxMyAtNjE3LjE4OTkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC4xMzAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojREU3RjE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zMzg5IiBzdHlsZT0ic3RvcC1jb2xvcjojREE3RDEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC41OTkzIiBzdHlsZT0ic3RvcC1jb2xvcjojQ0U3NjBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC44NjAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQkE2QzA1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBRDY1MDAiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMjhfIiBjbGFzcz0ic3Q5IiBkPSJNNDIuMyw0Ny43YzAsMS0xLjIsMS44LTIuNiwxLjdjLTEuNC0wLjEtMi42LTEtMi42LTIuMWMwLTEuMSwxLjItMS44LDIuNi0xLjcKCQlDNDEuMSw0NS45LDQyLjMsNDYuOCw0Mi4zLDQ3Ljd6Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlNWR0lEXzJfIiBjeD0iLTMxMDYuODA4OCIgY3k9IjIwMzAuMDM0MyIgcj0iOC44NDA4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjQyNTggMCAwIDAuMzIyNSAtMTI3OS45ODEzIC02MTcuMTg5OSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjYwMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNDNzczMTUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjM3NzQiIHN0eWxlPSJzdG9wLWNvbG9yOiNDMzcxMTMiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjY3MTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNCNzZDMEYiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk2NjkiIHN0eWxlPSJzdG9wLWNvbG9yOiNBMzY0MDciLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0ExNjMwNiIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGNsYXNzPSJzdDEwIiBkPSJNNDAuMiwzOC41YzAsMC43LDAuOSwxLjMsMS45LDEuNGMxLjEsMC4xLDEuOS0wLjQsMS45LTEuMmMwLTAuMSwwLTAuMSwwLTAuMmwwLDBjMC0wLjUtMC45LTEtMS45LTEuMQoJCWMtMC43LTAuMS0xLjQsMC4xLTEuNywwLjRsMCwwQzQwLjMsMzguMSw0MC4yLDM4LjMsNDAuMiwzOC41eiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF8yMl8iIGN4PSItMzExOS4yMjA1IiBjeT0iMjA0OC44OTk5IiByPSI0LjM5ODUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuNDI1OCAwIDAgMC4zMjI1IC0xMjc5Ljk4MTMgLTYxNy4xODk5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzI1XyIgY2xhc3M9InN0MTEiIGQ9Ik00OC43LDQ0YzAsMC41LTAuNiwxLTEuMywwLjljLTAuNy0wLjEtMS4zLTAuNS0xLjMtMS4xYzAtMC41LDAuNi0xLDEuMy0wLjkKCQlDNDgsNDMsNDguNyw0My40LDQ4LjcsNDR6Ii8+CjwvZz4KPGcgaWQ9IkxheWVyXzFfMl8iPgoJCgkJPGxpbmVhckdyYWRpZW50IGlkPSJYTUxJRF8yM18iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iLTIxMjYuNTcyIiB5MT0iMTAyNi43NzYxIiB4Mj0iLTIxMjYuNTcyIiB5Mj0iMTAzOS45Mzc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjc2NTIgLTEuNjc0MTIzZS0wMiAtMS44Nzk5NDdlLTAyIDAuODU5MyAtMTU3Ni4yMTU3IC04OTMuNDA4NSkiPgoJCTxzdG9wICBvZmZzZXQ9IjEuOTcwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0Y3QkMwMCIvPgoJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNGQ0Q3M0UiLz4KCTwvbGluZWFyR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfN18iIGNsYXNzPSJzdDEyIiBkPSJNNDcsMjdsLTAuNCwxMC45bC0yOC41LTUuMWMtMS4xLTAuMi0xLjgtMS0xLjgtMS44YzAuMi0yLjksMC4xLTUuOCwwLjMtOC42CgkJYzAtMC41LDAuMS0xLjIsMC45LTEuM2MwLjUtMC4xLDEuMiwwLjIsMS43LDAuM2wzLjQsMC43YzAsMC4xLDAsMC4yLDAsMC4zYzAsMS4yLDEuMiwyLjMsMi43LDIuNGMxLjQsMC4xLDIuNi0wLjYsMi44LTEuNgoJCWwxMC41LDIuMmMtMC4xLDAuMS0wLjIsMC4zLTAuMiwwLjRjMCwwLjUsMC41LDEuMSwxLjMsMS4yYzAuNywwLjEsMS4zLTAuNCwxLjMtMC45YzAtMC4xLDAtMC4xLDAtMC4yQzQxLjEsMjUuNiw0NywyNyw0NywyN3oiLz4KCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xNi41LDIyLjRjMC4yLTAuOS0wLjItMiwyLjUtMS4ybDMuNCwwLjdjMC4zLTAuNywxLjQtMS4yLDIuOC0xLjFjMS41LDAuMSwyLjgsMS4xLDIuOCwyYzAsMC4xLDAsMC4yLDAsMC4yCgkJbDEwLjUsMi4ybDAsMGMwLjItMC4zLDAuNy0wLjQsMS4zLTAuNGMwLjcsMC4xLDEuMywwLjQsMS4zLDAuOGw1LjgsMS4zTDMyLDE3Yy0xLjMtMC45LTMuMS0xLjMtNC44LTEuMWMtMS42LDAuMi0zLjYsMC41LTUuMSwxLjIKCQljLTEuOCwwLjYtMy40LDEuOC00LjUsMi43Yy0wLjEsMC4xLTAuNCwwLjQtMC42LDAuOEMxNi42LDIxLjEsMTYuNiwyMS43LDE2LjUsMjIuNHoiLz4KCTxnIGNsYXNzPSJzdDIiPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yOC4xLDE2LjVjMS4yLDAsMi4zLDAuNCwzLjMsMWwxNC43LDkuOEw0NS45LDM3bC0yNy42LTQuOWMtMC42LTAuMS0xLjItMC42LTEuMi0xLjIKCQkJYzAuMS0xLjYsMC4xLTMuMywwLjItNC45YzAtMS4yLDAuMS0yLjQsMC4xLTMuNmMwLTAuMSwwLTAuMiwwLTAuM2wwLDBjMC0wLjQsMC4xLTAuOSwwLjItMS4zYzAuMS0wLjMsMC40LTAuNSwwLjQtMC42CgkJCWMxLTAuOCwyLjYtMS45LDQuMy0yLjVjMS4yLTAuNCwyLjktMC44LDQuOS0xLjFDMjcuNSwxNi41LDI3LjgsMTYuNSwyOC4xLDE2LjUgTTI4LjEsMTUuOGMtMC40LDAtMC42LDAtMSwwLjEKCQkJYy0xLjYsMC4yLTMuNiwwLjUtNS4xLDEuMmMtMS44LDAuNi0zLjQsMS44LTQuNSwyLjdjLTAuMSwwLjEtMC40LDAuNC0wLjYsMC44Yy0wLjIsMC40LTAuMywwLjktMC4zLDEuNGMwLDAuMSwwLDAuMiwwLDAuMwoJCQljLTAuMSwyLjktMC4xLDUuOC0wLjMsOC42YzAsMC44LDAuNywxLjYsMS44LDEuOGwyOC41LDUuMUw0NywyN0wzMS45LDE3QzMwLjgsMTYuMywyOS40LDE1LjgsMjguMSwxNS44TDI4LjEsMTUuOHoiLz4KCTwvZz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMjRfIiBjeD0iLTM5OTEuOTUyOSIgY3k9IjI0MDEuOTY1MSIgcj0iNi44Njg3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjMwMzcgLTQuMzQ2MjA4ZS0wMyAtNy41ODc3MjFlLTAzIDAuMjQ4NCAtMTE3Mi42NTQ4IC01ODUuMTI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzZfIiBjbGFzcz0ic3QxMyIgZD0iTTIyLjcsMjkuNGMwLDAuOS0xLDEuNi0yLjIsMS40Yy0xLjItMC4yLTIuMS0wLjktMi4xLTEuOWMwLTEsMS0xLjYsMi4yLTEuNAoJCVMyMi43LDI4LjUsMjIuNywyOS40eiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJTVkdJRF8zXyIgY3g9Ii00MDExLjE4MTYiIGN5PSIyMzcwLjQ3NTMiIHI9IjE0LjEzMjEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMzAzNyAtNC4zNDYyMDhlLTAzIC03LjU4NzcyMWUtMDMgMC4yNDg0IC0xMTcyLjY1NDggLTU4NS4xMjkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC4xMzAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojREU3RjE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zMzg5IiBzdHlsZT0ic3RvcC1jb2xvcjojREE3RDEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC41OTkzIiBzdHlsZT0ic3RvcC1jb2xvcjojQ0U3NjBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC44NjAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQkE2QzA1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBRDY1MDAiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBjbGFzcz0ic3QxNCIgZD0iTTIyLjQsMjIuMmMwLDEuMiwxLjIsMi4zLDIuNywyLjRjMS40LDAuMSwyLjYtMC42LDIuOC0xLjZoLTAuMWgtMC4ybDAuMywwLjFjMC0wLjEsMC0wLjIsMC0wLjIKCQljMC0xLTEuMy0xLjktMi44LTJjLTEuMy0wLjEtMi40LDAuNC0yLjgsMS4xQzIyLjUsMjIsMjIuNCwyMi4xLDIyLjQsMjIuMnoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMjZfIiBjeD0iLTE3NjcuOTQ2NSIgY3k9IjQ1OTMuOTUyMSIgcj0iNy4xMDIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMjI0OCAwLjE2ODUgMC4xNjczIDAuMTQ5NSAtMTEzNy40NjU2IC0zNzEuNjE3OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4Ljc1MDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNEOTk5MTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjQwOTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNENTk2MTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjczNSIgc3R5bGU9InN0b3AtY29sb3I6I0M5OEQwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQkE4MjA3Ii8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzVfIiBjbGFzcz0ic3QxNSIgZD0iTTI5LjEsMTguNGMwLDAuNC0wLjYsMC43LTEuNCwwLjdjLTAuNy0wLjEtMS4zLTAuNC0xLjMtMC45YzAtMC40LDAuNi0wLjcsMS40LTAuNwoJCUMyOC40LDE3LjYsMjkuMSwxNy45LDI5LjEsMTguNHoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMjdfIiBjeD0iLTQwMjYuMzA3MSIgY3k9IjIzOTguOTI5MiIgcj0iMTUuNjcyNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4zMDM3IC00LjM0NjIwOGUtMDMgLTcuNTg3NzIxZS0wMyAwLjI0ODQgLTExNzIuNjU0OCAtNTg1LjEyOSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjEzMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNERTdGMTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjMzODkiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQTdEMTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU5OTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRTc2MEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjg2MDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTZDMDUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0FENjUwMCIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGlkPSJYTUxJRF80XyIgY2xhc3M9InN0MTYiIGQ9Ik0zNC42LDI5LjNjLTAuMSwxLjUtMS43LDIuNy0zLjcsMi41Yy0yLTAuMi0zLjYtMS42LTMuNS0zLjFjMC4xLTEuNSwxLjctMi43LDMuNy0yLjUKCQlDMzMsMjYuMywzNC42LDI3LjcsMzQuNiwyOS4zeiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF8zMV8iIGN4PSItNDAyMy4xMTU3IiBjeT0iMjM2NS42ODMxIiByPSIxMC45MTE4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjMwMzcgLTQuMzQ2MjA4ZS0wMyAtNy41ODc3MjFlLTAzIDAuMjQ4NCAtMTE3Mi42NTQ4IC01ODUuMTI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguNzUwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0Q5OTkxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNDA5OCIgc3R5bGU9InN0b3AtY29sb3I6I0Q1OTYxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNzM1IiBzdHlsZT0ic3RvcC1jb2xvcjojQzk4RDBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTgyMDciLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfM18iIGNsYXNzPSJzdDE3IiBkPSJNMzUuNCwyMS4zYzAsMC42LTEsMS0yLjEsMC45Yy0xLjEtMC4xLTIuMS0wLjYtMi4xLTEuM3MxLTEsMi4xLTAuOQoJCUMzNC41LDIwLjIsMzUuNCwyMC43LDM1LjQsMjEuM3oiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzNfIiBjeD0iLTQwNDkuMDU3OSIgY3k9IjI0MTQuMjg1MiIgcj0iNS45Mjg1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjMwMzcgLTQuMzQ2MjA4ZS0wMyAtNy41ODc3MjFlLTAzIDAuMjQ4NCAtMTE3Mi42NTQ4IC01ODUuMTI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzJfIiBjbGFzcz0ic3QxOCIgZD0iTTM5LjYsMzIuN2MwLDAuOC0wLjksMS4zLTEuOSwxLjNjLTEtMC4xLTEuOC0wLjgtMS44LTEuNnMwLjktMS4zLDEuOS0xLjMKCQlDMzguOSwzMS4yLDM5LjcsMzEuOSwzOS42LDMyLjd6Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlNWR0lEXzRfIiBjeD0iLTQwNTMuNTYzIiBjeT0iMjM4NC41NTI1IiByPSI4Ljg0MDgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMzAzNyAtNC4zNDYyMDhlLTAzIC03LjU4NzcyMWUtMDMgMC4yNDg0IC0xMTcyLjY1NDggLTU4NS4xMjkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC42MDAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQzc3MzE1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zNzc0IiBzdHlsZT0ic3RvcC1jb2xvcjojQzM3MTEzIi8+CgkJPHN0b3AgIG9mZnNldD0iMC42NzE4IiBzdHlsZT0ic3RvcC1jb2xvcjojQjc2QzBGIi8+CgkJPHN0b3AgIG9mZnNldD0iMC45NjY5IiBzdHlsZT0ic3RvcC1jb2xvcjojQTM2NDA3Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBMTYzMDYiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBjbGFzcz0ic3QxOSIgZD0iTTM4LjQsMjUuNmMwLDAuNSwwLjUsMS4xLDEuMywxLjJjMC43LDAuMSwxLjMtMC40LDEuMy0wLjljMC0wLjEsMC0wLjEsMC0wLjJsMCwwYzAtMC40LTAuNi0wLjgtMS4zLTAuOAoJCWMtMC41LTAuMS0xLDAuMS0xLjMsMC40bDAsMEMzOC40LDI1LjMsMzguNCwyNS41LDM4LjQsMjUuNnoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzRfIiBjeD0iLTQwNjUuOTc0NiIgY3k9IjI0MDMuNDE4MiIgcj0iNC4zOTg1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjMwMzcgLTQuMzQ2MjA4ZS0wMyAtNy41ODc3MjFlLTAzIDAuMjQ4NCAtMTE3Mi42NTQ4IC01ODUuMTI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzFfIiBjbGFzcz0ic3QyMCIgZD0iTTQ0LjMsMjkuOWMwLDAuNC0wLjQsMC43LTEsMC43cy0xLTAuNC0xLTAuOWMwLTAuNCwwLjQtMC43LDEtMC43CgkJQzQzLjgsMjkuMSw0NC4zLDI5LjQsNDQuMywyOS45eiIvPgo8L2c+CjxnIGlkPSJMYXllcl8xXzNfIj4KCQoJCTxsaW5lYXJHcmFkaWVudCBpZD0iWE1MSURfMzZfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9Ii0yNDIyLjUxNzMiIHkxPSIxMDA1LjY1NDYiIHgyPSItMjQyMi41MTczIiB5Mj0iMTAxNC43NjQzIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjYyODcgLTMuOTI5MDMwZS0wMiAtNS4wNDc5OThlLTAyIDAuODA3NyAtMTQ0MC42ODE1IC04OTIuMDUxMykiPgoJCTxzdG9wICBvZmZzZXQ9IjEuOTcwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0Y3QkMwMCIvPgoJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNGQ0Q3M0UiLz4KCTwvbGluZWFyR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMTRfIiBjbGFzcz0ic3QyMSIgZD0iTTQwLjYsMTcuMmwtMC42LDcuMmwtMTYuNy0zLjhjLTAuNi0wLjItMS4xLTAuNy0xLTEuM2MwLjItMS45LDAuMy0zLjksMC40LTUuOAoJCWMwLTAuNCwwLjEtMC44LDAuNS0wLjljMC40LTAuMSwwLjcsMC4xLDEsMC4ybDIsMC41YzAsMC4xLDAsMC4yLDAsMC4yYy0wLjEsMC44LDAuNiwxLjUsMS41LDEuNmMwLjgsMC4xLDEuNS0wLjQsMS43LTEuMWw2LjIsMS41CgkJYy0wLjEsMC4xLTAuMSwwLjItMC4xLDAuM2MwLDAuNCwwLjMsMC43LDAuNywwLjhzMC44LTAuMiwwLjktMC41di0wLjFDMzcuMiwxNi4yLDQwLjYsMTcuMiw0MC42LDE3LjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNMjIuOCwxMy43YzAuMi0wLjUsMC0xLjMsMS41LTAuN2wyLDAuNWMwLjItMC40LDAuOS0wLjgsMS43LTAuN2MwLjksMC4xLDEuNiwwLjcsMS41LDEuM2MwLDAuMSwwLDAuMSwwLDAuMgoJCWw2LjIsMS41bDAsMGMwLjItMC4yLDAuNC0wLjMsMC43LTAuMmMwLjQsMC4xLDAuNywwLjMsMC43LDAuNWwzLjQsMUwzMiwxMC4zYy0wLjgtMC42LTEuOC0wLjktMi44LTAuOGMtMSwwLjItMi4yLDAuNC0zLjEsMC43CgkJYy0xLjEsMC40LTIuMSwxLjItMi44LDEuN2MwLDAtMC4zLDAuMy0wLjQsMC41QzIyLjksMTIuOCwyMi44LDEzLjIsMjIuOCwxMy43eiIvPgoJPGcgY2xhc3M9InN0MiI+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI5LjgsOS45YzAuNywwLDEuMywwLjMsMS45LDAuN2w4LjQsNi43bC0wLjUsNi41bC0xNi4xLTMuN2MtMC40LTAuMS0wLjYtMC40LTAuNi0wLjgKCQkJYzAuMS0xLjEsMC4yLTIuMiwwLjMtMy4zYzAuMS0wLjgsMC4xLTEuNiwwLjItMi40YzAtMC4xLDAtMC4xLDAtMC4ybDAsMGMwLTAuMywwLjEtMC42LDAuMi0wLjhjMC4xLTAuMiwwLjMtMC40LDAuMy0wLjQKCQkJYzAuNi0wLjUsMS42LTEuMywyLjYtMS42YzAuNy0wLjMsMS43LTAuNSwzLTAuNkMyOS40LDkuOSwyOS42LDkuOSwyOS44LDkuOSBNMjkuOSw5LjVjLTAuMiwwLTAuNCwwLTAuNiwwYy0xLDAuMi0yLjIsMC40LTMuMSwwLjcKCQkJYy0xLjEsMC40LTIuMSwxLjItMi44LDEuN2MwLDAtMC4zLDAuMy0wLjQsMC41Yy0wLjEsMC4zLTAuMiwwLjUtMC4yLDFjMCwwLjEsMCwwLjIsMCwwLjJjLTAuMiwxLjktMC4zLDMuOS0wLjQsNS44CgkJCWMtMC4xLDAuNSwwLjQsMS4xLDEsMS4zbDE2LjYsMy45bDAuNi03LjNMMzIsMTAuM0MzMS40LDkuOCwzMC42LDkuNiwyOS45LDkuNUwyOS45LDkuNXoiLz4KCTwvZz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzdfIiBjeD0iLTYzMDAuMDcxMyIgY3k9IjMxODQuNDk5MyIgcj0iNi44Njg3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjE3OTYgLTYuODIyNTU0ZS0wMyAtMS4zOTA2NjJlLTAyIDAuMTY1NiAtMTA2MS43Nzg2IC01NTIuMjIzMykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjEzMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNERTdGMTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjMzODkiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQTdEMTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU5OTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRTc2MEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjg2MDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTZDMDUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0FENjUwMCIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGlkPSJYTUxJRF8xM18iIGNsYXNzPSJzdDIyIiBkPSJNMjYuMSwxOC41Yy0wLjEsMC42LTAuNiwxLjEtMS4zLDFjLTAuNy0wLjEtMS4yLTAuNi0xLjItMS4zYzAuMS0wLjYsMC42LTEuMSwxLjMtMQoJCUMyNS43LDE3LjMsMjYuMiwxNy45LDI2LjEsMTguNXoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iU1ZHSURfNV8iIGN4PSItNjMxOS4zMDAzIiBjeT0iMzE1My4wMDk1IiByPSIxNC4xMzIxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjE3OTYgLTYuODIyNTU0ZS0wMyAtMS4zOTA2NjJlLTAyIDAuMTY1NiAtMTA2MS43Nzg2IC01NTIuMjIzMykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjEzMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNERTdGMTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjMzODkiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQTdEMTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU5OTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRTc2MEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjg2MDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTZDMDUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0FENjUwMCIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGNsYXNzPSJzdDIzIiBkPSJNMjYuMywxMy43Yy0wLjEsMC44LDAuNiwxLjUsMS41LDEuNmMwLjgsMC4xLDEuNS0wLjQsMS43LTEuMWgtMC4xaC0wLjFoMC4yYzAtMC4xLDAtMC4xLDAtMC4yCgkJYzAuMS0wLjYtMC42LTEuMy0xLjUtMS4zYy0wLjgtMC4xLTEuNCwwLjItMS43LDAuN0MyNi4zLDEzLjUsMjYuMywxMy42LDI2LjMsMTMuN3oiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzhfIiBjeD0iLTI4OTUuMTQ2NyIgY3k9IjcyMzAuOTM4NSIgcj0iNy4xMDIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTM5NSAwLjEwOTUgOS4zMzg2MjdlLTAyIDAuMTAxOSAtMTA0OS4wOTQyIC00MDkuMzQ3OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4Ljc1MDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNEOTk5MTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjQwOTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNENTk2MTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjczNSIgc3R5bGU9InN0b3AtY29sb3I6I0M5OEQwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQkE4MjA3Ii8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzEyXyIgY2xhc3M9InN0MjQiIGQ9Ik0zMC4zLDExLjJjMCwwLjMtMC40LDAuNC0wLjksMC40cy0wLjgtMC40LTAuOC0wLjZzMC40LTAuNCwwLjktMC40CgkJQzMwLDEwLjYsMzAuMywxMC45LDMwLjMsMTEuMnoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzlfIiBjeD0iLTYzMzQuNDI1OCIgY3k9IjMxODEuNDYzNCIgcj0iMTUuNjcyNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4xNzk2IC02LjgyMjU1NGUtMDMgLTEuMzkwNjYyZS0wMiAwLjE2NTYgLTEwNjEuNzc4NiAtNTUyLjIyMzMpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC4xMzAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojREU3RjE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zMzg5IiBzdHlsZT0ic3RvcC1jb2xvcjojREE3RDEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC41OTkzIiBzdHlsZT0ic3RvcC1jb2xvcjojQ0U3NjBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC44NjAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQkE2QzA1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBRDY1MDAiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMTFfIiBjbGFzcz0ic3QyNSIgZD0iTTMzLjIsMTguNWMtMC4xLDEuMS0xLjEsMS44LTIuMiwxLjZzLTIuMS0xLjEtMi0yLjJjMC4xLTEuMSwxLjEtMS44LDIuMi0xLjYKCQlDMzIuNCwxNi42LDMzLjMsMTcuNSwzMy4yLDE4LjV6Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlhNTElEXzQwXyIgY3g9Ii02MzMxLjIzNDQiIGN5PSIzMTQ4LjIxNzMiIHI9IjEwLjkxMTgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTc5NiAtNi44MjI1NTRlLTAzIC0xLjM5MDY2MmUtMDIgMC4xNjU2IC0xMDYxLjc3ODYgLTU1Mi4yMjMzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguNzUwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0Q5OTkxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNDA5OCIgc3R5bGU9InN0b3AtY29sb3I6I0Q1OTYxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNzM1IiBzdHlsZT0ic3RvcC1jb2xvcjojQzk4RDBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTgyMDciLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMTBfIiBjbGFzcz0ic3QyNiIgZD0iTTMzLjksMTMuMmMwLDAuNC0wLjYsMC42LTEuMywwLjVjLTAuNi0wLjEtMS4yLTAuNC0xLjItMC45YzAtMC40LDAuNi0wLjYsMS4zLTAuNQoJCVMzMy45LDEyLjksMzMuOSwxMy4yeiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF80MV8iIGN4PSItNjM1Ny4xNzYzIiBjeT0iMzE5Ni44MTkzIiByPSI1LjkyODUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTc5NiAtNi44MjI1NTRlLTAzIC0xLjM5MDY2MmUtMDIgMC4xNjU2IC0xMDYxLjc3ODYgLTU1Mi4yMjMzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzlfIiBjbGFzcz0ic3QyNyIgZD0iTTM2LDIwLjljMCwwLjUtMC41LDAuOS0xLjIsMC44Yy0wLjYtMC4xLTEuMS0wLjUtMS0xLjFjMC0wLjUsMC41LTAuOSwxLjItMC44CgkJQzM1LjYsMTkuOSwzNi4xLDIwLjMsMzYsMjAuOXoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iU1ZHSURfNl8iIGN4PSItNjM2MS42ODE2IiBjeT0iMzE2Ny4wODY3IiByPSI4Ljg0MDgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTc5NiAtNi44MjI1NTRlLTAzIC0xLjM5MDY2MmUtMDIgMC4xNjU2IC0xMDYxLjc3ODYgLTU1Mi4yMjMzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguNjAwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0M3NzMxNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzc3NCIgc3R5bGU9InN0b3AtY29sb3I6I0MzNzExMyIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNjcxOCIgc3R5bGU9InN0b3AtY29sb3I6I0I3NkMwRiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTY2OSIgc3R5bGU9InN0b3AtY29sb3I6I0EzNjQwNyIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQTE2MzA2Ii8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggY2xhc3M9InN0MjgiIGQ9Ik0zNS41LDE2LjFjMCwwLjQsMC4zLDAuNywwLjcsMC44YzAuNCwwLjEsMC44LTAuMiwwLjktMC41di0wLjFsMCwwYzAtMC4zLTAuNC0wLjUtMC43LTAuNQoJCWMtMC40LDAtMC42LDAtMC43LDAuMmwwLDBDMzUuNiwxNS45LDM1LjUsMTYsMzUuNSwxNi4xeiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF80Ml8iIGN4PSItNjM3NC4wOTMzIiBjeT0iMzE4NS45NTI0IiByPSI0LjM5ODUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTc5NiAtNi44MjI1NTRlLTAzIC0xLjM5MDY2MmUtMDIgMC4xNjU2IC0xMDYxLjc3ODYgLTU1Mi4yMjMzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzhfIiBjbGFzcz0ic3QyOSIgZD0iTTM4LjksMTkuMWMwLDAuMy0wLjMsMC40LTAuNiwwLjRjLTAuNCwwLTAuNS0wLjMtMC41LTAuNnMwLjMtMC40LDAuNi0wLjQKCQlDMzguNywxOC41LDM4LjksMTguOCwzOC45LDE5LjF6Ii8+CjwvZz4KPC9zdmc+Cg==',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'token.cheddar.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Pulse',\n symbol: 'PULSE',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iMTYiIGN5PSIxNiIgcj0iMTYiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNi41NTAzNSAxOS4xMjM5TDkuMTcxNjYgMTQuOTQ5MkM5LjMyNzMxIDE0LjcwMTMgOS41OTk0OCAxNC41NTA4IDkuODkyMiAxNC41NTA4SDE4LjQxNEMxOS41NDEyIDE0LjU1MDggMjAuNTYxNCAxMy44ODM2IDIxLjAxMzMgMTIuODUwOUMyMS4zNjQ3IDEyLjA0NzYgMjAuNzc2MSAxMS4xNDc3IDE5Ljg5OTMgMTEuMTQ3N0gxMS45NzQyTDExLjU0ODggMTEuMjU0TDEzLjY0NjEgNy40NDA3OEMxMy43OTU2IDcuMTY4OTEgMTQuMDgxMyA3IDE0LjM5MTUgN0gyMi4wNzU0QzI1LjA1NDMgNyAyNy4xMTA3IDkuOTgyNzkgMjYuMDUxMyAxMi43NjdMMjUuODYzMSAxMy4yNjEzQzI0LjU0NDQgMTYuNzI2OSAyMS4yMjE4IDE5LjAxNzYgMTcuNTEzOCAxOS4wMTc2SDYuOTc1NzVMNi41NTAzNSAxOS4xMjM5Wk04LjM2ODg0IDE5Ljk3NDdDNy4wNTA0MiAxOS45NzQ3IDUuODM2NTUgMjAuNjkyNSA1LjIwMTE4IDIxLjg0NzdDNC42MTIyMyAyMi45MTg1IDUuMzg2OTQgMjQuMjI4NyA2LjYwOTAzIDI0LjIyODdIMTAuODA0NEwxMy40NjMxIDE5Ljg2ODRMMTMuMTQ0MSAxOS45NzQ3SDguMzY4ODRaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfMjBfMykiLz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8yMF8zIiB4MT0iMTguMDI2NiIgeTE9IjUuNTI5MjYiIHgyPSIyLjI2ODYxIiB5Mj0iMzAuMTExNyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjREQ1OUZGIi8+CjxzdG9wIG9mZnNldD0iMC40NzM5NTgiIHN0b3AtY29sb3I9IiM1MDY5RkYiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDAyNUZGIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==',\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '52a047ee205701895ee06a375492490ec9c597ce.factory.bridge.near',\n },\n {\n decimals: 18,\n icon:\n 'data:image/png;base64,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',\n name: 'Ether',\n reference: null,\n reference_hash: null,\n spec: 'ft-1.0.0',\n symbol: 'ETH',\n id: 'aurora',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Pixeltoken',\n symbol: 'PXT',\n icon:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAANdJREFUWIXll70RwjAMhWUuNGwARVgEmuyQJRgo7AA7uGESGioaGlpTcK+w7nR+gcIyfJ1zys/7dHKSsO53SSqyqHlzEZFu7gm364Wq22z3VF07BpB8CANXn971JRP+Dejk8fSgLoz6kgm/Btjk58MqW4/TM6svmfBrQIOkSAiO92W2Hmc+gF8D6BV6h17qhOxUWPg18C16OizaN2AlxXTEFEWkxZ2QRe8DoJQctG8AIDH4vS8iFjY5aM8Au8Ox+DdgvRUBO+8W/g0AbUIf/5TqBsLf/x2/ADJHSOenTxC2AAAAAElFTkSuQmCC',\n reference: '',\n reference_hash: '',\n decimals: 6,\n id: 'pixeltoken.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Debio',\n symbol: 'DBIO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIxOTAgOTcgNDIwIDQyMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgODAwIDgwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48c3R5bGU+LnN0MHtmaWxsOiMzNjM2MzZ9LnN0M3tmaWxsOiNmZjU2ZTB9PC9zdHlsZT48L2RlZnM+PGNpcmNsZSBjbGFzcz0ic3QzIiBjeD0iNDAwIiBjeT0iMzA3LjM5IiByPSIyMDguNTgiLz48cGF0aCBkPSJNNDczLjk5IDIxMS4zczIuMzQgNTYuMjUtNzcuMzQgOTguNDMtNzAuMzEgOTMuNzQtNzAuMzEgOTMuNzQiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNlNmU2ZTY7c3Ryb2tlLXdpZHRoOjM3LjQ5NzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTAiLz48cGF0aCBkPSJNMzI2LjAxIDIxMS4zcy0yLjM0IDU2LjI1IDc3LjM0IDk4LjQzIDcwLjMxIDkzLjc0IDcwLjMxIDkzLjc0IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDozNy40OTc1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwIi8+PGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iNDAwIiBjeT0iMjE2LjQyIiByPSIyMC40OSIvPjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjQwMCIgY3k9IjM5OC4zNiIgcj0iMjAuNDkiLz48dGV4dCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMzYuMzQyIDY1OC4wNzUpIiBjbGFzcz0ic3QzIiBzdHlsZT0id2hpdGUtc3BhY2U6cHJlO2ZvbnQtc2l6ZToxMTIuNDkyNXB4O2ZvbnQtZmFtaWx5OidBcnRlZ3JhU2Fucy1TZW1pQm9sZCciPkRlQmlvPC90ZXh0Pjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'dbio.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Aurora',\n symbol: 'AURORA',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 288 288' style='enable-background:new 0 0 288 288;' xml:space='preserve'%3E %3Cstyle type='text/css'%3E .st0%7Bfill:%2370D44B;%7D .st1%7Bfill:%23FFFFFF;%7D %3C/style%3E %3Cpath class='st0' d='M144,0L144,0c79.5,0,144,64.5,144,144v0c0,79.5-64.5,144-144,144h0C64.5,288,0,223.5,0,144v0 C0,64.5,64.5,0,144,0z'/%3E %3Cpath class='st1' d='M144,58.8c7.6,0,14.5,4.3,17.9,11.1l56.2,112.5c4.9,9.9,0.9,21.9-9,26.8c-2.8,1.4-5.8,2.1-8.9,2.1H87.8 c-11,0-20-9-20-20c0-3.1,0.7-6.2,2.1-8.9l56.2-112.5C129.5,63,136.4,58.7,144,58.8 M144,45c-12.8,0-24.5,7.2-30.2,18.7L57.6,176.2 c-8.3,16.7-1.6,36.9,15.1,45.3c4.7,2.3,9.9,3.6,15.1,3.6h112.5c18.6,0,33.8-15.1,33.8-33.7c0-5.2-1.2-10.4-3.6-15.1L174.2,63.7 C168.5,52.2,156.8,45,144,45z'/%3E %3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'aaaaaa20d9e0e2461697782ef11675f668207961.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Meta Token',\n symbol: '$META',\n icon:\n \"data:image/svg+xml,%3csvg width='96' height='96' viewBox='0 0 96 96' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='96' height='96' rx='48' fill='white'/%3e%3cpath d='M29.2241 28.7456C28.396 27.9423 27.0094 28.5289 27.0091 29.6825L27 66.6773C26.9997 67.8501 28.4257 68.4286 29.2426 67.5872L48.6529 47.5943L29.2241 28.7456Z' fill='%23231B51'/%3e%3cpath d='M66.7759 28.7456C67.604 27.9423 68.9906 28.5289 68.9909 29.6825L69 66.6773C69.0003 67.8501 67.5743 68.4286 66.7574 67.5872L47.3471 47.5943L66.7759 28.7456Z' fill='%23231B51'/%3e%3c/svg%3e\",\n reference: 'https://metapool.app',\n reference_hash: null,\n decimals: 24,\n id: 'meta-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Potato 🥔',\n symbol: 'POTATO',\n icon:\n 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAQwAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAAHRyWFlaAAABZAAAABRnWFlaAAABeAAAABRiWFlaAAABjAAAABRyVFJDAAABoAAAAChnVFJDAAABoAAAAChiVFJDAAABoAAAACh3dHB0AAAByAAAABRjcHJ0AAAB3AAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAFgAAAAcAHMAUgBHAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z3BhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABYWVogAAAAAAAA9tYAAQAAAADTLW1sdWMAAAAAAAAAAQAAAAxlblVTAAAAIAAAABwARwBvAG8AZwBsAGUAIABJAG4AYwAuACAAMgAwADEANv/bAEMAAwICAgICAwICAgMDAwMEBgQEBAQECAYGBQYJCAoKCQgJCQoMDwwKCw4LCQkNEQ0ODxAQERAKDBITEhATDxAQEP/bAEMBAwMDBAMECAQECBALCQsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/AABEIAGAAYAMBIgACEQEDEQH/xAAcAAACAwEBAQEAAAAAAAAAAAAHCAAGCQUEAwL/xAA9EAABAgUDAgMFBQYFBQAAAAABAgMABAUGEQcSITFBCBNhFCJRcYEJMpGhwRYjQ1JTYhUkY3KCkqKx0fD/xAAbAQEBAQADAQEAAAAAAAAAAAAGBQQAAgcDAf/EAC0RAAEDAwIDBwQDAAAAAAAAAAEAAgMEBREhMRJxsQYiQVFhodETFIGRMlLw/9oADAMBAAIRAxEAPwDVOPBXa9RrYpMzXbgqcvT6fKI3vTD6whCBnHJPxJAA7k4j4XVdFEsu3p+6bjnkSlOpzKn33VdgOwHck4AA5JIEZceILxKXRrdcqmlzLkjQWHtkhTkL91AJwFrx95w9z26DiMFdXsoWcTtT5LbRUT6x+Bt4lMjqZ47pqaqDtE0go6FMoO3/ABSebJUv4lDXYfAq5/tED5OsGvN0PpmZ2/aw1nB2SbnsyR9GtsCrT6hNtFBeG9Z56QwFp0BHkIJbGTziPNbp2grJn4Y4gemiaQW+ko4/4gn1XytrV3WymOEftTUnQgkf5xaZgKGevvgmC3aHibq0q43K35R0vMqODNyadq0+pRnB+hHyMVn9mGvL3ITyRHGrNvrlmlPlrcQMgAZjJBeLnRkPEhx6nI/RXxkhoqrulg6H9hNxb1yUO6qairUCoszksvjc2eUn+VQ6pPoeY6cIxbN0XJaNQTXrUqLksr+KwsHY4AeULQevOR6djDLaa6825e3l0qrBNJrJwnyXFfunlf6av0PPwzD20dpqe4Yim7knseXwfdH6+yy0uXxd5vuOfz0RRiRIkJ1EUiRIkcXEg32j+sM41UadpVSptSZaUZTUKihJx5jy8+Uk/wC1OVY6e+D2EJxZSQ4/57+FLcOcH5wVvH3MODxI3M2snA9iCc9h7IzAiteY2N7m07l549IBX6Rz3u59E9s0DWwNx5Z/aYWyfIC0FCQcd/SDda9Yl1PNygeTvACto6gdoWi1ayZdafMzjHvesGK0a9LqcamSU7sDHygQ/LXZKpVEPEEf5Qh5IBIziPs/JsTKfJWgE44J7xWaLX2HWkqCvePeLC1PtutjaoZ+eMRSjmY9mCoDonscqrWqBLNqUlDQOevHSKJWqWiVJWvCNp91Y4wYLM8lD5G4jd1Hr/7jgVKlJmUlKkBQJx07RCrI3MdxRbK1STbB66mk3iKnaNMtW3fcwubkMhtqeOVOsdhvPVSfXqPXoGcl5hibYbmpV5DrLqQttxCgpKkkZBBHUQjlStIomS60kJCx73HPHT/zBC0e1VndPp5q2LmeUugzLm1t1XJk1nuP7Ceo7dR3yy7M9q3NIpK46bBx8PQ+nTltJvVkjkBnpBr4jz5evXmmliR+W3EOoS42sKQsBSVA5BB7x+o9NQtZmfaWWBMUrVGTvRpsmXr8ihW4D+MyA2of9Pln6wqlvzyZZaAOB3OY2K8SWicjrpppO2uoNN1WXzNUt9fGyYSD7pPZKgSk/MHtGN9z0GtWLck5QK5IuykzKPKaeadSUqQpJwQR9IJXmjPGSBodflM7HWtdGGE6t0+ETaLVm1EbFY3CL9b9wqldoDgwcAAmARSK2kBOxQ7DB7Ra5Kv7AHEqICfePxgTNTa4S3gD25CZW371WlCUqdOO6R8YuzV8MSEmqemlLLbeCvYNxwTjoPnC32zXlOIBW5tJGR24+EE62K22paf3wyMd+nETpIzCdFhlgGdUe5B/25CXSjhSQQon8o6XsaVpUSk89sRTrbrSHNqQ4B+oi9Sc2y+BhSTn1jTA1s41UmYujOi56qOl9KdyMLx2GRFauS1y4ytKW+SODiCahlopBbPIj4Tsg3NMKKwncOwEflRa8jiZuukdcWu12Xk0C1NmpKZb03up9WelLfcPb+iT+aSfUfAQwEJhe0g6w77dTni3MyTgcQtBwpCk8jnsehhltHdQ29R7Nl6s8UpqEsfZp5AwMOpA94DsFAg/UjtDfsjeH1Ef2VQe83Y+Y8vx05KRe6ENxVxDQ7+h8/z15q8wr3jC8ItN1rpbt5WlLNMXZJs4W2lISmooT0So/wBQDgKPUAJPYhoYkMJoWzs4HqFBM+neHsOqwIuGi1qzarMU2fl3pd+WcU2424kpUhSSQUkHoQRzHToddUrAUo5/SH++0K8OErVaWrWK2JAJeb2tVlptIAPZExgDr0Sr/ifiYzglku06dLSgQAcEQOuVAGkgjUe6e2q4fXYDnTojBS6sAjd5nHz4xF8tisKacC9/JPIBgO0ad3NpSgnBxk/OLjSKh5DiVKcBB5BzBeSHQhXCQ8apiqDcqm9qku8n4HHMXu3LxX56GSMhffPSF6olWS4AC/nP3jnrF4o1bRJlBS4CfnEwAwu0WWSBrgmeoNYZeQkKUCVDuesdxxLb7e5B/CAfbF3pccCUufnBHkrkBZSC4Mnjr1ipFUhzMPUCopXNflq5F2UKUK5ualkKQ5NEF0FZwSO4HbrHl8NFamLf1QnLX3EytYlVKCT2cbBUk/huH1j3XDVGHZZw7xlPQ94qGh815viCo6EqyfKmSfl5DkdrTltxjfH/AGHucH2X0nBdRyMf/U+2ydOJEiR62gy8tUpkhWqbNUiqSqJmTnWVy77KxlLjawUqSfQgkRj14tfD/UNE9RpqnNtuOUidJmaZMlPDjBP3Sf5k/dV9D0IjY+Bvr1ojbeu1iTVqVpttqcQFO02e2ZVKv44PxKT0UnuPUAjFXUv3LNNwqFurTRy5P8Tv8rFqh1Myyg2pRz9eIu0jPMLZLvmgJbG4/qfyzFa1Q06uXS28J+1bkp7krO054tuoPQjqFJPdJBBBHUGPFQ6upQ8l1eUqGMHpAaqpC08QXolLUMlaMIn0+rOJSh5pStigFAjvFnkKzM7AS8MYxgfpA6l6mllpHlDcn4DpjHSOvLVxsYUlwEJGEjOT9YlOiydlrJBCLluXC8wtKlqIyeOeYupvaYclHGWZravGEneRj8CD+EL9LXO42sAPAkfEx1F3gplKQFErPGOekZ3UxcdFkeADkoxzd7TMvSEomZ9bz4Tt8wnlRx1P/wB2gg+CijzV0ak1u939ypajyvs7ayOC89xgHpwlKsj+4QrDU9WbqqMpQaFLPztRn3Ey8uwyncpa1HAAEabeHzSdGjmmdPtV9aHKm6TOVN1Bylc0sDcEnulICUg9wnPeFXZ62H6omeNuqNXqqEURjbu7oiVEiRIcogpEiRI4uIHeJ/ww234gbaK0JakbnkGz7BPlPCxyfJdwMlBJyD1SeRwSDkvfmml3aX3LNW7c9HmJCdlV7XGnU8+hBHCknqCMgxuzFE1V0S041mpYpt9W+1NLaSUy8437kzL5/kcHOM87TlJ7iJ1ZQCo7zND1VWgubqQ8LtW9FiZLVSYSSlSiQeAOmY9iKw6lJAVjPTmHZ1B+zNuBibemtObvkZ6VKiW5aogsPIT2G9IKVH1wn5QMX/s/fEPLPeS1asm+gHhbdUlwn/uUD+UH32yRp1Yf9ySeK8QPGeMflLxL1Wa90pJB7+96xa7bpFxXZVJajUanzE/PTiw2zLsIK1rUemABDMaffZv6jT8427fNbpdCkwQXEML9qfUM8gAYQPmVH5GHU0i0A000WkizZ1FBnnEbH6lNEOTTo7grwNqeB7qQBwOI10tpc45c3A9fhYa29RtGGHiP+8UN/Ct4VZPSCTReF4tszd3TTWEpACm6agjlCD3cPRSx8hxkqY+JEhFFE2FoYwaItNM+d5e86r//2Q==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'v1.dacha-finance.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Flux Token',\n symbol: 'FLX',\n icon:\n \"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='140px' height='140px' viewBox='0 0 140 140' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3EFlux Logo New%3C/title%3E%3Cdefs%3E%3CradialGradient cx='50%25' cy='0%25' fx='50%25' fy='0%25' r='248.533062%25' gradientTransform='translate(0.500000,0.000000),scale(1.000000,0.393939),rotate(90.000000),translate(-0.500000,-0.000000)' id='radialGradient-1'%3E%3Cstop stop-color='%23FE84FC' offset='0%25'%3E%3C/stop%3E%3Cstop stop-color='%232ED1FF' offset='100%25'%3E%3C/stop%3E%3C/radialGradient%3E%3C/defs%3E%3Cg id='logos' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Group' transform='translate(-143.000000, -251.000000)'%3E%3Cg id='Group-2' transform='translate(0.000000, 251.000000)'%3E%3Cg id='Flux-Logo' transform='translate(143.000000, 0.000000)'%3E%3Cg id='Flux-Logo-New' transform='translate(70.000000, 70.000000) rotate(90.000000) translate(-70.000000, -70.000000) '%3E%3Ccircle id='Oval' fill='%23FFFFFF' cx='70' cy='70' r='70'%3E%3C/circle%3E%3Crect id='Rectangle' fill='%230F0E25' transform='translate(70.000000, 83.000000) rotate(90.000000) translate(-70.000000, -83.000000) ' x='57' y='50' width='26' height='66' rx='13'%3E%3C/rect%3E%3Cpath d='M50,30 C57.1797017,30 63,35.8202983 63,43 L63,96 L63,96 L50,96 C42.8202983,96 37,90.1797017 37,83 L37,43 C37,35.8202983 42.8202983,30 50,30 Z' id='Rectangle' fill='%230F0E25'%3E%3C/path%3E%3Cpath d='M63,44 L76,44 C83.1797017,44 89,49.8202983 89,57 L89,97 C89,104.179702 83.1797017,110 76,110 C68.8202983,110 63,104.179702 63,97 L63,44 L63,44 Z' id='Rectangle' fill='url(%23radialGradient-1)'%3E%3C/path%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '3ea8ea4237344c9931214796d9417af1a1180770.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'nUSDO',\n symbol: 'nUSDO',\n icon:\n 'data:image/png;base64,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',\n reference: '',\n reference_hash: '',\n decimals: 8,\n id: 'v3.oin_finance.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'oinfinance',\n symbol: 'OIN',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 974.66 974.66'%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bisolation:isolate;%7D.cls-2%7Bfill:%235a8dff;%7D.cls-3%7Bfill:%23fff;%7D.cls-4,.cls-5%7Bfill:%231b57f6;%7D.cls-5%7Bmix-blend-mode:multiply;%7D%3C/style%3E%3C/defs%3E%3Cg class='cls-1'%3E%3Cg id='图层_1' data-name='图层 1'%3E%3Ccircle class='cls-2' cx='487.33' cy='484.76' r='473.82'/%3E%3Ccircle class='cls-3' cx='487.33' cy='484.76' r='358.99'/%3E%3Cpath class='cls-4' d='M487.33,98.08c-213.55,0-386.67,173.12-386.67,386.68S273.78,871.43,487.33,871.43,874,698.31,874,484.76,700.88,98.08,487.33,98.08ZM368.59,297.83a9,9,0,0,1,12.71-.14,287,287,0,0,0,137.53,75,110.56,110.56,0,0,1,51.78,28.2,9,9,0,0,1-12.49,12.93,92.54,92.54,0,0,0-43.3-23.61,304.9,304.9,0,0,1-146.09-79.66A9,9,0,0,1,368.59,297.83Zm216.7,197.36a9,9,0,0,1,17.93,1.3c-1.86,25.6-15.92,49.6-38.58,65.86-18.31,13.13-40.08,19.87-63.28,19.87a130.41,130.41,0,0,1-32.7-4.3,9,9,0,0,1,4.52-17.4c29.91,7.76,58.67,3.23,81-12.78C572.48,534.61,583.82,515.45,585.29,495.19Zm-9.7-47.57a15.39,15.39,0,1,1,12.8,17.6A15.39,15.39,0,0,1,575.59,447.62Zm-244-118.07a9,9,0,0,1,12.71,0,335.48,335.48,0,0,0,163.36,90.53c30.07,6.9,50.7,33.19,48,61.16-1.64,17.07-9.08,30.42-21.52,38.59-8.23,5.41-18.1,8.14-28.9,8.14a76.36,76.36,0,0,1-23.39-3.91,9,9,0,1,1,5.52-17.1c14.54,4.69,27.64,3.93,36.9-2.15,7.73-5.08,12.39-13.82,13.49-25.29,2-20.88-15.76-37.71-34.1-41.92a353.42,353.42,0,0,1-172.1-95.35A9,9,0,0,1,331.59,329.55Zm-30,41.34a9,9,0,0,1,12.71-.23c36.29,35,81.18,62.68,133.43,82.22a9,9,0,0,1-3.15,17.41,8.89,8.89,0,0,1-3.14-.58c-54.58-20.41-101.55-49.38-139.62-86.11A9,9,0,0,1,301.56,370.89ZM452.39,512.8a15.39,15.39,0,1,1-12.8-17.6A15.38,15.38,0,0,1,452.39,512.8ZM278.9,429.48a9,9,0,0,1,12.54-2.07c38.33,27.47,67.76,43.32,105.66,61.43a9,9,0,1,1-7.75,16.21c-38.8-18.53-69-34.79-108.38-63A9,9,0,0,1,278.9,429.48Zm-4.46,60.34A9,9,0,0,1,287,487.67c45.31,32,91.6,55,137.57,68.37a9,9,0,0,1-2.5,17.62,8.76,8.76,0,0,1-2.51-.36c-47.9-13.9-96-37.78-142.94-70.95A9,9,0,0,1,274.44,489.82Zm18.28,73.95a9,9,0,0,1,12.38-2.89c44.19,27.46,93.91,45,123.06,51.75,27.43,6.32,56.78,9,65.69,9,77.91,0,141.29-63.38,141.29-141.29,0-65.78-46.6-123.81-110.81-138L516,340.57l0-.24a257.48,257.48,0,0,1-100.58-53,9,9,0,1,1,11.69-13.66A239.17,239.17,0,0,0,528.3,324.87l8.22,1.9,0,.16c68.06,19,116.62,82.18,116.62,153.46,0,87.82-71.45,159.27-159.27,159.27-9.61,0-40.9-2.87-69.72-9.51-30.5-7-82.46-25.38-128.52-54A9,9,0,0,1,292.72,563.77ZM493.85,688.36l-9-.07c-5.35-.12-10.74-.42-16.1-.9a302.94,302.94,0,0,1-109.22-31.85,9,9,0,1,1,8.2-16,284.85,284.85,0,0,0,102.64,29.94,225.63,225.63,0,0,0,23.34.87l7.29-.11c101.46-3.78,182.84-87.49,182.84-189.86,0-89.16-63.2-167.31-150.26-185.83l-.12,0-.11,0a206.73,206.73,0,0,1-49.14-18.68A9,9,0,0,1,492.69,260,188.85,188.85,0,0,0,537.56,277h0c95.18,20.37,164.23,105.85,164.23,203.35C701.82,595.07,608.53,688.36,493.85,688.36Z'/%3E%3Cpath class='cls-5' d='M144.68,484.76c0-206.19,161.39-374.67,364.73-386-7.27-.41-14.58-.64-21.94-.64-213.56,0-386.68,173.12-386.68,386.68S273.91,871.43,487.47,871.43c7.36,0,14.67-.23,21.94-.64C306.07,859.42,144.68,690.94,144.68,484.76Z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 8,\n id: '9aeb50f542050172359a0e1a25a9933bc8c01259.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Myria',\n symbol: 'MYRIA',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNjAwIj48ZGVmcz48Y2xpcFBhdGggaWQ9ImNsaXAtcGF0aCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtLjEzKSI+PHBhdGggc3R5bGU9ImZpbGw6bm9uZSIgZD0iTTAgMGg2MDB2NjAwSDB6Ii8+PC9jbGlwUGF0aD48c3R5bGU+LmNscy00e2ZpbGw6I2ZmZn08L3N0eWxlPjwvZGVmcz48ZyBzdHlsZT0iY2xpcC1wYXRoOnVybCgjY2xpcC1wYXRoKSI+PHBhdGggZD0iTTYwMCAzMDAuMTNjMCAxNjUuNjktMTM0LjMxIDMwMC0zMDAgMzAwUzAgNDY1LjgxIDAgMzAwLjEzIDEzNC4zMS4xMyAzMDAgLjEzczMwMCAxMzQuMzEgMzAwIDMwMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtLjEzKSIgc3R5bGU9ImZpbGw6Izg2MmFlOSIvPjxwYXRoIGNsYXNzPSJjbHMtNCIgZD0iTTQ3MS4xMSA0MjEuMjFhMTcuNzUgMTcuNzUgMCAwIDAgMi4wNy04IDcuMjQgNy4yNCAwIDAgMCAwLTEuMVYyNjMuNDdhOTUuMzYgOTUuMzYgMCAwIDAtMTQyLjYxLTgxLjcybC0xLjQ5Ljg1LTEyNi42NCA3My4xMi0xLjExLjY1YTE4LjE4IDE4LjE4IDAgMCAwLTUuNzcgNS43NWMtLjE1LjIxLS4yNi40MS0uMzkuNjNhMTguMzMgMTguMzMgMCAwIDAgNi43MSAyNWwyNDMuODQgMTQwLjgzYTE4LjMzIDE4LjMzIDAgMCAwIDI1LTYuNzFjLjEzLS4yMi4yNC0uNDIuMzUtLjY1TTIxMi41NCAyNzEuOTNsMTQuNzQtOC41MyA2Mi44NC0zNi4yNiA0OS4zOC0yOC41MSAxLjYtLjkxYTc2LjM0IDc2LjM0IDAgMCAxIDExMyA2NS4yNnYxNDguNDNaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC0uMTMpIi8+PHBhdGggY2xhc3M9ImNscy00IiBkPSJNMTI4Ljg5IDQyMS4yMWExNy43NyAxNy43NyAwIDAgMS0yLjA4LTggNy41IDcuNSAwIDAgMSAwLTEuMVYyNjMuNDdhOTUuMzYgOTUuMzYgMCAwIDEgMTQyLjYxLTgxLjcybDEuNDkuODUgMTI2LjY1IDczLjExIDEuMTEuNjVhMTguMTcgMTguMTcgMCAwIDEgNS43NyA1Ljc1Yy4xNS4yMS4yNi40MS4zOS42M2ExOC4zMyAxOC4zMyAwIDAgMS02LjcxIDI1TDE1NC4yOCA0MjguNThhMTguMzMgMTguMzMgMCAwIDEtMjUtNi43MWMtLjEzLS4yMi0uMjQtLjQyLS4zNS0uNjVtMjU4LjUzLTE0OS4yOS0xNC43NC04LjUzLTYyLjgzLTM2LjI2LTQ5LjM5LTI4LjUyLTEuNi0uOTFhNzYuMzQgNzYuMzQgMCAwIDAtMTEzIDY1LjI2djE0OC40NFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLS4xMykiLz48L2c+PC9zdmc+',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'myriadcore.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'xRef Finance Token',\n symbol: 'xREF',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNjIiIHZpZXdCb3g9IjAgMCA1NiA2MiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEuODU2OTMgMTcuODg1NkMxLjg1NjkzIDE2LjAyNzggMi44ODY5MiAxNC4zMjMyIDQuNTMxNTEgMTMuNDU5MkwyNS45MjE2IDIuMjIxNzJDMjcuMzc3NSAxLjQ1NjgzIDI5LjExNjUgMS40NTY4MyAzMC41NzI0IDIuMjIxNzJMNTEuOTYyNCAxMy40NTkyQzUzLjYwNyAxNC4zMjMyIDU0LjYzNyAxNi4wMjc4IDU0LjYzNyAxNy44ODU2VjQ1LjYzMDRDNTQuNjM3IDQ3LjYwMjEgNTMuNDc4MiA0OS4zODk4IDUxLjY3ODMgNTAuMTk0N0wzMC4yODgyIDU5Ljc2MDZDMjguOTg5NCA2MC4zNDE0IDI3LjUwNDYgNjAuMzQxNSAyNi4yMDU3IDU5Ljc2MDZMNC44MTU3IDUwLjE5NDdDMy4wMTU3NCA0OS4zODk4IDEuODU2OTMgNDcuNjAyMSAxLjg1NjkzIDQ1LjYzMDRMMS44NTY5MyAxNy44ODU2WiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzEyNDYxXzIwNzUpIiBzdHJva2U9IiMwMEM2QTIiIHN0cm9rZS13aWR0aD0iMiIvPgo8cGF0aCBkPSJNMTMuNjk3OCAyMC4zMzJMMjguMjQ3MSAxNEwyOC4yMjAyIDMwLjU0MTdMMjAuMjgwMyAyMy43MTE2TDEyLjMxMzUgMzAuOTI5NVYyMi4zNjU0QzEyLjMxNTIgMjEuNDkyMiAxMi44NTM4IDIwLjY5OTMgMTMuNjk3OCAyMC4zMzJaIiBmaWxsPSIjMDBDNkEyIiBmaWxsLW9wYWNpdHk9IjAuNSIvPgo8cGF0aCBkPSJNMTQuMTAyMyA0Mi43NjQ1TDI4LjI0NzEgNDYuODYyNkwyOC4yMjAyIDM0LjU5NDRMMjAuMjc5NCAyNy45NDE0TDEyLjMxMzUgMzQuOTcyMlY0MC41Mjc0QzEyLjMxMzUgNDEuNTUxNSAxMy4wMzY3IDQyLjQ1NTkgMTQuMTAyMyA0Mi43NjQ1WiIgZmlsbD0iIzAwQzZBMiIgZmlsbC1vcGFjaXR5PSIwLjUiLz4KPHBhdGggZD0iTTQzLjY0NDUgNDIuNzYzM0wyOC4yNzQ0IDQ2Ljg2MzJMMjguMjQ2OCAzNC41MTU3TDQzLjIyMSAyMi40NjQ4QzQzLjIyMSAyMi40NjQ4IDQ1Ljc5MyAyNC4zOTk2IDQ1LjAzNzMgMjcuODE5NkM0My43MDQ4IDMzLjg1MTEgMzUuMTc5NiAzNS45ODY5IDM1LjE3OTYgMzUuOTg2OUw0My45MDk2IDQxLjE1NjFDNDQuNjE1NSA0MS41NzggNDQuNDU1NCA0Mi41NDcgNDMuNjQ0NSA0Mi43NjMzWiIgZmlsbD0iIzQ1RkZERSIvPgo8cGF0aCBkPSJNMzguNTkwMyAxOC45NzkzTDI4LjI3MzQgMTRMMjguMjQ2OCAzMC40MzE1TDQwLjY5NSAyMC4zNTA5QzQwLjY5NSAyMC4zNTA5IDQwLjQyNzEgMjAuMDU5NyAzOS42OTAxIDE5LjU4MDVDMzkuNDI4OSAxOS40MTE0IDM4LjU5MDMgMTguOTc5MyAzOC41OTAzIDE4Ljk3OTNaIiBmaWxsPSIjNDVGRkRFIi8+CjxwYXRoIGQ9Ik00MC41NTEgMTYuMDEwMUw0Ni42NjAyIDE4LjI4MDVDNDYuOTY3NSAxOC4zOTQzIDQ3LjE2OCAxOC42NjU2IDQ3LjE2OCAxOC45NjVWMjMuMTIwN0M0Ny4xNjggMjMuNDM4OCA0Ni43MjYgMjMuNTgyMiA0Ni41MDQyIDIzLjMzNDNMNDAuMjU1MyAxNi4zNjg3QzQwLjA4OTMgMTYuMTgzMSA0MC4zMDYyIDE1LjkxODEgNDAuNTUxIDE2LjAxMDFaIiBmaWxsPSIjNDVGRkRFIi8+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMTI0NjFfMjA3NSIgeDE9IjI4LjI0NyIgeTE9IjEiIHgyPSIyOC4yNDciIHkyPSI2MC42NzM1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiMwMTEzMjAiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDAxMzIwIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'xtoken.ref-finance.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Solana',\n symbol: 'SOL',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxsaW5lYXJHcmFkaWVudCBpZD0iYSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSI1MCIgeDI9IjUwIiB5MT0iMjciIHkyPSI3NCI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMTRlNmFkIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYTk2NGRlIi8+PC9saW5lYXJHcmFkaWVudD48Y2xpcFBhdGggaWQ9ImIiPjxwYXRoIGQ9Im0wIDBoMTAwdjEwMGgtMTAweiIvPjwvY2xpcFBhdGg+PGcgY2xpcC1wYXRoPSJ1cmwoI2IpIj48cGF0aCBkPSJtNTAgMGM5Ljg4OTEgMCAxOS41NTYxIDIuOTMyNDUgMjcuNzc4NSA4LjQyNjUyIDguMjIyNSA1LjQ5NDA4IDE0LjYzMTEgMTMuMzAyOTggMTguNDE1NSAyMi40MzkyOHM0Ljc3NSAxOS4xODk3IDIuODQ1MyAyOC44ODg3Yy0xLjkyOTMgOS42OTkxLTYuNjkxMyAxOC42MDgyLTEzLjY4NCAyNS42MDA4LTYuOTkyNiA2Ljk5MjctMTUuOTAxNyAxMS43NTQ3LTI1LjYwMDggMTMuNjg0LTkuNjk5IDEuOTI5Ny0xOS43NTI0LjkzOTEtMjguODg4Ny0yLjg0NTNzLTE2Ljk0NTItMTAuMTkzLTIyLjQzOTI4LTE4LjQxNTVjLTUuNDk0MDctOC4yMjI0LTguNDI2NTItMTcuODg5NC04LjQyNjUyLTI3Ljc3ODUgMC0xMy4yNjA4IDUuMjY3ODQtMjUuOTc4NSAxNC42NDQ3LTM1LjM1NTMgOS4zNzY4LTkuMzc2ODYgMjIuMDk0NS0xNC42NDQ3IDM1LjM1NTMtMTQuNjQ0N3oiIGZpbGw9IiMwMDAiLz48ZyBmaWxsPSJ1cmwoI2EpIiBmaWxsLW9wYWNpdHk9Ii45MiI+PHBhdGggZD0ibTMwLjM4MDYgNjIuNzg4OWMuMzEzMS0uMzIzNC44MzQ5LS41MzkgMS4zNTY3LS41MzloNDYuMjMwN2MuODM0OSAwIDEuMjUyMyAxLjA3NzkuNjI2MiAxLjcyNDdsLTkuMTgzNiA5LjQ4NjRjLS4zMTMuMzIzNC0uODM0OC41MzktMS4zNTY2LjUzOWgtNDYuMTI2NGMtLjgzNDggMC0xLjI1MjItMS4wNzgtLjYyNjEtMS43MjQ4eiIvPjxwYXRoIGQ9Im0zMC4zODA2IDI3LjUzOWMuMzEzMS0uMzIzNC44MzQ5LS41MzkgMS4zNTY3LS41MzloNDYuMjMwN2MuODM0OSAwIDEuMjUyMyAxLjA3OC42MjYxIDEuNzI0OGwtOS4xODM1IDkuNDg2M2MtLjMxMzEuMzIzNC0uODM0OC41MzktMS4zNTY2LjUzOWgtNDYuMTI2NGMtLjgzNDkgMC0xLjI1MjMtMS4wNzgtLjYyNjEtMS43MjQ4eiIvPjxwYXRoIGQ9Im02OS41MTUgNDUuMDAxOGMtLjMxMzEtLjMyMzQtLjgzNDktLjUzOS0xLjM1NjctLjUzOWgtNDYuMjMwN2MtLjgzNDggMC0xLjI1MjIgMS4wNzgtLjYyNjEgMS43MjQ4bDkuMTgzNSA5LjQ4NjRjLjMxMzEuMzIzMy44MzQ5LjUzODkgMS4zNTY3LjUzODloNDYuMjMwNmMuODM0OSAwIDEuMjUyNC0xLjA3OC42MjYyLTEuNzI0OHoiLz48L2c+PC9nPjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'sol.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'TerraUSD',\n symbol: 'UST',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTgxLjA5NiAxMy43MjItLjAxLS4wMS4wMTQtLjAwOGE0NC4xNzQgNDQuMTc0IDAgMCAwIC0yOC43NjUtMTAuNTc0IDQ0LjE2NyA0NC4xNjcgMCAwIDAgLTE4LjAxIDMuODI1Yy0zLjcwNSAxLjU2NS02LjcxNSAzLjYzNS05LjE5NSA2Ljg4NS0xMi43NCAxNi44MyAyOS45NiAyOS4wNiA1Mi43OSAyOS4xMDQgMTAuNDkyIDcuNTI4IDEzLjQ0Ni0yMS4yMzYgMy4xNzctMjkuMjIyeiIgZmlsbD0iIzBkM2NhNCIvPjxwYXRoIGQ9Im0zNi44OTMgMTQuMDYzYy01Ljg2MyA4LjgxNi0yNS40MDMgMTUuMDI3LTI4LjYxNSAxNC4wNTdsLS4wMTktLjA0Yy4xMzItLjI2OC4yNjgtLjUzMi40LS43OTVhNDYuNjcyIDQ2LjY3MiAwIDAgMSA4LjQ4LTExLjU4IDQ3LjIxIDQ3LjIxIDAgMCAxIDkuMTg1LTcuMTUxYzIuNzM3LTEuNTg0IDUuNTM2LTEuNjg4IDYuNDU4LTEuNzIgOC43MDguMTc3IDQuMTYgNy4xNiA0LjExIDcuMjI5em0tNC44MDYgNjIuMzAzYy40MTggMi43NzItLjAwOSAxMy43MTMtLjU4IDE0LjYzNC0uNDg2LjAzMi0xLjUwMy4wOTUtNC40NDgtMS41NTdhNDYuODI3IDQ2LjgyNyAwIDAgMSAtOS45Mi03LjU3MyA0Ni45NTIgNDYuOTUyIDAgMCAxIC04LjQ4LTExLjU4IDQ2LjUyNCA0Ni41MjQgMCAwIDEgLTUuMjIzLTIxLjVjMC0yLjU4MS4yMDgtNS4xMTguNjEyLTcuNTg3YTQ2LjUxMSA0Ni41MTEgMCAwIDEgMi4yNjUtOC41OThjMy4zNzYgNC40ODMgNy4yNzggOC41NDQgMTAuNTk1IDEzLjA3MyAzLjE1OSA0LjMxNSA3LjUwNiAxMS4zNDQgOC4zODYgMTIuODUgNS41IDkuMzE2IDYuMzc2IDE1LjA3NCA2Ljc5MyAxNy44Mzh6bS0zLjMxMi0zOC44NTdjLTIuMDA2LTE1LjMxIDI5LjA1NS0yNS45NzkgNDIuNzA1LTI2LjM4MiAxLjYzOC4wMTggNi42MTYuMDc3IDkuNTI1IDIuNDM2IDUzLjQ5NSA1MC45MzctNDYuOTU3IDY0LjI0LTUyLjIzIDIzLjk0N3oiIGZpbGw9IiM1NDk0ZjgiLz48cGF0aCBkPSJtMjAuNDU3IDkyLjM1YzAgMS44MjUgMS4yNyAzLjMwNCAyLjg0NSAzLjMxMyAzNy40OTYuMjU5IDczLjY5NC0xLjQ2IDczLjY5NC03LjA4MyAwLTE3LjAwNy03Ni41MzkgMy43Ny03Ni41MzkgMy43N3oiIGZpbGw9IiM3NjAxMDEiLz48cGF0aCBkPSJtMjMuMzIgNDQuMTg3YTIuODYzIDIuODYzIDAgMCAwIC0yLjg2MyAyLjg2M3Y0NS4zYzAgMS41NzQgMS4yNyAyLjg1IDIuODQ1IDIuODU4IDM3LjQ5Ni0uMjc2IDczLjc0LTEyLjY4NyA3My42OTQtNi42M3YtNTEuMDI0Yy4wNDUtNi4wNTMtMzYuMTg5IDYuMzUzLTczLjY3NiA2LjYzNHoiIGZpbGw9IiNkZTMwMzAiLz48cGF0aCBkPSJtODQgODBjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ny0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMy02My41IDcuNXYtNGMxMS41IDAgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzJjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ny0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMy02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzJjOC44LTEuNiAxMi4zMzMtLjMzNCAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2OC0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMi02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzNjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ny0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMy02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzNjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ni0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzNC02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzJjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ny0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMy02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0ibTI4LjU5MyA3MS41NGEyMDQuMTEyIDIwNC4xMTIgMCAwIDAgNy4wNjYtLjM3NiAyNTEuNzQ1IDI1MS43NDUgMCAwIDAgNi43MDYtLjU3MmMxLjEzLS4xMDkgMi4yNy0uMjIyIDMuNDQ1LS4zNSAxLjE3LS4xMjYgMi4zNjgtLjI1OCAzLjYxMi0uNDEyIDEuMjQzLS4xNSAyLjUzNi0uMzEzIDMuODg5LS40OSAxLjM1Mi0uMTczIDIuNzYzLS4zNzIgNC4yMzgtLjU5di0yNy41M2MtMTAuNTMyIDEuNTU2LTIyLjMxNyAyLjg3Mi0zNC4yMjkgMi45NThhMi44NjMgMi44NjMgMCAwIDAgLTIuODYzIDIuODY0djI0LjY1M2MxLjQ4NCAwIDIuODk1LS4wMTggNC4yNDctLjA1IDEuMzUzLS4wMTggMi42NDYtLjA2IDMuODktLjEwNXoiIGZpbGw9IiMxYTNhYjkiLz48cGF0aCBkPSJtMjMuMDUzIDQ2LjQ4IDEuMjIxIDEuODYzLTIuMjIzLjEyNiAxLjAwMi0xLjk4OHptNS4xMzUtLjI5IDEuMjIgMS44NjItMi4yMjIuMTI2em01LjEzNS0uMjkyIDEuMjIgMS44NjItMi4yMjMuMTI2em01LjEzNS0uMjkxIDEuMjIgMS44NjItMi4yMjMuMTI2em01LjEzNC0uMjkyIDEuMjIxIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MSAxLjIyMSAxLjg2Mi0yLjIyMy4xMjZ6bTUuMTMzLS4yOTIgMS4yMiAxLjg2Mi0yLjIyMi4xMjZ6bS0yOC4wNDcgNS4wMjYgMS4yMiAxLjg2Mi0yLjIyMi4xMjd6bTUuMTM1LS4yOTEgMS4yMiAxLjg2My0yLjIyMy4xMjZ6bTUuMTM1LS4yOTIgMS4yMiAxLjg2My0yLjIyMy4xMjZ6bTUuMTM0LS4yOTEgMS4yMjEgMS44NjItMi4yMjMuMTI3em01LjEzNS0uMjkyIDEuMjIxIDEuODYzLTIuMjIzLjEyNnptNS4xMzUtLjI5MSAxLjIyIDEuODYyLTIuMjIzLjEyN3ptLTI4LjA0NyA1LjAyNiAxLjIyIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MiAxLjIyIDEuODYzLTIuMjIzLjEyNnptNS4xMzUtLjI5MiAxLjIyIDEuODYzLTIuMjIzLjEyNiAxLjAwMi0xLjk4OXptNS4xMzQtLjI5IDEuMjIxIDEuODYyLTIuMjIzLjEyNiAxLjAwMi0xLjk4OXptNS4xMzUtLjI5MyAxLjIyIDEuODYzLTIuMjIyLjEyNnptNS4xMzUtLjI5IDEuMjIgMS44NjItMi4yMjMuMTI2em01LjEzMi0uMjkyIDEuMjIxIDEuODYyLTIuMjIzLjEyNiAxLjAwMi0xLjk4OXptLTI4LjA0MiA1LjAyNiAxLjIyIDEuODYyLTIuMjIzLjEyNyAxLjAwMy0xLjk5em01LjEzNC0uMjkxIDEuMjIxIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MyAxLjIyMSAxLjg2My0yLjIyMy4xMjd6bTUuMTM1LS4yOSAxLjIyIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MiAxLjIyIDEuODYyLTIuMjIzLjEyNnptNS4xMzQtLjI5MSAxLjIyMSAxLjg2Mi0yLjIyMy4xMjZ6bS0yOC4wNDggNS4wMjYgMS4yMiAxLjg2My0yLjIyMy4xMjZ6bTUuMTM0LS4yOTEgMS4yMjEgMS44NjMtMi4yMjMuMTI2em01LjEzNS0uMjkyIDEuMjIxIDEuODYzLTIuMjIzLjEyNnptNS4xMzUtLjI5IDEuMjIgMS44NjItMi4yMjMuMTI2IDEuMDAzLTEuOTg5em01LjEzNS0uMjkzIDEuMjIgMS44NjMtMi4yMjMuMTI2em01LjEzNC0uMjkxIDEuMjIxIDEuODYyLTIuMjIzLjEyN3ptNS4xMzMtLjI5MiAxLjIyMSAxLjg2My0yLjIyMy4xMjZ6bS0zMC42NTUgOS4wNDEgMS4yMjIgMS44NjMtMi4yMjMuMTI2IDEuMDAyLTEuOTg5em01LjEzNi0uMjkxIDEuMjIgMS44NjMtMi4yMjMuMTI2em01LjEzNC0uMjkyIDEuMjIxIDEuODYzLTIuMjIzLjEyNnptNS4xMzUtLjI5MSAxLjIyMSAxLjg2My0yLjIyMy4xMjZ6bTUuMTM1LS4yOTEgMS4yMjEgMS44NjItMi4yMjMuMTI2IDEuMDAyLTEuOTg5em01LjEzNS0uMjkyIDEuMjIgMS44NjMtMi4yMjMuMTI2em01LjEzMy0uMjkyIDEuMjIgMS44NjMtMi4yMjMuMTI2em0tMjguMTk2LTIuMjY2IDEuMjIxIDEuODYzLTIuMjIzLjEyNiAxLjAwMi0xLjk4OHptNS4xMzUtLjI5IDEuMjIxIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MiAxLjIyIDEuODYyLTIuMjIzLjEyNnptNS4xMzQtLjI5MSAxLjIyMSAxLjg2Mi0yLjIyMy4xMjZ6bTUuMTM1LS4yOTIgMS4yMjEgMS44NjItMi4yMjMuMTI2em01LjEzNS0uMjkyIDEuMjIxIDEuODYzLTIuMjIzLjEyNnoiIGZpbGw9IiNmZmYiLz48L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'ust.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Celo',\n symbol: 'CELO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZD0ibTAgMGgxMDB2MTAwaC0xMDB6Ii8+PC9jbGlwUGF0aD48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Im01MCAwYzkuODg5MSAwIDE5LjU1NjEgMi45MzI0NSAyNy43Nzg1IDguNDI2NTIgOC4yMjI1IDUuNDk0MDggMTQuNjMxMSAxMy4zMDI5OCAxOC40MTU1IDIyLjQzOTI4czQuNzc1IDE5LjE4OTcgMi44NDUzIDI4Ljg4ODdjLTEuOTI5MyA5LjY5OTEtNi42OTEzIDE4LjYwODItMTMuNjg0IDI1LjYwMDgtNi45OTI2IDYuOTkyNy0xNS45MDE3IDExLjc1NDctMjUuNjAwOCAxMy42ODQtOS42OTkgMS45Mjk3LTE5Ljc1MjQuOTM5MS0yOC44ODg3LTIuODQ1M3MtMTYuOTQ1Mi0xMC4xOTMtMjIuNDM5MjgtMTguNDE1NWMtNS40OTQwNy04LjIyMjQtOC40MjY1Mi0xNy44ODk0LTguNDI2NTItMjcuNzc4NSAwLTEzLjI2MDggNS4yNjc4NC0yNS45Nzg1IDE0LjY0NDctMzUuMzU1MyA5LjM3NjgtOS4zNzY4NiAyMi4wOTQ1LTE0LjY0NDcgMzUuMzU1My0xNC42NDQ3eiIgZmlsbD0iI2ZiY2M1YyIvPjxnIGZpbGw9IiNmZmYiPjxwYXRoIGQ9Im00My41NDIxIDczLjcyNDljMy40MDg1LjAwODMgNi43NDI5LS45OTQ4IDkuNTgxMS0yLjg4MjUgMi44MzgxLTEuODg3NiA1LjA1MjQtNC41NzQ4IDYuMzYyNi03LjcyMTVzMS42NTczLTYuNjExNC45OTc1LTkuOTU1NWMtLjY1OTktMy4zNDQtMi4yOTcxLTYuNDE3Mi00LjcwNDMtOC44MzAzLTIuNDA3My0yLjQxMzItNS40NzY0LTQuMDU3OS04LjgxODktNC43MjU5LTMuMzQyNC0uNjY4MS02LjgwNzktLjMyOTQtOS45NTc4Ljk3My0zLjE0OTkgMS4zMDI1LTUuODQyNSAzLjUxMDItNy43MzcxIDYuMzQzOC0xLjg5NDYgMi44MzM1LTIuOTA1OSA2LjE2NTQtMi45MDU5IDkuNTc0IDAgNC41NjEgMS44MDkgOC45MzU5IDUuMDMwMiAxMi4xNjQ5IDMuMjIxMiAzLjIyOTEgNy41OTE2IDUuMDQ4OCAxMi4xNTI2IDUuMDZ6bTAgNi4yNzUxYy00LjY0OTYuMDA4My05LjE5NzMtMS4zNjI5LTEzLjA2NzMtMy45NC0zLjg3MDEtMi41NzcyLTYuODg4Ny02LjI0NDQtOC42NzM4LTEwLjUzNzgtMS43ODUyLTQuMjkzMy0yLjI1NjYtOS4wMTk3LTEuMzU0Ni0xMy41ODFzMy4xMzY5LTguNzUyNSA2LjQyMTctMTIuMDQzM2MzLjI4NDgtMy4yOTA3IDcuNDcyMS01LjUzMzEgMTIuMDMxOC02LjQ0MzMgNC41NTk3LS45MTAxIDkuMjg2OS0uNDQ3MiAxMy41ODM0IDEuMzMwMnM3Ljk2OTIgNC43ODk0IDEwLjU1MzMgOC42NTQ5YzIuNTg0IDMuODY1NSAzLjk2MzQgOC40MTA2IDMuOTYzNCAxMy4wNjAzLjAwNTUgMy4wODQtLjU5NzIgNi4xMzg5LTEuNzczNiA4Ljk4OTgtMS4xNzYzIDIuODUwOS0yLjkwMzQgNS40NDE5LTUuMDgyMiA3LjYyNDZzLTQuNzY2NiAzLjkxNDQtNy42MTU0IDUuMDk1OS01LjkwMjYgMS43ODk3LTguOTg2NyAxLjc4OTd6Ii8+PHBhdGggZD0ibTU2LjUgNjAuNzI0OWMzLjQwODYuMDA4MyA2Ljc0MjktLjk5NDggOS41ODExLTIuODgyNHM1LjA1MjUtNC41NzQ5IDYuMzYyNi03LjcyMTZjMS4zMTAyLTMuMTQ2NyAxLjY1NzMtNi42MTEzLjk5NzUtOS45NTU0LS42NTk5LTMuMzQ0MS0yLjI5NzEtNi40MTcyLTQuNzA0My04LjgzMDQtMi40MDczLTIuNDEzMS01LjQ3NjQtNC4wNTc4LTguODE4OC00LjcyNTktMy4zNDI1LS42NjgtNi44MDgtLjMyOTQtOS45NTc5Ljk3MzEtMy4xNDk5IDEuMzAyNC01Ljg0MjUgMy41MTAyLTcuNzM3MSA2LjM0MzdzLTIuOTA1OSA2LjE2NTQtMi45MDU5IDkuNTc0YzAgNC41NjEgMS44MDkgOC45MzU5IDUuMDMwMiAxMi4xNjVzNy41OTE2IDUuMDQ4OCAxMi4xNTI2IDUuMDU5OXptMCA2LjI3NTFjLTQuNjQ3OSAwLTkuMTkxMy0xLjM3ODItMTMuMDU1OS0zLjk2MDUtMy44NjQ1LTIuNTgyMi02Ljg3NjYtNi4yNTI0LTguNjU1My0xMC41NDY0LTEuNzc4Ni00LjI5NDEtMi4yNDQtOS4wMTkyLTEuMzM3Mi0xMy41Nzc3LjkwNjctNC41NTg2IDMuMTQ0OS04Ljc0NTkgNi40MzE0LTEyLjAzMjRzNy40NzM4LTUuNTI0NyAxMi4wMzI0LTYuNDMxNGM0LjU1ODUtLjkwNjggOS4yODM2LS40NDE0IDEzLjU3NzcgMS4zMzcyIDQuMjk0IDEuNzc4NyA3Ljk2NDIgNC43OTA4IDEwLjU0NjQgOC42NTUzIDIuNTgyMiAzLjg2NDYgMy45NjA1IDguNDA4IDMuOTYwNSAxMy4wNTU5LS4wMTExIDYuMjI5Mi0yLjQ5MDYgMTIuMi02Ljg5NTMgMTYuNjA0N3MtMTAuMzc1NSA2Ljg4NDItMTYuNjA0NyA2Ljg5NTN6Ii8+PHBhdGggZD0ibTU3LjY4ODkgNjcuODU3MWMxLjYyMzQtMS45NzM4IDIuNzg2LTQuMjg0OCAzLjQwMzQtNi43NjQ3IDIuNDczNy0uNjM0MSA0Ljc4MTItMS43OTUgNi43NjQ3LTMuNDAzNC0uMDk4MyAyLjg5MDUtLjcyNDkgNS43Mzg2LTEuODQ4NyA4LjQwMzQtMi42NDQxIDEuMDg1MS01LjQ2MjUgMS42ODMtOC4zMTk0IDEuNzY0N3ptLTE3LjQzNy0yNy42MDVjLTIuNDM1NC42MzQ2LTQuNzAxNiAxLjc5NjQtNi42Mzg2IDMuNDAzMy4wNzI1LTIuODkzNi43MDAxLTUuNzQ2NCAxLjg0ODctOC40MDMzIDIuNjU4NS0xLjE0MzcgNS41MTA0LTEuNzcxMSA4LjQwMzQtMS44NDg4LTEuNjIzNCAxLjk3MzgtMi43ODYgNC4yODQ4LTMuNDAzNCA2Ljc2NDd6Ii8+PC9nPjwvZz48L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'celo.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Celo Dollar',\n symbol: 'cUSD',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTEwMCA1MGMwLTI3LjYxNDItMjIuMzg1OC01MC01MC01MHMtNTAgMjIuMzg1OC01MCA1MCAyMi4zODU4IDUwIDUwIDUwIDUwLTIyLjM4NTggNTAtNTB6IiBmaWxsPSIjNDVjZDg1Ii8+PGcgZmlsbD0iI2ZmZiI+PHBhdGggZD0ibTY5Ljg4MDUgNjIuNjQzOGMtMS41NjcxIDMuMzkzMS0zLjkzNzUgNi4zNTMyLTYuOTA2MSA4LjYyNDEtMi45Njg1IDIuMjcwOC02LjQ0NTggMy43ODQxLTEwLjEzMDcgNC40MDg3LTMuNjg1LjYyNDYtNy40NjY3LjM0MTctMTEuMDE3Ny0uODI0MS0zLjU1MTEtMS4xNjU4LTYuNzY0Ni0zLjE3OTQtOS4zNjIzLTUuODY2Ni0yLjU5NzgtMi42ODcxLTQuNTAxNS01Ljk2NjktNS41NDY1LTkuNTU1NC0xLjA0NDktMy41ODg1LTEuMTk5Ni03LjM3NzUtLjQ1MDctMTEuMDM5My43NDg5LTMuNjYxNyAyLjM3ODktNy4wODU3IDQuNzQ4OS05Ljk3NTggMi4zNzAxLTIuODkgNS40MDg3LTUuMTU4OSA4Ljg1MjktNi42MTAzbDIuMjY2OCA1LjM3OTJjLTIuNTcgMS4wODMxLTQuODM3NSAyLjc3NjEtNi42MDYgNC45MzI3LTEuNzY4NSAyLjE1NjUtMi45ODQ4IDQuNzExNS0zLjU0MzYgNy40NDM5LS41NTg5IDIuNzMyNC0uNDQzNSA1LjU1OTguMzM2MyA4LjIzNzYuNzc5OCAyLjY3NzcgMi4yMDAzIDUuMTI1MSA0LjEzODggNy4xMzAyIDEuOTM4NCAyLjAwNTIgNC4zMzYzIDMuNTA3OCA2Ljk4NjEgNC4zNzc3czUuNDcxNyAxLjA4MSA4LjIyMTUuNjE0OWMyLjc0OTctLjQ2NjEgNS4zNDQ0LTEuNTk1MyA3LjU1OTUtMy4yODk4IDIuMjE1Mi0xLjY5NDUgMy45ODQtMy45MDMzIDUuMTUzNC02LjQzNTNsNS45MTg5LjMwNDJ6Ii8+PHBhdGggZD0ibTU2LjEwNjEgMjQuNXYtNGg0LjUwMDV2NGMyIDAgNS4xNjY3LjY2NjcgNi41IDF2NC41Yy0xOS0zLTE1LjUwMTEgMy44NDYyLTggNSA2LjcyMTcgMS4wMzM5IDExIDIgMTEuNSA5IC40IDUuNi01LjgzMzMgNy42NjY3LTkgOHYzLjVoLTV2LTMuNWMtMi40IDAtNi42NjY3LTEuNjY2Ny04LjUtMi41di01LjVjNC41IDIuNSAxNyA0LjUgMTcgMHMtMTYuNTAxMS0zLTE4LjAwMDUtMTFjLTEuMDAyMy01LjM0NzUgNS4zMzMzLTcuODMzMyA5LTguNXoiLz48L2c+PC9zdmc+',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'cusd.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'ABR',\n symbol: 'ABR',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjEyMSIgdmlld0JveD0iMCAwIDEyMSAxMjEiIHdpZHRoPSIxMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48Y2lyY2xlIGN4PSI2MC41IiBjeT0iNjAuNSIgZmlsbD0iIzBlMGIwZiIgZmlsbC1ydWxlPSJub256ZXJvIiByPSI2MC41Ii8+PGNpcmNsZSBjeD0iNjAuNSIgY3k9IjYwLjUiIHI9IjYwIiBzdHJva2U9IiMyZDJjMmUiIHN0cm9rZS1vcGFjaXR5PSIuODEiLz48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iPjxwYXRoIGQ9Im04MS4xNjg3IDUyLjIxNDctMTEuNjUzLTExLjY1MjloLTE3LjY1NTlsLTUuNjQ5MyA1LjY0OTl2LTIwLjEyNzdoLTYuMDAzN3YzNS42NjQ4IDcuNzY4NmwxMS42NTMgMTEuNjUyOWgxNy42NTU5bDUuNjUwMi01LjY0OTl2MjAuMTI3N2g2LjM1NjN2LTMzLjU0NjJ6bS0xNC40NzgxIDIyLjk1MjZoLTExLjY1MjJsLTguNDc1My04LjQ3NDh2LTQuOTQzNy02LjcwOTJsOC40NzUzLTguNDc0OGgxMS42NTIybDguNDc1MyA4LjQ3NDh2Ny40MTU1IDQuMjM3NHoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJtMzEuNzMzNCA3Mi42OTUydi0zMi4xMzM3aC02LjAwMjh2MzQuOTU4NmwyMC40ODEgMjAuNDgwOGgyMC40ODAxdi02LjAwM2gtMTcuNjU1OXoiIGZpbGw9IiM2ZGQiLz48cGF0aCBkPSJtNTUuMDM4OCAyNS43MzA1djYuMDAzaDE3LjY1NTlsMTcuMzAyNCAxNy4zMDI3djMyLjEzMzdoNi4wMDI4di0zNC45NTg2bC0yMC40ODEtMjAuNDgwOHoiIGZpbGw9IiM2ZGQiLz48L2c+PC9nPjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'abr.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Utopia',\n symbol: 'UTO',\n icon:\n \"data:image/svg+xml,%3Csvg id='Layer_1' data-name='Layer 1' xmlns='http://www.w3.org/2000/svg' viewBox='-40 -40 600 600'%3E%3Cdefs%3E%3Cstyle%3E .cls-1%7Bfill:%239f9f9f%7D.cls-2%7Bfill:%23fefefe%7D.cls-4%7Bfill:%23030303%7D %3C/style%3E%3C/defs%3E%3Cpath d='M371.65 15v23.92l-.47.71C368.82 41.48 366 41 363.36 41q-36.94.09-73.88 0h-176c-3.06 0-6.31.67-9.1-1.37l-.47-.71V15ZM55.21 355.33H31.66a2.81 2.81 0 0 1-.26-.3.82.82 0 0 1-.13-.37v-24H6.67V136.41h24.6l.69.44c2 2.64 1.38 5.75 1.39 8.67q.07 73.11 0 146.2c0 12.44.26 12.68 12.64 12.76 3 0 6-.29 8.85 1a3 3 0 0 1 1.23 1.1 12.38 12.38 0 0 1 1.18 6.17q.1 18 0 36.05c0 2.09.17 4.28-1.36 6.06ZM420.4 452.82v23.51c-3.87.66-178.64.93-195 .29v-23.8l.47-.71c2.79-2 6-1.37 9.1-1.37q75.33-.09 150.68 0c9.25 0 18.49-.06 27.74 0 2.25 0 4.6-.25 6.54 1.37ZM176.66 428H128v-23.83H79.16v-24.9l.39-.66c1.9-1.69 4.27-1.4 6.51-1.42 10.55-.08 21.09 0 31.63-.05 6.6-.05 7.89-1.5 8.12-8.1.16-4.52-.77-9.14 1.06-13.53a2.94 2.94 0 0 1 1.1-1.14 58.19 58.19 0 0 1 24.44-.12 3 3 0 0 1 1.2 1.07c1.29 2.36 1.19 4.95 1.2 7.5v30.75c.05 6.74 1.61 8.24 8.36 8.37 3.7.08 7.41-.1 11.1.23 2.23.2 3.9 1.14 4.1 3.54a107.23 107.23 0 0 1-.06 20 3.93 3.93 0 0 1-1 1.85c-.2.17-.43.31-.65.44Z'/%3E%3Cpath d='M225.4 452.82h-48.74V428c1.46-1.94 3.61-2 5.74-2.06 6.36-.1 12.72-.14 19.08.09 6.33-.23 12.67-.21 19-.07 1.93 0 4-.19 5.56 1.42 2.71 7.57 1.34 15.33 1 23-.04 1.09-.97 1.72-1.64 2.44ZM31.27 136.41V87.67h23.94l.7.45c1.36 1.51 1.34 3.39 1.35 5.22q.18 18.9 0 37.8a11.41 11.41 0 0 1-1 5 3.12 3.12 0 0 1-1.12 1.24c-7.1 2.15-14.32 1.17-21.51.74-1.03-.12-1.63-1.04-2.36-1.71Z'/%3E%3Cpath d='M55.21 87.67v-24.8h23.95l.69.44a3.53 3.53 0 0 1 1 1.84c.36 7.46 1.36 14.94-.69 22.33A3 3 0 0 1 79 88.65c-7.08 2-14.25 1.13-21.4.67-1.07-.06-1.67-.99-2.39-1.65ZM469.14 404.07V428h-24.8l-.71-.47a5.34 5.34 0 0 1-1.24-3.54q-.37-8.07 0-16.15a7 7 0 0 1 1.61-4.3 8.54 8.54 0 0 1 5.24-1.52c5-.13 10-.14 15 0 1.86.09 3.65.41 4.9 2.05Z'/%3E%3Cpath d='M79.16 62.87V38.92H104c.79.8 1.71 1.56 1.76 2.78.29 7 1.2 14-.69 20.86a3 3 0 0 1-1.13 1.23C96.52 66 89 64.92 81.56 64.53c-1.07-.06-1.68-1-2.4-1.66ZM444.34 428v24.8H420.4c-.67-.72-1.62-1.34-1.66-2.38-.33-7.7-1.67-15.44 1-23 1.15-1.33 2.78-1.33 4.32-1.4 5.11-.22 10.23-.18 15.35 0 1.9.03 3.68.36 4.93 1.98ZM79.16 379.27H55.21v-23.94c.52-.48.95-1.21 1.63-1.34a70.78 70.78 0 0 1 21.55-.16c1.55.19 2.36 1.57 2.5 3.09a109.82 109.82 0 0 1 0 19.53 4.76 4.76 0 0 1-1.73 2.82ZM444.34 111.61h24.8v73.54c-1.36 1.8-3.33 2-5.35 2-5 .13-9.94.18-14.9 0-5.5-.2-6.49-1.05-6.55-6.57-.18-14.62-.28-29.24.06-43.86-.24-6.35-.22-12.7-.12-19.06 0-2-.09-4 1.36-5.63ZM395.59 62.87h24.81v24.8c-.15.23-.3.46-.44.69a3.62 3.62 0 0 1-1.84 1c-7.43.4-14.88 1.3-22.25-.61a3 3 0 0 1-1.2-1.1c-1.72-8.12-2.21-16.24.23-24.32Z'/%3E%3Cpath d='M420.4 87.67h23.94v23.94c-.79.79-1.55 1.71-2.77 1.76-7 .29-14 1.2-20.87-.69a3.11 3.11 0 0 1-1.23-1.13c-2.14-7.1-1.16-14.3-.74-21.49.07-1.06 1-1.67 1.67-2.39ZM371.65 38.92h23.94v23.95c-.79.79-1.55 1.7-2.77 1.75-7 .3-14 1.2-20.87-.68a3.18 3.18 0 0 1-1.23-1.13c-2.13-7.1-1.16-14.31-.73-21.49.06-1.07 1.01-1.67 1.66-2.4Z'/%3E%3Cpath class='cls-1' d='M371.65 38.92v23.95c-.9 1.57-2.44 1.81-4 2-1.85.17-3.7.15-5.55.15q-124.27 0-248.55-.06c-3.25 0-6.93 1.15-9.57-2.05V38.92Z'/%3E%3Cpath class='cls-2' d='M104 62.87h267.65c1.92 1.47 2 3.6 2.07 5.74.1 3.68-.12 7.36.14 11 .28 4.05 1.77 5.54 5.81 5.83 3.53.25 7.07 0 10.6.14 2 .07 4 .3 5.32 2.07 1.93 1.47 2 3.6 2.08 5.74.11 3.53-.09 7.07.15 10.6.23 3.35 2 5.16 5.38 5.38 3.82.24 7.64 0 11.45.15 2.15.06 4.28.15 5.75 2.07 1.92 1.47 2 3.6 2.07 5.75.1 3.67-.12 7.35.13 11 .28 4 1.78 5.54 5.82 5.83 3.53.25 7.07 0 10.6.14 2 .06 4 .29 5.32 2.06v48.74h24.8v72.69c-1.25 1.62-3 2-4.92 2-3 .11-6 .06-9 .08-7.41.08-8.77 1.36-8.79 8.67-.05 14.34 0 28.68 0 43 0 3.27-.09 6.54 0 9.8.21 5.2 1.79 6.74 7.07 6.93 3.4.12 6.81 0 10.22.09 2 .06 4 .29 5.35 2.06v24.8c-1.45 1.93-3.59 2-5.71 2.05-6.32.1-12.64.16-19-.11-8 .24-16 .29-24 0-6.61.26-13.22.21-19.84.11a11 11 0 0 1-4.52-.85 3.53 3.53 0 0 1-1.28-.81c-1.44-2.28-1.36-4.85-1.38-7.4 0-3.11.09-6.23-.06-9.34-.22-4.62-1.65-6.06-6.2-6.29a67.32 67.32 0 0 0-7.65 0c-4.07.28-5.5 1.71-5.74 5.85-.22 3.68 0 7.37-.11 11.05-.06 2.4-.11 4.83-1.82 6.81-4.08 1.73-8.36.85-12.56 1s-8.19.09-12.28-.15c-6.36.26-12.72.22-19.08.12a11 11 0 0 1-4.54-.85 3.47 3.47 0 0 1-1.28-.82c-1.36-2.15-1.35-4.57-1.37-7 0-3.26.09-6.53-.07-9.79-.22-4.59-1.67-6-6.26-6.25-2.4-.12-4.82-.09-7.23 0-5.4.14-6.83 1.53-7 6.83-.11 3.54 0 7.09-.08 10.63-.07 2.27-.19 4.55-1.89 6.36-2.12 1.1-4.43.92-6.69.92q-29.41.09-58.84 0c-2.41 0-4.85.08-7.08-1.09-2.15-1.51-2.23-3.84-2.31-6.12-.14-3.56 0-7.12-.09-10.68-.17-5.33-1.6-6.72-7-6.86-2.13-.06-4.27-.09-6.41 0-4.58.25-6 1.68-6.19 6.35-.18 5.55.05 11.11-.27 16.67.34 6.24.22 12.48.14 18.72a11 11 0 0 1-1 4.55 2.94 2.94 0 0 1-1 1.19c-7.82 2.28-15.77 1.2-23.67.74-2.42-.14-2.95-2.34-3.11-4.45-.3-4 0-8-.22-11.93-.23-5.19-1.87-6.82-7-7-3.12-.14-6.25 0-9.38-.11-2-.07-4-.27-5.36-2.05-1.78-1.35-2-3.28-2.07-5.32-.09-3.82.1-7.65-.12-11.46-.24-4.14-1.67-5.57-5.75-5.83a69.87 69.87 0 0 0-8.92 0c-4.09.26-5.51 1.69-5.75 5.83-.23 3.81 0 7.64-.12 11.46 0 2-.29 4-2.07 5.32-.52.48-1 1.22-1.62 1.35a70.79 70.79 0 0 1-21.6.17c-2.15-.26-2.53-2.44-2.67-4.35-.32-4.26 0-8.53-.23-12.78-.22-5.2-1.85-6.83-7-7-4.26-.17-8.52 0-12.78-.2-3.1-.17-4.62-1.69-4.78-4.79-.22-4 0-8-.21-11.93-.23-5.18-1.86-6.8-7-7-3.12-.14-6.25 0-9.38-.11-2-.07-4-.28-5.36-2.05a5.39 5.39 0 0 1-2-4.1c-.09-1.71-.14-3.41-.14-5.12V145.58c0-3.16-.87-6.66 2.07-9.22 1.37-1.78 3.35-2 5.37-2 3.14-.11 6.27 0 9.4-.11 5.22-.22 6.91-1.8 7-7 .18-10.54 0-21.07.1-31.61 0-2.78-.52-5.79 2.08-7.93 1.47-1.93 3.6-2 5.74-2.08 3.68-.1 7.36.13 11-.13 4-.29 5.54-1.78 5.82-5.83.26-3.66 0-7.34.14-11 .15-2.2.21-4.33 2.21-5.8ZM469.14 404.07h-24.8l-.71-.47a5.84 5.84 0 0 1-1.28-3.92c-.19-5.76-.23-11.51 0-17.26.07-1.4.18-2.84 1.39-3.84 7.57-2.59 15.3-1.31 23-1 1 0 1.66 1 2.37 1.65Z'/%3E%3Cpath class='cls-1' d='M469.14 379.27h-24.8c-1.66-.8-1.87-2.36-1.95-3.92-.26-5.33-.25-10.66 0-16a5.23 5.23 0 0 1 1.95-4h24.8Z'/%3E%3Cpath d='M469.14 330.53h-24.36c-.65-3.68-.88-58.4-.29-72.69h24.65Z'/%3E%3Cpath class='cls-1' d='M55.21 136.41v170.18H31.72a2.76 2.76 0 0 1-.3-.29.64.64 0 0 1-.15-.36V136.41Z'/%3E%3Cpath d='M55.21 306.59H78.7a1.67 1.67 0 0 1 .31.28.73.73 0 0 1 .14.36v23.15h24.21a4.48 4.48 0 0 1 .45.45.8.8 0 0 1 .14.36v24.14h24v23.94H79.16v-23.94H55.21Z' fill='%23a1a1a1'/%3E%3Cpath class='cls-1' d='M420.4 428v24.8h-195V428c.7-1.53 2.11-1.78 3.55-1.94a48.57 48.57 0 0 1 5.12-.17h177.66c2.95.11 6.36-.98 8.67 2.11ZM152.71 355.33h23.49a1.72 1.72 0 0 1 .31.29.7.7 0 0 1 .14.36v23.29h24.8c2 1.24 2 3.31 2 5.26q.24 19.08 0 38.16c0 2-.25 4-2 5.33h-24.8v-23.5a1.7 1.7 0 0 0-.3-.3.62.62 0 0 0-.36-.14h-23.28Z'/%3E%3Cpath class='cls-1' d='M127.91 355.33V331a1.64 1.64 0 0 1 .29-.3.62.62 0 0 1 .36-.14h24.15v24.8Z'/%3E%3Cpath class='cls-2' d='M201.46 428v-48.73c1.48-1.95 3.64-2 5.79-2 6-.09 11.95-.17 17.92.12 7-.27 14-.31 20.93-.08 5.06.17 5.88 1.07 6.13 6.13.21 4-.06 8 .17 12 .27 4.69 1.92 6.25 6.65 6.56 11.72.77 13-.4 13-12.27 0-12.46 0-12.47 12.37-12.48h30.76c2.41 0 4.86-.13 7.15.88a3.53 3.53 0 0 1 1.27.77c2.32 4.12 1.32 8.63 1.39 13 .15 9.66.55 10.16 10.16 10.16h.85c7.68 0 8.7-1 8.75-8.55v-8.54a11.49 11.49 0 0 1 1.24-5.78 3 3 0 0 1 1.23-1 13.24 13.24 0 0 1 5.42-.92c14.31 0 28.63-.21 42.94.11 6.25-.24 12.51-.16 18.76-.12a14.32 14.32 0 0 1 6.23 1.14c1.93 1.13 1.76 3.1 1.84 4.9.2 4 0 7.93.14 11.88.2 5 1.73 6.58 6.68 6.8 3.26.15 6.51 0 9.77.1 2 .07 4 .29 5.33 2.06V428H201.46Z'/%3E%3Cpath class='cls-1' d='M79.16 87.67v48.74H55.21V87.67ZM104 62.87v24.8H79.16v-24.8ZM444.34 136.41H420.4v-24.8h23.94ZM395.59 87.67h-23.94v-24.8h23.94ZM420.4 111.61h-24.81V87.67h24.81Z'/%3E%3Cpath d='M322.9 379.27h-48.27a2.07 2.07 0 0 0-.31.27.68.68 0 0 0-.16.36v24h-23.67c.06.06-.06 0-.14-.14a.7.7 0 0 1-.14-.36v-24.15H225.4c-.46-.52-1.24-.92-1.33-1.59-.92-7.32-1.93-14.66.63-21.89l.7-.46h72.7c4-3.06 20.75-3.06 24.8 0 3.1 4.03 3.1 20.08 0 23.96ZM274.15 257.84H225.4V209.1c1.37-1.8 3.35-2 5.37-2q19-.19 38 0c2 0 4 .24 5.37 2 1.8 1.36 2 3.34 2 5.37q.19 19 0 38c.03 2.03-.14 4.01-1.99 5.37ZM395.59 257.84h-48.74V209.1c1.36-1.8 3.34-2 5.36-2q19-.19 38 0c2 0 4 .24 5.37 2 1.81 1.36 2 3.34 2 5.37q.21 19 0 38c.03 2.03-.18 4.01-1.99 5.37Z'/%3E%3Cpath class='cls-1' d='M395.59 257.84V209.1H420c.64 3.58.85 35.66.29 48.74Z'/%3E%3Cpath d='M444.34 404.07H420.4v-24.8c-3-4-3-19.92 0-23.94h23.94v48.74ZM395.59 379.27h-48.74c-.36-.45 0 .24-.35-.23-2.73-3.92-2.49-20 .35-23.71h24.8c4-3 19.93-3 23.94 0 3.04 4.02 3.04 19.93 0 23.94Z'/%3E%3Cpath class='cls-1' d='M274.15 209.1H225.4v-23.5c3.58-.64 35.65-.85 48.75-.3ZM395.59 209.1h-48.74v-23.5c3.58-.64 35.65-.85 48.74-.3ZM274.15 257.84V209.1h23.5c.64 3.58.85 35.65.3 48.74ZM322.9 355.33h-24.8V331a1.64 1.64 0 0 1 .29-.3.62.62 0 0 1 .36-.14h24.15ZM395.59 355.33h-23.94V331a1.64 1.64 0 0 1 .29-.3.62.62 0 0 1 .36-.14h23.29Z'/%3E%3Cpath d='M201.46 355.33V331a1.64 1.64 0 0 1 .29-.3.62.62 0 0 1 .36-.14h23.29v24.8c-4.01 3-19.93 3-23.94-.03Z'/%3E%3Cpath class='cls-1' d='M127.78 136.53v23.73h-23.64v-23.73ZM346.85 355.33v23.94c-4 3-19.93 3-24 0v-23.94ZM152.83 111.49V87.76h23.64v23.73Z'/%3E%3Cpath d='M322.9 379.27h24v24.35a2.07 2.07 0 0 1-.29.3.67.67 0 0 1-.37.15H322.9Z'/%3E%3Cpath class='cls-1' d='M127.79 136.27V111.7h24.91v24.57ZM201.45 379.25v-23.91h23.94v23.91ZM395.57 379.25v-23.91h24.86v23.91Z'/%3E%3Cpath class='cls-4' d='M469.17 404.08v-73.61h23.92v73.61ZM469.17 257.76v-72.61h23.92v72.61Z'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 8,\n id: 'utopia.secretskelliessociety.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'DEIP Token',\n symbol: 'DEIP',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDUiIGhlaWdodD0iNDUiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iLjg5MiIgeT0iLjkxIiB3aWR0aD0iNDMuMTYxIiBoZWlnaHQ9IjQzLjE2MSIgcng9IjIxLjU4MSIgZmlsbD0iI0Y4RkVGQSIvPjxwYXRoIGQ9Ik05LjcgMTAuNmgxNC41MzRjNi41NjcgMCAxMS44OTIgNS4zMjMgMTEuODkyIDExLjg5IDAgNi41NjgtNS4zMjQgMTEuODkyLTExLjg5MiAxMS44OTJIOS43VjEwLjZaIiBmaWxsPSJ1cmwoI2EpIi8+PGNpcmNsZSBjeD0iMjIuNDczIiBjeT0iMjIuNDkxIiByPSI0Ljg0NSIgZmlsbD0iIzAwMCIvPjxkZWZzPjxyYWRpYWxHcmFkaWVudCBpZD0iYSIgY3g9IjAiIGN5PSIwIiByPSIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjE2IDExLjY5NTUgLTExLjkyNjc3IC4yMjAyOCAyMi42OTcgMjIuNjg3KSI+PHN0b3Agb2Zmc2V0PSIuMzU5IiBzdG9wLWNvbG9yPSIjRTlGRjAwIi8+PHN0b3Agb2Zmc2V0PSIuNzYiIHN0b3AtY29sb3I9IiMyNjM4MDAiLz48c3RvcCBvZmZzZXQ9IjEiLz48L3JhZGlhbEdyYWRpZW50PjwvZGVmcz48L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'deip-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wootrade Network',\n symbol: 'WOO',\n icon:\n \"data:image/svg+xml,%3Csvg width='125' height='83' viewBox='0 0 125 83' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M102.422 0H122.958L113.203 30.9433H92.9243L102.422 0ZM75.982 29.4048L86.0788 53.3388L89.8436 41.0299H109.951L98.5713 78.0422C97.6301 80.9485 94.9776 82.9145 91.8972 82.9145H80.4314C77.6078 82.9145 75.0408 81.2049 73.9285 78.5551L61.2648 47.8682L48.8578 78.5551C47.831 81.2904 45.2641 83 42.3549 83H30.718C27.6376 83 24.9851 80.9485 24.0439 78.0422L0 5.85842e-05H20.1934L36.2797 53.3388L46.8898 29.3193C49.2857 23.3358 55.0185 19.4038 61.4359 19.4038C67.8533 19.4038 73.6718 23.3358 75.982 29.4048Z' fill='%2320252F'/%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '4691937a7508860f876c9c0a2a617e7d9e945d4b.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'LiNEAR',\n symbol: 'LINEAR',\n icon:\n \"data:image/svg+xml,%3Csvg width='40' height='40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M30.74 28.78c.21-.36.32-.78.32-1.21v-6.33c0-.24-.06-.46-.17-.66-.12-.21-.28-.38-.48-.49l-16.86-9.77c-.35-.2-.73-.31-1.13-.32-.64 0-1.24.26-1.69.72-.45.45-.7 1.07-.71 1.71v6.39c0 .24.06.47.18.67.11.21.28.37.48.48l16.82 9.71c.36.22.77.32 1.19.32.41 0 .82-.12 1.19-.33.36-.21.66-.52.86-.89zm.32-16.27c0-.42-.1-.84-.29-1.21-.2-.38-.49-.7-.85-.93-.36-.22-.78-.34-1.21-.34-.42 0-.84.12-1.21.34l-4.97 2.81c-.04.02-.08.07-.1.12-.03.04-.04.1-.04.14 0 .06.01.11.04.16.02.04.06.08.1.1l8.05 4.62c.05.02.1.04.15.04.05 0 .1-.02.15-.05.04-.02.08-.06.11-.11.02-.04.04-.1.03-.15l.04-5.54zM10.05 27.5c-.01.43.08.86.28 1.23.2.38.49.7.85.93.36.22.78.34 1.2.34.42 0 .83-.12 1.2-.34l4.92-2.85c.04-.02.08-.06.1-.11.03-.04.05-.1.05-.15 0-.05-.02-.11-.05-.15-.02-.05-.06-.09-.1-.12l-8.05-4.6c-.05-.03-.09-.04-.15-.04-.05 0-.1.01-.15.04-.05.02-.08.07-.11.12-.02.04-.04.09-.04.14l.05 5.56z' fill='url(%23paint0_linear_186_370)'/%3E%3Cdefs%3E%3ClinearGradient id='paint0_linear_186_370' x1='11.135' y1='11.152' x2='30.145' y2='30.457' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%231BB3CC'/%3E%3Cstop offset='1' stop-color='%23824ACC'/%3E%3C/linearGradient%3E%3C/defs%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'linear-protocol.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USN',\n symbol: 'USN',\n icon:\n \"data:image/svg+xml;charset=UTF-8,%3Csvg width='38' height='38' viewBox='0 0 38 38' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='38' height='38' rx='19' fill='black'/%3E%3Cpath d='M14.8388 10.6601C14.4203 10.1008 13.6748 9.86519 12.9933 10.0768C12.3119 10.2885 11.85 10.8991 11.85 11.5883V14.7648H8V17.9412H11.85V20.0589H8V23.2353H11.85V28H15.15V16.5108L23.1612 27.2165C23.5797 27.7758 24.3252 28.0114 25.0067 27.7997C25.6881 27.5881 26.15 26.9775 26.15 26.2882V23.2353H30V20.0589H26.15V17.9412H30V14.7648H26.15V10.0001H22.85V21.3658L14.8388 10.6601Z' fill='white'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'usn',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Huobi BTC',\n symbol: 'HBTC',\n icon:\n \"data:image/svg+xml,%3C%3Fxml version='1.0' standalone='no'%3F%3E%3C!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN' 'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'%3E%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' id='body_1' width='32' height='32'%3E%3Cg transform='matrix(1.3333334 0 0 1.3333334 0 0)'%3E%3Cimage x='0' y='0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAA/tJREFUWIXtln9oVWUYxz/vOc67iWtNS9IkjcSui8RUsv40TbLfVoZE5R+li1JJioqYFlKI/bBQo+417A+pTSgkiH5p0ETIBIvaaosiRcRqYVM3t3Oe97zv0x+eO27jXt1kWoFfOJzDeX59npf3fc6B8/o/atNXOmKocgVnEmSt3vOvAaxr1stEdN5QAQwbbIAV7kO0dqgABrUCDR9rpVhdJqIO4KUdmjmnAEnCMon0Uom18/ltekXVSNafM4CVH+h4SVglkUdEDwELgoBHNu7RG846wIomb2xCXoQLpMdhRX8GrnWWwMDWV5v9mLMK0JuYx8QyX3ocNlZEtAWY3HPcE51w47z4rU9t1zM60qc9BYu36ExreQWArgTjNB5WEbaqMjE+AVZcZAzhyMBPA74ZUoBFeT/aJrwPZJAE0+sA9o2p9aPiKCYMg2dC53NrFlUdHWzhAQEk1mzGMAFVzFEBpxjDrrg3qg3CYOr6+pqDUT477tlc9iHgOqAW6AT2YGisXNp++HQAppzhttf9LcaYjwDoEUy3ABAYbtz+QvXOOHdVqLjVwNNAqXkQA+sM4ZpM/Q+uXJ2yG8cmZpVYEFFspyCxYkW7vHO7JV8XKK4RWN2v+ALgMNCUvl+tuEbJ15WtU9Iwe63WiWWWWLBdFht5rCgS66YP114YefVPAgsLrMBc4DmD+Q5oAT4vSrcw9R84gLXMEQtiQdLuJVa1lrfi3JQaoKHIvQK4tbK+fU2mvm1/EAY3pxDfFvk0pHEDAxDLlWIViRy2O0FEEdG25jdrDip6O1BdKk+Uy272zjdhOATcVWSvTuMGCJBQJYkpLo6I/pSap5cI2Zne64C7USabwPwB+CKfUnFlV6BDrCLdCTbWwtVd6KafuzXGfBnlspOAN4wJLq+sb9+lXh/tl79/XHkAm+hesWB7fd8KxHHfP0BHkWsvsCWztK0LuBd4V9X/GOWzNZycB8XqoIRKDqLEmU+d0yNBwmgTa+H1tAnzOg1cv7vItRl4OX1uArqA2iAIurzzyj+1mxIquQL7N5pem/CimLB4D4y3ksw0ATuAA6nrTcAvcX7KJOABjNlmCPLe6QxOzoiCDpjA7BgwAEDizIZ4+PBPxFI4hljxT2SWtFtgOVDo8IiqzgXGovq44n8D3QtMTO0KLM8sabOl6pQdxQCjFmuV6+h+jz9P3NmXTJl/bN8ln0W57ArgtaImfgdC4OKiFB5YWVnfvqFcjVMCAIy43xtz8NiDelwacH6SwhFVZketY1uiXHZOCnF1idCWtPgXp8p/WoCCLrrDmuO//jWdxF+jQEXIOz2tY52+PdXEzs4AnUXf19B8nQkr9pmHv++/Ec/rv6e/AQ/TFRmUSxQZAAAAAElFTkSuQmCC' width='24' height='24'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '0316eb71485b0ab14103307bf65a021042c6d380.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'PembRock',\n symbol: 'PEM',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyMDAgMjAwIj48cGF0aCBmaWxsPSIjMUUxRTFGIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMTMuMiAxNzAuNDJhODMuNTEgODMuNTEgMCAwIDAgNzAuNy04Mi42IDgzLjUgODMuNSAwIDAgMC01Ljc4LTMwLjYxbDEzLjY4LTIzLjg3aC0yOC4wOGE4My4xIDgzLjEgMCAwIDAtNjMuMi0yOS4wNiA4My4xIDgzLjEgMCAwIDAtNjMuMiAyOS4wNkg4LjU4TDIyLjcgNTcuNzhhODMuNSA4My41IDAgMCAwLTUuNTUgMzAuMDUgODMuNTEgODMuNTEgMCAwIDAgNzAuNiA4Mi41N2wxMi43NyAyMi4xMSAxMi42Ny0yMi4xWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI0VBRUNFRiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAwLjUzIDcuOTJBNzguNjYgNzguNjYgMCAwIDAgNDAuNjEgMzUuNmwtMS4xOCAxLjE3SDE2LjY1TDI4LjIzIDU3LjFsLS42OCAxLjc3Yy0zLjQgOC44Ny02LjA3IDE4LjEtNi4wNyAyOC4yIDAgMzkuNzcgMjkuMDMgNzMuMTQgNjYuOTQgNzlsMS44Ni4zIDEwLjM0IDE3Ljc5IDEwLjA2LTE3Ljc4IDEuODctLjNjMzcuOTUtNS44MSA2Ny4wMy0zOC44IDY3LjAzLTc4LjYxIDAtMTAuMy0yLjI0LTIwLjEzLTUuNzgtMjkuMTVsLS42OS0xLjc4IDExLjE4LTE5Ljc3aC0yMi42NWwtMS4xOC0xLjE3YTc4LjY2IDc4LjY2IDAgMCAwLTU5LjkzLTI3LjY3Wk0zNS44NCAyOS4wNEE4Ni40OCA4Ni40OCAwIDAgMSAxMDAuNTQgMGE4Ni40OCA4Ni40OCAwIDAgMSA2NC42OCAyOS4wNGgzMi42N0wxODEuODEgNTcuMmMzLjQ2IDkuNDMgNS42NSAxOS42MyA1LjY1IDMwLjI2IDAgNDMuMTItMzEuMDIgNzguOTUtNzEuODMgODYuMTRMMTAwLjY1IDIwMGwtMTUuMy0yNi40MmMtNDAuNzctNy4yMy03MS43NC00My40NC03MS43NC04Ni41MyAwLTEwLjQgMi42Mi0xOS45OSA1LjkzLTI5LjI1TDMgMjkuMDRoMzIuODRaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjRjY4MjFGIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0zMS44NSA0NS40MSA2OC43NSAxMjAuNDIgOC4wNi0xNC4xMi0yNy40Ny00OC4xM2gyNC4zTDcyLjMzIDQ1LjRIMzEuODVabTQ5LjE5IDAgNDQuMTUgNzcuMzIgNy42Ny0xMy40NC0yOC4xOC00OS4zNGg4LjM3bDIzLjk5IDQyLjAyTDE0NSA4OGwtMTYuMDItMjguMDVoMTYuNDJsLTQuNDMgNy43NiA3LjgxIDEzLjcgMjAuNTctMzZIODEuMDRaTTU2LjMgNTkuOTVsMTYuNjIgMjkuMTFoOC42N0w2NC45NyA1OS45NUg1Ni4zWk00NC4yIDg0LjZhNTYuNjUgNTYuNjUgMCAwIDAgMzEuMDUgNTQuMTJsNi4zMiAxMS4wMWE2NC40NSA2NC40NSAwIDAgMS00NS4yOS02MS43YzAtNC45Ny41Ni05LjggMS42LTE0LjQ0bDYuMzMgMTEuMDJabTc5LjY1LTQ3LjlhNTUuNDYgNTUuNDYgMCAwIDAtMjMuNjYtNS4yNyA1NS40NSA1NS40NSAwIDAgMC0yMy42NSA1LjI2SDYxLjVhNjMuMjYgNjMuMjYgMCAwIDEgMzguNy0xMy4xNmMxNC41NCAwIDI3Ljk1IDQuOSAzOC43IDEzLjE2aC0xNS4wNVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNGNjgyMUYiIGQ9Ik00NC4xIDg4LjAyYzAtMS4xNC4wNC0yLjI4LjEtMy40MWwtNi4zLTExLjAyYTY1LjI2IDY1LjI2IDAgMCAwLTEuNiAxNC40MyA2NC40NSA2NC40NSAwIDAgMCA0NS4yOCA2MS43MWwtNi4zMS0xMWE1Ni42NSA1Ni42NSAwIDAgMS0zMS4xNS01MC43Wm0xMTMuMTIgMGMwLTEuMTQtLjItMi4yOC0uMjctMy40MWw2LjI1LTExLjAyYTY1LjMxIDY1LjMxIDAgMCAxIDEuODQgMTQuNDMgNjQuNDUgNjQuNDUgMCAwIDEtNDUuMjkgNjEuNzFsNi4zMS0xMWE1Ni42NSA1Ni42NSAwIDAgMCAzMS4xNi01MC43WiIvPjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.pembrock.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Atocha Coin',\n symbol: 'ATO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMzYuODggMTM2Ljg4Ij48Y2lyY2xlIGN4PSI2OC40NCIgY3k9IjY4LjQ0IiByPSI2OC40NCIgc3R5bGU9ImZpbGw6Z29sZCIgZGF0YS1uYW1lPSJMYXllciAyIi8+PGcgZGF0YS1uYW1lPSJMYXllciAxIj48cGF0aCBkPSJNNzEuNjUgNzkuNXYyNC40MWMwIDEuMjcuMjQgMS40OSAxLjQ3IDEuMTcgMS4wOC0uMjkgMi4xMy0uNjggMy4xOC0xYTExLjU4IDExLjU4IDAgMCAwIDEuNS0uNTljMS40MS0uNzIgMi44NC0xLjQgNC4xOC0yLjIyYTI1LjU5IDI1LjU5IDAgMCAwIDUuNTktNC42NGMxLjM2LTEuNTIgMi41NC0zLjIgMy43OC00LjgyLjMzLS40My4xOS0uNzItLjM1LS43MS0uODYgMC0xLjcyLjEzLTIuNTguMjItLjQ5IDAtMSAuMTMtMS40Ny4xOWEuMzkuMzkgMCAwIDEtLjQ4LS4zN2wtLjMzLTJhMS41NSAxLjU1IDAgMCAwLS4wNy0uNDIgNS43OCA1Ljc4IDAgMCAxLS4zMy0yLjEzYy0uMDktMS0uMjUtMS45NC0uMzQtMi45Mi0uMDctLjc4LjA1LS44NC44My0uOTQgMS41OS0uMTkgMy4xOC0uNDQgNC43Ny0uNjVsMi43OS0uMzcgMS4xNC0uMTUgNC44Ny0uNzRjLjI3IDAgLjU0LS4wNS44LS4wOWwyLjE4LS4zNWEyLjc1IDIuNzUgMCAwIDEgLjU1LS4wOC40Ny40NyAwIDAgMSAuMzUuMTcgOS44NSA5Ljg1IDAgMCAxIC40NCAxLjFjLjI0LjY5LjQ2IDEuMzkuNjkgMi4wOGEyLjY5IDIuNjkgMCAwIDEgLjA5LjI4Yy4xNy44My4zMyAxLjY2LjUxIDIuNDkuMjYgMS4xNC41NCAyLjI3LjgxIDMuNC4zMSAxLjMxLjYgMi42My45MyAzLjkzLjE5Ljc1LjQ1IDEuNDkuNjUgMi4yNHMuNDUgMS44MS42NiAyLjcxYS40LjQgMCAwIDEtLjE0LjM0IDMuMzkgMy4zOSAwIDAgMS0uODEuMzVjLTEuMzYuMzYtMi43Mi42OS00LjA5IDFsLTIuNTEuNjVjLS42My4xNy0uNzcuMDgtLjkyLS41NHEtLjM5LTEuNTktLjgyLTMuMTdjMC0uMTQtLjIxLS4zNC0uMzItLjM0YS45MS45MSAwIDAgMC0uNTkuMjRjLS4yOS4zMy0uNDguNzQtLjc1IDEuMDgtLjkzIDEuMTgtMS45IDIuMzMtMi44MyAzLjUxYTMwIDMwIDAgMCAxLTQuNiA0LjMgMzkuNCAzOS40IDAgMCAxLTMuNzQgMi41OCAyNi41OSAyNi41OSAwIDAgMS0yLjcxIDEuNTljLTEuMDguNTMtMi4yIDEtMy4zMiAxLjQycy0yIC43OC0zLjA3IDEuMTFjLS43MS4yMy0xLjQ1LjM3LTIuMTcuNTUtLjIuMDUtLjQuMTQtLjYuMjFhNC41MSA0LjUxIDAgMCAxLS40NC4xNmMtLjYxLjE1LTEuMjMuMy0xLjg1LjQzYS42Mi42MiAwIDAgMC0uNTMuN2MwIC43OCAwIDEuNTctLjA2IDIuMzRhNS4yOCA1LjI4IDAgMCAxLS44IDIuNDkgMy44OCAzLjg4IDAgMCAxLTEuNTIgMS4zMiAxMi41NyAxMi41NyAwIDAgMS0xLjU0LjcxIDEuMjQgMS4yNCAwIDAgMS0uNzguMDcgNS44NiA1Ljg2IDAgMCAxLTMuNzMtMi45MiA4IDggMCAwIDEtLjQtMi42MiAxMCAxMCAwIDAgMSAwLTEuMjguNjcuNjcgMCAwIDAtLjYxLS43NGMtLjc1LS4xNC0xLjUtLjI2LTIuMjQtLjQ0cy0xLjU3LS40NC0yLjM1LS42OGMtLjUtLjE1LTEtLjI4LTEuNS0uNDctMS42My0uNjEtMy4yOC0xLjE5LTQuODktMS44NmExNS4xMiAxNS4xMiAwIDAgMS0yLjI3LTEuMjljLTEuMzgtLjg5LTIuNzgtMS43Ny00LjEtMi43Ni0xLS43Ni0xLjkyLTEuNjgtMi44OC0yLjUyYTM2LjMzIDM2LjMzIDAgMCAxLTQuODEtNS42OGMtLjU4LS43Ny0xLjEtMS41OC0xLjY4LTIuMzVhLjgxLjgxIDAgMCAwLS42LS4yOWMtLjE2IDAtLjM3LjI1LS40My40My0uMzEgMS0uNTcgMi4wNy0uODYgMy4xMXEtLjE5LjctLjQgMS4zOWMtLjExLjM1LS4zOS4zNC0uNjYuMjgtLjU4LS4xMy0xLjE2LS4yOC0xLjczLS40My0xLjYyLS40Mi0zLjI0LS44NC00Ljg2LTEuMjhhNi41NSA2LjU1IDAgMCAxLTEtLjQuMzQuMzQgMCAwIDEtLjEyLS4zYy4yMS0xIC40MS0xLjkzLjY2LTIuODkuMzMtMS4yNC43Mi0yLjQ3IDEtMy43Mi4zOC0xLjQ4LjcyLTMgMS4wOC00LjQ3LjIyLS44OS40Ni0xLjc4LjY4LTIuNjguMTgtLjcyLjM0LTEuNDUuNTItMi4xN3MuMzItMS4yMy41Mi0xLjgzLjM4LS41NS44OC0uNDJhNi43NCA2Ljc0IDAgMCAwIC45Mi4xNWMxLjIuMTUgMi4zOS4yOCAzLjU5LjQ0bDUuNi43NSA0LjYxLjU3Yy44NS4xMSAxLjY5LjI1IDIuNTMuMzYuMyAwIC40Ny4xOS40NC41MXYuNDNjLS4xMyAxLjI0LS4yMiAyLjQ5LS40IDMuNzJzLS40NSAyLjM4LS42NiAzLjU4Yy0uMDYuMzQtLjIzLjQ3LS41NS40MmwtMi4xNC0uMzVhMi4yIDIuMiAwIDAgMC0uNDcgMGMtLjQgMC0uNTcuMjItLjQyLjU5YTcuOTIgNy45MiAwIDAgMCAuNzEgMS4zNCAyNC45NCAyNC45NCAwIDAgMCAzLjUyIDQuMjFjLjkxLjg4IDEuODIgMS43NiAyLjc4IDIuNTdhMTkgMTkgMCAwIDAgNC4yOSAyLjY5YzEuMTEuNTEgMi4yMiAxIDMuMzcgMS40N3MyLjM4LjggMy41OCAxLjE4YTIgMiAwIDAgMCAuNTEuMDUuNDcuNDcgMCAwIDAgLjUyLS40IDIuOTEgMi45MSAwIDAgMCAuMDctLjU1Yy4wNy0zLjYuMTgtNy4xOS4yLTEwLjc5LjA1LTguMzIuMDYtMTYuNjQuMDgtMjVWNTQuODVjMC0uOS0uMi0xLjA5LTEuMS0xLjA5aC0xNmExMy41MSAxMy41MSAwIDAgMS0yLjc4LS4zOSAxLjMxIDEuMzEgMCAwIDEtLjczLS43IDMuNDUgMy40NSAwIDAgMS0uMzMtMS4zNXYtNC4zMWEzLjQ1IDMuNDUgMCAwIDEgLjMxLTEuMSAxIDEgMCAwIDEgLjk1LS42M2MxLjMtLjExIDIuNi0uMjQgMy45MS0uMjYgMy42MyAwIDcuMjUgMCAxMC44OC0uMDVoMy44M2MuNjYgMCAxLS4yNyAxLS45M1YzMi41NmExLjQzIDEuNDMgMCAwIDAtLjc1LTEuMzQgMTAuNDkgMTAuNDkgMCAwIDEtMy41NS0zLjU2IDcuNTcgNy41NyAwIDAgMS0xLjI5LTMuN2MtLjA2LTEuMTkgMC0yLjM5IDAtMy41OEE4LjM1IDguMzUgMCAwIDEgNTguNDEgMTdhOS41IDkuNSAwIDAgMSA0LTMuNzYgNi41MyA2LjUzIDAgMCAxIDIuNjgtMWMuNzMtLjA4IDEuNDQtLjMgMi4xNy0uMzRhNi4xNiA2LjE2IDAgMCAxIDEuNDIuMjJjLjEzIDAgLjI1LjA4LjM3LjA5YTEwLjM1IDEwLjM1IDAgMCAxIDUgMi4zNSA3LjYyIDcuNjIgMCAwIDEgMi4xOCAyLjhjLjQ2LjkzLjggMS45MyAxLjE3IDIuOWEyLjEyIDIuMTIgMCAwIDEgLjEuNjd2MS40NWE4LjEyIDguMTIgMCAwIDEtLjcxIDMuNTUgMTIuMzEgMTIuMzEgMCAwIDEtMi4xNyAzLjYzIDUuOCA1LjggMCAwIDEtMS45MyAxLjU3IDEuNjggMS42OCAwIDAgMC0xLjA2IDEuNzR2MTEuMjZjMCAuNjIuMjkuODYuOTIuODhIODUuNjljMS43NiAwIDMuNTIuMTQgNS4yOC4xNmExLjgyIDEuODIgMCAwIDEgMS42OCAxLjg1djQuNjFhMi4zMyAyLjMzIDAgMCAxLS41NyAxLjQ0IDEuMzUgMS4zNSAwIDAgMS0uNy40MSAyMC4wNyAyMC4wNyAwIDAgMS01LjE4LjM0SDcyLjY3Yy0uOTEgMC0xLjA3LjE2LTEuMDcgMS4wNnEuMDUgMTIuMzQuMDUgMjQuNjJabS00LjQ5LTUxLjU1YTUuNzQgNS43NCAwIDAgMCA1LjcxLTUuNjQgNS44MiA1LjgyIDAgMCAwLTYuMDgtNS42M2MtMi41Mi4wNS01LjExIDIuODMtNS4wNyA1LjcxYTUuNiA1LjYgMCAwIDAgNS40NCA1LjU2WiIvPjxwYXRoIGQ9Ik04MC45NCA3Ny41YTIwIDIwIDAgMCAxLTIuNjktLjM3IDcuMzMgNy4zMyAwIDAgMS00LjM0LTMgNy43IDcuNyAwIDAgMS0xLTYuMjQgNy43OCA3Ljc4IDAgMCAxIDMuNzYtNSAxMC4yNSAxMC4yNSAwIDAgMSA2LjM4LTEuNTEgOC4xIDguMSAwIDAgMSA2LjE3IDMuNEE3LjY1IDcuNjUgMCAwIDEgOTAuNTcgNzFhNi40NiA2LjQ2IDAgMCAxLTIuMTQgMy40NiAxMi4yNyAxMi4yNyAwIDAgMS0zLjQ2IDIuMjEgMTAuNjQgMTAuNjQgMCAwIDEtNC4wMy44M1ptMy01LjY2YTYuNjkgNi42OSAwIDAgMCAwLS44NSAyMi41IDIyLjUgMCAwIDAtMS4xNy00Ljc3IDEuODMgMS44MyAwIDAgMC0xLjQ4LTEuMzFjLTEuMjYtLjEzLTEuOTIgMS0xLjggMi4xOWEyMy43MiAyMy43MiAwIDAgMCAuNjQgMy40IDEzLjA3IDEzLjA3IDAgMCAwIC44NiAyLjM5IDEuNDggMS40OCAwIDAgMCAyLjMzLjU2IDEuODEgMS44MSAwIDAgMCAuNjEtMS42M1pNNDMuOTQgNzMuMzFhMy44NyAzLjg3IDAgMCAxIDItMy42QTguOTEgOC45MSAwIDAgMSA1MSA2OC4zOWE1LjU5IDUuNTkgMCAwIDAgLjYgMCAxIDEgMCAwIDAgMS0xIDEwIDEwIDAgMCAwLS4yNy0yLjU2IDEuMzMgMS4zMyAwIDAgMC0yLjM0LS41NGMtLjU3LjU1LTEgMS4yMS0xLjU3IDEuNzlhMi41NiAyLjU2IDAgMCAxLTIuMjIuOTQgMS40NyAxLjQ3IDAgMCAxLTEuMjEtMiAzLjkzIDMuOTMgMCAwIDEgMi0yLjA5IDEzLjI2IDEzLjI2IDAgMCAxIDIuNTctMS4wOCAxMC4zMSAxMC4zMSAwIDAgMSA1LjEzLS4yNyA3LjM1IDcuMzUgMCAwIDEgMi45MyAxLjM2QTMuMzggMy4zOCAwIDAgMSA1OSA2NS4zOWMuMDcgMS4yNy4wOCAyLjU0LjE1IDMuODEuMDYgMSAuMTYgMiAuMjYgM2ExLjIzIDEuMjMgMCAwIDAgLjg4IDEuMDVjLjY3LjI3Ljc0LjQ2LjU3IDEuMTRhMy44IDMuOCAwIDAgMS0yIDIuMzUgNC4zOCA0LjM4IDAgMCAxLTMuNjguNDUgMy4zIDMuMyAwIDAgMS0xLjE1LS42OWMtLjc0LS42OC0uODItLjc1LTEuNjItLjE5YTYuMjEgNi4yMSAwIDAgMS00LjY5IDEgNC4yMSA0LjIxIDAgMCAxLTMuMS0xLjgxIDMuMSAzLjEgMCAwIDEtLjY4LTIuMTlabTcuNy0yLjkxYTIgMiAwIDAgMC0xLjE3IDMuNDMgMS4yMiAxLjIyIDAgMCAwIDEuNzQtLjI0IDIuOSAyLjkgMCAwIDAgLjI2LTIuNjIuNzYuNzYgMCAwIDAtLjgyLS41N1oiLz48L2c+PC9zdmc+',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'atocha-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'SeatlabNFT',\n symbol: 'SEAT',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' x='0px' y='0px' width='32px' height='32px' viewBox='0 0 32 32' style='enable-background:new 0 0 32 32;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23050035;%7D .st1%7Bfill:url(%23SVGID_1_);%7D%0A%3C/style%3E%3Cg id='Layer_1'%3E%3Ccircle class='st0' cx='16' cy='16' r='16'/%3E%3C/g%3E%3Cg id='Isolation_Mode'%3E%3ClinearGradient id='SVGID_1_' gradientUnits='userSpaceOnUse' x1='6.2375' y1='16' x2='25.7625' y2='16'%3E%3Cstop offset='0' style='stop-color:%2300C2FF'/%3E%3Cstop offset='1' style='stop-color:%230067FF'/%3E%3C/linearGradient%3E%3Cpath class='st1' d='M14,6.1c-0.3,0-0.5,0.1-0.8,0.2L8.1,9.4L7.8,9.6L7.2,10c-0.5,0.3-0.9,0.6-0.9,1.7v4.1c0,0.9,0.3,1.6,0.9,1.9 l6.2,3.8c1,0.6,2.3-0.1,2.3-1.3v-2.9c0-0.7-0.4-1.4-1-1.8l-2.9-1.8l3-1.9c0.5-0.3,0.8-0.9,0.8-1.5V7.6C15.6,6.7,14.8,6.1,14,6.1z M14.7,10.4c0,0.3-0.2,0.6-0.4,0.8l-3.4,2.1l-1.8-1.1c-0.5-0.3-0.8-0.5-1.1-0.8c-0.3-0.3-0.2-0.8,0.2-1c0,0,0,0,0,0L13.7,7 C13.8,7,13.9,6.9,14,6.9c0.3,0,0.7,0.3,0.7,0.7V10.4z M24.9,14.3l-6.2-3.8c-1-0.6-2.3,0.1-2.3,1.3v2.9c0,0.7,0.4,1.4,1,1.8l2.9,1.8 l-3,1.9c-0.5,0.3-0.8,0.9-0.8,1.5v2.8c0,0.9,0.8,1.6,1.6,1.6c0.3,0,0.5-0.1,0.8-0.2l5.1-3.1l0.4-0.2l0.6-0.4 c0.5-0.3,0.9-0.6,0.9-1.7v-4.1C25.8,15.3,25.4,14.6,24.9,14.3z M23.8,21.6C23.8,21.6,23.8,21.6,23.8,21.6L18.3,25 c-0.1,0.1-0.2,0.1-0.4,0.1c-0.3,0-0.7-0.3-0.7-0.7v-2.8c0-0.3,0.2-0.6,0.4-0.8l3.4-2.1l1.8,1.1c0.5,0.3,0.8,0.5,1.1,0.8 C24.3,20.9,24.2,21.4,23.8,21.6z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 5,\n id: 'token.stlb.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Burrow Token',\n symbol: 'BRRR',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.burrow.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'FUSOTAO',\n symbol: 'TAO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTU1LjQxIDI5LjYzNS03LjI5NiA2LjE0N2ExLjY1OSAxLjY1OSAwIDAgMS0uNjc1IDIuMzlsMS44NDggOS41NDZjLjgwNS0uMjA4IDEuNTM2LS43MDIgMi4wODktMS41MzlhMTIuODE2IDEyLjgxNiAwIDAgMCAxLjk4Mi01LjI4OWMuMTctMS4yNTEuNTY0LTIuNDczIDEuMTU2LTMuNTg2YTEyLjgzMyAxMi44MzMgMCAwIDAgMS40ODItNS40NjljLjAzNS0uODYzLS4xODYtMS42LS41ODctMi4yeiIgZmlsbD0idXJsKCNhKSIvPjxwYXRoIGQ9Ik00NS4zNDIgMzUuOTA2YTEuNjM3IDEuNjM3IDAgMCAxIDIuMTgzLS42M2w3LjM3OC02LjE5M2MtMS4yODMtMS4xOTMtMy40NTktMS41NDctNS40NDUtLjkwM2wtMTIuNzQyIDQuMTM1Yy0uMzEuMS0uNTUzLjI5Ny0uNzE2LjU0Mmw5LjM0MiAzLjA0OXoiIGZpbGw9InVybCgjYikiLz48cGF0aCBkPSJNNDMuODkyIDQ1LjM3YzEuMTQ5IDEuNTkyIDIuOTQ3IDIuNTcyIDQuNTk5IDIuNTI0bC0xLjg0NC05LjQ4N2ExLjY0NCAxLjY0NCAwIDAgMS0xLjUzOC0xLjY4bC05LjM2NC0zLjA1NWMuMDA0LjI2OC4wODcuNTQuMjYuNzhsNy44ODcgMTAuOTE5eiIgZmlsbD0idXJsKCNjKSIvPjxwYXRoIGQ9Im00MS40MSA1My4yMjMtOC4wNTYtNS4wOTJhMS42MzEgMS42MzEgMCAwIDEtMi40NjQuMDkxbC04LjQzOCA0LjcyMWMuNDQ0LjcwOCAxLjEzNiAxLjI1NiAyLjA5NyAxLjUyNyAxLjc5NC41MDYgMy43NC42MDMgNS42MDUuMjY1YTEwLjUzNiAxMC41MzYgMCAwIDEgMy43NDIgMGMxLjg3LjMzOSAzLjgyMS4yNCA1LjYxOS0uMjcuODI2LS4yMzMgMS40NTMtLjY3MyAxLjg5NS0xLjI0MnoiIGZpbGw9InVybCgjZCkiLz48cGF0aCBkPSJNMzIuMzg5IDQ1LjQzOGExLjY0NiAxLjY0NiAwIDAgMSAxLjI3IDEuODlsOC4xNDUgNS4xMzRjLjczNC0xLjU5NC4zOTctMy43ODItLjgyNy01LjQ4TDMzLjEyMyAzNi4wOWExLjM1NCAxLjM1NCAwIDAgMC0uNzM0LS41MTZ2OS44NjR6IiBmaWxsPSJ1cmwoI2UpIi8+PHBhdGggZD0iTTIyLjk3IDQ3LjAxN2MtMS4xNTEgMS41ODgtMS41MjQgMy42MDgtLjk2OSA1LjE3bDguNDItNC42OTJhMS42NDggMS42NDggMCAwIDEgMS4xMTctMS45ODd2LTkuODg0Yy0uMjUzLjA4Ny0uNDg1LjI1LS42NTkuNDlsLTcuOTA4IDEwLjkwM3oiIGZpbGw9InVybCgjZikiLz48cGF0aCBkPSJtMTUuODg2IDM1Ljc4Mi03LjI5NS02LjE0N2MtLjQwMS42LS42MjIgMS4zMzctLjU4NyAyLjJhMTIuODMgMTIuODMgMCAwIDAgMS40ODIgNS40NjkgMTAuNzUxIDEwLjc1MSAwIDAgMSAxLjE1NiAzLjU4NmMuMjU4IDEuODkyLjk1IDMuNzI3IDEuOTgyIDUuMjkuNTUzLjgzNiAxLjI4NCAxLjMzIDIuMDg5IDEuNTM4bDEuODQ4LTkuNTQ2YTEuNjU5IDEuNjU5IDAgMCAxLS42NzUtMi4zOXoiIGZpbGw9InVybCgjZykiLz48cGF0aCBkPSJNMTUuNTY4IDQ3Ljg1NmMxLjY0OS4wNDggMy40NDUtLjkzMiA0LjU5Mi0yLjUyMWw3Ljg3NS0xMC45MDhhMS4zNiAxLjM2IDAgMCAwIC4yNi0uNzhsLTkuMzUgMy4wNTJhMS42NDcgMS42NDcgMCAwIDEtMS41MzYgMS42NzlsLTEuODQgOS40Nzh6IiBmaWxsPSJ1cmwoI2gpIi8+PHBhdGggZD0iTTE2Ljc0NSAzNS4xOTNhMS42NCAxLjY0IDAgMCAxIDEuOTI3Ljc0bDkuMzU2LTMuMDUyYTEuMzU3IDEuMzU3IDAgMCAwLS43MTctLjU0M2wtMTIuNzYxLTQuMTRjLTEuOTktLjY0NC00LjE2OC0uMjktNS40NTMuOTA1bDcuMzkgNi4yYy4wOC0uMDQ0LjE2Ny0uMDguMjU4LS4xMXoiIGZpbGw9InVybCgjaSkiLz48cGF0aCBkPSJtNDAuNTcxIDE4LjA5LTMuNTQ2LTguODkyYy42ODktLjE5OCAxLjQ1My0uMTgyIDIuMjU4LjExOGExMi42NSAxMi42NSAwIDAgMSA0LjcwMyAzLjExIDEwLjYxNCAxMC42MTQgMCAwIDAgMy4wMjcgMi4yMTYgMTIuNjc2IDEyLjY3NiAwIDAgMSA0LjM4IDMuNTM1Yy42MTkuNzg4Ljg2IDEuNjQxLjgwNiAyLjQ3N2wtOS41OC0xLjE3OWExLjY0OSAxLjY0OSAwIDAgMC0uNjYyLTEuMTI2IDEuNjI2IDEuNjI2IDAgMCAwLTEuMzg2LS4yNnoiIGZpbGw9InVybCgjaikiLz48cGF0aCBkPSJNMzkuNzY0IDE4Ljc5Yy0uNDYzLjY0LS40IDEuNS4xMDQgMi4wNjZsLTUuNzczIDcuOThhMS4zNjMgMS4zNjMgMCAwIDEtLjI5Mi0uODVsLjAyMS0xMy40NDljLjAwNC0yLjA5NiAxLjAxMi00LjA2NCAyLjUzOC00LjkybDMuNTg1IDguOTZhMS42NiAxLjY2IDAgMCAwLS4xODMuMjEzeiIgZmlsbD0idXJsKCNrKSIvPjxwYXRoIGQ9Ik01Mi4xNiAyMS41NDhjLS40NjUgMS41OTEtMS45NSAzLjAwNi0zLjgxMiAzLjYxbC0xMi43ODIgNC4xNTVhMS4zNTIgMS4zNTIgMCAwIDEtLjgyLjAwOGw1Ljc4OC03Ljk5NmExLjY0IDEuNjQgMCAwIDAgMi4wNjctLjk0OWw5LjU1OSAxLjE3MnoiIGZpbGw9InVybCgjbCkiLz48cGF0aCBkPSJtMjcuNDYgOS4xOTgtMy41NDcgOC44OTJhMS42MjYgMS42MjYgMCAwIDAtMS4zODYuMjYgMS42NSAxLjY1IDAgMCAwLS42NjIgMS4xMjVsLTkuNTggMS4xNzljLS4wNTMtLjgzNi4xODctMS42OS44MDYtMi40NzdhMTIuNjc3IDEyLjY3NyAwIDAgMSA0LjM4LTMuNTM0IDEwLjYxNiAxMC42MTYgMCAwIDAgMy4wMjctMi4yMTcgMTIuNjUgMTIuNjUgMCAwIDEgNC43MDMtMy4xMWMuODA1LS4zIDEuNTY5LS4zMTYgMi4yNTgtLjExOHoiIGZpbGw9InVybCgjbSkiLz48cGF0aCBkPSJNMTYuMTk1IDI1LjE0M2MtMS44Ni0uNjA1LTMuMzQyLTIuMDE3LTMuODA2LTMuNjA3bDkuNTQ0LTEuMTdhMS42MzYgMS42MzYgMCAwIDAgMi4wNjQuOTQ4bDUuNzggNy45ODdhMS4zNDkgMS4zNDkgMCAwIDEtLjgxOS0uMDA4bC0xMi43NjMtNC4xNXoiIGZpbGw9InVybCgjbikiLz48cGF0aCBkPSJNMjQuNjM5IDIwLjg2N2ExLjY1NCAxLjY1NCAwIDAgMC0uMDc5LTIuMjgxbDMuNTktOC45N2MxLjUzLjg1NyAyLjUzOSAyLjgyOCAyLjU0MiA0LjkyNmwuMDIxIDEzLjQ2MmMuMDAxLjMyNy0uMTEuNjItLjI5Mi44NTJsLTUuNzgyLTcuOTg5eiIgZmlsbD0idXJsKCNvKSIvPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iaCIgeDE9IjgiIHkxPSI0My40NjciIHgyPSIxNi4zOTkiIHkyPSIzNy45MzgiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjOUEwQTBFIi8+PHN0b3Agb2Zmc2V0PSIuODY5IiBzdG9wLWNvbG9yPSIjREExODFGIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImEiIHgxPSI0NS45MjYiIHkxPSIzNi4wNTMiIHgyPSI1MS4wNjgiIHkyPSI0My41NjEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9Ii40NjQiIHN0b3AtY29sb3I9IiNFQTMwMkEiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNDNTE1MUIiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9IjQ1LjkyNiIgeTE9IjM2LjA1MyIgeDI9IjUxLjA2OCIgeTI9IjQzLjU2MSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjQ2NCIgc3RvcC1jb2xvcj0iI0VBMzAyQSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0M1MTUxQiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJkIiB4MT0iMzEuOTAxIiB5MT0iNTQuOTMzIiB4Mj0iMzEuOTAxIiB5Mj0iNDcuNDIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzlFMEIwRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0RBMTgxRiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJlIiB4MT0iMzEuOTAxIiB5MT0iNTQuOTMzIiB4Mj0iMzEuOTAxIiB5Mj0iNDcuNDIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzlFMEIwRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0RBMTgxRiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJmIiB4MT0iMzEuOTAxIiB5MT0iNTQuOTMzIiB4Mj0iMzEuOTAxIiB5Mj0iNDcuNDIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzlFMEIwRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0RBMTgxRiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJnIiB4MT0iOCIgeTE9IjQzLjQ2NyIgeDI9IjE2LjM5OSIgeTI9IjM3LjkzOCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM5QTBBMEUiLz48c3RvcCBvZmZzZXQ9Ii44NjkiIHN0b3AtY29sb3I9IiNEQTE4MUYiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjQ1LjkyNiIgeTE9IjM2LjA1MyIgeDI9IjUxLjA2OCIgeTI9IjQzLjU2MSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjQ2NCIgc3RvcC1jb2xvcj0iI0VBMzAyQSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0M1MTUxQiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJpIiB4MT0iOCIgeTE9IjQzLjQ2NyIgeDI9IjE2LjM5OSIgeTI9IjM3LjkzOCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM5QTBBMEUiLz48c3RvcCBvZmZzZXQ9Ii44NjkiIHN0b3AtY29sb3I9IiNEQTE4MUYiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iaiIgeDE9IjQyLjk2MyIgeTE9IjEyLjIzIiB4Mj0iMzMuODY1IiB5Mj0iMjcuMDUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjRjlCMTk4Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRUUxQzI1Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImsiIHgxPSI0Mi45NjMiIHkxPSIxMi4yMyIgeDI9IjMzLjg2NSIgeTI9IjI3LjA1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iI0Y5QjE5OCIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0VFMUMyNSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJsIiB4MT0iNDIuOTYzIiB5MT0iMTIuMjMiIHgyPSIzMy44NjUiIHkyPSIyNy4wNSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNGOUIxOTgiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRTFDMjUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibSIgeDE9IjE4Ljc2NSIgeTE9IjEzLjQxNiIgeDI9IjI5LjU0NSIgeTI9IjMyLjU4NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNFRTI3MjkiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRTFDMjUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibiIgeDE9IjE4Ljc2NSIgeTE9IjEzLjQxNiIgeDI9IjI5LjU0NSIgeTI9IjMyLjU4NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNFRTI3MjkiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRTFDMjUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibyIgeDE9IjE4Ljc2NSIgeTE9IjEzLjQxNiIgeDI9IjI5LjU0NSIgeTI9IjMyLjU4NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNFRTI3MjkiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRTFDMjUiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'fusotao-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NearX',\n symbol: 'NearX',\n icon:\n \"data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24 12C24 18.6274 18.6274 24 12 24C5.37258 24 0 18.6274 0 12C0 5.37258 5.37258 0 12 0C18.6274 0 24 5.37258 24 12ZM17.1421 21.3847L21.3848 17.1421L19.3669 15.1243C18.5576 17.0302 17.0303 18.5576 15.1243 19.3669L17.1421 21.3847ZM9.4329 19.5792C7.45318 18.9089 5.82112 17.4847 4.87847 15.6484L3.24263 17.2842L7.48527 21.5269L9.4329 19.5792ZM4.63307 8.87568C5.4424 6.96973 6.96977 5.44237 8.87573 4.63305L7.24263 2.99995L2.99999 7.24259L4.63307 8.87568ZM15.6484 4.87847L17.3848 3.14209L21.6274 7.38473L19.5792 9.4329C18.9089 7.45318 17.4847 5.82112 15.6484 4.87847Z' fill='%232FA8AF'/%3E%3Cpath d='M8.00119 11.9921C8.00119 11.0268 8.00119 10.0615 8.00119 9.09612C8.00119 8.50505 8.16497 8.1743 8.56285 8.05781C8.97778 7.93628 9.40619 7.97917 9.79565 8.45228C11.3533 10.3447 12.9343 12.218 14.5092 14.0959C14.5692 14.1676 14.6117 14.3122 14.734 14.2626C14.8496 14.2157 14.7858 14.0805 14.786 13.9878C14.7904 12.6326 14.7898 11.2774 14.7868 9.92226C14.7868 9.83668 14.838 9.7162 14.7271 9.67372C14.6401 9.64029 14.5824 9.74185 14.522 9.79358C14.0492 10.1981 13.5804 10.6073 13.1088 11.0133C13.0208 11.089 12.9332 11.2118 12.8002 11.1012C12.6657 10.9894 12.7696 10.8872 12.8364 10.7881C13.3547 10.0186 13.8728 9.24898 14.3909 8.47919C14.6656 8.07085 15.0079 7.92282 15.4056 8.04141C15.786 8.15475 15.9986 8.48592 15.9992 8.97668C16.0007 10.0905 15.9996 11.2045 15.9996 12.3183C15.9996 13.2094 16.0003 14.1005 15.9994 14.9916C15.999 15.4826 15.8137 15.798 15.4512 15.9324C15.0256 16.0901 14.5767 15.9683 14.2734 15.6058C12.6823 13.705 11.0924 11.8029 9.50198 9.90144C9.46029 9.85161 9.42303 9.7961 9.37377 9.75489C9.28998 9.68487 9.21967 9.68108 9.21314 9.81797C9.20999 9.88273 9.21188 9.94791 9.21188 10.0129C9.21188 11.3496 9.21062 12.6862 9.2142 14.0227C9.21441 14.1186 9.15609 14.2557 9.26114 14.3038C9.38093 14.3587 9.45061 14.2178 9.52998 14.1503C9.98259 13.7651 10.4291 13.3728 10.8805 12.9859C10.9729 12.9066 11.0626 12.7651 11.208 12.8973C11.3402 13.0176 11.2213 13.1196 11.159 13.2127C10.6323 13.9989 10.1032 14.7837 9.57145 15.5663C9.32788 15.9248 8.9881 16.056 8.61085 15.9488C8.23739 15.8428 8.00498 15.5246 8.00287 15.0827C7.99761 14.0523 8.00119 13.022 8.00119 11.9917V11.9921Z' fill='white'/%3E%3C/svg%3E%0A\",\n reference: 'https://near.staderlabs.com',\n reference_hash: null,\n decimals: 24,\n id: 'v2-nearx.stader-labs.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'DISCOVOL TOKEN',\n symbol: 'DISC',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSLlm77lsYJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4PSIwIiB5PSIwIiB2aWV3Qm94PSIwIDAgMTQxLjcgMTQxLjciIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDE0MS43IDE0MS43IiB4bWw6c3BhY2U9InByZXNlcnZlIj48c3R5bGU+LnN0MHtmaWxsOiNmOTcxMTZ9PC9zdHlsZT48cGF0aCBjbGFzcz0ic3QwIiBkPSJNNDYuMSAxOC43djEwNS42czIxLjMtNS41IDMzLjEtMjljMCAwIDEyLjctMjIuMi0uOS00OS43IDAgMC0xMC4xLTIwLjktMzIuMi0yNi45eiIvPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMDUuNyA5LjRjMzEuMSAxOC4zIDM0LjUgNDguNCAzNC41IDQ4LjQgNi40IDM3LjktMTcgNjAuMy0xNyA2MC4zLTMxLjQgMzQuNS03My40IDIwLjMtNzMuNCAyMC4zIDMwLjYtOS4zIDQxLjktMzUuMSA0MS45LTM1LjEgMTYuNi0zNS41IDAtNjMuMiAwLTYzLjJDNzcgOS43IDQ3LjMgMy45IDQ3LjMgMy45YzMyLjQtMTEuMyA1OC40IDUuNSA1OC40IDUuNXptNyAxMS41UzExMS4xIDM4IDk0LjcgMzhjMCAwIDE2IDIuOCAxNy41IDE4LjggMCAwIDEuNC0xNy41IDE4LjItMTguMy0uMSAwLTE4LjUtMS41LTE3LjctMTcuNnpNMjUuNiAxNS45aDUuOXYxMTAuOEgyN1M4IDExMiAyLjIgODkuMmMwIDAtNy43LTI2LjIgNS01MC40LjEuMSA5LjUtMTcgMTguNC0yMi45eiIvPjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 14,\n id: 'discovol-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Stader',\n symbol: 'SD',\n icon:\n \"data:image/svg+xml,%3Csvg width='256' height='256' viewBox='0 0 256 256' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M128 256C198.692 256 256 198.692 256 128C256 57.3075 198.692 0 128 0C57.3075 0 0 57.3075 0 128C0 198.692 57.3075 256 128 256Z' fill='%236259D4'/%3E%3Cpath d='M126.852 191.869L126.822 181.088L153.98 165.105L153.886 133.025L163.667 127.882L164.056 170.723L126.852 191.869Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M153.98 165.105L126.822 181.088L126.852 191.869L164.056 170.723L163.667 127.882L153.886 133.025L153.98 165.105ZM154.207 133.218L154.3 165.104C154.301 165.218 154.241 165.323 154.143 165.381L127.143 181.271L127.171 191.32L163.735 170.538L163.352 128.41L154.207 133.218Z' fill='%236259D4'/%3E%3Cpath d='M134.785 112.611L145.906 106.314L173.184 123.396L173.334 175.037L164.063 170.734L163.673 127.894L134.785 112.611Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M163.673 127.894L164.063 170.734L173.334 175.037L173.184 123.396L145.906 106.314L134.785 112.611L163.673 127.894ZM135.451 112.601L163.823 127.611C163.927 127.666 163.992 127.773 163.993 127.891L164.381 170.529L173.013 174.535L172.865 123.574L145.898 106.687L135.451 112.601Z' fill='%236259D4'/%3E%3Cpath d='M126.443 53.3335L173.06 79.8728L173.094 90.9255L126.49 64.9081L126.443 53.3335Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M126.443 53.3335L126.49 64.9081L173.094 90.9255L173.06 79.8728L126.443 53.3335ZM126.766 53.8852L126.81 64.7198L172.773 90.3795L172.741 80.0592L126.766 53.8852Z' fill='%236259D4'/%3E%3Cpath d='M80.1584 134.322L80 80.4074L126.432 53.3335L126.48 64.9081L88.7187 86.0335L88.5731 128.106L80.1584 134.322Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M88.7187 86.0335L126.48 64.9081L126.432 53.3335L80 80.4074L80.1584 134.322L88.5731 128.106L88.7187 86.0335ZM88.2536 127.944L88.3987 86.0324C88.3991 85.9169 88.4617 85.8106 88.5624 85.7542L126.159 64.7209L126.115 53.8892L80.3205 80.5909L80.4766 133.689L88.2536 127.944Z' fill='%236259D4'/%3E%3Cpath d='M107.511 149.374L80.1562 134.324L88.5709 128.108L135.44 154.885L107.58 170.601L98.2445 175.794L126.85 191.879L164.054 170.733L173.325 175.035L126.619 202.66L80.2804 176.371L117.215 154.711L107.511 149.374Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M107.58 170.601L135.44 154.885L88.5709 128.108L80.1562 134.324L117.215 154.711L80.2804 176.371L126.619 202.66L173.325 175.035L164.054 170.733L126.85 191.879L98.2445 175.794L107.58 170.601ZM164.069 171.092L127.008 192.157C126.91 192.213 126.791 192.213 126.693 192.158L98.0877 176.073C97.9866 176.016 97.9242 175.909 97.9245 175.794C97.9248 175.678 97.9877 175.571 98.0889 175.515L107.423 170.322L134.792 154.884L88.5932 128.49L80.7483 134.285L107.666 149.093L117.369 154.431C117.47 154.486 117.533 154.592 117.535 154.707C117.536 154.822 117.476 154.929 117.377 154.987L80.9208 176.367L126.615 202.29L172.639 175.069L164.069 171.092Z' fill='%236259D4'/%3E%3Cpath d='M88.7207 86.0458L126.482 64.9204L173.085 90.9378L145.902 106.323L134.781 112.619L163.669 127.902L153.888 133.044L116.808 112.11L153.764 90.4499L144.947 85.4178L126.512 74.8955L99.0623 90.6069L88.7207 86.0458Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M173.085 90.9378L126.482 64.9204L88.7207 86.0458L99.0623 90.6069L126.512 74.8955L153.764 90.4499L116.808 112.11L153.888 133.044L163.669 127.902L134.781 112.619L173.085 90.9378ZM162.983 127.901L134.631 112.902C134.528 112.847 134.462 112.741 134.461 112.624C134.459 112.507 134.521 112.398 134.623 112.341L145.744 106.044L172.432 90.9397L126.482 65.287L89.4368 86.0119L99.0436 90.2489L126.353 74.6177C126.451 74.5614 126.572 74.5614 126.67 74.6175L153.923 90.172C154.022 90.2286 154.083 90.3338 154.084 90.4481C154.085 90.5623 154.024 90.6682 153.926 90.726L117.45 112.105L153.894 132.68L162.983 127.901Z' fill='%236259D4'/%3E%3Cpath d='M98.252 175.789L107.587 170.596L126.827 181.093L126.857 191.874L98.252 175.789Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M98.252 175.789L126.857 191.874L126.827 181.093L107.587 170.596L98.252 175.789ZM98.9075 175.791L126.536 191.326L126.508 181.283L107.589 170.962L98.9075 175.791Z' fill='%236259D4'/%3E%3Cpath d='M80.2804 176.368L80.2461 164.785L107.511 149.371L117.215 154.708L80.2804 176.368Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M80.2804 176.368L117.215 154.708L107.511 149.371L80.2461 164.785L80.2804 176.368ZM80.5987 175.81L116.567 154.717L107.513 149.737L80.5666 164.971L80.5987 175.81Z' fill='%236259D4'/%3E%3Cpath d='M116.809 112.109L116.92 101.073L144.947 85.417L153.764 90.4491L116.809 112.109Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M116.809 112.109L153.764 90.4491L144.947 85.417L116.92 101.073L116.809 112.109ZM117.134 111.547L153.125 90.4528L144.946 85.7845L117.238 101.262L117.134 111.547Z' fill='%236259D4'/%3E%3Cpath d='M88.5723 128.087L88.7179 86.0142L99.0595 90.5753L99.1537 123.589L135.407 143.582L135.442 154.864L88.5723 128.087Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M99.1537 123.589L99.0595 90.5753L88.7179 86.0142L88.5723 128.087L135.442 154.864L135.407 143.582L99.1537 123.589ZM135.088 143.771L98.9992 123.869C98.8974 123.813 98.8341 123.706 98.8337 123.59L98.7401 90.7841L89.0362 86.5043L88.8929 127.901L135.12 154.311L135.088 143.771Z' fill='%236259D4'/%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '30d20208d987713f46dfd34ef128bb16c404d10f.factory.bridge.near',\n },\n {\n spec: 'ft-1.0',\n name: 'SWEAT',\n symbol: 'SWEAT',\n icon:\n \"data:image/svg+xml,%3Csvg viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='100' height='100' rx='50' fill='%23FF0D75'/%3E%3Cg clip-path='url(%23clip0_283_2788)'%3E%3Cpath d='M39.4653 77.5455L19.0089 40.02L35.5411 22.2805L55.9975 59.806L39.4653 77.5455Z' stroke='white' stroke-width='10'/%3E%3Cpath d='M66.0253 77.8531L45.569 40.3276L62.1012 22.5882L82.5576 60.1136L66.0253 77.8531Z' stroke='white' stroke-width='10'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0_283_2788'%3E%3Crect width='100' height='56' fill='white' transform='translate(0 22)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.sweat',\n },\n {\n spec: 'ft-1.0.0',\n name: 'APYSwap',\n symbol: 'APYS',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iLTEwIC0xMCAxMjAgMTIwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMTQ2OF81MTk1KSI+CjxwYXRoIGQ9Ik0zOC40MzUzIDEyLjY4NUw3NC41ODY5IDc3Ljg2NzdMOTguOTk5OSA3OC41NjYzTDYyLjY3NDkgMTMuMzc4N0wzOC40MzUzIDEyLjY4NVoiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8xNDY4XzUxOTUpIi8+CjxwYXRoIGQ9Ik0xMi43NjcyIDU1LjQwNzFMODYuOTM2NiA1Ni42MzI2TDk4Ljk5ODIgNzcuODM0OEwwLjAxMTcwNDYgNzYuMTk5MkwxMi43NjcyIDU1LjQwNzFaIiBmaWxsPSJ1cmwoI3BhaW50MV9saW5lYXJfMTQ2OF81MTk1KSIvPgo8cGF0aCBkPSJNNjIuMjQxMSAxMy4wOTRMMjMuODY5OCA3Ny4wODU2TC0wLjUxMDgwNSA3Ni45MTIyTDM3Ljg2NzMgMTIuOTIwN0w2Mi4yNDExIDEzLjA5NFoiIGZpbGw9InVybCgjcGFpbnQyX2xpbmVhcl8xNDY4XzUxOTUpIi8+CjwvZz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8xNDY4XzUxOTUiIHgxPSI1NS45Njc3IiB5MT0iMjMuODc4MSIgeDI9Ijg1LjQ4MjUiIHkyPSI3Ny4wMTI2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiMwOEFFRUEiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMkFGNTk4Ii8+CjwvbGluZWFyR3JhZGllbnQ+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQxX2xpbmVhcl8xNDY4XzUxOTUiIHgxPSIyOS40ODcxIiB5MT0iNjcuODQzIiB4Mj0iNjguOTYzNiIgeTI9IjY4LjgwMzIiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzA4QUVFQSIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMyQUY1OTgiLz4KPC9saW5lYXJHcmFkaWVudD4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDJfbGluZWFyXzE0NjhfNTE5NSIgeDE9IjUxLjk4MzUiIHkxPSIzLjEzMzQ1IiB4Mj0iMzEuMjQxOCIgeTI9IjM2LjE3MzUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzA4QUVFQSIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMyQUY1OTgiLz4KPC9saW5lYXJHcmFkaWVudD4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xNDY4XzUxOTUiPgo8cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'apys.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tether USD',\n symbol: 'USDt',\n icon:\n \"data:image/svg+xml,%3Csvg width='111' height='90' viewBox='0 0 111 90' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24.4825 0.862305H88.0496C89.5663 0.862305 90.9675 1.64827 91.7239 2.92338L110.244 34.1419C111.204 35.7609 110.919 37.8043 109.549 39.1171L58.5729 87.9703C56.9216 89.5528 54.2652 89.5528 52.6139 87.9703L1.70699 39.1831C0.305262 37.8398 0.0427812 35.7367 1.07354 34.1077L20.8696 2.82322C21.6406 1.60483 23.0087 0.862305 24.4825 0.862305ZM79.8419 14.8003V23.5597H61.7343V29.6329C74.4518 30.2819 83.9934 32.9475 84.0642 36.1425L84.0638 42.803C83.993 45.998 74.4518 48.6635 61.7343 49.3125V64.2168H49.7105V49.3125C36.9929 48.6635 27.4513 45.998 27.3805 42.803L27.381 36.1425C27.4517 32.9475 36.9929 30.2819 49.7105 29.6329V23.5597H31.6028V14.8003H79.8419ZM55.7224 44.7367C69.2943 44.7367 80.6382 42.4827 83.4143 39.4727C81.0601 36.9202 72.5448 34.9114 61.7343 34.3597V40.7183C59.7966 40.8172 57.7852 40.8693 55.7224 40.8693C53.6595 40.8693 51.6481 40.8172 49.7105 40.7183V34.3597C38.8999 34.9114 30.3846 36.9202 28.0304 39.4727C30.8066 42.4827 42.1504 44.7367 55.7224 44.7367Z' fill='%23009393'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'usdt.tether-token.near',\n },\n];\n\nexport function getDefaultTokenList() {\n const env = getConfig().networkId;\n\n switch (env) {\n case 'mainnet':\n return DefaultMainnetTokenList;\n case 'testnet':\n return DefaultTestnetTokenList;\n default:\n return DefaultMainnetTokenList;\n }\n}\n","import { TokenMetadata, Transaction } from '../types';\n\nimport {\n priceToPoint,\n toNonDivisibleNumber,\n toPrecision,\n registerAccountOnToken,\n} from '../utils';\nimport { ONE_YOCTO_NEAR, WRAP_NEAR_CONTRACT_ID, config } from '../constant';\nimport { DCLSwapGetStorageBalance } from '../ref';\nimport { DCL_POOL_FEE_LIST, getDCLPoolId } from './dcl-pool';\nimport {\n nearDepositTransaction,\n ftGetStorageBalance,\n refDCLSwapViewFunction,\n} from '../ref';\nimport _ from 'lodash';\nimport { toReadableNumber, percentLess } from '../utils';\nimport { NoPoolOnThisPair, SlippageError } from '../error';\n\ninterface SwapInfo {\n tokenA: TokenMetadata;\n tokenB: TokenMetadata;\n amountA: string;\n}\n\ninterface DCLSwapProps {\n swapInfo: SwapInfo;\n Swap?: {\n pool_ids: string[];\n min_output_amount: string;\n };\n SwapByOutput?: {\n pool_ids: string[];\n output_amount: string;\n };\n LimitOrderWithSwap?: {\n pool_id: string;\n output_amount: string;\n };\n SwapByStopPoint?: {\n pool_id: string;\n stop_point: number;\n skip_unwrap_near: boolean;\n };\n AccountId: string;\n}\nexport const DCL_POOL_SPLITER = '|';\n\nexport const DCLSwap = async ({\n Swap,\n SwapByOutput,\n LimitOrderWithSwap,\n SwapByStopPoint,\n AccountId,\n swapInfo,\n}: DCLSwapProps) => {\n const transactions: Transaction[] = [];\n\n const { tokenA, tokenB, amountA } = swapInfo;\n\n if (Swap) {\n const pool_ids = Swap.pool_ids;\n\n const tokenRegistered = await ftGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: tokenB.id,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n\n const output_token = tokenB.id;\n const min_output_amount = toPrecision(Swap.min_output_amount, 0);\n\n const msg = JSON.stringify({\n Swap: {\n pool_ids,\n output_token,\n min_output_amount,\n client_id: '',\n },\n });\n\n transactions.push({\n receiverId: tokenA.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.REF_DCL_SWAP_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenA.decimals, amountA),\n msg,\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n } else if (SwapByOutput) {\n const pool_ids = SwapByOutput.pool_ids;\n const output_token = tokenB.id;\n const output_amount = toNonDivisibleNumber(\n tokenB.decimals,\n SwapByOutput.output_amount\n );\n const msg = JSON.stringify({\n SwapByOutput: {\n pool_ids,\n output_token,\n output_amount,\n client_id: '',\n },\n });\n const tokenRegistered = await ftGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: tokenB.id,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n\n transactions.push({\n receiverId: tokenA.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.REF_DCL_SWAP_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenA.decimals, amountA),\n msg,\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n } else if (LimitOrderWithSwap) {\n const pool_id = LimitOrderWithSwap.pool_id;\n\n const fee = Number(pool_id.split(DCL_POOL_SPLITER)[2]);\n\n const buy_token = tokenB.id;\n const point = priceToPoint({\n amountA,\n amountB: LimitOrderWithSwap.output_amount,\n tokenA,\n tokenB,\n fee,\n });\n\n const tokenRegistered = await ftGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: tokenB.id,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n\n const DCLRegistered = await DCLSwapGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (DCLRegistered === null) {\n transactions.push({\n receiverId: config.REF_DCL_SWAP_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'storage_deposit',\n args: {\n registration_only: true,\n account_id: AccountId,\n },\n gas: '30000000000000',\n amount: '0.5',\n },\n ],\n });\n }\n\n const new_point =\n pool_id.split(DCL_POOL_SPLITER)[0] === tokenA.id ? point : -point;\n\n const msg = JSON.stringify({\n LimitOrderWithSwap: {\n pool_id,\n buy_token,\n point: new_point,\n client_id: '',\n },\n });\n\n transactions.push({\n receiverId: tokenA.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.REF_DCL_SWAP_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenA.decimals, amountA),\n msg,\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n } else if (SwapByStopPoint) {\n const tokenRegistered = await ftGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: tokenB.id,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n const msg = JSON.stringify({\n SwapByStopPoint: SwapByStopPoint,\n });\n transactions.push({\n receiverId: tokenA.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.REF_DCL_SWAP_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenA.decimals, amountA),\n msg,\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n }\n\n if (tokenA.id === WRAP_NEAR_CONTRACT_ID) {\n const registered = await ftGetStorageBalance(\n WRAP_NEAR_CONTRACT_ID,\n AccountId\n );\n if (registered === null) {\n transactions.unshift({\n receiverId: WRAP_NEAR_CONTRACT_ID,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n }\n\n return transactions;\n};\n\nexport const quote = async ({\n pool_ids,\n input_amount,\n input_token,\n output_token,\n tag,\n}: {\n pool_ids: string[];\n input_token: TokenMetadata;\n output_token: TokenMetadata;\n input_amount: string;\n tag?: string;\n}) => {\n return refDCLSwapViewFunction({\n methodName: 'quote',\n args: {\n pool_ids,\n input_token: input_token.id,\n output_token: output_token.id,\n input_amount: toNonDivisibleNumber(input_token.decimals, input_amount),\n tag,\n },\n });\n};\n\nexport const list_user_assets = async (AccountId: string) => {\n if (!AccountId) return;\n\n return refDCLSwapViewFunction({\n methodName: 'list_user_assets',\n args: {\n account_id: AccountId,\n },\n });\n};\n\nexport const DCLSwapByInputOnBestPool = async ({\n tokenA,\n tokenB,\n amountA,\n slippageTolerance,\n AccountId,\n}: {\n tokenA: TokenMetadata;\n tokenB: TokenMetadata;\n amountA: string;\n slippageTolerance: number;\n AccountId: string;\n}) => {\n if (slippageTolerance <= 0 || slippageTolerance >= 100) {\n throw SlippageError;\n }\n\n const estimates = await Promise.all(\n DCL_POOL_FEE_LIST.map(async fee => {\n const pool_id = getDCLPoolId(tokenA.id, tokenB.id, fee);\n return quote({\n pool_ids: [pool_id],\n input_token: tokenA,\n output_token: tokenB,\n input_amount: amountA,\n tag: `${tokenA.id}-${fee}-${amountA}`,\n }).catch(e => null);\n })\n );\n\n if (!estimates || estimates.every(e => e === null)) {\n throw NoPoolOnThisPair(tokenA.id, tokenB.id);\n }\n\n const bestEstimate =\n estimates && estimates?.some(e => !!e)\n ? _.maxBy(estimates, e => Number(!e || !e.tag ? -1 : e.amount))\n : null;\n\n const bestFee =\n bestEstimate &&\n bestEstimate.tag &&\n bestEstimate?.tag?.split('-')?.[1] &&\n Number(bestEstimate?.tag?.split('-')?.[1]);\n\n return DCLSwap({\n swapInfo: {\n tokenA,\n tokenB,\n amountA,\n },\n Swap: {\n pool_ids: [getDCLPoolId(tokenA.id, tokenB.id, bestFee)],\n min_output_amount: percentLess(slippageTolerance, bestEstimate.amount),\n },\n AccountId,\n });\n};\n\nexport const quote_by_output = ({\n pool_ids,\n output_amount,\n input_token,\n output_token,\n}: {\n pool_ids: string[];\n input_token: TokenMetadata;\n output_token: TokenMetadata;\n output_amount: string;\n}) => {\n return refDCLSwapViewFunction({\n methodName: 'quote_by_output',\n args: {\n pool_ids,\n input_token: input_token.id,\n output_token: output_token.id,\n output_amount: toNonDivisibleNumber(output_token.decimals, output_amount),\n },\n });\n};\n","import { TokenMetadata, Transaction } from '../types';\nimport { NoOrderFound, OrderNoRemainedAmount } from '../error';\nimport {\n priceToPoint,\n toNonDivisibleNumber,\n toPrecision,\n registerAccountOnToken,\n} from '../utils';\nimport {\n ONE_YOCTO_NEAR,\n WRAP_NEAR_CONTRACT_ID,\n config,\n POINTLEFTRANGE,\n POINTRIGHTRANGE,\n} from '../constant';\nimport {\n nearDepositTransaction,\n ftGetStorageBalance,\n refDCLSwapViewFunction,\n} from '../ref';\n\nexport interface UserOrderInfo {\n order_id: string;\n owner_id: string;\n pool_id: string;\n point: number;\n sell_token: string;\n created_at: string;\n original_amount: string;\n remain_amount: string; // 0 means history order: ;\n cancel_amount: string;\n // amount through ft_transfer_call\n\n original_deposit_amount: string;\n // earn token amount through swap before actual place order\n\n swap_earn_amount: string;\n buy_token: string;\n unclaimed_amount: string; // claim will push it to inner account\n bought_amount: string; // accumalated amount into inner account\n}\n\nexport const list_history_orders = (AccountId: string) => {\n return refDCLSwapViewFunction({\n methodName: 'list_history_orders',\n args: {\n account_id: AccountId,\n },\n });\n};\n\nexport const list_active_orders = (AccountId: string) => {\n return refDCLSwapViewFunction({\n methodName: 'list_active_orders',\n args: {\n account_id: AccountId,\n },\n });\n};\n\nexport const get_order = async (order_id: string) => {\n return refDCLSwapViewFunction({\n methodName: 'get_order',\n args: {\n order_id,\n },\n }).catch(() => {\n throw NoOrderFound(order_id);\n });\n};\n\nexport const find_order = async ({\n pool_id,\n point,\n AccountId,\n}: {\n pool_id: string;\n point: number;\n AccountId: string;\n}) => {\n return refDCLSwapViewFunction({\n methodName: 'find_order',\n args: {\n account_id: AccountId,\n pool_id,\n point,\n },\n }).catch(() => {\n throw NoOrderFound();\n }) as Promise<UserOrderInfo>;\n};\nexport const cancel_order = async (order_id: string) => {\n const order = await get_order(order_id);\n\n if (!order.remain_amount) throw OrderNoRemainedAmount;\n\n const transactions: Transaction[] = [\n {\n receiverId: config.REF_DCL_SWAP_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'cancel_order',\n args: {\n order_id,\n amount: order.remain_amount,\n },\n gas: '180000000000000',\n },\n ],\n },\n ];\n\n return transactions;\n};\n\nexport const claim_order = (order_id: string) => {\n const transactions: Transaction[] = [\n {\n receiverId: config.REF_DCL_SWAP_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'cancel_order',\n args: {\n order_id,\n amount: '0',\n },\n gas: '180000000000000',\n },\n ],\n },\n ];\n\n return transactions;\n};\n\nexport const get_pointorder_range = ({\n pool_id,\n left_point,\n right_point,\n}: {\n pool_id: string;\n left_point?: number;\n right_point?: number;\n}) => {\n return refDCLSwapViewFunction({\n methodName: 'get_pointorder_range',\n args: {\n pool_id,\n left_point: left_point || POINTLEFTRANGE,\n right_point: right_point || POINTRIGHTRANGE,\n },\n });\n};\n"],"names":["FEE_DIVISOR","STABLE_LP_TOKEN_DECIMALS","RATED_POOL_LP_TOKEN_DECIMALS","STORAGE_TO_REGISTER_WITH_MFT","ONE_YOCTO_NEAR","ENV","getConfig","env","process","NEAR_ENV","REACT_APP_REF_SDK_ENV","networkId","nodeUrl","walletUrl","WRAP_NEAR_CONTRACT_ID","REF_FI_CONTRACT_ID","REF_TOKEN_ID","indexerUrl","explorerUrl","REF_DCL_SWAP_CONTRACT_ID","config","WNEAR_META_DATA","id","name","symbol","decimals","icon","REF_META_DATA","NEAR_META_DATA","TokenLinks","NEAR","wNEAR","REF","OCT","PARAS","SKYWARD","FLX","PULSE","DBIO","MYRIA","PXT","HAPI","OIN","ABR","MARMAJ","marmaj","USN","GRT","LINK","Cheddar","AURORA","$META","UMINT","UTO","DEIP","WOO","LINEAR","PEM","ATO","SEAT","FAR","BSTN","BRRR","XNL","KSW","STNEAR","NearX","SD","DISC","CONSTANT_D","POINTLEFTRANGE","POINTRIGHTRANGE","switchEnv","tradeFee","amount","trade_fee","calc_d","amp","c_amounts","token_num","length","sum_amounts","_","sum","d_prev","d","i","d_prod","c_amount","ann","numerator","denominator","Math","abs","calc_y","x_c_amount","current_c_amounts","index_x","index_y","s","c","b","y_prev","y","y_numerator","y_denominator","calc_swap","in_token_idx","in_c_amount","out_token_idx","old_c_amounts","dy","fee","amount_swapped","getSwappedAmount","tokenInId","tokenOutId","amountIn","stablePool","total_fee","token_account_ids","findIndex","rates","map","r","toReadableNumber","base_old_c_amounts","toNonDivisibleNumber","scientificNotationToString","Big","times","toString","Number","REF_WIDGET_STAR_TOKEN_LIST_KEY","REF_WIDGET_ALL_TOKENS_LIST_KEY","REF_WIDGET_SWAP_IN_KEY","REF_WIDGET_SWAP_OUT_KEY","REF_WIDGET_SWAP_DETAIL_KEY","DEFAULT_START_TOKEN_LIST_TESTNET","DEFAULT_START_TOKEN_LIST_MAINNET","defaultTheme","container","buttonBg","primary","secondary","borderRadius","fontFamily","hover","active","secondaryBg","borderColor","iconDefault","iconHover","defaultDarkModeTheme","refIcon","icons","getTokenPriceList","fetch","method","headers","then","res","json","list","getTokens","reload","storagedTokens","window","localStorage","getItem","JSON","parse","tokens","newTokens","Object","values","reduce","acc","cur","keys","REPLACE_TOKENS","includes","metaIconDefaults","setItem","stringify","getWhiteListTokensIndexer","whiteListIds","RM","DP","NE","PE","checkIntegerSumOfAllocations","allocations","totalInput","item","round","alloSum","a","plus","offset","minus","currMax","currMaxInd","gt","newAllocations","j","push","yenFromPy","bisqrt","value","BigInt","newtonIteration","n","x0","x1","getBetaForRoute","route","path","p","beta","reserves","p1","p2","getEpsilonForRoute","gamma","div","epsilon","gamma1","gamma2","getAlphaForRoute","inputToken","outputToken","key1","token1Id","key2","token2Id","val1","token1Supply","val2","token2Supply","alpha","key11","key12","val11","val12","key21","key22","val21","val22","middleToken","alpha1","alpha2","getAlphaSumFromRoutes","routes","nodeRoutes","alphaSum","nodeRoute","radical","toFixed","denom","getBetaSumFromRoutes","betaSum","num","getPhiFromRoutes","phi","getAllocationForRoute","allocation","getAllocationVectorForRoutes","allocationVec","getOptimalAllocationForRoutes","every","lt","some","reduceRoutes","sumAllocations","normalizedAllocations","goodIndices","dx","newRoutes","newNodeRoutes","goodIndex","allocationDict","allocationVecNew","zeroAllocation","getNodeRoutesFromPathsAndPoolChains","paths","poolChains","multiplicity","pc","mul","elem1","elem2","m","k","getPoolChainFromPaths","pools","threshold","pathInd","chain","pairs","pairInd","pair","tokenPools","getPoolsByToken1ANDToken2","culledPoolChains","getCulledPoolChains","newChains","newPath","legInd","leg","culledPath","cullPoolsWithInsufficientLiquidity","getRoutesFromPoolChain","pci","poolChain","cartesianProduct","getOutputSingleHop","pool","getOutputDoubleHop","poolIndex","c1","a1","c2","b2","getOutputFromRoute","eq","output","getOptOutputVec","result","getBestOptInputAndOutput","rawDict","outputRaw","inputRaw","res1","res2","v","bv1","bv2","input","getBestOptimalAllocationsAndOutputs","maxPathLength","getPathsFromPools","outputs","inputOutput","getHopActionsFromRoutes","hops","hop","allRoutes","allNodeRoutes","totalInputAmount","allAllocations","middleTokenAllocation","getActionListFromRoutesAndAllocations","getSmartRouteSwapActions","allTokens","numberOfRoutesLimit","MAX_NUMBER_PARALLEL_POOLS","decimalsCulledPoolIds","filter","resDict","sortedIndexValues","argsort","topIndices","slice","reducedRoutes","reducedNodeRoutes","ind","currentBestOutput","bestAllocations","bestNodeRoutes","bestRoutes","parallelNodeRoutes","parallelRoutes","currentNodeRoute","bestRoutesAreParallel","filteredAllocationsAndOutputs","parallellAllocations","parallelOutputs","sortIndices","filteredParallelRoutes","filteredParallelNodeRoutes","parallelOutput","canHaveTwoRoutes","route1","route2","nodeRoute1","nodeRoute2","route1PoolIds","Set","route2PoolIds","sharePool","route1PoolId","has","currentRoutes","currentNodeRoutes","filteredAllocations","filteredOutputs","totalOutput","allSortedIndices","sortedIndices","filteredRoutes","filteredNodeRoutes","index","sharedRoute","allFilteredRoutes","allFilteredNodeRoutes","firstRoute","firstRoutePoolIds","allFilteredRouteIds","secondRoute","stringAllo","actions","ftGetTokenMetadata","hopInputTokenMeta","hopOutputTokenMeta","hopOutputTokenDecimals","expectedHopOutput","decimalEstimate","pow","status","Promise","all","t","estimate","gamma_bps","partialAmountIn","supplies","token0_ref_price","token0_price","tokenIds","Dex","token","routeInputToken","routeOutputToken","overallPriceImpact","x","calculateSmartRouteV2PriceImpact","action","deltaY","inputTokenMeta","deltaX","R","P","totalAllocations","weights","weight","routeMarketPrice","num1","denom1","num2","denom2","priceImpact","decor","arr","undecor","decorated","sort","token1","token2","cullZeroLiquidityPools","filteredPools","getLiqudityOfPoolsFromList","liquidities","poolInd","amounts","poolBigAmounts","liquidity","getNormalizedLiquiditiesFromList","maxLiq","bigMax","normalizedLiquidities","arrayOfBigs","maxElem","val","thresh","normLiq","flatMap","e","flat","addEdge","g","edge","src","dst","addEdges","edgeList","deleteEdge","gNew","e1","e2","deleteNode","node","nodeInd","nodeNow","dijkstra","graph","solutions","dist","parent","nearest","Infinity","ndist","adj","concat","shortestPath","ignore_nodes","ignore_edges","gTemp","edgeInd","edgeNow","solution","unshift","PathBuffer","sortedpaths","len","cost","arrayContains","pop","shift","splice","indexOf","arrayEquals","Array","isArray","obj","obj_json","itemInd","source","target","listA","listB","prev_path","sol","root","root_length","edgeToIgnore","spur","getKShortestPaths","gen","next","getGraphFromPoolList","poolList","transitions","stableSmart","smartRouteActions","getExpectedOutputFromActionsORIG","PoolMode","getSimplePoolEstimate","tokenIn","tokenOut","amount_with_fee","in_balance","out_balance","getStablePoolEstimate","getStablePoolDecimal","amountOut","isNaN","toPrecision","dyOut","noFeeAmountOut","singlePoolSwap","simplePools","stablePools","NoPoolError","parsedAmountIn","simplePoolsThisPair","isStablePool","estimatesSimplePool","stablePoolThisPair","sp","estimatesStablePool","find","maxSimplePoolEstimate","undefined","maxBy","maxStablePoolEstimate","getStablePoolsThisPair","getPoolsByTokens","getPoolEstimate","stablePoolDetail","getHybridStableSmart","stablePoolsDetail","isStablePoolToken","stablePoolsDetailById","pools1","pools2","pools1Right","pools2Right","candidatePools","otherStables","otherStable","stablePoolsThisPair","tmpPools","tobeAddedPools","middleTokens","p2s","ftGetTokensMetadata","cp","tokensMedata","BestPoolPair","poolPair","stablePoolDetailThisPair","spd","tmpPool1","tmpPool2","tokenMidId","tokenMidMeta","estimate1","SMART","estimate2","bestPool","STABLE","pool1","pool2","estimateSwap","options","SameInputTokenError","ONLY_ZEROS","test","ZeroInputError","enableSmartRouting","singleRouteEstimate","PARALLEL","inputPools","poolFormatter","simplePoolSmartRoutingActions","simplePoolSmartRoutingEstimate","hybridSmartRoutingRes","hybridSmartRoutingEstimate","gte","parsePool","shareSupply","shares_total_supply","tvl","pool_kind","shares","tokenId","poolId","minAmountOut","isInteger","ceil","convertToPercentDecimal","percent","math","percentOf","percentLess","notation","getGas","gas","BN","getAmount","utils","format","parseNearAmount","number","wholeStr","substring","fractionStr","padStart","replace","split","wholePart","fracPart","padEnd","strParam","flag","sysbol","negative","match","basis","ifFraction","formatWithCommas","pattern","precision","withCommas","atLeastOne","whole","decimal","str","lastIndexOf","transformTransactions","transactions","AccountId","parsedTransactions","signerId","receiverId","functionCalls","fc","type","params","methodName","args","toNumber","deposit","WalletSelectorTransactions","separateRoutes","curRoute","calculateExchangeRate","from","to","getAvgFee","estimates","forEach","getAccountName","account","network","niceAccountId","symbolsArr","multiply","factor1","factor2","toInternationalCurrencySystemLongString","labelValue","percentOfBigNumber","valueBig","percentBig","toRealSymbol","blackList","charAt","toUpperCase","calculateFeeCharge","total","calculateFeePercent","getExpectedOutputFromSwapTodos","calculateAmountReceived","big_in_balance","big_out_balance","constant_product","new_in_balance","new_out_balance","tokenOutReceived","calculateMarketPrice","cur_in_balance","cur_out_balance","calculateSmartRoutingPriceImpact","tokenInAmount","swapTodos","tokenMid","isPool1StablePool","isPool2StablePool","marketPrice1","marketPrice2","generalMarketPrice","tokenMidReceived","formattedTokenMidReceived","stableOutPool2","stablePool2","stableOut","newMarketPrice","PriceImpact","calcStableSwapPriceImpact","marketPrice","calculatePriceImpact","finalMarketPrice","separatedReceivedAmount","finalTokenOutReceived","calculateSmartRoutesV2PriceImpact","tokenInPara","priceImpactForRoutes","readablePartialAmountIn","rawRes","pre","getPriceImpact","PriceImpactValue","priceImpactValueSmartRouting","priceImpactValueSmartRoutingV2","error","subtraction","initialValue","toBeSubtract","getPoolAllocationPercents","partialAmounts","ps","fill","sortedAmount","sortBy","minIndexes","minIndex","finalPIndex","isMobile","screen","width","divide","getMax","String","getPointByPrice","pointDelta","price","decimalRate","noNeedSlot","point","log","point_int","point_int_slot","floor","feeToPointDelta","NoFeeToPool","priceToPoint","tokenA","tokenB","amountA","amountB","DCL_POOL_FEE_LIST","decimal_price_A_by_B","undecimal_price_A_by_B","pointToPrice","undecimal_price","registerAccountOnToken","registration_only","account_id","getKeyStore","keyStores","InMemoryKeyStore","BrowserLocalStorageKeyStore","provider","providers","JsonRpcProvider","url","getMemorySigner","keyPath","credentials","fs","readFileSync","credentialAccountId","NoCredential","AccountIdMisMatch","myKeyStore","setKey","KeyPair","fromString","private_key","signer","InMemorySigner","validateAccessKey","transaction","accessKey","permission","FunctionCall","receiver_id","method_names","parseFloat","getSignedTransactionsByMemoryKey","transactionsRef","block","finality","signedTransactions","getPublicKey","publicKey","NoPuiblicKeyError","query","request_type","public_key","InValidAccessKeyError","tx","nearTransactions","createTransaction","PublicKey","nonce","functionCall","serialize","base_decode","header","hash","signTransaction","signedTx","sendTransactionsByMemoryKey","results","sendTransaction","BANANA_ID","CHEDDAR_ID","CUCUMBER_ID","HAPI_ID","WOO_ID","near","Near","keyStore","init_env","refFiViewFunction","nearConnection","viewFunction","ftViewFunction","ftGetStorageBalance","NoAccountIdFound","ftGetBalance","getAccountNearBalance","getTotalPools","tag","TokenNotExistError","metadata","getGlobalWhitelist","ids","tokensMetadata","globalWhitelist","getUserRegisteredTokens","accountId","data","nearDepositTransaction","nearWithdrawTransaction","refDCLSwapViewFunction","DCLInValid","DCLSwapGetStorageBalance","getDCLPoolId","tokenSeq","join","listDCLPools","getDCLPool","pool_id","token_x","token_y","token_seq","new_pool_id","formatError","msg","Error","unNamedError","NotLoginError","SwapRouteError","NoLocalSignerError","NoPoolOnThisPair","SlippageError","NoOrderFound","order_id","OrderNoRemainedAmount","instantSwap","slippageTolerance","referralId","registerToken","tokenRegistered","registered","actionsList","allSwapsTokens","swapTokens","token_in","token_out","amount_in","min_amount_out","force","referral_id","DEFAULT_PAGE_LIMIT","BLACK_TOKEN_LIST","getRatedPoolDetail","pool_info","getUnRatedPoolDetail","getStablePools","getPool","getPoolByIds","pool_ids","getRefPools","page","perPage","from_index","limit","poolData","rawPool","fetchAllPools","min","totalPools","pages","unRatedPools","ratedPools","ThemeContext","createContext","ThemeContextProvider","customTheme","children","useState","theme","setTheme","useEffect","React","Provider","estimateValidator","totalPartialAmountIn","useAllTokens","setTokens","tokensLoading","setTokensLoading","fetchTokens","useTokensIndexer","defaultTokenList","tokenLoading","setTokenLoading","getTokensList","whiteList","globalWhiteListTokens","parsedTokens","newList","useRefPools","refreshTrigger","allPools","setAllPools","poolFetchingState","setPoolFetchingState","allStablePools","setAllStablePools","useSwap","onSwap","swapParams","setEstimates","canSwap","setCanSwap","swapError","setSwapError","setAmountOut","isEstimating","setIsEstimating","forceEstimate","setForceEstimate","rate","makeSwap","outEstimate","bigEstimate","curEstimate","getEstimate","expectAmountOut","estimateValidationPass","TokenPriceContext","useTokenPriceList","tokenPriceList","setTokenPriceList","TokenPriceContextProvider","useTokenBalnces","balances","setBalances","validTokens","balancesMap","textColor","displayValue","tokenInInfo","className","SmartRouteV2","tokensRaw","useContext","ParaTokenFrom","style","marginRight","Icon","alt","height","flexShrink","Hub","position","bottom","ArrowRight","DetailView","minReceived","storagedOpen","showDetail","setShowDetail","isRateReverse","setIsRateReverse","tokensPerRoute","swap","identicalRoutes","hub","percents","useMemo","priceImpactDisplay","displayRate","revertRate","revertDisplayRate","color","cursor","onClick","removeItem","FiChevronDown","FiChevronUp","RiExchangeFill","size","marginLeft","border","flexDirection","alignItems","justifyContent","RouterIcon","whiteSpace","minWidth","key","HalfAndMaxAmount","max","onChangeAmount","halfValue","hoverHalf","setHoverHalf","hoverMax","setHoverMax","background","onMouseEnter","onMouseLeave","half","TokenAmount","props","balance","reloading","onSelectToken","onForceUpdate","ref","useRef","hoverSelect","setHoverSelect","handleChange","current","setCustomValidity","curMax","RiRefreshLine","onWheel","blur","step","placeholder","onChange","disabled","onKeyDown","preventDefault","marginBottom","textAlign","fontSize","SlippageSelector","onChangeSlippageTolerance","showSlip","setShowSlip","invalid","setInValid","document","onclick","stopPropagation","paddingBottom","defaultValue","required","padding","IoWarning","StarToken","onDelete","hoverIcon","setHoverIcon","hoverClose","setHoverClose","top","right","boxShadow","IoCloseOutline","stroke","Token","isSticky","onClickPin","setHoverIndex","hoverIndex","displayBalance","hoverOutLink","setHoverOutLink","hoverPin","setHoverPin","HiOutlineExternalLink","marginTop","open","AiFillPushpin","AiOutlinePushpin","TokenListTable","starList","setStarList","currentSort","setCurrentSort","tokenSorting","b1","borderBottom","TiArrowSortedUp","TiArrowSortedDown","TokenSelector","onSelect","onClose","searchValue","setSearchValue","handleSearch","storagedStartList","DEFAULT_START_TOKEN_LIST","newStarList","starToken","tableListFilter","searchValueLower","toLowerCase","FiChevronLeft","FaSearch","evt","Slider","setHover","viewBox","xmlns","fillRule","clipRule","RefIcon","Loading","cx","cy","strokeWidth","strokeLinecap","Warning","y1","x2","y2","Success","left","gradientUnits","stopColor","Notification","state","detail","setOpen","setState","href","textDecoration","rel","fontWeight","AccountButton","onDisConnect","hoverAccount","setHoverAccount","SwapWidget","connection","transactionState","onConnect","defaultTokenIn","defaultTokenOut","darkMode","curTheme","STORAGED_TOKEN_IN","STORAGED_TOKEN_OUT","isSignedInProp","isSignedIn","setTokenIn","handleSetTokenIn","handleSetTokenOut","setTokenOut","tokenInBalance","setTokenInBalance","tokenOutBalance","setTokenOutBalance","notOpen","setNotOpen","widgetRoute","setWidgetRoute","setAmountIn","setSlippageTolerance","setRreshTrigger","defaultIn","defaultOut","wrapedId","available","handleSubmit","canSubmit","onSubmit","CgArrowsExchangeAltV","paddingTop","TiWarning","message","opacity","display","DefaultTestnetTokenList","spec","reference","reference_hash","DefaultMainnetTokenList","getDefaultTokenList","DCL_POOL_SPLITER","DCLSwap","Swap","SwapByOutput","LimitOrderWithSwap","SwapByStopPoint","swapInfo","output_token","min_output_amount","client_id","output_amount","buy_token","DCLRegistered","new_point","quote","input_amount","input_token","list_user_assets","DCLSwapByInputOnBestPool","bestEstimate","bestFee","quote_by_output","list_history_orders","list_active_orders","get_order","find_order","cancel_order","order","remain_amount","claim_order","get_pointorder_range","left_point","right_point"],"mappings":"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"}
1
+ {"version":3,"file":"ref-sdk.esm.js","sources":["../src/constant.ts","../src/stable-swap.ts","../src/swap-widget/constant.ts","../src/metaIcons.ts","../src/indexer.ts","../src/v1-swap/parallelSwapLogic.ts","../src/v1-swap/smartRoutingLogic.js","../src/v1-swap/swap.ts","../src/utils.ts","../src/near.ts","../src/ref.ts","../src/dcl-swap/dcl-pool.ts","../src/error.ts","../src/v1-swap/instantSwap.ts","../src/v1-swap/pool.ts","../src/swap-widget/state.tsx","../node_modules/style-inject/dist/style-inject.es.js","../src/swap-widget/components.tsx","../src/swap-widget/index.tsx","../src/swap-widget/defaultTokenList.ts","../src/dcl-swap/swap.ts","../src/dcl-swap/limit-order.ts"],"sourcesContent":["import { TokenMetadata } from './types';\n\nexport const FEE_DIVISOR = 10000;\n\nexport const STABLE_LP_TOKEN_DECIMALS = 18;\nexport const RATED_POOL_LP_TOKEN_DECIMALS = 24;\nexport const STORAGE_TO_REGISTER_WITH_MFT = '0.1';\nexport const ONE_YOCTO_NEAR = '0.000000000000000000000001';\nlet ENV: string | undefined = '';\nexport function getConfig(\n env: string | undefined = ENV ||\n process.env.NEAR_ENV ||\n process.env.REACT_APP_REF_SDK_ENV\n) {\n ENV = env;\n switch (env) {\n case 'mainnet':\n return {\n networkId: 'mainnet',\n nodeUrl: 'https://rpc.mainnet.near.org',\n walletUrl: 'https://wallet.near.org',\n WRAP_NEAR_CONTRACT_ID: 'wrap.near',\n REF_FI_CONTRACT_ID: 'v2.ref-finance.near',\n REF_TOKEN_ID: 'token.v2.ref-finance.near',\n indexerUrl: 'https://indexer.ref.finance',\n explorerUrl: 'https://testnet.nearblocks.io',\n REF_DCL_SWAP_CONTRACT_ID: 'dclv2.ref-labs.near',\n };\n case 'testnet':\n return {\n networkId: 'testnet',\n nodeUrl: 'https://rpc.testnet.near.org',\n walletUrl: 'https://wallet.testnet.near.org',\n indexerUrl: 'https://testnet-indexer.ref-finance.com',\n WRAP_NEAR_CONTRACT_ID: 'wrap.testnet',\n REF_FI_CONTRACT_ID: 'ref-finance-101.testnet',\n REF_TOKEN_ID: 'ref.fakes.testnet',\n explorerUrl: 'https://testnet.nearblocks.io',\n REF_DCL_SWAP_CONTRACT_ID: 'dclv2.ref-dev.testnet',\n };\n default:\n return {\n networkId: 'mainnet',\n nodeUrl: 'https://rpc.mainnet.near.org',\n walletUrl: 'https://wallet.near.org',\n REF_FI_CONTRACT_ID: 'v2.ref-finance.near',\n WRAP_NEAR_CONTRACT_ID: 'wrap.near',\n REF_TOKEN_ID: 'token.v2.ref-finance.near',\n indexerUrl: 'https://indexer.ref.finance',\n explorerUrl: 'https://nearblocks.io',\n REF_DCL_SWAP_CONTRACT_ID: 'dclv2.ref-labs.near',\n };\n }\n}\n\nexport let config = getConfig();\n\nexport let REF_FI_CONTRACT_ID = config.REF_FI_CONTRACT_ID;\n\nexport let WRAP_NEAR_CONTRACT_ID = config.WRAP_NEAR_CONTRACT_ID;\n\nexport let REF_TOKEN_ID = config.REF_TOKEN_ID;\n\nexport let WNEAR_META_DATA: TokenMetadata = {\n id: WRAP_NEAR_CONTRACT_ID,\n name: 'wNEAR',\n symbol: 'wNEAR',\n decimals: 24,\n icon: 'https://assets.ref.finance/images/w-NEAR-no-border.png',\n};\n\nexport let REF_META_DATA = {\n decimals: 18,\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A\",\n id: REF_TOKEN_ID,\n name: 'Ref Finance Token',\n symbol: 'REF',\n};\n\nexport const NEAR_META_DATA: TokenMetadata = {\n id: 'NEAR',\n name: 'NEAR',\n symbol: 'NEAR',\n decimals: 24,\n icon:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA2AAAANgCAIAAADF8JzzAAAACXBIWXMAABYlAAAWJQFJUiTwAAAgAElEQVR4nO3d7VXb2rqw4eQd57/cgZ0KLCqwVwWIChAVYCrAqQBTgUUFERVEVBBTwTYdmArWO/by3uzMfBA+bHlK87r+nTP2WBFSjO/o8SN//Pvvvz8AAMB//T9nAgCA7wlEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAAC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ICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAID/+fDhw/8H0I0VimXUJpsAAAAASUVORK5CYII=',\n};\n\nexport const TokenLinks = {\n NEAR: 'https://awesomenear.com/near-protocol',\n wNEAR: 'https://awesomenear.com/near-protocol',\n REF: 'https://awesomenear.com/ref-finance',\n OCT: 'https://awesomenear.com/octopus-network',\n PARAS: 'https://awesomenear.com/paras',\n SKYWARD: 'https://awesomenear.com/skyward-finance',\n FLX: 'https://awesomenear.com/flux',\n PULSE: 'https://awesomenear.com/pulse',\n DBIO: 'https://awesomenear.com/debio-network',\n MYRIA: 'https://awesomenear.com/myriad-social',\n PXT: 'https://awesomenear.com/cryptoheroes',\n HAPI: 'https://awesomenear.com/hapi',\n OIN: 'https://awesomenear.com/oin-finance',\n ABR: 'https://awesomenear.com/allbridge',\n '1MIL': 'https://awesomenear.com/1millionnfts',\n MARMAJ: 'https://awesomenear.com/marmaj-foundation',\n marmaj: 'https://awesomenear.com/marmaj-foundation',\n USN: 'https://awesomenear.com/decentral-bank',\n '1INCH': 'https://awesomenear.com/1inch-network',\n GRT: 'https://awesomenear.com/the-graph',\n LINK: 'https://awesomenear.com/chainlink',\n Cheddar: 'https://awesomenear.com/cheddar-farm',\n AURORA: 'https://awesomenear.com/aurora-dev',\n $META: 'https://awesomenear.com/meta-pool',\n UMINT: 'https://awesomenear.com/youminter',\n UTO: 'https://awesomenear.com/secret-skellies-society',\n DEIP: 'https://awesomenear.com/deip',\n WOO: 'https://awesomenear.com/woo-dex',\n LINEAR: 'https://awesomenear.com/linear-protocol',\n PEM: 'https://awesomenear.com/pembrock-finance',\n ATO: 'https://awesomenear.com/atocha-protocol',\n SEAT: 'https://awesomenear.com/seatlab-nft',\n FAR: 'https://awesomenear.com/few-and-far',\n BSTN: 'https://awesomenear.com/bastion',\n BRRR: 'https://awesomenear.com/burrow',\n XNL: 'https://awesomenear.com/chronicle',\n KSW: 'https://awesomenear.com/killswitch-finance',\n STNEAR: 'https://awesomenear.com/meta-pool',\n NearX: 'https://awesomenear.com/stader',\n SD: 'https://awesomenear.com/stader',\n DISC: 'https://awesomenear.com/discovol',\n} as Record<string, string>;\n\nexport const CONSTANT_D = 1.0001;\n\nexport const POINTLEFTRANGE = -800000;\nexport const POINTRIGHTRANGE = 800000;\n\nexport const switchEnv = () => {\n config = getConfig();\n REF_FI_CONTRACT_ID = config.REF_FI_CONTRACT_ID;\n WRAP_NEAR_CONTRACT_ID = config.WRAP_NEAR_CONTRACT_ID;\n REF_TOKEN_ID = config.REF_TOKEN_ID;\n REF_META_DATA = {\n decimals: 18,\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A\",\n id: REF_TOKEN_ID,\n name: 'Ref Finance Token',\n symbol: 'REF',\n };\n WNEAR_META_DATA = {\n id: WRAP_NEAR_CONTRACT_ID,\n name: 'wNEAR',\n symbol: 'wNEAR',\n decimals: 24,\n icon: 'https://assets.ref.finance/images/w-NEAR-no-border.png',\n };\n return {\n config,\n REF_FI_CONTRACT_ID,\n WRAP_NEAR_CONTRACT_ID,\n REF_TOKEN_ID,\n REF_META_DATA,\n WNEAR_META_DATA,\n };\n};\n","import { StablePool } from './types';\nimport { FEE_DIVISOR } from './constant';\n\nimport {\n toReadableNumber,\n toNonDivisibleNumber,\n scientificNotationToString,\n} from './utils';\n\nimport Big from 'big.js';\n\nimport _ from 'lodash';\n\nconst tradeFee = (amount: number, trade_fee: number) => {\n return (amount * trade_fee) / FEE_DIVISOR;\n};\n\nexport const calc_d = (amp: number, c_amounts: number[]) => {\n const token_num = c_amounts.length;\n const sum_amounts = _.sum(c_amounts);\n let d_prev = 0;\n let d = sum_amounts;\n for (let i = 0; i < 256; i++) {\n let d_prod = d;\n for (let c_amount of c_amounts) {\n d_prod = (d_prod * d) / (c_amount * token_num);\n }\n d_prev = d;\n const ann = amp * token_num ** token_num;\n const numerator = d_prev * (d_prod * token_num + ann * sum_amounts);\n const denominator = d_prev * (ann - 1) + d_prod * (token_num + 1);\n d = numerator / denominator;\n if (Math.abs(d - d_prev) <= 1) break;\n }\n return d;\n};\n\nexport const calc_y = (\n amp: number,\n x_c_amount: number,\n current_c_amounts: number[],\n index_x: number,\n index_y: number\n) => {\n const token_num = current_c_amounts.length;\n const ann = amp * token_num ** token_num;\n const d = calc_d(amp, current_c_amounts);\n let s = x_c_amount;\n let c = (d * d) / x_c_amount;\n for (let i = 0; i < token_num; i++) {\n if (i !== index_x && i !== index_y) {\n s += current_c_amounts[i];\n c = (c * d) / current_c_amounts[i];\n }\n }\n c = (c * d) / (ann * token_num ** token_num);\n const b = d / ann + s;\n let y_prev = 0;\n let y = d;\n for (let i = 0; i < 256; i++) {\n y_prev = y;\n const y_numerator = y ** 2 + c;\n const y_denominator = 2 * y + b - d;\n y = y_numerator / y_denominator;\n if (Math.abs(y - y_prev) <= 1) break;\n }\n\n return y;\n};\n\nexport const calc_swap = (\n amp: number,\n in_token_idx: number,\n in_c_amount: number,\n out_token_idx: number,\n old_c_amounts: number[],\n trade_fee: number\n) => {\n const y = calc_y(\n amp,\n in_c_amount + old_c_amounts[in_token_idx],\n old_c_amounts,\n in_token_idx,\n out_token_idx\n );\n const dy = old_c_amounts[out_token_idx] - y;\n const fee = tradeFee(dy, trade_fee);\n const amount_swapped = dy - fee;\n return [amount_swapped, fee, dy];\n};\n\nexport const getSwappedAmount = (\n tokenInId: string,\n tokenOutId: string,\n amountIn: string,\n stablePool: StablePool,\n STABLE_LP_TOKEN_DECIMALS: number\n) => {\n const amp = stablePool.amp;\n const trade_fee = stablePool.total_fee;\n\n // depended on pools\n const in_token_idx = stablePool.token_account_ids.findIndex(\n id => id === tokenInId\n );\n const out_token_idx = stablePool.token_account_ids.findIndex(\n id => id === tokenOutId\n );\n\n const rates = stablePool.rates.map(r =>\n toReadableNumber(STABLE_LP_TOKEN_DECIMALS, r)\n );\n\n const base_old_c_amounts = stablePool.c_amounts.map(amount =>\n toReadableNumber(STABLE_LP_TOKEN_DECIMALS, amount)\n );\n\n const old_c_amounts = base_old_c_amounts\n .map((amount, i) =>\n toNonDivisibleNumber(\n STABLE_LP_TOKEN_DECIMALS,\n scientificNotationToString(\n new Big(amount || 0).times(new Big(rates[i])).toString()\n )\n )\n )\n .map(amount => Number(amount));\n\n const in_c_amount = Number(\n toNonDivisibleNumber(\n STABLE_LP_TOKEN_DECIMALS,\n scientificNotationToString(\n new Big(amountIn).times(new Big(rates[in_token_idx])).toString()\n )\n )\n );\n\n const [amount_swapped, fee, dy] = calc_swap(\n amp,\n in_token_idx,\n in_c_amount,\n out_token_idx,\n old_c_amounts,\n trade_fee\n );\n\n return [\n amount_swapped / Number(rates[out_token_idx]),\n fee,\n dy / Number(rates[out_token_idx]),\n ];\n};\n","import { getConfig } from '../constant';\nexport const REF_WIDGET_STAR_TOKEN_LIST_KEY =\n 'REF_WIDGET_STAR_TOKEN_LIST_VALUE';\n\nexport const REF_WIDGET_ALL_TOKENS_LIST_KEY =\n 'REF_WIDGET_ALL_TOKENS_LIST_VALUE';\nexport const REF_WIDGET_ALL_LIGHT_TOKENS_LIST_KEY =\n 'REF_WIDGET_ALL_LIGHT_TOKENS_LIST_VALUE';\n\nexport const REF_WIDGET_SWAP_IN_KEY = 'REF_WIDGET_SWAP_IN_VALUE';\n\nexport const REF_WIDGET_SWAP_OUT_KEY = 'REF_WIDGET_SWAP_OUT_VALUE';\n\nexport const REF_WIDGET_SWAP_DETAIL_KEY = 'REF_WIDGET_SWAP_DETAIL_VALUE';\n\nexport const DEFAULT_START_TOKEN_LIST_TESTNET = [\n 'wrap.testnet',\n 'usdtt.fakes.testnet',\n 'usdt.fakes.testnet',\n 'ref.fakes.testnet',\n 'usdn.testnet',\n 'eth.fakes.testnet',\n];\n\nexport const DEFAULT_START_TOKEN_LIST_MAINNET = [\n 'wrap.near',\n 'usdt.tether-token.near',\n 'dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near',\n 'token.v2.ref-finance.near',\n 'usn',\n 'aurora',\n 'token.sweat',\n];\n\nexport interface Theme {\n container: string; // container background\n buttonBg: string; // button background\n primary: string; // primary theme color\n secondary: string; // secondary theme color\n borderRadius: string; // border radius\n fontFamily: string; // font family\n hover: string; // hovering color\n active: string; // active color\n secondaryBg: string; // secondary background color\n borderColor: string; // border color\n iconDefault: string; // default icon color\n iconHover: string; // icon hovering color\n refIcon?: string; // ref icon color\n}\n\nexport const defaultTheme: Theme = {\n container: '#FFFFFF',\n buttonBg: '#00C6A2',\n primary: '#000000',\n secondary: '#7E8A93',\n borderRadius: '4px',\n fontFamily: 'sans-serif',\n hover: 'rgba(126, 138, 147, 0.2)',\n active: 'rgba(126, 138, 147, 0.2)',\n secondaryBg: '#F7F7F7',\n borderColor: 'rgba(126, 138, 147, 0.2)',\n iconDefault: 'rgba(126, 138, 147, 1)',\n iconHover: 'rgba(62, 62, 62, 1)',\n};\n\nexport const defaultDarkModeTheme: Theme = {\n container: '#26343E',\n buttonBg: '#00C6A2',\n primary: '#FFFFFF',\n secondary: '#7E8A93',\n borderRadius: '4px',\n fontFamily: 'sans-serif',\n hover: 'rgba(126, 138, 147, 0.2)',\n active: 'rgba(126, 138, 147, 0.2)',\n secondaryBg: 'rgba(0, 0, 0, 0.2)',\n borderColor: 'rgba(126, 138, 147, 0.2)',\n iconDefault: 'rgba(126, 138, 147, 1)',\n iconHover: 'rgba(183, 201, 214, 1)',\n refIcon: 'white',\n};\n","const icons: { [tokenId: string]: string } = {\n '4691937a7508860f876c9c0a2a617e7d9e945d4b.factory.bridge.near':\n 'https://ref-finance-images.s3.amazonaws.com/images/woo-wtrue.png',\n 'wrap.near':\n 'data:image/png;base64,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',\n 'wrap.testnet':\n 'data:image/png;base64,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',\n '6b175474e89094c44da98b954eedeac495271d0f.factory.bridge.near':\n 'https://assets.ref.finance/images/4943.png',\n 'berryclub.ek.near': 'https://assets.ref.finance/images/banana.png',\n 'dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near':\n 'https://assets.ref.finance/images/825.png',\n '1f9840a85d5af5bf1d1762f925bdaddc4201f984.factory.bridge.near':\n 'https://assets.ref.finance/images/7083.png',\n '514910771af9ca656af840dff83e8264ecf986ca.factory.bridge.near':\n 'https://assets.ref.finance/images/1975.png',\n 'a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.factory.bridge.near':\n 'https://assets.ref.finance/images/3408.png',\n '2260fac5e5542a773aa44fbcfedf7c193bc2c599.factory.bridge.near':\n 'https://assets.ref.finance/images/3717.png',\n '7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9.factory.bridge.near':\n 'https://assets.ref.finance/images/7278.png',\n 'a0b73e1ff0b80914ab6fe0444e65848c4c34450b.factory.bridge.near':\n 'https://assets.ref.finance/images/3635.png',\n '50d1c9771902476076ecfc8b2a83ad6b9355a4c9.factory.bridge.near':\n 'https://assets.ref.finance/images/4195.png',\n '4fabb145d64652a948d72533023f6e7a623c7c53.factory.bridge.near':\n 'https://assets.ref.finance/images/4687.png',\n '6f259637dcd74c767781e37bc6133cd6a68aa161.factory.bridge.near':\n 'https://assets.ref.finance/images/2502.png',\n '6b3595068778dd592e39a122f4f5a5cf09c90fe2.factory.bridge.near':\n 'https://assets.ref.finance/images/6758.png',\n 'c011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f.factory.bridge.near':\n 'https://assets.ref.finance/images/2586.png',\n 'c944e90c64b2c07662a292be6244bdf05cda44a7.factory.bridge.near':\n 'https://assets.ref.finance/images/6719.png',\n '9f8f72aa9304c8b593d555f12ef6589cc3a579a2.factory.bridge.near':\n 'https://assets.ref.finance/images/1518.png',\n '0bc529c00c6401aef6d220be8c6ea1667f6ad93e.factory.bridge.near':\n 'https://assets.ref.finance/images/5864.png',\n 'c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2.factory.bridge.near':\n 'https://assets.ref.finance/images/2396.png',\n '0316eb71485b0ab14103307bf65a021042c6d380.factory.bridge.near':\n 'https://assets.ref.finance/images/6941.png',\n '111111111117dc0aa78b770fa6a738034120c302.factory.bridge.near':\n 'https://assets.ref.finance/images/8104.png',\n 'f5cfbc74057c610c8ef151a439252680ac68c6dc.factory.bridge.near':\n 'https://assets.ref.finance/images/55sGoBm.png',\n 'de30da39c46104798bb5aa3fe8b9e0e1f348163f.factory.bridge.near':\n 'https://assets.ref.finance/images/10052.png',\n 'a4ef4b0b23c1fc81d3f9ecf93510e64f58a4a016.factory.bridge.near':\n 'https://assets.ref.finance/images/4222.png',\n 'token.cheddar.near': 'https://assets.ref.finance/images/cheddar.png',\n 'farm.berryclub.ek.near': 'https://assets.ref.finance/images/cucumber.png',\n 'd9c2d319cd7e6177336b0a9c93c21cb48d84fb54.factory.bridge.near':\n 'https://assets.ref.finance/images/HAPI.png',\n};\n\nexport default icons;\n","import { config, WRAP_NEAR_CONTRACT_ID, NEAR_META_DATA } from './constant';\nimport {\n REF_WIDGET_ALL_TOKENS_LIST_KEY,\n REF_WIDGET_ALL_LIGHT_TOKENS_LIST_KEY,\n} from './swap-widget/constant';\nimport { REPLACE_TOKENS } from './ref';\nimport metaIconDefaults from './metaIcons';\n\nexport const getTokenPriceList = async (): Promise<any> => {\n return await fetch(config.indexerUrl + '/list-token-price', {\n method: 'GET',\n headers: { 'Content-type': 'application/json; charset=UTF-8' },\n })\n .then(res => res.json())\n .then(list => {\n return list;\n });\n};\n\nexport const getTokens = async (reload?: boolean) => {\n const storagedTokens =\n typeof window !== 'undefined' && !reload\n ? localStorage.getItem(REF_WIDGET_ALL_TOKENS_LIST_KEY)\n : null;\n\n return storagedTokens\n ? JSON.parse(storagedTokens)\n : await fetch(config.indexerUrl + '/list-token', {\n method: 'GET',\n headers: { 'Content-type': 'application/json; charset=UTF-8' },\n })\n .then(res => res.json())\n .then(tokens => {\n const newTokens = Object.values(tokens).reduce(\n (acc: any, cur: any, i) => {\n const id = Object.keys(tokens)[i];\n return {\n ...acc,\n [id]: {\n ...cur,\n id,\n icon:\n !cur.icon || REPLACE_TOKENS.includes(id)\n ? metaIconDefaults[id]\n : cur.icon,\n },\n };\n },\n {}\n );\n\n return newTokens;\n })\n .then(res => {\n typeof window !== 'undefined' &&\n !reload &&\n localStorage.setItem(\n REF_WIDGET_ALL_TOKENS_LIST_KEY,\n JSON.stringify(res)\n );\n return res;\n });\n};\nexport const getTokensTiny = async (reload?: boolean) => {\n const storagedTokens =\n typeof window !== 'undefined' && !reload\n ? localStorage.getItem(REF_WIDGET_ALL_LIGHT_TOKENS_LIST_KEY)\n : null;\n\n return storagedTokens\n ? JSON.parse(storagedTokens)\n : await fetch(config.indexerUrl + '/list-token-v2', {\n method: 'GET',\n headers: { 'Content-type': 'application/json; charset=UTF-8' },\n })\n .then(res => res.json())\n .then(tokens => {\n const newTokens = Object.values(tokens).reduce(\n (acc: any, cur: any, i) => {\n const id = Object.keys(tokens)[i];\n return {\n ...acc,\n [id]: {\n ...cur,\n id,\n },\n };\n },\n {}\n );\n\n return newTokens;\n })\n .then(res => {\n typeof window !== 'undefined' &&\n !reload &&\n localStorage.setItem(\n REF_WIDGET_ALL_LIGHT_TOKENS_LIST_KEY,\n JSON.stringify(res)\n );\n return res;\n });\n};\n\nexport const getWhiteListTokensIndexer = async (whiteListIds: string[]) => {\n return await fetch(config.indexerUrl + '/list-token', {\n method: 'GET',\n headers: { 'Content-type': 'application/json; charset=UTF-8' },\n })\n .then(res => res.json())\n .then(res => {\n return whiteListIds.reduce((acc, cur, i) => {\n if (\n !res[cur] ||\n !Object.values(res[cur]) ||\n Object.values(res[cur]).length === 0\n )\n return acc;\n\n return {\n ...acc,\n [cur]: { ...res[cur], id: cur },\n };\n }, {});\n })\n .then(res => {\n return Object.values(res);\n });\n};\n","//@ts-nocheck\nimport Big from 'big.js';\n\nimport { Pool } from '../types';\n\nBig.RM = 0;\nBig.DP = 40;\nBig.NE = -40;\nBig.PE = 40;\n\ninterface FormatedPool extends Pool {\n x?: string;\n y?: string;\n gamma_bps?: Big;\n}\n\n///////////////////////////////\n// Parallel Swap Logic Below //\n///////////////////////////////\n\n/** formatPoolNew\n * This function appends to the existing standard Pool struct and adds attributes that simplify the parallel swap algorithms.\n * Adds attributes \"x\" (for input token reserves in pool), \"y\" (for output token reserves in pool), and \"gamma_bps\" (for 1- fee in bps)\n * Our convention for our algorithm has been to use \"x\" as the input token and \"y\" as the output token.\n * @param pool AMM structure containing reserves of inputToken and outputToken\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns newFormatPool\n */\nexport function formatPoolNew(\n pool: Pool,\n inputToken: string,\n outputToken: string\n) {\n let p: FormatedPool = pool;\n let x = p.supplies[inputToken];\n let y = p.supplies[outputToken];\n p['gamma_bps'] = new Big(10000).minus(p.fee);\n p['x'] = x;\n p['y'] = y;\n return p;\n}\n\n/** solveForMuFloat\n * This function takes the set of token pools, the total input of inputToken, and the names of inputToken and outputToken and\n * solves for the Lagrange Multiplier \"mu\". Note that mu must be allowed to be aritrary precision floating point number. Mu will\n * be used in subsequent function calls to determine the best allocations of intputToken to be made per pool.\n * For more detailed math on how this function was derived, please see the white paper:\n * https://github.com/giddyphysicist/ParallelSwapForRefFinance/blob/main/ParallelSwapWhitePaper.pdf\n * @param pools list of pools that contain inputToken and outputToken\n * @param totalDeltaX total allocation (among all pools) being input of inputToken\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns mu the lagrange multiplier value calculated for a set of pools and inputToken amount.\n */\nexport function solveForMuFloat(\n pools: Pool[],\n totalDeltaX: string,\n inputToken: string,\n outputToken: string\n) {\n if (pools.length > 0) {\n let numerator = new Big(totalDeltaX);\n let denominator = new Big(0);\n\n for (var i = 0; i < pools.length; i++) {\n let p = formatPoolNew(pools[i], inputToken, outputToken);\n let numAdd = new Big(p.x).times(10000).div(p.gamma_bps);\n numerator = numerator.plus(numAdd);\n let denomAdd = new Big(p.x)\n .times(p.y)\n .div(p.gamma_bps)\n .sqrt()\n .times(100);\n denominator = denominator.plus(denomAdd);\n }\n\n const mu = new Big(numerator).div(denominator);\n return mu;\n } else {\n // console.log('ERROR - could not find pools that satisfy token pair');\n const mu = NaN;\n return mu;\n }\n}\n\n/** calculate_dx_float\n * Once mu has been calculated for a set of pools and total input amount, the next step is\n * determining the total allocation per pool. This function evaluates the amount of input Token to be\n * allocated to the given pool. Note, in our original algorithmic convention, the 'x' variable was for the input token,\n * and the 'y' variable was for the output token. Here, the value dx is the part of the full amount of input token X.\n * Again, the detailed formulae for these operations can be found in the white paper referenced above.\n * @param mu the lagrange multiplier value calculated for a set of pools and inputToken amount.\n * @param pool AMM structure containing reserves of inputToken and outputToken\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns dxFloat the allocation amount determined for the given pool\n */\nexport function calculate_dx_float(\n mu: number | Big,\n pool: FormatedPool,\n inputToken: string,\n outputToken: string\n) {\n let p = formatPoolNew(pool, inputToken, outputToken);\n let radical = new Big(p.x).times(p.y).div(p.gamma_bps);\n let dxFloat = new Big(mu)\n .times(100)\n .times(radical.sqrt())\n .minus(new Big(p.x).times(10000).div(p.gamma_bps));\n return dxFloat;\n}\n\n/** calculate_dy_float\n * Once you have an allocation amount for a given pool, you can use the AMM constant-product formula to determine\n * the expected output amount of output Token.\n * Note, here, as earlier, our algorithmic convention uses \"y\" as the output token, and so \"dy\" is the fraction of\n * the total output of output Token, assuming there could be dy contributions from other parallel pools as well.\n * @param dx_float input allocation amount of inputToken for the given pool\n * @param pool a structure representing the reserves and fees for a given pool.\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns dyFloat the expected trade out amount out of outputToken\n */\nexport function calculate_dy_float(\n dx_float: number,\n pool: FormatedPool,\n inputToken: string,\n outputToken: string\n) {\n if (dx_float <= 0) {\n return new Big(0);\n }\n let p = formatPoolNew(pool, inputToken, outputToken);\n let dx = new Big(dx_float);\n let denom = new Big(10000).times(p.x).plus(new Big(p.gamma_bps).times(dx));\n let numerator = new Big(p.y).times(dx).times(p.gamma_bps);\n let dyFloat = numerator.div(denom).round();\n return dyFloat;\n}\n\n/** calculateOptimalOutput\n * This is the main function, which calculates optimal values of inputToken to swap into each pool.\n * @param pools list of relevant AMM pools containing inputToken and outputToken\n * @param inputAmount the numeric total amount of inputToken to be traded into the group of swap pools.\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns normalizedDxArray an array containing the amount allocations of inputToken per pool in the list of pools.\n */\nexport function calculateOptimalOutput(\n pools: Pool[],\n inputAmount: string,\n inputToken: string,\n outputToken: string\n) {\n let mu = solveForMuFloat(pools, inputAmount, inputToken, outputToken);\n let dxArray: Big[] = [];\n let negativeDxValsFlag = false;\n for (var i = 0; i < pools.length; i++) {\n let pool = formatPoolNew(pools[i], inputToken, outputToken);\n let dx = calculate_dx_float(mu, pool, inputToken, outputToken);\n if (dx.lt(0)) {\n negativeDxValsFlag = true;\n }\n let dxInt = new Big(dx).round();\n dxArray.push(dxInt);\n }\n if (negativeDxValsFlag) {\n dxArray = reducePools(pools, dxArray, inputAmount, inputToken, outputToken);\n }\n let dxArraySum = new Big(0);\n for (var i = 0; i < dxArray.length; i++) {\n dxArraySum = dxArraySum.plus(dxArray[i]);\n }\n let tempAllocationsArray = [];\n for (var i = 0; i < dxArray.length; i++) {\n let ndx = new Big(dxArray[i])\n .times(inputAmount)\n .div(dxArraySum)\n .round();\n tempAllocationsArray.push(ndx);\n }\n let allocationsArray = checkIntegerSumOfAllocations(\n tempAllocationsArray,\n inputAmount\n );\n let normalizedDxArray = [];\n for (var i = 0; i < allocationsArray.length; i++) {\n let ndx = allocationsArray[i];\n normalizedDxArray.push(BigInt(ndx));\n pools[i]['partialAmountIn'] = ndx.toString();\n }\n return normalizedDxArray;\n}\n\n/** reducePools\n * This function is used to implement part of the non-linear slack variables in the lagrange - multiplier\n * solution for parallel swap. Part of what comes out of the math is that sometimes, the optimal allocation for a pool\n * can be negative, which makes no physical sense. When this occurs, that particular pool needs to be flagged and the\n * lagrange constraint applied to force the allocation to be zero.\n * This function takes an already-solved set of pools, input allocation per pool, the total input amount, and the\n * inputToken name and outputToken name, and determines which, if any, allocations need to be set to zero.\n * However, when this occurs, and a pool is essentially ignored from the list, then the calculation for mu must be re-done.\n * So the calculateOptimalOutput function is then called on the reduced set of pools, and if no negative allocation values remain,\n * then the allocations on the reduced set is determined, and values of zero are put in for the 'failed' pools.\n * @param pools list of pools that contain inputToken and outputToken\n * @param dxArray list of input allocation per pool\n * @param inputAmount total amount of inputToken to be traded among the pools\n * @param inputToken the name of the inputToken\n * @param outputToken the name of the outputToken\n * @returns newFullDxVec the new full list of input allocations the same length as dxArray, containing zeros for failed pools.\n */\nexport function reducePools(\n pools: Pool[],\n dxArray: Big[],\n inputAmount: string,\n inputToken: string,\n outputToken: string\n) {\n let goodIndices = [];\n for (var i = 0; i < dxArray.length; i++) {\n let dx = dxArray[i];\n if (dx.gte(0)) {\n goodIndices.push(i);\n }\n }\n if (goodIndices.length < 1) {\n // console.log(\"ERROR OCCURRED -- ALL DX VALUES WERE NEGATIVE\")\n return dxArray;\n }\n let newPools = [];\n for (var j = 0; j < dxArray.length; j++) {\n if (goodIndices.includes(j)) {\n newPools.push(pools[j]);\n }\n }\n let newDxVec = calculateOptimalOutput(\n newPools,\n inputAmount,\n inputToken,\n outputToken\n );\n let goodInd2newdx = {};\n for (var k = 0; k < newDxVec.length; k++) {\n goodInd2newdx[goodIndices[k]] = newDxVec[k];\n }\n let newFullDxVec = [];\n for (var ii = 0; ii < pools.length; ii++) {\n if (goodIndices.includes(ii)) {\n newFullDxVec.push(goodInd2newdx[ii]);\n } else {\n newFullDxVec.push(0);\n }\n }\n return newFullDxVec;\n}\n\nexport function checkIntegerSumOfAllocations(\n allocations: Big[] | string[] | BigInt[],\n totalInput: Big | string | BigInt\n) {\n var totalInput = new Big(totalInput);\n var allocations:\n | Big[]\n | string[]\n | BigInt[] = allocations.map((item: Big | string | BigInt) =>\n new Big(item).round()\n );\n let alloSum = allocations\n .map(item => new Big(item))\n .reduce((a, b) => a.plus(b), new Big(0));\n let offset = totalInput.minus(alloSum);\n //get largest allocation.\n let currMax = new Big(0);\n let currMaxInd = 0;\n for (var i = 0; i < allocations.length; i++) {\n if (allocations[i].gt(currMax)) {\n currMaxInd = i;\n currMax = allocations[i];\n }\n }\n let newAllocations = [];\n for (var j = 0; j < allocations.length; j++) {\n if (j === currMaxInd) {\n newAllocations.push(allocations[j].plus(offset).toString());\n } else {\n newAllocations.push(allocations[j].toString());\n }\n }\n return newAllocations;\n}\n","/* eslint-disable no-undef */\n////////////////////////////////////////////////////////////////////////////\n// SMART ROUTE SWAP LOGIC\n////////////////////////////////////////////////////////////////////////////\nimport Big from 'big.js';\nimport { checkIntegerSumOfAllocations } from './parallelSwapLogic';\n\nimport { TokenMetadata } from '../types';\n\nimport { ftGetTokenMetadata } from '../ref';\n\nimport { percentLess, toNonDivisibleNumber } from '../utils';\nBig.RM = 0;\nBig.DP = 40;\nBig.NE = -40;\nBig.PE = 40;\n\nfunction bisqrt(value) {\n // For some ridiculous reason, the .sqrt() method for Big decimals is extremely slow (~10-20ms),\n // which isn't so bad until you need to use it a bunch of times.\n // Since we're dealing with super large numbers anyway, we can convert the Big decimal number into a BigInt,\n // then run this BigInt Newton iteration square root function instead, and then convert back into a\n // Big number. And it speeds up the operation by a crazy factor, ~10x faster.\n if (value < BigInt(0)) {\n throw 'square root of negative numbers is not supported';\n }\n\n if (value < BigInt(2)) {\n return value;\n }\n\n function newtonIteration(n, x0) {\n const x1 = (n / x0 + x0) >> BigInt(1);\n if (x0 === x1 || x0 === x1 - BigInt(1)) {\n return x0;\n }\n return newtonIteration(n, x1);\n }\n\n return newtonIteration(value, BigInt(1));\n}\n\nfunction getBetaForRoute(route, path) {\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n let p = route[0];\n var beta = new Big(p.reserves[path[0]]);\n } else if (route.length == 2) {\n let p1 = route[0];\n let p2 = route[1];\n var beta = new Big(p1.reserves[path[0]]).times(\n new Big(p2.reserves[path[1]])\n );\n }\n return beta;\n}\n\nfunction getEpsilonForRoute(route, path) {\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n // Single Hop case\n let p = route[0];\n let gamma = new Big(10000).minus(new Big(p.fee)).div(new Big(10000));\n var epsilon = Big(gamma);\n } else if (route.length == 2) {\n //Double Hop Case\n let p1 = route[0];\n let p2 = route[1];\n let gamma1 = new Big(10000).minus(new Big(p1.fee)).div(new Big(10000));\n let gamma2 = new Big(10000).minus(new Big(p2.fee)).div(Big(10000));\n var epsilon = new Big(p2.reserves[path[1]])\n .times(new Big(gamma1))\n .plus(new Big(p1.reserves[path[1]]).times(gamma1).times(gamma2));\n }\n return epsilon;\n}\n\nfunction getAlphaForRoute(route, path) {\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n //console.log('single hop')\n let p = route[0];\n let inputToken = path[0];\n let outputToken = path[1];\n let gamma = new Big(10000).minus(new Big(p.fee)).div(new Big(10000));\n let key1 = p.token1Id;\n let key2 = p.token2Id;\n let val1 = p.token1Supply;\n let val2 = p.token2Supply;\n p['reserves'] = { [key1]: val1, [key2]: val2 };\n var alpha = new Big(p.reserves[inputToken]).times(\n new Big(p.reserves[outputToken]).times(new Big(gamma))\n );\n } else if (route.length == 2) {\n //console.log('double hop')\n let p1 = route[0];\n let p2 = route[1];\n let key11 = p1.token1Id;\n let key12 = p1.token2Id;\n let val11 = p1.token1Supply;\n let val12 = p1.token2Supply;\n p1['reserves'] = { [key11]: val11, [key12]: val12 };\n let key21 = p2.token1Id;\n let key22 = p2.token2Id;\n let val21 = p2.token1Supply;\n let val22 = p2.token2Supply;\n p2['reserves'] = { [key21]: val21, [key22]: val22 };\n let inputToken = path[0];\n let middleToken = path[1];\n let outputToken = path[2];\n let gamma1 = new Big(10000).minus(Big(p1.fee)).div(new Big(10000));\n let gamma2 = new Big(10000).minus(new Big(p2.fee)).div(new Big(10000));\n let alpha1 = new Big(p1.reserves[inputToken])\n .times(new Big(p1.reserves[middleToken]))\n .times(gamma1);\n let alpha2 = new Big(p2.reserves[middleToken])\n .times(new Big(p2.reserves[outputToken]))\n .times(gamma2);\n var alpha = alpha1.times(alpha2);\n }\n return alpha;\n}\n\nfunction getAlphaSumFromRoutes(routes, nodeRoutes) {\n let alphaSum = new Big(0);\n for (var i in routes) {\n let route = routes[i];\n let nodeRoute = nodeRoutes[i];\n let alpha = getAlphaForRoute(route, nodeRoute);\n // console.log('alpha is...');\n // console.log(alpha.toString());\n // below, we are replacing the built-in Big sqrt() method with a\n // newton-iteration BigInt sqrt function, to speed it up by 10x.\n let radical = new Big(bisqrt(BigInt(new Big(alpha).round().toFixed())));\n // let radical = new Big(alpha).sqrt();\n let epsilon = getEpsilonForRoute(route, nodeRoute);\n let denom = new Big(epsilon);\n alphaSum = alphaSum.plus(radical.div(denom));\n }\n return alphaSum;\n}\n\nfunction getBetaSumFromRoutes(routes, nodeRoutes) {\n let betaSum = new Big(0);\n for (var i in routes) {\n let route = routes[i];\n let nodeRoute = nodeRoutes[i];\n let num = new Big(getBetaForRoute(route, nodeRoute));\n let denom = new Big(getEpsilonForRoute(route, nodeRoute));\n betaSum = betaSum.plus(num.div(denom));\n }\n return betaSum;\n}\n\nfunction getPhiFromRoutes(routes, nodeRoutes, totalInput) {\n let alphaSum = getAlphaSumFromRoutes(routes, nodeRoutes);\n let betaSum = getBetaSumFromRoutes(routes, nodeRoutes);\n let phi = new Big(totalInput).plus(betaSum).div(alphaSum);\n return phi;\n}\n\nfunction getAllocationForRoute(phi, route, path) {\n let alpha = getAlphaForRoute(route, path);\n let beta = getBetaForRoute(route, path);\n let epsilon = getEpsilonForRoute(route, path);\n // below, we are replacing the built-in Big sqrt() method with a\n // newton-iteration BigInt sqrt function, to speed it up by 10x.\n let allocation = new Big(phi)\n .abs()\n .times(new Big(bisqrt(BigInt(new Big(alpha).round().toFixed()))))\n .minus(beta)\n .div(epsilon);\n return allocation;\n}\n\nfunction getAllocationVectorForRoutes(phi, routes, nodeRoutes) {\n let allocationVec = [];\n for (var i in routes) {\n allocationVec.push(getAllocationForRoute(phi, routes[i], nodeRoutes[i]));\n }\n return allocationVec;\n}\n\nfunction getOptimalAllocationForRoutes(routes, nodeRoutes, totalInput) {\n // console.log(\"CALLING GET OPTIMAL ALLOCATION FOR ROUTES:\")\n // console.log(routes)\n var totalInput = new Big(totalInput);\n let phi = getPhiFromRoutes(routes, nodeRoutes, totalInput);\n // console.log('PHI CALCULATED TO BE...')\n // console.log(phi.toString())\n let allocations = getAllocationVectorForRoutes(phi, routes, nodeRoutes);\n if (allocations.every(item => item.lt(new Big(0)))) {\n allocations = allocations.map(item => item.times(new Big(-1.0)));\n }\n if (allocations.some(item => item.lt(new Big(0)))) {\n allocations = reduceRoutes(routes, nodeRoutes, allocations, totalInput);\n }\n let sumAllocations = allocations.reduce((a, b) => a.plus(b), new Big(0));\n let normalizedAllocations = allocations.map(a =>\n a.div(sumAllocations).times(new Big(totalInput))\n );\n return normalizedAllocations;\n}\n\nfunction reduceRoutes(routes, nodeRoutes, allocationVec, totalInput) {\n // console.log(\"RUNNING REDUCE ROUTES\")\n var totalInput = new Big(totalInput);\n let goodIndices = [];\n for (var i in allocationVec) {\n let dx = allocationVec[i];\n // console.log('DX IS...')\n // console.log(dx.toString())\n if (dx.gt(new Big(0))) {\n goodIndices.push(i);\n }\n }\n // console.log('GOOD INDICES ARE...');\n // console.log(goodIndices);\n let newRoutes = [];\n let newNodeRoutes = [];\n for (var i in goodIndices) {\n let goodIndex = goodIndices[i];\n newRoutes.push(routes[goodIndex]);\n newNodeRoutes.push(nodeRoutes[goodIndex]);\n }\n allocationVec = getOptimalAllocationForRoutes(\n newRoutes,\n newNodeRoutes,\n totalInput\n );\n let allocationDict = {};\n for (var i in goodIndices) {\n allocationDict[goodIndices[i]] = allocationVec[i];\n }\n var allocationVecNew = [];\n for (var i in routes) {\n if (goodIndices.includes(i)) {\n allocationVecNew.push(allocationDict[i]);\n } else {\n let zeroAllocation = new Big(0);\n allocationVecNew.push(zeroAllocation);\n }\n }\n return allocationVecNew;\n}\n\nfunction getNodeRoutesFromPathsAndPoolChains(paths, poolChains) {\n let multiplicity = [];\n for (var i in poolChains) {\n let pc = poolChains[i];\n let mul = pc\n .map(item => item.length)\n .reduce((elem1, elem2) => elem1 * elem2, 1);\n multiplicity.push(mul);\n }\n let nodeRoutes = [];\n for (var j in paths) {\n let path = paths[j];\n let m = multiplicity[j];\n for (var k = 0; k < m; k++) {\n nodeRoutes.push(path);\n }\n }\n return nodeRoutes;\n}\n\nfunction getPoolChainFromPaths(paths, pools, threshold = 0.001) {\n let poolChains = [];\n for (var pathInd in paths) {\n let path = paths[pathInd];\n let chain = [];\n let pairs = [];\n for (var i = 0; i < path.length - 1; i++) {\n pairs.push([path[i], path[i + 1]]);\n }\n for (var pairInd in pairs) {\n let pair = pairs[pairInd];\n // console.log(pair);\n let tokenPools = getPoolsByToken1ANDToken2(pools, pair[0], pair[1]);\n chain.push(tokenPools);\n }\n poolChains.push(chain);\n }\n // return poolChains;\n let culledPoolChains = getCulledPoolChains(poolChains, threshold);\n\n return culledPoolChains;\n}\n\nfunction getCulledPoolChains(poolChains, threshold = 0.001) {\n let newChains = [];\n for (var pathInd in poolChains) {\n let path = poolChains[pathInd];\n let newPath = [];\n for (var legInd in path) {\n let leg = path[legInd];\n let culledPath = cullPoolsWithInsufficientLiquidity(leg, threshold);\n newPath.push(culledPath);\n }\n newChains.push(newPath);\n }\n return newChains;\n}\n\nfunction getRoutesFromPoolChain(poolChains) {\n let routes = [];\n for (var pci in poolChains) {\n let poolChain = poolChains[pci];\n //get cartesian product of each pool chain to get the list of routes.\n let newRoutes = cartesianProduct(poolChain);\n routes.push(...newRoutes);\n }\n for (var i in routes) {\n if (!routes[i].length) {\n routes[i] = [routes[i]];\n }\n }\n return routes;\n}\n\nfunction getOutputSingleHop(pool, inputToken, outputToken, totalInput) {\n var totalInput = new Big(totalInput);\n // check if pool is forward or backward for inputToken/outputToken cf. token1Id/token2Id\n if (inputToken === pool.token1Id && outputToken === pool.token2Id) {\n // forward Pool\n var reserves = {\n [inputToken]: new Big(pool.token1Supply),\n [outputToken]: new Big(pool.token2Supply),\n };\n } else if (inputToken === pool.token2Id && outputToken === pool.token1Id) {\n // reverse pool\n var reserves = {\n [outputToken]: new Big(pool.token1Supply),\n [inputToken]: new Big(pool.token2Supply),\n };\n } else {\n return new Big(0);\n }\n let gamma = new Big(10000).minus(new Big(pool.fee)).div(new Big(10000));\n // console.log(totalInput)\n // console.log(gamma)\n // console.log(reserves)\n let num = totalInput.times(gamma).times(reserves[outputToken]);\n let denom = reserves[inputToken].plus(gamma.times(totalInput));\n return num.div(denom);\n}\n\nfunction getOutputDoubleHop(\n pools,\n inputToken,\n middleToken,\n outputToken,\n totalInput\n) {\n var totalInput = new Big(totalInput);\n for (var poolIndex in pools) {\n let p = pools[poolIndex];\n p['gamma'] = new Big(10000).minus(new Big(p.fee)).div(new Big(10000));\n }\n let p1 = pools[0];\n let p2 = pools[1];\n\n if (inputToken === p1.token1Id && middleToken === p1.token2Id) {\n // forward Pool\n p1['reserves'] = {\n [inputToken]: new Big(p1.token1Supply),\n [middleToken]: new Big(p1.token2Supply),\n };\n } else if (middleToken === p1.token1Id && inputToken === p1.token2Id) {\n //reverse pool\n p1['reserves'] = {\n [middleToken]: new Big(p1.token1Supply),\n [inputToken]: new Big(p1.token2Supply),\n };\n }\n\n if (middleToken === p2.token1Id && outputToken === p2.token2Id) {\n // forward Pool\n p2['reserves'] = {\n [middleToken]: new Big(p2.token1Supply),\n [outputToken]: new Big(p2.token2Supply),\n };\n } else if (outputToken === p2.token1Id && middleToken === p2.token2Id) {\n //reverse pool\n p2['reserves'] = {\n [outputToken]: new Big(p2.token1Supply),\n [middleToken]: new Big(p2.token2Supply),\n };\n }\n\n let c1 = new Big(p1.reserves[middleToken]);\n let a1 = new Big(p1.reserves[inputToken]);\n let c2 = new Big(p2.reserves[middleToken]);\n let b2 = new Big(p2.reserves[outputToken]);\n let gamma1 = p1.gamma;\n let gamma2 = p2.gamma;\n let num = totalInput\n .times(c1)\n .times(b2)\n .times(gamma1)\n .times(gamma2);\n let denom = c2\n .times(a1)\n .plus(\n totalInput.times(c2.times(gamma1).plus(c1.times(gamma1).times(gamma2)))\n );\n // denom = c2*a1 + totalInput * (c2*gamma1 + c1*gamma1*gamma2)\n\n return num.div(denom);\n}\n\nfunction getOutputFromRoute(route, nodeRoute, allocation) {\n if (new Big(allocation).eq(new Big(0))) {\n return new Big(0);\n } else {\n var allocation = new Big(allocation);\n }\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n // single hop\n let inputToken = nodeRoute[0];\n let outputToken = nodeRoute[1];\n let pool = route[0];\n var output = getOutputSingleHop(pool, inputToken, outputToken, allocation);\n } else if (route.length == 2) {\n // DOUBLE HOP\n let inputToken = nodeRoute[0];\n let middleToken = nodeRoute[1];\n let outputToken = nodeRoute[2];\n let pools = route;\n var output = getOutputDoubleHop(\n pools,\n inputToken,\n middleToken,\n outputToken,\n allocation\n );\n }\n return output;\n}\n\nfunction getOptOutputVec(routes, nodeRoutes, totalInput) {\n let allocations = getOptimalAllocationForRoutes(\n routes,\n nodeRoutes,\n totalInput\n );\n let result = [];\n for (var i in routes) {\n let route = routes[i];\n let nodeRoute = nodeRoutes[i];\n let allocation = allocations[i];\n let output = getOutputFromRoute(route, nodeRoute, allocation);\n result.push(output);\n }\n return {\n result: result,\n allocations: allocations,\n };\n //NOTE -- I made this return an object instead of the tuple returned in python. need to check the places it is called, and specify\n // result field instead of tuple 0 position, and allocations field instead of tuple 1 position.\n}\n\nfunction getBestOptInputAndOutputSlower(routes, nodeRoutes, totalInput) {\n let refDict = getOptOutputVecRefined(routes, nodeRoutes, totalInput);\n let outputRefined = refDict.result;\n let inputRefined = refDict.allocations;\n inputRefined = checkIntegerSumOfAllocations(inputRefined, totalInput);\n let rawDict = getOptOutputVec(routes, nodeRoutes, totalInput);\n let outputRaw = rawDict.result;\n let inputRaw = rawDict.allocations;\n inputRaw = checkIntegerSumOfAllocations(inputRaw, totalInput);\n let res1 = new Big(0);\n let res2 = new Big(0);\n\n for (var n in outputRefined) {\n res1 = res1.plus(outputRefined[n]);\n }\n for (var nn in outputRaw) {\n res2 = res2.plus(outputRaw[nn]);\n }\n // console.log('COMPARING SINGLE HOPS VS DOUBLE')\n // console.log(res1.toString())\n // console.log(res2.toString())\n if (res1.gt(res2)) {\n return { input: inputRefined, output: res1 };\n } else {\n return { input: inputRaw, output: res2 };\n }\n}\n\nfunction getBestOptInputAndOutput(routes, nodeRoutes, totalInput) {\n // let refDict = getOptOutputVecRefined(routes, nodeRoutes, totalInput);\n // let outputRefined = refDict.result;\n // let inputRefined = refDict.allocations;\n // inputRefined = checkIntegerSumOfAllocations(inputRefined, totalInput);\n let rawDict = getOptOutputVec(routes, nodeRoutes, totalInput);\n let outputRaw = rawDict.result;\n let inputRaw = rawDict.allocations;\n inputRaw = checkIntegerSumOfAllocations(inputRaw, totalInput);\n let res1 = new Big(0);\n let res2 = new Big(0);\n\n let res = outputRaw\n .map(v => new Big(v))\n .reduce((bv1, bv2) => bv1.plus(bv2), new Big(0));\n\n return {\n input: inputRaw,\n output: res,\n };\n}\n\nfunction getBestOptOutput(routes, nodeRoutes, totalInput) {\n let outputRefined = getOptOutputVecRefined(routes, nodeRoutes, totalInput)\n .result;\n let outputRaw = getOptOutputVec(routes, nodeRoutes, totalInput).result;\n let res1 = new Big(0);\n let res2 = new Big(0);\n\n for (var n in outputRefined) {\n res1 = res1.plus(outputRefined[n]);\n }\n for (var nn in outputRaw) {\n res2 = res2.plus(outputRaw[nn]);\n }\n if (res1.gt(res2)) {\n return res1;\n } else {\n return res2;\n }\n}\n\nfunction getBestOptInput(routes, nodeRoutes, totalInput) {\n let refDict = getOptOutputVecRefined(routes, nodeRoutes, totalInput);\n let outputRefined = refDict.result;\n let inputRefined = refDict.allocations;\n inputRefined = checkIntegerSumOfAllocations(inputRefined, totalInput);\n let rawDict = getOptOutputVec(routes, nodeRoutes, totalInput);\n let outputRaw = rawDict.result;\n let inputRaw = rawDict.allocations;\n inputRaw = checkIntegerSumOfAllocations(inputRaw, totalInput);\n let res1 = new Big(0);\n let res2 = new Big(0);\n\n for (var n in outputRefined) {\n res1 = res1.plus(outputRefined[n]);\n }\n for (var nn in outputRaw) {\n res2 = res2.plus(outputRaw[nn]);\n }\n // console.log('COMPARING SINGLE HOPS VS DOUBLE')\n // console.log(res1.toString())\n // console.log(res2.toString())\n if (res1.gt(res2)) {\n return inputRefined;\n } else {\n return inputRaw;\n }\n}\n\nfunction getOptOutputVecRefined(routes, nodeRoutes, totalInput) {\n // need to calculate full result.\n // if direct pools exist, need to calculate parallel result. if not, this portion is set to zero output.\n\n // need to compare between outputs of the two results above.\n\n let initLengthRoutes = routes.length;\n let directRouteInds = [];\n for (var routeInd in routes) {\n let route = routes[routeInd];\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n directRouteInds.push(routeInd);\n }\n }\n // console.log('DIRECT ROUTE INDS ARE')\n // console.log(directRouteInds)\n // if (directRouteInds.length < 1) {\n var fullResultAllocations = getOptimalAllocationForRoutes(\n routes,\n nodeRoutes,\n totalInput\n );\n var fullResult = [];\n for (var i in routes) {\n let r = routes[i];\n let nr = nodeRoutes[i];\n let a = fullResultAllocations[i];\n let output = getOutputFromRoute(r, nr, a);\n fullResult.push(output);\n }\n var fullResultTotal = fullResult.reduce((a, b) => a.plus(b), new Big(0));\n\n // } else {\n if (directRouteInds.length > 0) {\n // console.log('DOING SINGLE HOP ONLY')\n let droutes = [];\n let dnodeRoutes = [];\n for (var dri in directRouteInds) {\n let ind = directRouteInds[dri];\n droutes.push(routes[ind]);\n dnodeRoutes.push(nodeRoutes[ind]);\n }\n let dallocations = getOptimalAllocationForRoutes(\n droutes,\n dnodeRoutes,\n totalInput\n );\n let dallocDict = {};\n for (var dd in dallocations) {\n dallocDict[directRouteInds[dd]] = dallocations[dd];\n }\n var pallocations = [];\n\n for (var ii = 0; ii < initLengthRoutes; ii++) {\n if (directRouteInds.includes(ii.toString())) {\n //console.log('ADDING ALLOCATION FOR SINGLE ROUTE')\n pallocations.push(dallocDict[ii]);\n } else {\n pallocations.push(new Big(0));\n }\n }\n var presult = [];\n for (var j in routes) {\n let route = routes[j];\n let nodeRoute = nodeRoutes[j];\n let allocation = pallocations[j];\n let output = getOutputFromRoute(route, nodeRoute, allocation);\n presult.push(output);\n }\n var presultTotal = presult.reduce((a, b) => a.plus(b), new Big(0));\n } else {\n var presultTotal = new Big(0);\n }\n if (presultTotal.gt(fullResultTotal)) {\n var result = presult;\n var allocations = pallocations;\n } else {\n var result = fullResult;\n var allocations = fullResultAllocations;\n }\n // NEED TO COMPARE BETWEEEN DIRECT AND MULTI HOP TO GET BEST OUTPUT\n return {\n result: result,\n allocations: allocations,\n };\n}\n\nasync function getBestOptimalAllocationsAndOutputs(\n pools,\n inputToken,\n outputToken,\n totalInput,\n maxPathLength = 3,\n threshold = 0.001\n) {\n var totalInput = new Big(totalInput);\n let paths = await getPathsFromPools(\n pools,\n inputToken,\n outputToken,\n maxPathLength\n );\n if (!paths.length) {\n return {\n allocations: [],\n outputs: new Big(0),\n routes: [],\n nodeRoutes: [],\n };\n }\n let poolChains = await getPoolChainFromPaths(paths, pools, threshold);\n\n let routes = await getRoutesFromPoolChain(poolChains);\n let nodeRoutes = await getNodeRoutesFromPathsAndPoolChains(paths, poolChains);\n // let allocations = await getBestOptInput(routes, nodeRoutes, totalInput);\n // // fix integer rounding for allocations:\n // allocations = checkIntegerSumOfAllocations(allocations, totalInput);\n // let outputs = getBestOptOutput(routes, nodeRoutes, totalInput);\n let inputOutput = await getBestOptInputAndOutput(\n routes,\n nodeRoutes,\n totalInput\n );\n let allocations = inputOutput.input;\n let outputs = inputOutput.output;\n\n return {\n allocations: allocations,\n outputs: outputs,\n routes: routes,\n nodeRoutes: nodeRoutes,\n };\n}\n\nfunction getHopsFromRoutes(routes, nodeRoutes, allocations) {\n let hops = [];\n for (var i in routes) {\n var route = routes[i];\n var nodeRoute = nodeRoutes[i];\n var allocation = allocations[i];\n if (!route.length) {\n route = [route];\n }\n if (!route[0]) {\n continue;\n }\n let hop = {\n pool: route[0],\n allocation: allocation,\n inputToken: nodeRoute[0],\n outputToken: nodeRoute[1],\n };\n hops.push(hop);\n }\n return hops;\n}\n\nfunction distillHopsByPool(hops) {\n // console.log('some HOPS =');\n // console.log(hops);\n let distilledHops = [];\n let poolIds = [];\n let poolId2allocation = {};\n for (var i in hops) {\n let hop = hops[i];\n if (hop.allocation === '0') {\n continue;\n }\n // console.log(`HOP ${i} IS...`);\n // console.log(hop);\n let poolId = hop.pool['id'];\n if (poolIds.includes(poolId)) {\n poolId2allocation[poolId] = new Big(poolId2allocation[poolId])\n .plus(new Big(hop.allocation))\n .toString();\n } else {\n poolId2allocation[poolId] = new Big(hop.allocation).toString();\n poolIds.push(poolId);\n }\n }\n // let poolsWithOrder = [...new Set(...hops.map((item) => item.pool))]\n let keys = Object.keys(poolId2allocation);\n for (var j in keys) {\n var poolId = keys[j];\n let hop = hops.filter(\n item => item.pool.id.toString() === poolId.toString()\n )[0];\n let distilledHop = {\n pool: hop.pool,\n allocation: poolId2allocation[poolId],\n inputToken: hop.inputToken,\n outputToken: hop.outputToken,\n };\n distilledHops.push(distilledHop);\n }\n return distilledHops;\n}\n\nfunction getDistilledHopActions(distilledHops, slippageTolerance) {\n let actions = [];\n for (var i in distilledHops) {\n let hop = distilledHops[i];\n let expectedAmountOut = getOutputSingleHop(\n hop.pool,\n hop.inputToken,\n hop.outputToken,\n hop.allocation\n );\n let minimumAmountOut = new Big(expectedAmountOut)\n .times(new Big(1).minus(new Big(slippageTolerance).div(100)))\n .round()\n .toString(); //Here, assume slippage tolerance is a percentage. So 1% would be 1.0\n let action = {\n pool_id: hop.pool.id,\n token_in: hop.inputToken,\n token_out: hop.outputToken,\n amount_in: hop.allocation,\n min_amount_out: minimumAmountOut,\n };\n actions.push(action);\n }\n return actions;\n}\nfunction getMiddleTokenTotalsFromFirstHopActions(firstHopActions) {\n let middleTokens = [...new Set(firstHopActions.map(item => item.token_out))];\n let middleTokenTotals = {};\n for (var i in middleTokens) {\n let middleToken = middleTokens[i];\n let mtActions = firstHopActions.filter(\n item => item.token_out === middleToken\n );\n let mtTotal = mtActions\n .map(item => new Big(item.min_amount_out))\n .reduce((a, b) => a.plus(b), new Big(0))\n .toString();\n middleTokenTotals[middleToken] = mtTotal;\n }\n return middleTokenTotals;\n}\nfunction getRoutesAndAllocationsForMiddleToken(\n routes,\n nodeRoutes,\n allocations,\n middleToken,\n middleTokenTotal\n) {\n // get routes that use middle token.\n // (input route alloction) /sum(input allocations of routes with middle token) * (total_middleToken)\n let mask = [];\n for (var i in nodeRoutes) {\n if (nodeRoutes[i][1] === middleToken) {\n mask.push(true);\n } else {\n mask.push(false);\n }\n }\n let froutes = [];\n let fallocations = [];\n let fnoderoutes = [];\n for (var i in routes) {\n if (mask[i]) {\n froutes.push(routes[i]);\n fallocations.push(allocations[i]);\n fnoderoutes.push(nodeRoutes[i]);\n }\n }\n let sumfallocations = fallocations.reduce(\n (a, b) => new Big(a).plus(new Big(b)),\n new Big(0)\n );\n let middleAllocations = fallocations.map(item =>\n new Big(item).div(sumfallocations).times(new Big(middleTokenTotal))\n );\n let secondHopRoutes = froutes.map(item => [item[1]]);\n let secondHopNodeRoutes = fnoderoutes.map(item => [item[1], item[2]]);\n middleAllocations = checkIntegerSumOfAllocations(\n middleAllocations,\n middleTokenTotal\n );\n return {\n routes: secondHopRoutes,\n nodeRoutes: secondHopNodeRoutes,\n allocations: middleAllocations,\n };\n}\n\nfunction getHopActionsFromRoutes(routes, nodeRoutes, allocations) {\n // console.log('INSIDE GET HOP ACTIONS FROM ROUTES');\n // console.log('ROUTES ARE...');\n // console.log(routes);\n // console.log('NODE ROUTES ARE...');\n // console.log(nodeRoutes);\n // console.log('ALLOCATIONS ARE...');\n // console.log(allocations);\n let totalInput = allocations\n .map(a => new Big(a))\n .reduce((a, b) => a.plus(b), new Big(0))\n .toString();\n let hops = [];\n for (var i in routes) {\n var route = routes[i];\n var nodeRoute = nodeRoutes[i];\n var allocation = allocations[i];\n if (new Big(allocation).eq(new Big(0))) {\n continue;\n }\n if (!route.length) {\n route = [route];\n }\n if (!route[0]) {\n continue;\n }\n for (var j in route) {\n let pool = route[j];\n // console.log('J IS...');\n // console.log(j);\n // console.log('NODE ROUTE IS...');\n // console.log(nodeRoute);\n if (j == 0) {\n //first hop.\n // console.log(nodeRoute[0]);\n // console.log(nodeRoute[1]);\n var hop = {\n pool: pool,\n allocation: allocation.toString(),\n inputToken: nodeRoute[0],\n outputToken: nodeRoute[1],\n nodeRoute: nodeRoute,\n route: route,\n allRoutes: routes,\n allNodeRoutes: nodeRoutes,\n totalInputAmount: totalInput,\n allAllocations: allocations,\n };\n // console.log('FIRST HOP IS...');\n // console.log(hop);\n hops.push(hop);\n if (nodeRoute.length > 2) {\n var middleTokenAllocation = getOutputSingleHop(\n pool,\n nodeRoute[0],\n nodeRoute[1],\n allocation\n );\n }\n } else {\n // second hop\n var hop = {\n pool: pool,\n allocation: middleTokenAllocation.toString(),\n inputToken: nodeRoute[1],\n outputToken: nodeRoute[2],\n nodeRoute: nodeRoute,\n route: route,\n allRoutes: routes,\n allNodeRoutes: nodeRoutes,\n totalInputAmount: totalInput,\n allAllocations: allocations,\n };\n // console.log('SECOND HOP IS...');\n // console.log(hop);\n hops.push(hop);\n }\n }\n }\n // console.log('HOP ACTIONS FOUND TO BE');\n // console.log(hops);\n return hops;\n}\n\n// TODO: Clean this function. I don't need all the \"actions\" just the hops.\n// TODO: re-order actions to ensure each route is complete with zero input for second hop before starting next route.\nfunction getActionListFromRoutesAndAllocations(\n routes,\n nodeRoutes,\n allocations\n) {\n // REPLACE THE CODE BELOW WITH THE FUNCTION HERE.\n return getHopActionsFromRoutes(routes, nodeRoutes, allocations);\n var actions = [];\n var all_hops = [];\n let firstHops = getHopsFromRoutes(routes, nodeRoutes, allocations);\n\n firstHops = firstHops.filter(hop => new Big(hop.allocation).gt(new Big(0)));\n all_hops.push(...firstHops);\n let distilledFirstHops = distillHopsByPool(firstHops);\n let firstHopActions = getDistilledHopActions(\n distilledFirstHops,\n slippageTolerance\n );\n actions.push(...firstHopActions);\n let middleTokenTotals = getMiddleTokenTotalsFromFirstHopActions(\n firstHopActions\n );\n // console.log('first hop actions are...');\n // console.log(firstHopActions);\n let middleTokens = Object.keys(middleTokenTotals);\n // console.log('middle token totals are...');\n // console.log(middleTokenTotals);\n // console.log('middle tokens are...');\n // console.log(middleTokens);\n for (var tokenIndex in middleTokens) {\n var secondHops = [];\n let middleToken = middleTokens[tokenIndex];\n // console.log('current middle token is ');\n // console.log(middleToken);\n let middleTokenTotal = middleTokenTotals[middleToken];\n // console.log('current middle token total is...');\n // console.log(middleTokenTotal);\n let middleTokenRoutesWithAllocations = getRoutesAndAllocationsForMiddleToken(\n routes,\n nodeRoutes,\n allocations,\n middleToken,\n middleTokenTotal\n );\n // console.log('current middle tokens routes with allocations are...');\n // console.log(middleTokenRoutesWithAllocations);\n let middleTokenRoutes = middleTokenRoutesWithAllocations.routes;\n let middleTokenAllocations = middleTokenRoutesWithAllocations.allocations;\n let middleTokenNodeRoutes = middleTokenRoutesWithAllocations.nodeRoutes;\n // console.log('middle token routes are...');\n // console.log(middleTokenRoutes);\n // console.log('middle token allocations are...');\n // console.log(middleTokenAllocations);\n // console.log('middle token node routes are...');\n // console.log(middleTokenNodeRoutes);\n secondHops.push(\n ...getHopsFromRoutes(\n middleTokenRoutes,\n middleTokenNodeRoutes,\n middleTokenAllocations\n )\n );\n // console.log('CURRENT SECOND HOPS', secondHops);\n // console.log(secondHops.length);\n // console.log(secondHops.map((hop) => hop.allocation));\n // console.log('filter out zero allocation 2nd hops:');\n secondHops = secondHops.filter(hop =>\n new Big(hop.allocation).gt(new Big(0))\n );\n // console.log(secondHops);\n all_hops.push(...secondHops);\n // console.log('second hops are currently...');\n // console.log(secondHops);\n let distilledSecondHopsForToken = distillHopsByPool(secondHops);\n // console.log('distilled second hops are...');\n let secondHopActionsForToken = getDistilledHopActions(\n distilledSecondHopsForToken,\n slippageTolerance\n );\n // console.log(secondHopActionsForToken);\n actions.push(...secondHopActionsForToken);\n }\n\n //TODO: NEED TO RUN INTEGER ROUNDING FUNCTION ON MIDDLE TOKEN ALLOCATIONS\n\n // TODO: check the node routes. for double-hop cases, find the hop action for each hop.\n // For now, we are assuming no parallel swaps if there is a double-hop.\n\n // Possible cases:\n // (1) 1 single-hop.\n // (2) Parallel single-hop ?\n // (3) 1 double-hop\n // (4) 2 double-hops\n\n // We only have to worry about re-ordering the actions for cases (3) and (4).\n\n let orderedHops = orderHops(all_hops, routes, nodeRoutes, allocations);\n\n // console.log('ALL HOPS', all_hops);\n return orderedHops;\n // return actions;\n}\n\nfunction orderHops(hops, routes, nodeRoutes, allocations) {\n // first get rid of zero allocation routes\n // console.log('NODE ROUTES ARE...');\n // console.log(nodeRoutes);\n let filteredRoutes = [];\n let filteredNodeRoutes = [];\n let filteredAllocations = [];\n for (var i in routes) {\n // remove zero-allocation routes.\n let allocation = new Big(allocations[i]);\n if (allocation.gt(new Big(0))) {\n filteredAllocations.push(allocation);\n filteredRoutes.push(routes[i]);\n filteredNodeRoutes.push(nodeRoutes[i]);\n }\n // console.log('FILTERED NODE ROUTES ARE...');\n // console.log(filteredNodeRoutes);\n }\n // next check node routes to see if it is case 1, 2, 3, or 4.\n // Possible cases:\n // (1) 1 single-hop.\n // (2) Parallel single-hop ?\n // (3) 1 double-hop\n // (4) 2 double-hops\n\n if (filteredNodeRoutes.length === 1) {\n // only one route.\n let currentNodeRoute = filteredNodeRoutes[0];\n if (currentNodeRoute.length === 2) {\n // case 1.\n return hops;\n } else {\n // case 3. assume there are only 3 nodes (double-hop)\n //make sure order of hops is such that input token precedes output token.\n //make sure the amount_in for second hop is zero (which will grab all of output of first hop to use.)\n let firstHop = hops.filter(\n hop => hop.inputToken === currentNodeRoute[0]\n )[0];\n let secondHop = hops.filter(\n hop => hop.inputToken === currentNodeRoute[1]\n )[0];\n // set second hop amount in to 0 so that it will use whatever was generated by hop 1.\n secondHop.pool.partialAmountIn = '0';\n\n let orderedHops = [firstHop, secondHop];\n return orderedHops;\n }\n } else if (filteredNodeRoutes.length === 2) {\n // two routes.\n let lengthNodeRoutes = filteredNodeRoutes.map(nr => nr.length);\n // sub cases:\n // [2,2] -- parallel swap. (direct) -- case 2\n // [2,3] -- direct swap in parallel with double hop.\n // [3,2] -- double hop in parallel with direct swap.\n // [3,3] -- double hop in parallel with double hop. -- case 4\n let orderedHops = [];\n if (arrayEquals(lengthNodeRoutes, [2, 2])) {\n return hops;\n } else if (arrayEquals(lengthNodeRoutes, [2, 3])) {\n directNodeRoute = filteredNodeRoutes[0];\n doubleNodeRoute = filteredNodeRoutes[1];\n let firstHop = hops.filter(\n hop =>\n hop.inputToken === directNodeRoute[0] &&\n hop.outputToken === directNodeRoute[1]\n )[0];\n let secondHop = hops.filter(\n hop => hop.inputToken === doubleNodeRoute[0]\n )[0];\n let thirdHop = hops.filter(\n hop => hop.outputToken === doubleNodeRoute[2]\n )[0];\n // set third hop amount in to 0 so that it will use whatever was generated by hop 2.\n thirdHop.pool.partialAmountIn = '0';\n orderedHops = [firstHop, secondHop, thirdHop];\n return orderedHops;\n } else if (arrayEquals(lengthNodeRoutes, [3, 2])) {\n directNodeRoute = filteredNodeRoutes[1];\n doubleNodeRoute = filteredNodeRoutes[0];\n let firstHop = hops.filter(\n hop =>\n hop.inputToken === directNodeRoute[0] &&\n hop.outputToken === directNodeRoute[1]\n )[0];\n let secondHop = hops.filter(\n hop => hop.inputToken === doubleNodeRoute[0]\n )[0];\n let thirdHop = hops.filter(\n hop => hop.outputToken === doubleNodeRoute[2]\n )[0];\n // set third hop amount in to 0 so that it will use whatever was generated by hop 2.\n thirdHop.pool.partialAmountIn = '0';\n orderedHops = [firstHop, secondHop, thirdHop];\n return orderedHops;\n } else if (arrayEquals(lengthNodeRoutes, [3, 3])) {\n orderedHops = [];\n\n for (var i in filteredNodeRoutes) {\n let doubleNodeRoute = filteredNodeRoutes[i];\n let doubleHopMiddleToken = doubleNodeRoute[1];\n let firstHop = hops.filter(\n hop =>\n hop.inputToken === doubleNodeRoute[0] &&\n hop.outputToken === doubleHopMiddleToken\n )[0];\n let secondHop = hops.filter(\n hop =>\n hop.inputToken === doubleHopMiddleToken &&\n hop.outputToken === doubleNodeRoute[2]\n )[0];\n // set second hop amount in to 0 so that it will use whatever was generated by hop 1.\n secondHop.pool.partialAmountIn = '0';\n orderedHops.push(firstHop);\n orderedHops.push(secondHop);\n }\n return orderedHops;\n } else {\n return hops;\n }\n for (var i in filteredNodeRoutes) {\n let currentNodeRoute = filteredNodeRoutes[i];\n if (currentNodeRoute.length === 2) {\n }\n }\n }\n\n return hops;\n}\n\n// function getActionListFromRoutesAndAllocationsORIG(\n// routes,\n// nodeRoutes,\n// allocations,\n// slippageTolerance\n// ) {\n// let actions = [];\n// for (var i in routes) {\n// let route = routes[i];\n// let nodeRoute = nodeRoutes[i];\n// let allocation = new Big(allocations[i]);\n// if (allocation.eq(new Big(0))) {\n// continue;\n// }\n// if (!route.length) {\n// route = [route];\n// }\n// if (route.length === 1) {\n// //single hop. only one action.\n// let pool = route[0];\n// let poolId = pool.id;\n// let inputToken = nodeRoute[0];\n// let outputToken = nodeRoute[1];\n// let expectedAmountOut = getOutputSingleHop(\n// pool,\n// inputToken,\n// outputToken,\n// allocation\n// );\n// let minimumAmountOut = expectedAmountOut\n// .times(new Big(1).minus(new Big(slippageTolerance).div(100)))\n// .round()\n// .toString(); //Here, assume slippage tolerance is a percentage. So 1% would be 1.0\n// let action = {\n// pool_id: poolId,\n// token_in: inputToken,\n// token_out: outputToken,\n// amount_in: allocation.round().toString(),\n// min_amount_out: minimumAmountOut.toString(),\n// };\n// actions.push(action);\n// } else if (route.length === 2) {\n// // double hop. two actions.\n// let pool1 = route[0];\n// let pool2 = route[1];\n// let pool1Id = pool1.id;\n// let pool2Id = pool2.id;\n// let inputToken = nodeRoute[0];\n// let middleToken = nodeRoute[1];\n// let outputToken = nodeRoute[2];\n// let expectedAmountOutFirstHop = getOutputSingleHop(\n// pool1,\n// inputToken,\n// middleToken,\n// allocation\n// );\n// let minimumAmountOutFirstHop = expectedAmountOutFirstHop\n// .times(new Big(1).minus(new Big(slippageTolerance).div(100)))\n// .round()\n// .toString(); //Here, assume slippage tolerance is a percentage. So 1% would be 1.0\n\n// let action1 = {\n// pool_id: pool1Id,\n// token_in: inputToken,\n// token_out: middleToken,\n// amount_in: allocation.round().toString(),\n// min_amount_out: minimumAmountOutFirstHop,\n// };\n// let expectedFinalAmountOut = getOutputSingleHop(\n// pool2,\n// middleToken,\n// outputToken,\n// minimumAmountOutFirstHop\n// );\n// let minimumAMountOutSecondHop = expectedFinalAmountOut\n// .times(new Big(1).minus(new Big(slippageTolerance).div(100)))\n// .round()\n// .toString();\n// let action2 = {\n// pool_id: pool2Id,\n// token_in: middleToken,\n// token_out: outputToken,\n// amount_in: minimumAmountOutFirstHop,\n// min_amount_out: minimumAMountOutSecondHop,\n// };\n// actions.push(action1);\n// actions.push(action2);\n// }\n// }\n// return actions;\n// }\n\nfunction* range(start, end) {\n for (; start <= end; ++start) {\n yield start;\n }\n}\n\nfunction last(arr) {\n return arr[arr.length - 1];\n}\n\nfunction* numericCombinations(n, r, loc = []) {\n var idx = loc.length;\n if (idx === r) {\n yield loc;\n return;\n }\n for (let next of range(idx ? last(loc) + 1 : 0, n - r + idx)) {\n yield* numericCombinations(n, r, loc.concat(next));\n }\n}\n\nfunction* combinations(arr, r) {\n for (let idxs of numericCombinations(arr.length, r)) {\n yield idxs.map(i => arr[i]);\n }\n}\n\n// #middleTokenTotals = getMiddleTokenTotals(routes,nodeRoutes,allocations)\n// #TODO: complete this function with middle token checks.\n\n// #consider all routes of length 2 with non-zero allocation. (double-hops)\n// # among these, check for parallel swaps. That is, check for common node routes\n// # for first hop. Then check for common node routes on second hop.\n// # when common node routes occur for the first hop:\n// # 1. Calculate the total expected output of intermediate token.\n// # 2.\n// # when common node routes occur for the second hop:\n// # 1. get a ratio of the input allocations of the full routes associated with\n// # these common node routes. allocate the total intermediate token output\n// # toward these 2nd hop routes in the same ratio as their route input allocations.\n\nexport async function getSmartRouteSwapActions(\n pools,\n inputToken,\n outputToken,\n totalInput,\n allTokens,\n maxPathLength = 3,\n threshold = 0.001,\n numberOfRoutesLimit = 2,\n MAX_NUMBER_PARALLEL_POOLS = 4,\n decimalsCulledPoolIds = []\n) {\n if (!totalInput) {\n return [];\n }\n var totalInput = new Big(totalInput);\n\n // remove pools that have an id from the decimalCulledPoolIds\n pools = pools.filter(p => !decimalsCulledPoolIds.includes(p.id));\n\n let resDict = await getBestOptimalAllocationsAndOutputs(\n pools,\n inputToken,\n outputToken,\n totalInput,\n maxPathLength,\n threshold\n );\n\n let allocations = resDict.allocations;\n\n // let outputs = resDict.outputs;\n let routes = resDict.routes;\n let nodeRoutes = resDict.nodeRoutes;\n\n let sortedIndexValues = argsort(allocations);\n let topIndices = sortedIndexValues.slice(0, 10);\n var reducedRoutes = [];\n var reducedNodeRoutes = [];\n for (var ind of topIndices) {\n reducedRoutes.push(routes[ind]);\n reducedNodeRoutes.push(nodeRoutes[ind]);\n }\n routes = reducedRoutes;\n nodeRoutes = reducedNodeRoutes;\n\n // TODO: compare pairs of routes to get the best allocation pair-wise.\n var currentBestOutput = new Big(0);\n var bestResDict = { routes: [] };\n var bestAllocations = resDict.allocations;\n var bestNodeRoutes = resDict.nodeRoutes;\n var bestRoutes = resDict.routes;\n // first check parallel swap with 4 actions. store result.\n var parallelNodeRoutes = [];\n var parallelRoutes = [];\n for (var n in bestRoutes) {\n let currentNodeRoute = bestNodeRoutes[n];\n if (currentNodeRoute.length == 2) {\n parallelNodeRoutes.push(currentNodeRoute);\n parallelRoutes.push(bestRoutes[n]);\n }\n }\n // console.log(`${parallelNodeRoutes.length} parallel routes found...`);\n var bestRoutesAreParallel = false;\n if (parallelNodeRoutes.length > 0) {\n // first calculate the expected result using only parallel routes.\n // let filteredAllocationsAndOutputs = getOptOutputVecRefined(parallelRoutes, parallelNodeRoutes, totalInput);\n let filteredAllocationsAndOutputs = getOptOutputVec(\n parallelRoutes,\n parallelNodeRoutes,\n totalInput\n );\n let parallellAllocations = filteredAllocationsAndOutputs.allocations;\n let parallelOutputs = filteredAllocationsAndOutputs.result;\n\n if (parallellAllocations.length > MAX_NUMBER_PARALLEL_POOLS) {\n // now sort by allocation value to the top 4 parallel swaps:\n let sortIndices = argsort(parallellAllocations);\n\n sortIndices = sortIndices.slice(0, MAX_NUMBER_PARALLEL_POOLS);\n var filteredParallelRoutes = [];\n var filteredParallelNodeRoutes = [];\n for (var i in sortIndices) {\n filteredParallelRoutes.push(parallelRoutes[sortIndices[i]]);\n filteredParallelNodeRoutes.push(parallelNodeRoutes[sortIndices[i]]);\n }\n filteredAllocationsAndOutputs = getOptOutputVec(\n filteredParallelRoutes,\n filteredParallelNodeRoutes,\n totalInput\n );\n parallellAllocations = filteredAllocationsAndOutputs.allocations;\n parallelOutputs = filteredAllocationsAndOutputs.result;\n }\n\n let parallelOutput = parallelOutputs.reduce(\n (a, b) => a.plus(b),\n new Big(0)\n );\n if (new Big(parallelOutput).gt(currentBestOutput)) {\n bestAllocations = parallellAllocations;\n currentBestOutput = parallelOutput;\n // console.log(\n // 'BEST OUTPUT FROM PARALLEL SWAPS IS NOW... ',\n // currentBestOutput.toString()\n // );\n bestRoutes = parallelRoutes;\n bestNodeRoutes = parallelNodeRoutes;\n bestRoutesAreParallel = true;\n }\n }\n var canHaveTwoRoutes = false;\n // initialize this variable to check if we can have two routes, or if all routes share a pool for an edge case.\n // console.log('THE NUMBER OF ROUTES IS...', routes.length);\n\n for (var i in routes) {\n for (var j in routes) {\n if (j > i) {\n var route1 = routes[i];\n var route2 = routes[j];\n var nodeRoute1 = nodeRoutes[i];\n var nodeRoute2 = nodeRoutes[j];\n // check if they share a pool.\n let route1PoolIds = new Set(route1.map(r => r.id));\n let route2PoolIds = new Set(route2.map(r => r.id));\n var sharePool = false;\n for (var route1PoolId of route1PoolIds) {\n if (route2PoolIds.has(route1PoolId)) {\n sharePool = true;\n }\n }\n if (sharePool) {\n // routes are not independent. skip this pair.\n // console.log('skipping this pair because pool was shared.');\n continue;\n } else {\n canHaveTwoRoutes = true;\n let currentRoutes = [route1, route2];\n let currentNodeRoutes = [nodeRoute1, nodeRoute2];\n\n let filteredAllocationsAndOutputs = getOptOutputVec(\n currentRoutes,\n currentNodeRoutes,\n totalInput\n );\n\n let filteredAllocations = filteredAllocationsAndOutputs.allocations;\n let filteredOutputs = filteredAllocationsAndOutputs.result;\n // console.log('FILTERED ALLOCATIONS:');\n // console.log(filteredAllocations.map((i) => i.toString()));\n // console.log(filteredOutputs);\n let totalOutput = filteredOutputs.reduce(\n (a, b) => a.plus(b),\n new Big(0)\n );\n if (new Big(totalOutput).gt(currentBestOutput)) {\n bestAllocations = filteredAllocations;\n currentBestOutput = totalOutput;\n // console.log('BEST OUTPUT IS NOW... ', currentBestOutput.toString());\n bestRoutes = currentRoutes;\n bestNodeRoutes = currentNodeRoutes;\n bestRoutesAreParallel = false;\n // bestResDict = currentResDict\n }\n\n // if (currentResDict.outputs.gt(currentBestOutput)) {\n // console.log('DIFF IS...', currentResDict.outputs.minus(currentBestOutput).toString());\n // bestResDict = currentResDict;\n // currentBestOutput = bestResDict.outputs;\n // console.log('BEST OUTPUT IS NOW... ', currentBestOutput.toString());\n // console.log(bestResDict.routes);\n // console.log(bestResDict.allocations.map((i) => i.toString()));\n // console.log(bestResDict.outputs.toString());\n }\n }\n }\n }\n\n if (!canHaveTwoRoutes) {\n // now we need to check through the routes in single manner to find the best one:\n for (var i in routes) {\n let currentRoutes = [routes[i]];\n let currentNodeRoutes = [nodeRoutes[i]];\n // let filteredAllocationsAndOutputs = getOptOutputVecRefined(currentRoutes, currentNodeRoutes, totalInput);\n let filteredAllocationsAndOutputs = getOptOutputVec(\n currentRoutes,\n currentNodeRoutes,\n totalInput\n );\n\n let filteredAllocations = filteredAllocationsAndOutputs.allocations;\n let filteredOutputs = filteredAllocationsAndOutputs.result;\n // console.log('FILTERED ALLOCATIONS:');\n // console.log(filteredAllocations.map((i) => i.toString()));\n // console.log(filteredOutputs);\n let totalOutput = filteredOutputs.reduce((a, b) => a.plus(b), new Big(0));\n if (new Big(totalOutput).gt(currentBestOutput)) {\n bestAllocations = filteredAllocations;\n currentBestOutput = totalOutput;\n // console.log('BEST OUTPUT IS NOW... ', currentBestOutput.toString());\n bestRoutes = currentRoutes;\n bestNodeRoutes = currentNodeRoutes;\n bestRoutesAreParallel = false;\n // bestResDict = currentResDict\n }\n }\n }\n\n // resDict = bestResDict;\n\n allocations = bestAllocations;\n\n // let outputs = resDict.outputs;\n routes = bestRoutes;\n nodeRoutes = bestNodeRoutes;\n\n if (routes.length < 1) {\n return [];\n }\n\n // check the top numberOfRoutesLimit\n // console.log('initial allocations are...');\n // console.log(allocations.map((a) => a.toString()));\n // console.log('fixed allocations are...');\n // console.log(allocations.map((a) => new Big(a).toFixed()));\n //SORT BY ALLOCATIONS\n let allSortedIndices = argsort(allocations.map(a => new Big(a)));\n if (bestRoutesAreParallel) {\n numberOfRoutesLimit = 4;\n }\n let sortedIndices = allSortedIndices.slice(0, numberOfRoutesLimit);\n\n // console.log('sorted Indices are');\n // console.log(sortedIndices);\n var filteredRoutes = [];\n var filteredNodeRoutes = [];\n for (var i in sortedIndices) {\n let index = sortedIndices[i];\n filteredRoutes.push(routes[index]);\n filteredNodeRoutes.push(nodeRoutes[index]);\n }\n\n // console.log('filteredRoutes are ...');\n // console.log(filteredRoutes);\n for (var i in filteredRoutes) {\n if (!filteredRoutes[i].length) {\n filteredRoutes[i] = [filteredRoutes[i]];\n }\n }\n // console.log('filtered Node routes are...');\n // console.log(filteredNodeRoutes);\n\n // THE BELOW CODE WILL ENSURE THAT ROUTES ARE INDEPENDENT (e.g. THE ROUTES WILL NOT SHARE A POOL)\n\n let route1PoolIds = filteredRoutes[0].map(pool => pool.id);\n // console.log('route 1 pool ids:');\n // console.log(route1PoolIds);\n if (filteredRoutes.length > 1) {\n let route2PoolIds = filteredRoutes[1].map(pool => pool.id);\n // console.log('route 2 pool ids:');\n // console.log(route2PoolIds);\n var sharedRoute = false;\n for (var i in route2PoolIds) {\n if (route1PoolIds.includes(route2PoolIds[i])) {\n // a pool was shared between routes. need to calculate a new second route.\n // console.log(\n // 'a pool was shared between routes. going to calculate a new second route'\n // );\n sharedRoute = true;\n break;\n }\n }\n }\n\n // NOTE -- this is a much simpler solution than that below. Instead of choosing the next best second route that doesn't share a\n // pool with the first route, we could just use the first route and allocate all inputs to it.\n // but, for larger transactions, it would be better to have option of two independent routes to spread out slippage.\n\n // if (sharedRoute) {\n // filteredRoutes = [filteredRoutes[0]];\n // filteredNodeRoutes = [filteredNodeRoutes[0]];\n // // TODO -- later can add in a second route that doesn't share a pool with first.\n // }\n\n // We're going to find the next-highest allocation route that doesn't share a pool with the first route.\n if (sharedRoute) {\n let allFilteredRoutes = [];\n let allFilteredNodeRoutes = [];\n for (var i in allSortedIndices) {\n allFilteredRoutes.push(routes[allSortedIndices[i]]);\n allFilteredNodeRoutes.push(nodeRoutes[allSortedIndices[i]]);\n }\n let firstRoute = allFilteredRoutes[0];\n // console.log('first route is...');\n // console.log(firstRoute);\n let firstRoutePoolIds = firstRoute.map(pool => pool.id);\n for (var i in allFilteredRoutes) {\n if (!allFilteredRoutes[i].length) {\n allFilteredRoutes[i] = [allFilteredRoutes[i]];\n }\n }\n // console.log('FIRST ROUTE POOL IDS ARE');\n // console.log(firstRoutePoolIds);\n let allFilteredRouteIds = allFilteredRoutes.map(route =>\n route.map(pool => pool.id)\n );\n // console.log('allFilteredRouteIds are ...');\n // console.log(allFilteredRouteIds);\n for (var i in allFilteredRouteIds) {\n // console.log('i is', i);\n // console.log('ALL FILTERED ROUTES [i] IS...');\n // console.log(allFilteredRouteIds[i]);\n for (var j in allFilteredRouteIds[i]) {\n // console.log('j is', j);\n // console.log('ALL FILTERED ROUTES [i][j] IS...');\n // console.log(allFilteredRouteIds[i][j]);\n if (firstRoutePoolIds.includes(allFilteredRouteIds[i][j])) {\n break;\n }\n\n var secondRoute = allFilteredRoutes[i];\n if (!secondRoute.length) {\n secondRoute = [secondRoute];\n }\n filteredRoutes = [allFilteredRoutes[0], secondRoute];\n filteredNodeRoutes = [\n allFilteredNodeRoutes[0],\n allFilteredNodeRoutes[i],\n ];\n break;\n }\n }\n // console.log('new filteredRoutes are ...');\n // console.log(filteredRoutes);\n // console.log('new filtered Node routes are...');\n // console.log(filteredNodeRoutes);\n }\n\n // let filteredAllocations_check = getBestOptInput(\n // filteredRoutes,\n // filteredNodeRoutes,\n // totalInput\n // );\n // let filteredAllocationsAndOutputs = getOptOutputVecRefined(filteredRoutes, filteredNodeRoutes, totalInput);\n let filteredAllocationsAndOutputs = getOptOutputVec(\n filteredRoutes,\n filteredNodeRoutes,\n totalInput\n );\n\n let filteredAllocations = filteredAllocationsAndOutputs.allocations;\n let filteredOutputs = filteredAllocationsAndOutputs.result;\n\n filteredAllocations = checkIntegerSumOfAllocations(\n filteredAllocations,\n totalInput\n ).map(stringAllo => new Big(stringAllo));\n\n let hops = getActionListFromRoutesAndAllocations(\n filteredRoutes,\n filteredNodeRoutes,\n filteredAllocations\n );\n\n var actions = [];\n // console.log('hops are...');\n // console.log(hops);\n\n for (var i in hops) {\n let hopInputTokenMeta = allTokens[hops[i].inputToken]\n ? allTokens[hops[i].inputToken]\n : await ftGetTokenMetadata(hops[i].inputToken, 'token input');\n\n let hopOutputTokenMeta = allTokens[hops[i].outputToken]\n ? allTokens[hops[i].outputToken]\n : await ftGetTokenMetadata(hops[i].outputToken, 'token sm');\n let hopOutputTokenDecimals = hopOutputTokenMeta.decimals;\n\n let expectedHopOutput = getOutputSingleHop(\n hops[i].pool,\n hops[i].inputToken,\n hops[i].outputToken,\n hops[i].allocation\n );\n let decimalEstimate = new Big(expectedHopOutput)\n .div(new Big(10).pow(hopOutputTokenDecimals))\n .toString();\n\n // Need to check if expected Hop Output is > 1. If not, then cull the corresponding pool and re-calculate.\n if (new Big(expectedHopOutput).lt(new Big(1))) {\n // purge the pool and recalculate.\n\n decimalsCulledPoolIds.push(hops[i].pool.id);\n return getSmartRouteSwapActions(\n pools,\n inputToken,\n outputToken,\n totalInput,\n allTokens,\n (maxPathLength = maxPathLength),\n (threshold = threshold),\n (numberOfRoutesLimit = numberOfRoutesLimit),\n (MAX_NUMBER_PARALLEL_POOLS = MAX_NUMBER_PARALLEL_POOLS),\n (decimalsCulledPoolIds = decimalsCulledPoolIds)\n );\n }\n\n if (\n hops[i].inputToken == inputToken &&\n hops[i].outputToken == outputToken\n ) {\n var status = 'parallel swap';\n } else {\n var status = 'stableSmart';\n }\n\n let tokens = await Promise.all(\n hops[i].nodeRoute.map(async t =>\n allTokens[t] ? allTokens[t] : await ftGetTokenMetadata(t, 'smart')\n )\n );\n\n actions[i] = {\n estimate: decimalEstimate,\n pool: {\n fee: hops[i].pool.fee,\n gamma_bps: new Big(10000).minus(new Big(hops[i].pool.fee)), //.div(new Big(10000)), //hops[i].pool.gamma, //new Big(10000).minus(new Big(hops[i].pool.fee)).div(new Big(10000));\n id: hops[i].pool.id,\n partialAmountIn: new Big(hops[i].allocation).round().toString(),\n supplies: {\n [hops[i].pool.token1Id]: hops[i].pool.token1Supply,\n [hops[i].pool.token2Id]: hops[i].pool.token2Supply,\n },\n token0_ref_price: hops[i].pool.token0_price,\n tokenIds: [hops[i].pool.token1Id, hops[i].pool.token2Id],\n Dex: hops[i].pool.Dex,\n },\n status: status,\n token: hopInputTokenMeta,\n outputToken: hops[i].outputToken,\n inputToken: hops[i].inputToken,\n nodeRoute: hops[i].nodeRoute,\n route: hops[i].route,\n allRoutes: hops[i].allRoutes,\n allNodeRoutes: hops[i].allNodeRoutes,\n totalInputAmount: hops[i].totalInputAmount,\n allAllocations: hops[i].allAllocations,\n tokens: tokens,\n routeInputToken: inputToken,\n routeOutputToken: outputToken,\n overallPriceImpact: '0',\n };\n // console.log('INPUT TOKEN IS...');\n // console.log(hops[i].inputToken);\n actions[i].pool.x = actions[i].pool.supplies[hops[i].inputToken];\n actions[i].pool.y = actions[i].pool.supplies[hops[i].outputToken];\n }\n // now set partial amount in for second hops equal to zero:\n // also, set the total price impact value.\n let overallPriceImpact = await calculateSmartRouteV2PriceImpact(\n actions,\n allTokens\n );\n for (var i in actions) {\n let action = actions[i];\n action.overallPriceImpact = overallPriceImpact;\n if (action.outputToken === outputToken && action.inputToken != inputToken) {\n // only want to set second hop partial amount in to zero\n action.pool.partialAmountIn = '0';\n }\n }\n\n return actions;\n}\n\nasync function calculateSmartRouteV2PriceImpact(actions, allTokens) {\n // the goal is to take a weighted average of the price impact per route, treating each one at a time.\n // for single hop (parallel swaps), the price impact is calculated as before.\n // for double-hop, the market price, P, is determined using reserves of tokens in each pool in the route.\n // in both cases, we compare the 'market price', P , determined solely by reserves in pools, and the actual\n // average price, R, expected to be paid in the transaction.\n // the price impact is then defined as (P-R)/R * 100 and is a percentage number, returned as a string.\n\n let deltaY = actions\n .filter(a => a.outputToken == a.routeOutputToken)\n .map(a => new Big(a.estimate))\n .reduce((a, b) => a.plus(b), new Big(0));\n // console.log('DELTA Y IS...');\n // console.log(deltaY.toString());\n\n let inputTokenMeta = actions[0].tokens[0];\n let deltaX = new Big(actions[0].totalInputAmount).div(\n new Big(10).pow(inputTokenMeta.decimals)\n );\n let R = deltaY.div(deltaX);\n var P = new Big(0);\n let routes = actions[0].allRoutes;\n let nodeRoutes = actions[0].allNodeRoutes;\n let allocations = actions[0].allAllocations.map(a => new Big(a));\n let totalAllocations = allocations\n .map(a => new Big(a))\n .reduce((a, b) => a.plus(b), new Big(0));\n\n let weights = allocations.map(a => a.div(totalAllocations));\n\n for (var i in routes) {\n let route = routes[i];\n let nodeRoute = nodeRoutes[i];\n let tokens = await Promise.all(\n nodeRoute.map(async t => {\n return allTokens[t]\n ? allTokens[t]\n : await ftGetTokenMetadata(t, 'sm routes');\n })\n );\n let weight = weights[i];\n if (route.length == 1) {\n let num = new Big(route[0].reserves[nodeRoute[0]]).div(\n new Big(10).pow(tokens[0].decimals)\n );\n let denom = new Big(route[0].reserves[nodeRoute[1]]).div(\n new Big(10).pow(tokens[1].decimals)\n );\n var routeMarketPrice = num.div(denom);\n } else {\n let num1 = new Big(route[0].reserves[nodeRoute[0]]).div(\n new Big(10).pow(tokens[0].decimals)\n );\n\n let denom1 = new Big(route[0].reserves[nodeRoute[1]]).div(\n new Big(10).pow(tokens[1].decimals)\n );\n\n let num2 = new Big(route[1].reserves[nodeRoute[1]]).div(\n new Big(10).pow(tokens[1].decimals)\n );\n\n let denom2 = new Big(route[1].reserves[nodeRoute[2]]).div(\n new Big(10).pow(tokens[2].decimals)\n );\n\n var routeMarketPrice = num1\n .div(denom1)\n .times(num2)\n .div(denom2);\n }\n P = P.plus(weight.times(new Big(1).div(routeMarketPrice)));\n }\n\n let priceImpact = P.minus(R)\n .div(R)\n .times(new Big(100))\n .toString();\n return priceImpact;\n}\n\nfunction decor(arr) {\n var res = [];\n for (var i in arr) {\n res.push([arr[i], i]);\n }\n return res;\n}\nfunction argsort(arr) {\n let undecor = a => a[1]; // leave only index\n let decorated = decor(arr);\n\n return decorated\n .sort((a, b) => new Big(b[0]).minus(new Big(a[0])))\n .map(undecor);\n}\n\nfunction getPoolsByToken1ORToken2(pools, token1, token2) {\n let filteredPools = pools.filter(\n item =>\n item.token1Id === token1 ||\n item.token2Id === token1 ||\n item.token1Id === token2 ||\n item.token2Id === token2\n );\n return filteredPools;\n}\n\nfunction getPoolsByToken1ANDToken2(\n pools,\n token1,\n token2,\n cullZeroLiquidityPools = true\n) {\n let filteredPools = pools.filter(\n item =>\n (item.token1Id === token1 && item.token2Id === token2) ||\n (item.token1Id === token2 && item.token2Id === token1)\n );\n if (cullZeroLiquidityPools) {\n filteredPools = filteredPools.filter(\n item => item.token1Supply != '0' && item.token2Supply != '0'\n );\n }\n return filteredPools;\n}\n\nfunction getLiqudityOfPoolsFromList(pools) {\n let liquidities = [];\n for (var poolInd in pools) {\n let pool = pools[poolInd];\n pool.amounts = [pool.token1Supply, pool.token2Supply];\n let poolBigAmounts = pool.amounts.map(item => new Big(item));\n let liquidity = poolBigAmounts[0].times(poolBigAmounts[1]);\n liquidities.push(liquidity);\n }\n return liquidities;\n}\n\nfunction getNormalizedLiquiditiesFromList(pools) {\n let liquidities = getLiqudityOfPoolsFromList(pools);\n let maxLiq = bigMax(liquidities);\n let normalizedLiquidities = liquidities.map(item => item.div(maxLiq));\n return normalizedLiquidities;\n}\n\nfunction bigMax(arrayOfBigs) {\n if (arrayOfBigs.length < 1) {\n return null;\n }\n let maxElem = arrayOfBigs[0];\n for (var ind in arrayOfBigs) {\n let val = arrayOfBigs[ind];\n if (val.gt(maxElem)) {\n maxElem = val;\n }\n }\n return maxElem;\n}\n\nfunction cullPoolsWithInsufficientLiquidity(pools, threshold = 0.0001) {\n var thresh = new Big(threshold);\n let normLiq = getNormalizedLiquiditiesFromList(pools);\n let filteredPools = [];\n for (var i = 0; i < normLiq.length; i++) {\n if (normLiq[i] > thresh) {\n filteredPools.push(pools[i]);\n }\n }\n return filteredPools;\n}\n\nfunction cartesianProduct(a) {\n let result = a.reduce((a, b) => a.flatMap(d => b.map(e => [d, e].flat())));\n return result;\n}\n\nfunction addEdge(g, edge) {\n let src = edge[0];\n let dst = edge[1];\n if (Object.keys(g).includes(src)) {\n if (!Object.keys(g[src]).includes(dst)) {\n g[src][dst] = 1;\n }\n } else {\n g[src] = {};\n g[src][dst] = 1;\n }\n if (Object.keys(g).includes(dst)) {\n if (!Object.keys(g[dst]).includes(src)) {\n g[dst][src] = 1;\n }\n } else {\n g[dst] = {};\n g[dst][src] = 1;\n }\n}\n\nfunction addEdges(g, edgeList) {\n for (var n in edgeList) {\n let edge = edgeList[n];\n addEdge(g, edge);\n }\n}\n\nfunction deleteEdge(g, edge) {\n let gNew = JSON.parse(JSON.stringify(g)); // using this to deep clone graph structure\n let e1 = edge[0];\n let e2 = edge[1];\n if (Object.keys(gNew).includes(e1)) {\n if (Object.keys(gNew[e1]).includes(e2)) {\n delete gNew[e1][e2];\n }\n }\n if (Object.keys(gNew).includes(e2)) {\n if (Object.keys(gNew[e2]).includes(e1)) {\n delete gNew[e2][e1];\n }\n }\n return gNew;\n}\n\nfunction deleteNode(g, node) {\n let gNew = JSON.parse(JSON.stringify(g)); // using this to deep clone graph structure\n if (Object.keys(gNew).includes(node)) {\n delete gNew[node];\n }\n let keys = Object.keys(gNew);\n for (var nodeInd in keys) {\n let nodeNow = keys[nodeInd];\n if (Object.keys(gNew[nodeNow]).includes(node)) {\n delete gNew[nodeNow][node];\n }\n }\n return gNew;\n}\n\nfunction dijkstra(graph, s) {\n var solutions = {};\n solutions[s] = {};\n solutions[s].path = [];\n solutions[s].dist = 0;\n\n while (true) {\n var parent = null;\n var nearest = null;\n var dist = Infinity;\n\n //for each existing solution\n for (var n in solutions) {\n if (!solutions[n]) {\n solutions[n] = {};\n }\n if (!solutions[n].path) continue;\n var ndist = solutions[n].dist;\n var adj = graph[n];\n //for each of its adjacent nodes...\n for (var a in adj) {\n //without a solution already...\n if (!solutions[a]) {\n solutions[a] = {};\n }\n if (solutions[a].path) continue;\n //choose nearest node with lowest *total* cost\n var d = adj[a] + ndist;\n if (d < dist) {\n //reference parent\n parent = solutions[n].path;\n nearest = a;\n dist = d;\n }\n }\n }\n\n //no more solutions\n if (dist === Infinity) {\n break;\n }\n\n //extend parent's solution path\n solutions[nearest].path = parent.concat(nearest);\n //extend parent's cost\n solutions[nearest].dist = dist;\n }\n\n return solutions;\n}\n\nfunction shortestPath(g, src, dst, ignore_nodes = [], ignore_edges = []) {\n let gTemp = JSON.parse(JSON.stringify(g)); // using this to deep clone graph structure. If we can use lodash, could use _.cloneDeep(obj)\n // remove nodes\n for (var nodeInd in ignore_nodes) {\n let nodeNow = ignore_nodes[nodeInd];\n gTemp = deleteNode(gTemp, nodeNow);\n }\n // remove edges\n for (var edgeInd in ignore_edges) {\n let edgeNow = ignore_edges[edgeInd];\n gTemp = deleteEdge(gTemp, edgeNow);\n }\n let solution = dijkstra(gTemp, src)[dst];\n solution.path.unshift(src); // original algorithm doesn't include source node in path\n return solution;\n}\n\nfunction* count(firstval = 0, step = 1) {\n let x = firstval;\n while (true) {\n yield x;\n x = x + 1;\n }\n}\n\nclass PathBuffer {\n constructor() {\n this.paths = [];\n this.sortedpaths = [];\n //this.counter = count();\n }\n len() {\n return this.sortedpaths.length;\n }\n\n push(cost, path) {\n if (path && !arrayContains(this.paths, path)) {\n this.sortedpaths.push([cost, path]);\n this.sortedpaths.sort(function(a, b) {\n return a[0] - b[0];\n });\n //heappush(this.sortedpaths, (cost, this.counter.next().value,path));\n this.paths.push(path);\n }\n }\n\n pop() {\n //let val = heappop(this.sortedpaths);\n let val = this.sortedpaths.shift();\n let cost = val[0];\n let path = val[1];\n this.paths.splice(this.paths.indexOf(path), 1);\n return path;\n }\n}\n\nfunction arrayEquals(a, b) {\n return (\n Array.isArray(a) &&\n Array.isArray(b) &&\n a.length === b.length &&\n a.every((val, index) => val === b[index])\n );\n}\n\nfunction arrayContains(arr, obj) {\n // checks to see if the input array contains a reference object, obj, using\n // JSON.stringify() .\n let obj_json = JSON.stringify(obj);\n for (var itemInd in arr) {\n if (JSON.stringify(arr[itemInd]) == obj_json) {\n return true;\n }\n }\n return false;\n}\n\nfunction* yenFromPy(g, source, target) {\n //adapted from the python implementation in networkx.algorithms.simple_paths.shortest_simple_paths()\n let listA = [];\n let listB = new PathBuffer();\n let prev_path = null;\n\n while (true) {\n if (!prev_path) {\n let sol = shortestPath(g, source, target);\n let length = sol.dist;\n let path = sol.path;\n listB.push(length, path);\n } else {\n let ignore_nodes = [];\n let ignore_edges = [];\n for (var i = 1; i < prev_path.length; i++) {\n let root = prev_path.slice(0, i);\n let root_length = root.length;\n for (var pathInd in listA) {\n let path = listA[pathInd];\n\n if (arrayEquals(path.slice(0, i), root)) {\n let edgeToIgnore = [path[i - 1], path[i]];\n ignore_edges.push(edgeToIgnore);\n }\n }\n try {\n let sol = shortestPath(\n g,\n root[root.length - 1],\n target,\n (ignore_nodes = ignore_nodes),\n (ignore_edges = ignore_edges)\n );\n let length = sol.dist;\n let spur = sol.path;\n let path = root.slice(0, root.length - 1).concat(spur);\n listB.push(root_length + length, path);\n } catch (e) {\n //console.log(`yenFromPy error was... ${e}`)\n //dont do anything.\n }\n ignore_nodes.push(root[root.length - 1]);\n }\n }\n if (listB.sortedpaths) {\n try {\n let path = listB.pop();\n yield path;\n listA.push(path);\n prev_path = path;\n } catch (e) {\n break;\n }\n } else {\n break;\n }\n }\n}\n\nfunction getKShortestPaths(g, source, target, k, maxPathLength = 3) {\n let paths = [];\n if (maxPathLength < 2) {\n var maxPathLength = 2;\n }\n let gen = yenFromPy(g, source, target);\n for (var n = 1; n <= k; n++) {\n try {\n let res = gen.next().value;\n if (res && !arrayContains(paths, res)) {\n if (res.length > maxPathLength) {\n // console.log(\n // `found all hops of length ${\n // maxPathLength - 1\n // } or less... breaking out of generator`\n // );\n break;\n }\n paths.push(res);\n }\n } catch (e) {\n break;\n }\n }\n return paths;\n}\n\nasync function getPathsFromPools(\n pools,\n inputToken,\n outputToken,\n maxPathLength = 3\n) {\n let graph = getGraphFromPoolList(pools);\n return getKShortestPaths(graph, inputToken, outputToken, 100, maxPathLength);\n}\n\nasync function getAllPathsBelowLengthN(g, source, target, N, limit = 100) {\n // use Yen's algorithm to find the paths of length N or below between source and target nodes in graph g.\n\n let paths = [];\n\n let gen = await yenFromPy(g, source, target);\n let currentPathLength = 0;\n let count = 1;\n while (currentPathLength <= N) {\n // console.log(`CURRENT PATH LENGTH IS ${currentPathLength}`)\n try {\n let res = await gen.next().value;\n // console.log(`RES IS ${res}`)\n if (res && !arrayContains(paths, res)) {\n if (res.length > currentPathLength) {\n currentPathLength = res.length;\n if (currentPathLength > N) {\n break;\n }\n }\n paths.push(res);\n }\n count = count + 1;\n if (count > limit) {\n break;\n }\n } catch (e) {\n // console.log(e)\n break;\n }\n }\n return paths;\n}\n\nfunction getGraphFromPoolList(poolList) {\n let pools = poolList.filter(\n item => item.token1Supply != '0' && item.token2Supply != '0'\n );\n let transitions = pools.map(item => [item.token1Id, item.token2Id]);\n let g = {};\n addEdges(g, transitions);\n return g;\n}\n\n////////////////////////////////////\n\n// MAIN FUNCTION\n\n////////////////////////////////////\n\n// TODO -- incorporate the following integrated function, which tries to\n// account for stablecoins within the context of smart routing.\n\n//TODO -- need the right API / hooks for GETSTABLESWAPACTION function and GETPARALLELSWAPACTIONS functions.\n\n//TODO -- transform the actions generated in this function into tranaction to execute.\n\n//TRYING: GETSTABLESWAPACTION <==> instantSwapGetTransactions\n\nexport async function stableSmart(\n pools,\n inputToken,\n outputToken,\n totalInput,\n allTokens\n) {\n let smartRouteActions = await getSmartRouteSwapActions(\n pools,\n inputToken,\n outputToken,\n totalInput,\n allTokens\n );\n return smartRouteActions;\n}\n\nexport function getExpectedOutputFromActionsORIG(actions, outputToken) {\n return actions\n .filter(item => item.outputToken === outputToken)\n .map(item => new Big(item.estimate))\n .reduce((a, b) => a.plus(b), new Big(0));\n}\n\nfunction getFeeForRoute(route) {\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n // Single Hop case\n let p = route[0];\n return p.fee;\n } else if (route.length == 2) {\n //Double Hop Case\n let p1 = route[0];\n let p2 = route[1];\n let fee1 = p1.fee;\n let fee2 = p2.fee;\n return fee1 + fee2;\n }\n}\n\nexport function getAverageFeeForRoutes(routes, nodeRoutes, totalInput) {\n let normalizedAllocations = getOptimalAllocationForRoutes(\n routes,\n nodeRoutes,\n totalInput\n ).map(a => a.div(new Big(totalInput)));\n let averageFee = 0;\n for (var i in routes) {\n averageFee += normalizedAllocations[i] * getFeeForRoute(routes[i]);\n }\n return averageFee;\n}\n","import { TokenMetadata, Pool, StablePool, EstimateSwapView } from '../types';\nimport {\n toReadableNumber,\n toNonDivisibleNumber,\n scientificNotationToString,\n} from '../utils';\nimport Big from 'big.js';\nimport { SameInputTokenError, ZeroInputError, NoPoolError } from '../error';\nimport { ONLY_ZEROS, toPrecision } from '../utils';\nimport _ from 'lodash';\nimport { FEE_DIVISOR } from '../constant';\nimport { getSwappedAmount } from '../stable-swap';\nimport { ftGetTokenMetadata, ftGetTokensMetadata } from '../ref';\nimport { isStablePool } from '../utils';\nimport { getTokensTiny } from '../indexer';\nimport {\n getStablePoolDecimal,\n isStablePoolToken,\n poolFormatter,\n} from '../utils';\nimport {\n stableSmart,\n getExpectedOutputFromActionsORIG,\n //@ts-ignore\n} from './smartRoutingLogic.js';\n\nexport enum PoolMode {\n PARALLEL = 'parallel swap',\n SMART = 'smart routing',\n SMART_V2 = 'stableSmart',\n STABLE = 'stable swap',\n}\n\nexport interface SwapParams {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n simplePools: Pool[];\n options?: SwapOptions;\n}\n\nexport interface SwapOptions {\n enableSmartRouting?: boolean;\n stablePools?: Pool[];\n stablePoolsDetail?: StablePool[];\n}\n\nexport const getSimplePoolEstimate = ({\n tokenIn,\n tokenOut,\n pool,\n amountIn,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n pool: Pool;\n amountIn: string;\n}) => {\n const amount_with_fee = Number(amountIn) * (FEE_DIVISOR - pool.fee);\n const in_balance = toReadableNumber(\n tokenIn.decimals,\n pool.supplies[tokenIn.id]\n );\n const out_balance = toReadableNumber(\n tokenOut.decimals,\n pool.supplies[tokenOut.id]\n );\n const estimate = new Big(\n (\n (amount_with_fee * Number(out_balance)) /\n (FEE_DIVISOR * Number(in_balance) + amount_with_fee)\n ).toString()\n ).toFixed();\n\n return {\n estimate,\n pool,\n outputToken: tokenOut.id,\n inputToken: tokenIn.id,\n };\n};\n\nexport const getStablePoolEstimate = ({\n tokenIn,\n tokenOut,\n amountIn,\n stablePool,\n pool,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n stablePool: StablePool;\n pool?: Pool;\n}) => {\n const STABLE_LP_TOKEN_DECIMALS = getStablePoolDecimal(stablePool);\n\n const [amount_swapped, _, dy] = getSwappedAmount(\n tokenIn.id,\n tokenOut.id,\n amountIn,\n stablePool,\n STABLE_LP_TOKEN_DECIMALS\n );\n\n const amountOut =\n amount_swapped < 0 || isNaN(amount_swapped)\n ? '0'\n : toPrecision(scientificNotationToString(amount_swapped.toString()), 0);\n\n const dyOut =\n amount_swapped < 0 || isNaN(amount_swapped) || isNaN(dy)\n ? '0'\n : toPrecision(scientificNotationToString(dy.toString()), 0);\n\n const rates = stablePool.rates.reduce((acc, cur, i) => {\n return {\n ...acc,\n [stablePool.token_account_ids[i]]: cur,\n };\n }, {});\n\n return {\n estimate: toReadableNumber(STABLE_LP_TOKEN_DECIMALS, amountOut),\n noFeeAmountOut: toReadableNumber(STABLE_LP_TOKEN_DECIMALS, dyOut),\n pool: {\n ...stablePool,\n rates,\n },\n outputToken: tokenOut.id,\n inputToken: tokenIn.id,\n };\n};\n\n/**\n * @description Get the estimate of the amount of tokenOut that can be received\n *\n */\nexport const singlePoolSwap = ({\n tokenIn,\n tokenOut,\n simplePools,\n amountIn,\n stablePools,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n simplePools: Pool[];\n amountIn: string;\n stablePools?: StablePool[];\n}) => {\n if (!simplePools || simplePools.length === 0) {\n throw NoPoolError;\n }\n\n const parsedAmountIn = toNonDivisibleNumber(tokenIn.decimals, amountIn);\n\n // const pools = simplePools.concat(stablePools);\n\n const simplePoolsThisPair = simplePools.filter(\n p =>\n p.tokenIds.includes(tokenIn.id) &&\n p.tokenIds.includes(tokenOut.id) &&\n (!stablePools || !isStablePool(stablePools, p.id))\n );\n\n const estimatesSimplePool = simplePoolsThisPair.map(pool =>\n getSimplePoolEstimate({\n tokenIn,\n tokenOut,\n pool,\n amountIn,\n })\n );\n\n const stablePoolThisPair = stablePools?.filter(\n sp =>\n sp.token_account_ids.includes(tokenIn.id) &&\n sp.token_account_ids.includes(tokenOut.id)\n );\n\n // different stable lp token decimal for different type of pools\n const estimatesStablePool = stablePoolThisPair?.map(stablePool => {\n return getStablePoolEstimate({\n tokenIn,\n tokenOut,\n amountIn,\n stablePool,\n pool: simplePools.find(p => p.id === stablePool.id) as Pool,\n });\n });\n\n const maxSimplePoolEstimate =\n estimatesSimplePool === undefined || estimatesSimplePool.length === 0\n ? undefined\n : estimatesSimplePool.length === 1\n ? estimatesSimplePool[0]\n : _.maxBy(estimatesSimplePool, estimate => Number(estimate.estimate));\n\n const maxStablePoolEstimate =\n estimatesStablePool === undefined || estimatesStablePool.length === 0\n ? undefined\n : estimatesStablePool.length === 1\n ? estimatesStablePool[0]\n : _.maxBy(estimatesStablePool, estimate => Number(estimate.estimate));\n\n if (!maxStablePoolEstimate && !maxSimplePoolEstimate) throw NoPoolError;\n\n maxSimplePoolEstimate &&\n (maxSimplePoolEstimate.pool.partialAmountIn = parsedAmountIn);\n\n maxStablePoolEstimate &&\n (maxStablePoolEstimate.pool.partialAmountIn = parsedAmountIn);\n\n if (!maxStablePoolEstimate) {\n maxSimplePoolEstimate &&\n (maxSimplePoolEstimate.pool.partialAmountIn = parsedAmountIn);\n\n return maxSimplePoolEstimate;\n } else if (!maxSimplePoolEstimate) {\n return maxStablePoolEstimate;\n } else {\n return Number(maxSimplePoolEstimate?.estimate) >\n Number(maxStablePoolEstimate?.estimate)\n ? maxSimplePoolEstimate\n : maxStablePoolEstimate;\n }\n};\n\nexport const getStablePoolsThisPair = ({\n tokenInId,\n tokenOutId,\n stablePools,\n}: {\n tokenInId: string;\n tokenOutId: string;\n stablePools: Pool[];\n}) => {\n return stablePools.filter(\n p =>\n p.tokenIds.includes(tokenInId) &&\n p.tokenIds.includes(tokenOutId) &&\n tokenInId !== tokenOutId\n );\n};\n\nexport const getPoolsByTokens = ({\n pools,\n tokenInId,\n tokenOutId,\n}: {\n pools: Pool[];\n tokenInId: string;\n tokenOutId: string;\n}) => {\n if (tokenInId === tokenOutId) return [];\n\n return pools.filter(\n p => p.tokenIds.includes(tokenInId) && p.tokenIds.includes(tokenOutId)\n );\n};\n\nexport const getPoolEstimate = async ({\n tokenIn,\n tokenOut,\n amountIn,\n stablePoolDetail,\n pool,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n pool: Pool;\n stablePoolDetail?: StablePool;\n}) => {\n if (!!stablePoolDetail) {\n return getStablePoolEstimate({\n tokenIn,\n tokenOut,\n stablePool: stablePoolDetail,\n amountIn,\n pool,\n });\n } else {\n return getSimplePoolEstimate({\n tokenIn,\n tokenOut,\n pool,\n amountIn,\n });\n }\n};\n\nexport async function getHybridStableSmart(\n tokenIn: TokenMetadata,\n tokenOut: TokenMetadata,\n amountIn: string,\n stablePools: Pool[],\n stablePoolsDetail: StablePool[],\n simplePools: Pool[],\n allTokens: Record<string, TokenMetadata>\n) {\n if (\n !isStablePoolToken(stablePoolsDetail, tokenIn.id) &&\n !isStablePoolToken(stablePoolsDetail, tokenOut.id)\n ) {\n return { actions: [], estimate: '0' };\n }\n\n const stablePoolsDetailById = stablePoolsDetail.reduce((acc, cur) => {\n return {\n ...acc,\n [cur.id]: cur,\n };\n }, {} as Record<string, StablePool>);\n\n const parsedAmountIn = toNonDivisibleNumber(tokenIn.decimals, amountIn);\n\n let pool1: Pool, pool2: Pool;\n\n let pools1: Pool[] = [];\n let pools2: Pool[] = [];\n\n let pools1Right: Pool[] = [];\n let pools2Right: Pool[] = [];\n\n let candidatePools: Pool[][] = [];\n\n /**\n * find possible routes for this pair\n *\n *\n */\n\n if (isStablePoolToken(stablePoolsDetail, tokenIn.id)) {\n // first hop will be through stable pool.\n pools1 = stablePools.filter(pool => pool.tokenIds.includes(tokenIn.id));\n\n const otherStables = pools1\n .map(pool => pool.tokenIds.filter(id => id !== tokenIn.id))\n .flat();\n\n for (var otherStable of otherStables) {\n let stablePoolsThisPair = getStablePoolsThisPair({\n tokenInId: otherStable,\n tokenOutId: tokenOut.id,\n stablePools,\n });\n\n let tmpPools = getPoolsByTokens({\n tokenInId: otherStable,\n tokenOutId: tokenOut.id,\n pools: simplePools,\n });\n const tobeAddedPools = tmpPools.concat(stablePoolsThisPair);\n pools2.push(\n ...tobeAddedPools.filter(p => {\n const supplies = Object.values(p.supplies);\n return new Big(supplies[0]).times(new Big(supplies[1])).gt(0);\n })\n );\n }\n }\n\n if (isStablePoolToken(stablePoolsDetail, tokenOut.id)) {\n // second hop will be through stable pool.\n pools2Right = stablePools.filter(pool =>\n pool.tokenIds.includes(tokenOut.id)\n );\n\n const otherStables = pools2Right\n .map(pool => pool.tokenIds.filter(id => id !== tokenOut.id))\n .flat();\n for (let otherStable of otherStables) {\n let stablePoolsThisPair = getStablePoolsThisPair({\n tokenInId: tokenIn.id,\n tokenOutId: otherStable,\n stablePools,\n });\n\n let tmpPools = getPoolsByTokens({\n tokenInId: tokenIn.id,\n tokenOutId: otherStable,\n pools: simplePools,\n });\n\n const tobeAddedPools = tmpPools.concat(stablePoolsThisPair);\n\n pools1Right.push(\n ...tobeAddedPools.filter(p => {\n const supplies = Object.values(p.supplies);\n return new Big(supplies[0]).times(new Big(supplies[1])).gt(0);\n })\n );\n }\n }\n\n // find candidate pools\n\n for (let p1 of pools1) {\n let middleTokens = p1.tokenIds.filter((id: string) => id !== tokenIn.id);\n for (let middleToken of middleTokens) {\n let p2s = pools2.filter(\n p =>\n p.tokenIds.includes(middleToken) &&\n p.tokenIds.includes(tokenOut.id) &&\n middleToken !== tokenOut.id\n );\n let p2 = _.maxBy(p2s, p =>\n Number(\n new Big(toReadableNumber(tokenOut.decimals, p.supplies[tokenOut.id]))\n )\n );\n\n if (middleToken === tokenOut.id) {\n p2 = p1;\n }\n\n if (p1 && p2) {\n if (p1.id === p2.id) candidatePools.push([p1]);\n else candidatePools.push([p1, p2]);\n }\n }\n }\n for (let p1 of pools1Right) {\n let middleTokens = p1.tokenIds.filter((id: string) => id !== tokenIn.id);\n for (let middleToken of middleTokens) {\n let p2s = pools2Right.filter(\n p =>\n p.tokenIds.includes(middleToken) &&\n p.tokenIds.includes(tokenOut.id) &&\n middleToken !== tokenOut.id\n );\n let p2 = _.maxBy(p2s, p =>\n Number(\n new Big(toReadableNumber(tokenOut.decimals, p.supplies[tokenOut.id]))\n )\n );\n\n if (middleToken === tokenOut.id) {\n p2 = p1;\n }\n\n if (p1 && p2) {\n if (p1.id === p2.id) candidatePools.push([p1]);\n else candidatePools.push([p1, p2]);\n }\n }\n }\n\n if (candidatePools.length > 0) {\n const tokensMedata = await ftGetTokensMetadata(\n candidatePools.map(cp => cp.map(p => p.tokenIds).flat()).flat(),\n allTokens\n );\n\n const BestPoolPair =\n candidatePools.length === 1\n ? candidatePools[0]\n : _.maxBy(candidatePools, poolPair => {\n // only one pool case, only for stable tokens\n if (poolPair.length === 1) {\n if (isStablePool(stablePoolsDetail, poolPair[0].id)) {\n const stablePoolThisPair = getStablePoolsThisPair({\n tokenInId: tokenIn.id,\n tokenOutId: tokenOut.id,\n stablePools,\n })[0];\n\n const stablePoolDetailThisPair = stablePoolsDetail.find(\n spd => spd.id === stablePoolThisPair.id\n );\n\n return Number(\n getStablePoolEstimate({\n tokenIn,\n tokenOut,\n stablePool: stablePoolDetailThisPair as StablePool,\n amountIn,\n pool: poolPair[0],\n }).estimate\n );\n } else {\n return Number(\n getSimplePoolEstimate({\n tokenIn,\n tokenOut,\n amountIn,\n pool: poolPair[0],\n }).estimate\n );\n }\n }\n\n const [tmpPool1, tmpPool2] = poolPair;\n const tokenMidId = poolPair[0].tokenIds.find((t: string) =>\n poolPair[1].tokenIds.includes(t)\n ) as string;\n\n const tokenMidMeta = tokensMedata[tokenMidId];\n\n const estimate1 = {\n ...(isStablePool(stablePoolsDetail, tmpPool1.id)\n ? getStablePoolEstimate({\n tokenIn,\n tokenOut: tokenMidMeta,\n amountIn,\n stablePool: stablePoolsDetailById[tmpPool1.id],\n pool: tmpPool1,\n })\n : getSimplePoolEstimate({\n tokenIn,\n tokenOut: tokenMidMeta,\n amountIn,\n pool: tmpPool1,\n })),\n status: PoolMode.SMART,\n };\n\n const estimate2 = {\n ...(isStablePool(stablePoolsDetail, tmpPool2.id)\n ? getStablePoolEstimate({\n tokenIn: tokenMidMeta,\n tokenOut,\n amountIn: estimate1.estimate,\n stablePool: stablePoolsDetailById[tmpPool2.id],\n pool: tmpPool2,\n })\n : getSimplePoolEstimate({\n tokenIn: tokenMidMeta,\n tokenOut,\n pool: tmpPool2,\n amountIn: estimate1.estimate,\n })),\n status: PoolMode.SMART,\n };\n\n return Number(estimate2.estimate);\n });\n\n // one pool case only get best price\n\n if (!BestPoolPair) return { actions: [], estimate: '0' };\n\n if (BestPoolPair.length === 1) {\n const bestPool = BestPoolPair[0];\n const estimate = await getPoolEstimate({\n tokenIn,\n tokenOut,\n amountIn,\n pool: bestPool,\n stablePoolDetail: stablePoolsDetailById[bestPool.id],\n });\n\n return {\n actions: [\n {\n ...estimate,\n status: PoolMode.STABLE,\n\n pool: { ...estimate.pool, partialAmountIn: parsedAmountIn },\n tokens: [tokenIn, tokenOut],\n inputToken: tokenIn.id,\n outputToken: tokenOut.id,\n totalInputAmount: toNonDivisibleNumber(tokenIn.decimals, amountIn),\n },\n ],\n estimate: estimate.estimate,\n };\n }\n\n // two pool case get best price\n [pool1, pool2] = BestPoolPair;\n\n const tokenMidId = BestPoolPair[0].tokenIds.find((t: string) =>\n BestPoolPair[1].tokenIds.includes(t)\n ) as string;\n\n const tokenMidMeta =\n allTokens[tokenMidId] ||\n (await ftGetTokenMetadata(tokenMidId, 'hybridSmartRoutingEstimate'));\n\n const estimate1 = {\n ...(isStablePool(stablePoolsDetail, pool1.id)\n ? getStablePoolEstimate({\n tokenIn,\n tokenOut: tokenMidMeta,\n amountIn,\n stablePool: stablePoolsDetailById[pool1.id],\n pool: pool1,\n })\n : getSimplePoolEstimate({\n tokenIn,\n tokenOut: tokenMidMeta,\n amountIn,\n pool: pool1,\n })),\n tokens: [tokenIn, tokenMidMeta, tokenOut],\n inputToken: tokenIn.id,\n outputToken: tokenMidMeta.id,\n status: PoolMode.SMART,\n };\n\n estimate1.pool = {\n ...estimate1.pool,\n partialAmountIn: parsedAmountIn,\n };\n\n const estimate2 = {\n ...(isStablePool(stablePoolsDetail, pool2.id)\n ? getStablePoolEstimate({\n tokenIn: tokenMidMeta,\n tokenOut,\n amountIn: estimate1.estimate,\n stablePool: stablePoolsDetailById[pool2.id],\n pool: pool2,\n })\n : getSimplePoolEstimate({\n tokenIn: tokenMidMeta,\n tokenOut,\n amountIn: estimate1.estimate,\n pool: pool2,\n })),\n\n tokens: [tokenIn, tokenMidMeta, tokenOut],\n inputToken: tokenMidMeta.id,\n outputToken: tokenOut.id,\n status: PoolMode.SMART,\n };\n\n return { actions: [estimate1, estimate2], estimate: estimate2.estimate };\n }\n\n return { actions: [], estimate: '0' };\n}\n\n// simple pools and stable pools for this pair\nexport const estimateSwap = async ({\n tokenIn,\n tokenOut,\n amountIn,\n simplePools,\n options,\n}: SwapParams) => {\n if (tokenIn.id === tokenOut.id) throw SameInputTokenError;\n\n if (ONLY_ZEROS.test(amountIn)) throw ZeroInputError;\n\n const { enableSmartRouting, stablePools, stablePoolsDetail } = options || {};\n\n const parsedAmountIn = toNonDivisibleNumber(tokenIn.decimals, amountIn);\n\n let singleRouteEstimate: EstimateSwapView[] = [];\n\n try {\n const estimate = singlePoolSwap({\n tokenIn,\n tokenOut,\n simplePools,\n amountIn,\n stablePools: stablePoolsDetail,\n });\n\n singleRouteEstimate = [\n {\n ...estimate,\n status: PoolMode.PARALLEL,\n pool: { ...estimate?.pool, partialAmountIn: parsedAmountIn },\n totalInputAmount: toNonDivisibleNumber(tokenIn.decimals, amountIn),\n tokens: [tokenIn, tokenOut],\n },\n ] as EstimateSwapView[];\n if (!enableSmartRouting) {\n return singleRouteEstimate;\n }\n } catch (error) {\n if (!enableSmartRouting) throw error;\n }\n\n const inputPools = simplePools.map(p => poolFormatter(p));\n\n const allTokens = (await getTokensTiny()) as Record<string, TokenMetadata>;\n\n const simplePoolSmartRoutingActions = await stableSmart(\n inputPools,\n tokenIn.id,\n tokenOut.id,\n parsedAmountIn,\n allTokens\n );\n\n const simplePoolSmartRoutingEstimate = getExpectedOutputFromActionsORIG(\n simplePoolSmartRoutingActions,\n tokenOut.id\n ).toString();\n\n const hybridSmartRoutingRes = await getHybridStableSmart(\n tokenIn,\n tokenOut,\n amountIn,\n stablePools || [],\n stablePoolsDetail || [],\n simplePools,\n allTokens\n );\n\n const hybridSmartRoutingEstimate = hybridSmartRoutingRes.estimate.toString();\n\n if (\n new Big(simplePoolSmartRoutingEstimate || '0').gte(\n hybridSmartRoutingEstimate || '0'\n )\n ) {\n if (!simplePoolSmartRoutingActions?.length) throw NoPoolError;\n\n if (\n typeof singleRouteEstimate !== 'undefined' &&\n singleRouteEstimate &&\n singleRouteEstimate?.[0]?.estimate &&\n new Big(singleRouteEstimate[0].estimate || '0').gt(\n simplePoolSmartRoutingEstimate || '0'\n )\n ) {\n return singleRouteEstimate;\n }\n return simplePoolSmartRoutingActions as EstimateSwapView[];\n } else {\n if (\n typeof singleRouteEstimate !== 'undefined' &&\n singleRouteEstimate &&\n singleRouteEstimate?.[0]?.estimate &&\n new Big(singleRouteEstimate[0].estimate || '0').gt(\n hybridSmartRoutingEstimate || '0'\n )\n ) {\n return singleRouteEstimate;\n }\n\n return hybridSmartRoutingRes.actions as EstimateSwapView[];\n }\n};\n","import {\n Pool,\n PoolRPCView,\n StablePool,\n SmartRoutingInputPool,\n Transaction,\n EstimateSwapView,\n} from './types';\nimport {\n FEE_DIVISOR,\n RATED_POOL_LP_TOKEN_DECIMALS,\n STABLE_LP_TOKEN_DECIMALS,\n} from './constant';\n\nimport {\n transactions,\n utils,\n transactions as nearTransactions,\n} from 'near-api-js';\n\nimport _, { sortBy } from 'lodash';\n\nimport BN from 'bn.js';\n\nimport * as math from 'mathjs';\nimport {\n REF_FI_CONTRACT_ID,\n WRAP_NEAR_CONTRACT_ID,\n STORAGE_TO_REGISTER_WITH_MFT,\n} from './constant';\nimport Big from 'big.js';\nimport { SignAndSendTransactionsParams } from '@near-wallet-selector/core/lib/wallet';\nimport { TokenMetadata } from './types';\nimport { PoolMode } from './v1-swap/swap';\nimport { getSwappedAmount } from './stable-swap';\nimport { NoFeeToPool } from './error';\nimport { CONSTANT_D, POINTLEFTRANGE, POINTRIGHTRANGE } from './constant';\nimport { DCL_POOL_FEE_LIST } from './dcl-swap/dcl-pool';\n\nexport const parsePool = (pool: PoolRPCView, id?: number): Pool => ({\n id: Number(typeof id === 'number' ? id : pool.id),\n tokenIds: pool.token_account_ids,\n supplies: pool.amounts.reduce(\n (acc: { [tokenId: string]: string }, amount: string, i: number) => {\n acc[pool.token_account_ids[i]] = amount;\n return acc;\n },\n {}\n ),\n fee: pool.total_fee,\n shareSupply: pool.shares_total_supply,\n tvl: pool.tvl,\n token0_ref_price: pool.token0_ref_price,\n pool_kind: pool.pool_kind,\n});\n\nexport const poolFormatter = (pool: Pool) => {\n return {\n id: pool.id,\n token1Id: pool.tokenIds[0],\n token2Id: pool.tokenIds[1],\n token1Supply: pool.supplies[pool.tokenIds[0]],\n token2Supply: pool.supplies[pool.tokenIds[1]],\n fee: pool.fee,\n shares: pool.shareSupply,\n token0_price: pool.token0_ref_price || '0',\n } as SmartRoutingInputPool;\n};\n\nexport const isStablePoolToken = (\n stablePools: StablePool[],\n tokenId: string | Number\n) => {\n return stablePools\n .map(p => p.token_account_ids)\n .flat()\n .includes(tokenId.toString());\n};\n\nexport const isStablePool = (\n stablePools: StablePool[],\n poolId: string | number\n) => {\n return stablePools.map(p => p.id.toString()).includes(poolId.toString());\n};\n\nexport const getStablePoolDecimal = (stablePool: StablePool) => {\n return stablePool.pool_kind === 'RATED_SWAP'\n ? RATED_POOL_LP_TOKEN_DECIMALS\n : STABLE_LP_TOKEN_DECIMALS;\n};\n\nexport const round = (decimals: number, minAmountOut: string) => {\n return Number.isInteger(Number(minAmountOut))\n ? minAmountOut\n : Math.ceil(\n Math.round(Number(minAmountOut) * Math.pow(10, decimals)) /\n Math.pow(10, decimals)\n ).toString();\n};\n\nexport const convertToPercentDecimal = (percent: number) => {\n return math.divide(percent, 100);\n};\n\nexport const percentOf = (percent: number, num: number | string) => {\n return math.evaluate(`${convertToPercentDecimal(percent)} * ${num}`);\n};\n\nexport const percentLess = (percent: number, num: number | string) => {\n return math.format(math.evaluate(`${num} - ${percentOf(percent, num)}`), {\n notation: 'fixed',\n });\n};\n\nexport const getGas = (gas: string | undefined) =>\n gas ? new BN(gas) : new BN('100000000000000');\n\nexport const getAmount = (amount: string) =>\n amount ? new BN(utils.format.parseNearAmount(amount) || '0') : new BN('0');\n\nexport const ONLY_ZEROS = /^0*\\.?0*$/;\n\nexport const toReadableNumber = (\n decimals: number,\n number: string = '0'\n): string => {\n if (!decimals) return number;\n\n const wholeStr = number.substring(0, number.length - decimals) || '0';\n const fractionStr = number\n .substring(number.length - decimals)\n .padStart(decimals, '0')\n .substring(0, decimals);\n\n return `${wholeStr}.${fractionStr}`.replace(/\\.?0+$/, '');\n};\n\nexport const toNonDivisibleNumber = (\n decimals: number,\n number: string\n): string => {\n if (decimals === null || decimals === undefined) return number;\n const [wholePart, fracPart = ''] = number.split('.');\n\n return `${wholePart}${fracPart.padEnd(decimals, '0').slice(0, decimals)}`\n .replace(/^0+/, '')\n .padStart(1, '0');\n};\n\nexport const scientificNotationToString = (strParam: string) => {\n let flag = /e/.test(strParam);\n if (!flag || !strParam) return strParam;\n\n let sysbol = true;\n if (/e-/.test(strParam)) {\n sysbol = false;\n }\n\n const negative = Number(strParam) < 0 ? '-' : '';\n\n let index = Number(strParam.match(/\\d+$/)?.[0]);\n\n let basis = strParam.match(/[\\d\\.]+/)?.[0];\n\n if (!index || !basis) return strParam;\n\n const ifFraction = basis.includes('.');\n\n let wholeStr;\n let fractionStr;\n\n if (ifFraction) {\n wholeStr = basis.split('.')[0];\n fractionStr = basis.split('.')[1];\n } else {\n wholeStr = basis;\n fractionStr = '';\n }\n\n if (sysbol) {\n if (!ifFraction) {\n return negative + wholeStr.padEnd(index + wholeStr.length, '0');\n } else {\n if (fractionStr.length <= index) {\n return negative + wholeStr + fractionStr.padEnd(index, '0');\n } else {\n return (\n negative +\n wholeStr +\n fractionStr.substring(0, index) +\n '.' +\n fractionStr.substring(index)\n );\n }\n }\n } else {\n if (!ifFraction)\n return (\n negative +\n wholeStr.padStart(index + wholeStr.length, '0').replace(/^0/, '0.')\n );\n else {\n return (\n negative +\n wholeStr.padStart(index + wholeStr.length, '0').replace(/^0/, '0.') +\n fractionStr\n );\n }\n }\n};\n\nexport const formatWithCommas = (value: string) => {\n const pattern = /(-?\\d+)(\\d{3})/;\n while (pattern.test(value)) {\n value = value.replace(pattern, '$1,$2');\n }\n return value;\n};\n\nexport const toPrecision = (\n number: string,\n precision: number,\n withCommas: boolean = false,\n atLeastOne: boolean = true\n): string => {\n const [whole, decimal = ''] = number.split('.');\n\n let str = `${withCommas ? formatWithCommas(whole) : whole}.${decimal.slice(\n 0,\n precision\n )}`.replace(/\\.$/, '');\n if (atLeastOne && Number(str) === 0 && str.length > 1) {\n var n = str.lastIndexOf('0');\n str = str.slice(0, n) + str.slice(n).replace('0', '1');\n }\n\n return str;\n};\n\nexport const transformTransactions = (\n transactions: Transaction[],\n AccountId: string\n) => {\n const parsedTransactions = transactions.map((t: Transaction) => {\n return {\n signerId: AccountId,\n receiverId: t.receiverId,\n actions: t.functionCalls.map(fc => {\n return {\n type: 'FunctionCall',\n params: {\n methodName: fc.methodName,\n args: fc.args || {},\n gas: getGas(fc.gas)\n .toNumber()\n .toFixed(),\n deposit: utils.format.parseNearAmount(fc.amount || '0')!,\n },\n };\n }),\n };\n });\n\n return parsedTransactions;\n};\n\nexport const WalletSelectorTransactions = (\n transactions: Transaction[],\n AccountId: string\n) => {\n const parsedTransactions = transactions.map((t: Transaction) => {\n return {\n signerId: AccountId,\n receiverId: t.receiverId,\n actions: t.functionCalls.map(fc => {\n return {\n type: 'FunctionCall',\n params: {\n methodName: fc.methodName,\n args: fc.args || {},\n gas: getGas(fc.gas)\n .toNumber()\n .toFixed(),\n deposit: utils.format.parseNearAmount(fc.amount || '0')!,\n },\n };\n }),\n };\n });\n\n return { transactions: parsedTransactions } as SignAndSendTransactionsParams;\n};\n\nexport const separateRoutes = (\n actions: EstimateSwapView[],\n outputToken: string\n) => {\n const res = [];\n let curRoute = [];\n\n for (let i in actions) {\n curRoute.push(actions[i]);\n if (actions[i].outputToken === outputToken) {\n res.push(curRoute);\n curRoute = [];\n }\n }\n\n return res;\n};\n\nexport const calculateExchangeRate = (\n from: string,\n to: string,\n precision?: number\n) => {\n return math\n .floor(math.evaluate(`${to} / ${from}`), precision || 4)\n .toString();\n};\n\nexport const getAvgFee = (\n estimates: EstimateSwapView[],\n outputToken: string,\n parsedAmountIn: string\n) => {\n if (!estimates || estimates.length === 0) {\n return 0;\n }\n\n const routes = separateRoutes(estimates, outputToken);\n\n let fee = new Big(0);\n\n routes.forEach(r => {\n const partialAmountIn = r[0].pool.partialAmountIn || '0';\n\n fee = fee.plus(\n r\n .reduce(\n (acc, cur) => acc.plus(cur.pool.fee || cur.pool.total_fee || 0),\n new Big(0)\n )\n .times(partialAmountIn)\n .div(ONLY_ZEROS.test(parsedAmountIn) ? '1' : parsedAmountIn)\n );\n });\n\n return fee.toNumber();\n};\n\nexport const getAccountName = (AccountId: string) => {\n if (!AccountId) return AccountId;\n\n const [account, network] = AccountId.split('.');\n const niceAccountId = `${account.slice(0, 10)}...${network || ''}`;\n\n return account.length > 10 ? niceAccountId : AccountId;\n};\n\nexport const symbolsArr = ['e', 'E', '+', '-'];\n\nexport const multiply = (factor1: string, factor2: string) => {\n return math.format(math.evaluate(`${factor1} * ${factor2}`), {\n notation: 'fixed',\n });\n};\n\nexport const toInternationalCurrencySystemLongString = (\n labelValue: string,\n percent?: number\n) => {\n return Math.abs(Number(labelValue)) >= 1.0e9\n ? (Math.abs(Number(labelValue)) / 1.0e9).toFixed(percent || 2) + 'B'\n : Math.abs(Number(labelValue)) >= 1.0e6\n ? (Math.abs(Number(labelValue)) / 1.0e6).toFixed(percent || 2) + 'M'\n : Math.abs(Number(labelValue)).toFixed(percent || 2);\n};\n\nexport const percentOfBigNumber = (\n percent: number,\n num: number | string,\n precision: number\n) => {\n const valueBig = math.bignumber(num);\n const percentBig = math.bignumber(percent).div(100);\n\n return toPrecision(\n scientificNotationToString(valueBig.mul(percentBig).toString()),\n precision\n );\n};\n\nexport const toRealSymbol = (symbol: string) => {\n if (!symbol) return '';\n const blackList = ['nUSDO'];\n\n if (symbol === 'nWETH' || symbol === 'WETH') return 'wETH';\n if (blackList.includes(symbol)) return symbol;\n return symbol.charAt(0) === 'n' &&\n symbol.charAt(1) === symbol.charAt(1).toUpperCase()\n ? symbol.substring(1)\n : symbol;\n};\n\nexport const calculateFeeCharge = (fee: number, total: string) => {\n return math.floor(math.evaluate(`(${fee} / ${FEE_DIVISOR}) * ${total}`), 3);\n};\n\nexport const calculateFeePercent = (fee: number) => {\n return math.divide(fee, 100);\n};\n\nexport function getExpectedOutputFromSwapTodos(\n estimates: EstimateSwapView[],\n outputToken: string\n) {\n if (!estimates || estimates.length === 0) return new Big(0);\n\n return estimates\n .filter(item => item.outputToken === outputToken)\n .map(item => new Big(item.estimate || 0))\n .reduce((a, b) => a.plus(b), new Big(0));\n}\n\nexport const calculateAmountReceived = (\n pool: Pool,\n amountIn: string,\n tokenIn: TokenMetadata,\n tokenOut: TokenMetadata\n) => {\n const partialAmountIn = toReadableNumber(tokenIn.decimals, amountIn);\n\n const in_balance = toReadableNumber(\n tokenIn.decimals,\n pool.supplies[tokenIn.id]\n );\n const out_balance = toReadableNumber(\n tokenOut.decimals,\n pool.supplies[tokenOut.id]\n );\n\n const big_in_balance = math.bignumber(in_balance);\n const big_out_balance = math.bignumber(out_balance);\n\n const constant_product = big_in_balance.mul(big_out_balance);\n\n const new_in_balance = big_in_balance.plus(math.bignumber(partialAmountIn));\n\n const new_out_balance = constant_product.div(new_in_balance);\n\n const tokenOutReceived = big_out_balance.minus(new_out_balance);\n\n return tokenOutReceived;\n};\n\nexport const calculateMarketPrice = (\n pool: Pool,\n tokenIn: TokenMetadata,\n tokenOut: TokenMetadata\n) => {\n const cur_in_balance = toReadableNumber(\n tokenIn.decimals,\n pool.supplies[tokenIn.id]\n );\n\n const cur_out_balance = toReadableNumber(\n tokenOut.decimals,\n pool.supplies[tokenOut.id]\n );\n\n return math.evaluate(`(${cur_in_balance} / ${cur_out_balance})`);\n};\n\nexport const calculateSmartRoutingPriceImpact = (\n tokenInAmount: string,\n swapTodos: EstimateSwapView[],\n tokenIn: TokenMetadata,\n tokenMid: TokenMetadata,\n tokenOut: TokenMetadata,\n stablePools: StablePool[]\n) => {\n const isPool1StablePool = isStablePool(stablePools, swapTodos[0].pool.id);\n const isPool2StablePool = isStablePool(stablePools, swapTodos[1].pool.id);\n\n const marketPrice1 = isPool1StablePool\n ? (\n Number(swapTodos[0].pool.rates?.[tokenMid.id]) /\n Number(swapTodos[0].pool.rates?.[tokenIn.id])\n ).toString()\n : calculateMarketPrice(swapTodos[0].pool, tokenIn, tokenMid);\n\n const marketPrice2 = isPool2StablePool\n ? (\n Number(swapTodos[1].pool.rates?.[tokenOut.id]) /\n Number(swapTodos[1].pool.rates?.[tokenMid.id])\n ).toString()\n : calculateMarketPrice(swapTodos[1].pool, tokenMid, tokenOut);\n\n const generalMarketPrice = math.evaluate(`${marketPrice1} * ${marketPrice2}`);\n\n const tokenMidReceived = isPool1StablePool\n ? swapTodos[0].noFeeAmountOut\n : calculateAmountReceived(\n swapTodos[0].pool,\n toNonDivisibleNumber(tokenIn.decimals, tokenInAmount),\n tokenIn,\n tokenMid\n );\n\n const formattedTokenMidReceived = scientificNotationToString(\n tokenMidReceived?.toString() || '0'\n );\n\n let stableOutPool2;\n if (isPool2StablePool) {\n const stablePool2 =\n stablePools.find(p => p.id === swapTodos[1].pool.id) || stablePools[0];\n\n const stableOut = getSwappedAmount(\n tokenMid.id,\n tokenOut.id,\n formattedTokenMidReceived,\n stablePool2,\n getStablePoolDecimal(stablePool2)\n );\n stableOutPool2 =\n stableOut[0] < 0\n ? '0'\n : toPrecision(scientificNotationToString(stableOut[2].toString()), 0);\n stableOutPool2 = toReadableNumber(\n getStablePoolDecimal(stablePool2),\n stableOutPool2\n );\n }\n\n const tokenOutReceived = isPool2StablePool\n ? stableOutPool2\n : calculateAmountReceived(\n swapTodos[1].pool,\n toNonDivisibleNumber(tokenMid.decimals, formattedTokenMidReceived),\n tokenMid,\n tokenOut\n );\n\n const newMarketPrice = math.evaluate(\n `${tokenInAmount} / ${tokenOutReceived}`\n );\n\n const PriceImpact = new Big(newMarketPrice)\n .minus(new Big(generalMarketPrice))\n .div(newMarketPrice)\n .times(100)\n .toString();\n\n return scientificNotationToString(PriceImpact);\n};\nexport const percent = (numerator: string, denominator: string) => {\n return math.evaluate(`(${numerator} / ${denominator}) * 100`);\n};\nexport const calcStableSwapPriceImpact = (\n from: string,\n to: string,\n marketPrice: string = '1'\n) => {\n const newMarketPrice = math.evaluate(`${from} / ${to}`);\n\n return math.format(\n percent(\n math.evaluate(`${newMarketPrice} - ${marketPrice}`),\n newMarketPrice\n ),\n {\n notation: 'fixed',\n }\n );\n};\n\nexport const calculatePriceImpact = (\n pools: Pool[],\n tokenIn: TokenMetadata,\n tokenOut: TokenMetadata,\n tokenInAmount: string\n) => {\n let in_balance: string = '0',\n out_balance: string = '0';\n\n pools.forEach((pool, i) => {\n const cur_in_balance = toReadableNumber(\n tokenIn.decimals,\n pool.supplies[tokenIn.id]\n );\n\n const cur_out_balance = toReadableNumber(\n tokenOut.decimals,\n pool.supplies[tokenOut.id]\n );\n\n in_balance = new Big(in_balance).plus(cur_in_balance).toString();\n out_balance = new Big(out_balance).plus(cur_out_balance).toString();\n });\n\n const finalMarketPrice = math.evaluate(`(${in_balance} / ${out_balance})`);\n\n const separatedReceivedAmount = pools.map(pool => {\n return calculateAmountReceived(\n pool,\n pool.partialAmountIn || '0',\n tokenIn,\n tokenOut\n );\n });\n\n const finalTokenOutReceived = math.sum(...separatedReceivedAmount);\n\n const newMarketPrice = math.evaluate(\n `${tokenInAmount} / ${finalTokenOutReceived}`\n );\n\n const PriceImpact = new Big(newMarketPrice)\n .minus(new Big(finalMarketPrice))\n .div(newMarketPrice)\n .times(100)\n .toString();\n\n return scientificNotationToString(PriceImpact);\n};\n\nexport function calculateSmartRoutesV2PriceImpact(\n actions: any,\n outputToken: string,\n tokenInPara: TokenMetadata,\n stablePools: StablePool[]\n) {\n const routes = separateRoutes(actions, outputToken);\n\n const tokenIn = routes[0][0].tokens?.[0] || tokenInPara;\n\n const totalInputAmount = routes[0][0].totalInputAmount;\n\n const priceImpactForRoutes = routes.map((r, i) => {\n const readablePartialAmountIn = toReadableNumber(\n tokenIn.decimals,\n r[0].pool.partialAmountIn\n );\n\n if (r.length > 1) {\n const tokenIn = r[0].tokens?.[0];\n const tokenMid = r[0].tokens?.[1];\n const tokenOut = r[0].tokens?.[2];\n\n return calculateSmartRoutingPriceImpact(\n readablePartialAmountIn,\n routes[i],\n tokenIn || tokenInPara,\n tokenMid || tokenInPara,\n tokenOut || tokenInPara,\n stablePools\n );\n } else {\n return isStablePool(stablePools, r[0].pool.id)\n ? calcStableSwapPriceImpact(\n readablePartialAmountIn,\n r[0].noFeeAmountOut || '0',\n (\n Number(r[0].pool.rates?.[outputToken]) /\n Number(r[0].pool.rates?.[tokenIn.id])\n ).toString()\n )\n : calculatePriceImpact(\n [r[0].pool],\n r[0].tokens?.[0] || tokenIn,\n r[0].tokens?.[1] || tokenIn,\n readablePartialAmountIn\n );\n }\n });\n\n const rawRes = priceImpactForRoutes.reduce(\n (pre, cur, i) => {\n return pre.plus(\n new Big(routes[i][0].pool.partialAmountIn || '0')\n .div(new Big(totalInputAmount || '1'))\n .mul(cur)\n );\n },\n\n new Big(0)\n );\n\n return scientificNotationToString(rawRes.toString());\n}\n\nexport const getPriceImpact = ({\n estimates,\n tokenIn,\n tokenOut,\n amountIn,\n amountOut,\n stablePools,\n}: {\n estimates: EstimateSwapView[];\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n amountOut: string;\n stablePools: StablePool[];\n}) => {\n let PriceImpactValue: string = '0';\n let priceImpactValueSmartRouting: string = '0';\n let priceImpactValueSmartRoutingV2: string = '0';\n\n if (typeof estimates === 'undefined') return '0';\n\n try {\n if (estimates?.length === 2 && estimates[0].status === PoolMode.SMART) {\n priceImpactValueSmartRouting = calculateSmartRoutingPriceImpact(\n amountIn,\n estimates,\n tokenIn,\n estimates[0].tokens?.[1] || tokenIn,\n tokenOut,\n stablePools\n );\n } else if (\n estimates?.length === 1 &&\n estimates[0].status === PoolMode.STABLE\n ) {\n priceImpactValueSmartRouting = calcStableSwapPriceImpact(\n toReadableNumber(tokenIn.decimals, estimates[0].totalInputAmount),\n estimates[0].noFeeAmountOut || '0',\n (\n Number(estimates[0].pool.rates?.[tokenOut.id]) /\n Number(estimates[0].pool.rates?.[tokenIn.id])\n ).toString()\n );\n } else priceImpactValueSmartRouting = '0';\n } catch (error) {\n priceImpactValueSmartRouting = '0';\n }\n\n try {\n priceImpactValueSmartRoutingV2 = calculateSmartRoutesV2PriceImpact(\n estimates,\n tokenOut.id,\n tokenIn,\n stablePools\n );\n } catch (error) {\n priceImpactValueSmartRoutingV2 = '0';\n }\n\n try {\n if (\n estimates[0].status === PoolMode.SMART ||\n estimates[0].status === PoolMode.STABLE\n ) {\n PriceImpactValue = priceImpactValueSmartRouting;\n } else {\n PriceImpactValue = priceImpactValueSmartRoutingV2;\n }\n\n return PriceImpactValue;\n } catch (error) {\n return '0';\n }\n};\n\nexport const subtraction = (initialValue: string, toBeSubtract: string) => {\n return math.format(math.evaluate(`${initialValue} - ${toBeSubtract}`), {\n notation: 'fixed',\n });\n};\n\nexport function getPoolAllocationPercents(pools: Pool[]) {\n if (pools.length === 1) return ['100'];\n\n if (pools) {\n const partialAmounts = pools.map(pool => {\n return math.bignumber(pool.partialAmountIn);\n });\n\n const ps: string[] = new Array(partialAmounts.length).fill('0');\n\n const sum =\n partialAmounts.length === 1\n ? partialAmounts[0]\n : math.sum(...partialAmounts);\n\n const sortedAmount = sortBy(partialAmounts, p => Number(p));\n\n let minIndexes: number[] = [];\n\n for (let k = 0; k < sortedAmount.length - 1; k++) {\n let minIndex = -1;\n\n for (let j = 0; j < partialAmounts.length; j++) {\n if (partialAmounts[j].eq(sortedAmount[k]) && !minIndexes.includes(j)) {\n minIndex = j;\n minIndexes.push(j);\n break;\n }\n }\n const res = math\n .round(percent(partialAmounts[minIndex].toString(), sum))\n .toString();\n\n if (Number(res) === 0) {\n ps[minIndex] = '1';\n } else {\n ps[minIndex] = res;\n }\n }\n\n const finalPIndex = ps.indexOf('0');\n\n ps[finalPIndex] = subtraction(\n '100',\n ps.length === 1 ? Number(ps[0]) : math.sum(...ps.map(p => Number(p)))\n ).toString();\n\n return ps;\n } else {\n return [];\n }\n}\n\nexport const isMobile = (): boolean => {\n return window.screen.width <= 600;\n};\nexport function divide(numerator: string, denominator: string) {\n return math.format(math.evaluate(`${numerator} / ${denominator}`), {\n notation: 'fixed',\n });\n}\n\nexport const getMax = function(id: string, amount: string) {\n return id !== WRAP_NEAR_CONTRACT_ID\n ? amount\n : Number(amount) <= 0.5\n ? '0'\n : String(Number(amount) - 0.5);\n};\n\nexport function getPointByPrice(\n pointDelta: number,\n price: string,\n decimalRate: number,\n noNeedSlot?: boolean\n) {\n const point = Math.log(+price * decimalRate) / Math.log(CONSTANT_D);\n const point_int = Math.round(point);\n let point_int_slot = point_int;\n if (!noNeedSlot) {\n point_int_slot = Math.floor(point_int / pointDelta) * pointDelta;\n }\n if (point_int_slot < POINTLEFTRANGE) {\n return POINTLEFTRANGE;\n } else if (point_int_slot > POINTRIGHTRANGE) {\n return 800000;\n }\n return point_int_slot;\n}\nexport const feeToPointDelta = (fee: number) => {\n switch (fee) {\n case 100:\n return 1;\n case 400:\n return 8;\n case 2000:\n return 40;\n case 10000:\n return 200;\n default:\n throw NoFeeToPool(fee);\n }\n};\n\nexport const priceToPoint = ({\n tokenA,\n tokenB,\n amountA,\n amountB,\n fee,\n}: {\n tokenA: TokenMetadata;\n tokenB: TokenMetadata;\n amountA: string;\n amountB: string;\n fee: number;\n}) => {\n if (DCL_POOL_FEE_LIST.indexOf(fee) === -1) throw NoFeeToPool(fee);\n\n const decimal_price_A_by_B = new Big(amountB).div(amountA);\n const undecimal_price_A_by_B = decimal_price_A_by_B\n .times(new Big(10).pow(tokenB.decimals))\n .div(new Big(10).pow(tokenA.decimals));\n\n const pointDelta = feeToPointDelta(fee);\n\n const price = decimal_price_A_by_B;\n\n const decimalRate = new Big(10)\n .pow(tokenB.decimals)\n .div(new Big(10).pow(tokenA.decimals))\n .toNumber();\n\n return getPointByPrice(\n pointDelta,\n scientificNotationToString(price.toString()),\n decimalRate\n );\n};\n\nexport const pointToPrice = ({\n tokenA,\n tokenB,\n point,\n}: {\n tokenA: TokenMetadata;\n tokenB: TokenMetadata;\n point: number;\n}) => {\n const undecimal_price = Math.pow(CONSTANT_D, point);\n const decimal_price_A_by_B = new Big(undecimal_price)\n .times(new Big(10).pow(tokenA.decimals))\n .div(new Big(10).pow(tokenB.decimals));\n\n return scientificNotationToString(decimal_price_A_by_B.toString());\n};\n\nexport const registerAccountOnToken = (AccountId: string) => {\n return {\n methodName: 'storage_deposit',\n args: {\n registration_only: true,\n account_id: AccountId,\n },\n gas: '30000000000000',\n amount: STORAGE_TO_REGISTER_WITH_MFT,\n };\n};\n","import {\n keyStores,\n KeyPair,\n InMemorySigner,\n providers,\n transactions as nearTransactions,\n utils,\n} from 'near-api-js';\nimport BN from 'bn.js';\nimport { getConfig } from './constant';\nimport fs from 'fs';\nimport os from 'os';\nimport {\n NoPuiblicKeyError,\n InValidAccessKeyError,\n NoCredential,\n} from './error';\nimport { AccessKeyView } from 'near-api-js/lib/providers/provider';\nimport { TransformedTransaction } from './types';\nimport { Transaction } from './types';\nimport { transformTransactions } from './utils';\nimport { AccountIdMisMatch } from './error';\n\nexport const getKeyStore = () => {\n return typeof window === 'undefined'\n ? new keyStores.InMemoryKeyStore()\n : new keyStores.BrowserLocalStorageKeyStore();\n};\n\nexport const provider = new providers.JsonRpcProvider({\n url: getConfig().nodeUrl,\n});\n\nexport const getMemorySigner = async ({\n AccountId,\n keyPath,\n}: {\n AccountId: string;\n keyPath: string;\n}) => {\n try {\n // const homedir = os.homedir();\n const credentials = JSON.parse(fs.readFileSync(keyPath).toString());\n\n const credentialAccountId = credentials?.account_id;\n\n if (!credentialAccountId) throw NoCredential;\n\n if (credentialAccountId !== AccountId) throw AccountIdMisMatch;\n\n const myKeyStore = new keyStores.InMemoryKeyStore();\n myKeyStore.setKey(\n getConfig().networkId,\n AccountId,\n KeyPair.fromString(credentials.private_key)\n );\n\n const signer = new InMemorySigner(myKeyStore);\n\n return signer;\n } catch (error) {\n throw error;\n }\n};\n\nconst validateAccessKey = (\n transaction: TransformedTransaction,\n accessKey: AccessKeyView\n) => {\n if (accessKey.permission === 'FullAccess') {\n return accessKey;\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const { receiver_id, method_names } = accessKey.permission.FunctionCall;\n\n if (transaction.receiverId !== receiver_id) {\n return null;\n }\n\n return transaction.actions.every(action => {\n if (action.type !== 'FunctionCall') {\n return false;\n }\n\n const { methodName, deposit } = action.params;\n\n if (method_names.length && method_names.includes(methodName)) {\n return false;\n }\n\n return parseFloat(deposit) <= 0;\n });\n};\n\nexport const getSignedTransactionsByMemoryKey = async ({\n transactionsRef,\n AccountId,\n keyPath,\n}: {\n transactionsRef: Transaction[];\n AccountId: string;\n keyPath: string;\n}) => {\n const transactions = transformTransactions(transactionsRef, AccountId);\n\n const block = await provider.block({ finality: 'final' });\n\n const signedTransactions: Array<nearTransactions.SignedTransaction> = [];\n const signer = await getMemorySigner({\n AccountId,\n keyPath,\n });\n\n for (let i = 0; i < transactions.length; i += 1) {\n const transaction = transactions[i];\n\n const publicKey = await signer.getPublicKey(\n AccountId,\n getConfig().networkId\n );\n if (!publicKey) {\n throw NoPuiblicKeyError;\n }\n\n const accessKey = await provider.query<AccessKeyView>({\n request_type: 'view_access_key',\n finality: 'final',\n account_id: AccountId,\n public_key: publicKey.toString(),\n });\n\n if (!validateAccessKey(transaction, accessKey)) {\n throw InValidAccessKeyError;\n }\n\n const tx = nearTransactions.createTransaction(\n AccountId,\n utils.PublicKey.from(publicKey.toString()),\n transactions[i].receiverId,\n accessKey.nonce + i + 1,\n transaction.actions.map(action => {\n const { methodName, args, gas, deposit } = action.params;\n return nearTransactions.functionCall(\n methodName,\n args,\n new BN(gas),\n new BN(deposit)\n );\n }),\n utils.serialize.base_decode(block.header.hash)\n );\n\n const [, signedTx] = await nearTransactions.signTransaction(\n tx,\n signer,\n transactions[i].signerId,\n getConfig().networkId\n );\n signedTransactions.push(signedTx);\n }\n\n return signedTransactions;\n};\n\nexport const sendTransactionsByMemoryKey = async ({\n signedTransactions,\n}: {\n signedTransactions: nearTransactions.SignedTransaction[];\n}) => {\n try {\n const results: Array<providers.FinalExecutionOutcome> = [];\n\n for (let i = 0; i < signedTransactions.length; i += 1) {\n results.push(await provider.sendTransaction(signedTransactions[i]));\n }\n\n return results;\n } catch (err) {\n throw err;\n }\n};\n","import {\n REF_FI_CONTRACT_ID,\n config,\n WRAP_NEAR_CONTRACT_ID,\n NEAR_META_DATA,\n getConfig,\n switchEnv,\n} from './constant';\nimport {\n keyStores,\n Near,\n providers,\n WalletConnection,\n utils,\n} from 'near-api-js';\nimport { NoAccountIdFound, TokenNotExistError, DCLInValid } from './error';\nimport { getKeyStore } from './near';\n\nimport {\n TokenMetadata,\n FTStorageBalance,\n RefFiViewFunctionOptions,\n} from './types';\nimport { AccountView } from 'near-api-js/lib/providers/provider';\nimport { Transaction } from './types';\nimport { ONE_YOCTO_NEAR, REF_TOKEN_ID, REF_META_DATA } from './constant';\n\nimport metaIconDefaults from './metaIcons';\n\nconst BANANA_ID = 'berryclub.ek.near';\nconst CHEDDAR_ID = 'token.cheddar.near';\nconst CUCUMBER_ID = 'farm.berryclub.ek.near';\nconst HAPI_ID = 'd9c2d319cd7e6177336b0a9c93c21cb48d84fb54.factory.bridge.near';\nconst WOO_ID = '4691937a7508860f876c9c0a2a617e7d9e945d4b.factory.bridge.near';\n\nexport const REPLACE_TOKENS = [\n BANANA_ID,\n CHEDDAR_ID,\n CUCUMBER_ID,\n HAPI_ID,\n WOO_ID,\n];\n\nlet near = new Near({\n keyStore: getKeyStore(),\n headers: {},\n ...getConfig(),\n});\nexport const init_env = (env: string) => {\n near = new Near({\n keyStore: getKeyStore(),\n headers: {},\n ...getConfig(env),\n });\n return switchEnv();\n};\n\nexport const refFiViewFunction = async ({\n methodName,\n args,\n}: RefFiViewFunctionOptions) => {\n const nearConnection = await near.account(REF_FI_CONTRACT_ID);\n\n return nearConnection.viewFunction(REF_FI_CONTRACT_ID, methodName, args);\n};\n\nexport const ftViewFunction = async (\n tokenId: string,\n { methodName, args }: RefFiViewFunctionOptions\n) => {\n const nearConnection = await near.account(REF_FI_CONTRACT_ID);\n\n return nearConnection.viewFunction(tokenId, methodName, args);\n};\n\nexport const ftGetStorageBalance = (\n tokenId: string,\n AccountId: string\n): Promise<FTStorageBalance | null> => {\n if (!AccountId) throw NoAccountIdFound;\n\n return ftViewFunction(tokenId, {\n methodName: 'storage_balance_of',\n args: { account_id: AccountId },\n });\n};\n\nexport const ftGetBalance = async (tokenId: string, AccountId: string) => {\n if (!AccountId) return '0';\n\n if (tokenId === 'NEAR') {\n return getAccountNearBalance(AccountId).catch(() => '0');\n }\n\n return ftViewFunction(tokenId, {\n methodName: 'ft_balance_of',\n args: {\n account_id: AccountId,\n },\n })\n .then(res => {\n return res;\n })\n .catch(() => '0');\n};\n\nexport const getTotalPools = async () => {\n return refFiViewFunction({\n methodName: 'get_number_of_pools',\n });\n};\n\nexport const ftGetTokenMetadata = async (\n id: string,\n tag?: string\n): Promise<TokenMetadata> => {\n if (id === REF_TOKEN_ID) return REF_META_DATA;\n\n const metadata = await ftViewFunction(id, {\n methodName: 'ft_metadata',\n }).catch(() => {\n throw TokenNotExistError(id);\n });\n\n if (\n !metadata.icon ||\n id === BANANA_ID ||\n id === CHEDDAR_ID ||\n id === CUCUMBER_ID ||\n id === HAPI_ID ||\n id === WOO_ID ||\n id === WRAP_NEAR_CONTRACT_ID\n ) {\n return {\n ...metadata,\n icon: metaIconDefaults[id],\n id,\n };\n }\n\n return { ...metadata, id };\n};\n\nexport const ftGetTokensMetadata = async (\n tokenIds?: string[],\n allTokens?: Record<string, TokenMetadata>\n) => {\n const ids = tokenIds || (await getGlobalWhitelist());\n\n const tokensMetadata = await Promise.all(\n ids.map(\n (id: string) =>\n allTokens?.[id] || ftGetTokenMetadata(id).catch(() => null)\n )\n );\n\n return tokensMetadata.reduce((pre, cur, i) => {\n return {\n ...pre,\n [ids[i]]: cur,\n };\n }, {}) as Record<string, TokenMetadata>;\n};\n\nexport const getGlobalWhitelist = async (): Promise<string[]> => {\n const globalWhitelist = await refFiViewFunction({\n methodName: 'get_whitelisted_tokens',\n });\n return Array.from(new Set(globalWhitelist));\n};\n\nexport const getUserRegisteredTokens = async (\n AccountId?: string\n): Promise<string[]> => {\n if (!AccountId) return [];\n\n return refFiViewFunction({\n methodName: 'get_user_whitelisted_tokens',\n args: { account_id: AccountId },\n });\n};\n\nexport const getAccountNearBalance = async (accountId: string) => {\n const provider = new providers.JsonRpcProvider({\n url: getConfig().nodeUrl,\n });\n\n return provider\n .query<AccountView>({\n request_type: 'view_account',\n finality: 'final',\n account_id: accountId,\n })\n .then(data => data.amount);\n};\n\nexport const nearDepositTransaction = (amount: string) => {\n const transaction: Transaction = {\n receiverId: WRAP_NEAR_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'near_deposit',\n args: {},\n gas: '50000000000000',\n amount,\n },\n ],\n };\n\n return transaction;\n};\n\nexport const nearWithdrawTransaction = (amount: string) => {\n const transaction: Transaction = {\n receiverId: WRAP_NEAR_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'near_withdraw',\n args: { amount: utils.format.parseNearAmount(amount) },\n amount: ONE_YOCTO_NEAR,\n },\n ],\n };\n return transaction;\n};\n\nexport const refDCLSwapViewFunction = async ({\n methodName,\n args,\n}: RefFiViewFunctionOptions) => {\n const nearConnection = await near.account(REF_FI_CONTRACT_ID);\n\n if (!config.REF_DCL_SWAP_CONTRACT_ID) throw DCLInValid;\n\n return nearConnection.viewFunction(\n config.REF_DCL_SWAP_CONTRACT_ID,\n methodName,\n args\n );\n};\n\nexport const DCLSwapGetStorageBalance = (\n tokenId: string,\n AccountId: string\n) => {\n return refDCLSwapViewFunction({\n methodName: 'storage_balance_of',\n args: { account_id: AccountId },\n });\n};\n","import { TokenMetadata, Transaction } from '../types';\nimport {\n priceToPoint,\n toNonDivisibleNumber,\n toPrecision,\n registerAccountOnToken,\n} from '../utils';\nimport { ONE_YOCTO_NEAR, WRAP_NEAR_CONTRACT_ID, config } from '../constant';\nimport {\n nearDepositTransaction,\n ftGetStorageBalance,\n refDCLSwapViewFunction,\n} from '../ref';\nimport { NoFeeToPool } from '../error';\n\nexport const DCL_POOL_FEE_LIST = [100, 400, 2000, 10000];\n\ninterface PoolInfo {\n pool_id?: string;\n token_x?: string;\n token_y?: string;\n fee: number;\n point_delta?: number;\n current_point?: number;\n state?: string;\n liquidity?: string;\n liquidity_x?: string;\n max_liquidity_per_point?: string;\n percent?: string;\n total_x?: string;\n total_y?: string;\n tvl?: number;\n token_x_metadata?: TokenMetadata;\n token_y_metadata?: TokenMetadata;\n}\n\nexport const getDCLPoolId = (tokenA: string, tokenB: string, fee: number) => {\n if (DCL_POOL_FEE_LIST.indexOf(fee) === -1) throw NoFeeToPool(fee);\n\n const tokenSeq = [tokenA, tokenB].sort().join('|');\n\n return `${tokenSeq}|${fee}`;\n};\nexport const listDCLPools = () => {\n return refDCLSwapViewFunction({\n methodName: 'list_pools',\n });\n};\n\nexport const getDCLPool = async (pool_id: string) => {\n const [token_x, token_y, fee] = pool_id.split('|');\n\n const token_seq = [token_x, token_y].sort().join('|');\n\n const new_pool_id = `${token_seq}|${fee}`;\n\n return refDCLSwapViewFunction({\n methodName: 'get_pool',\n args: {\n pool_id: new_pool_id,\n },\n }) as Promise<PoolInfo>;\n};\n","import { config, getConfig } from './constant';\nimport { DCL_POOL_FEE_LIST } from './dcl-swap/dcl-pool';\n\nexport const formatError = (msg: string) => {\n return new Error(msg);\n};\n\nexport const unNamedError = formatError('Something wrong happened');\n\nexport const SameInputTokenError = formatError(\n 'Input token should be different with output token'\n);\n\nexport const ZeroInputError = formatError(\n 'Input amount should be greater than 0'\n);\n\nexport const NoPoolError = formatError('No pool found for the input tokens');\n\nexport const NotLoginError = formatError('Please login in first');\n\nexport const SwapRouteError = formatError(\n \"Something wrong happened, we don't get correct routes corrreponding to current input\"\n);\n\nexport const TokenNotExistError = (id: string) =>\n formatError(`${id} doesn't exist in ${getConfig().networkId}`);\n\nexport const NoPuiblicKeyError = formatError('No public key found');\n\nexport const NoLocalSignerError = formatError('No local signer found');\n\nexport const InValidAccessKeyError = formatError('Invalid access key');\n\nexport const AccountIdMisMatch = formatError(\n \"Your input account id doesn't match the account id in the credential\"\n);\n\nexport const NoCredential = formatError('No Credential to such path');\n\nexport const NoAccountIdFound = formatError('No account id found');\n\nexport const NoFeeToPool = (fee: number) =>\n formatError(\n `InValid fee ${fee} to DCL pool, the valid fee should be one of ${DCL_POOL_FEE_LIST}`\n );\n\nexport const DCLInValid = formatError(\n `DCL contract currently in Valid on ${config.networkId}`\n);\n\nexport const NoPoolOnThisPair = (tokenA: string, tokenB: string) =>\n formatError(`No pools on pair ${tokenA} <> ${tokenB}`);\n\nexport const SlippageError = formatError(\n 'slippage tolerance should be in range (0, 100)'\n);\n\nexport const NoOrderFound = (order_id?: string) =>\n formatError(`No order ${order_id || ''} found`);\n\nexport const OrderNoRemainedAmount = formatError(\n 'No remained amount on this order'\n);\n","import { TokenMetadata, EstimateSwapView, Transaction } from '../types';\nimport { ftGetStorageBalance } from '../ref';\nimport {\n STORAGE_TO_REGISTER_WITH_MFT,\n REF_FI_CONTRACT_ID,\n ONE_YOCTO_NEAR,\n} from '../constant';\nimport { round, percentLess } from '../utils';\nimport { toNonDivisibleNumber } from '../utils';\nimport { config } from '../constant';\nimport { SwapRouteError } from '../error';\n\nexport const instantSwap = async ({\n tokenIn,\n tokenOut,\n amountIn,\n slippageTolerance,\n swapTodos,\n AccountId,\n referralId,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n slippageTolerance: number;\n swapTodos: EstimateSwapView[];\n AccountId: string;\n referralId?: string;\n}) => {\n const transactions: Transaction[] = [];\n\n if (swapTodos?.[swapTodos?.length - 1]?.outputToken !== tokenOut.id)\n throw SwapRouteError;\n\n const registerToken = async (token: TokenMetadata) => {\n const tokenRegistered = await ftGetStorageBalance(\n token.id,\n AccountId\n ).catch(() => {\n throw new Error(`${token.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: token.id,\n functionCalls: [\n {\n methodName: 'storage_deposit',\n args: {\n registration_only: true,\n account_id: AccountId,\n },\n gas: '30000000000000',\n amount: STORAGE_TO_REGISTER_WITH_MFT,\n },\n ],\n });\n }\n };\n\n if (tokenIn.id === config.WRAP_NEAR_CONTRACT_ID) {\n const registered = await ftGetStorageBalance(\n config.WRAP_NEAR_CONTRACT_ID,\n AccountId\n );\n if (registered === null) {\n await registerToken(tokenIn);\n }\n }\n\n await registerToken(tokenOut);\n let actionsList: any = [];\n let allSwapsTokens = swapTodos.map(s => [s.inputToken, s.outputToken]); // to get the hop tokens\n for (let i in allSwapsTokens) {\n let swapTokens = allSwapsTokens[i];\n if (swapTokens[0] === tokenIn.id && swapTokens[1] === tokenOut.id) {\n // parallel, direct hop route.\n actionsList.push({\n pool_id: swapTodos[i].pool.id,\n token_in: tokenIn.id,\n token_out: tokenOut.id,\n amount_in: swapTodos[i].pool.partialAmountIn,\n min_amount_out: round(\n tokenOut.decimals,\n toNonDivisibleNumber(\n tokenOut.decimals,\n percentLess(slippageTolerance, swapTodos[i].estimate)\n )\n ),\n });\n } else if (swapTokens[0] === tokenIn.id) {\n // first hop in double hop route\n //TODO -- put in a check to make sure this first hop matches with the next (i+1) hop as a second hop.\n actionsList.push({\n pool_id: swapTodos[i].pool.id,\n token_in: swapTokens[0],\n token_out: swapTokens[1],\n amount_in: swapTodos[i].pool.partialAmountIn,\n min_amount_out: '0',\n });\n } else {\n // second hop in double hop route.\n //TODO -- put in a check to make sure this second hop matches with the previous (i-1) hop as a first hop.\n actionsList.push({\n pool_id: swapTodos[i].pool.id,\n token_in: swapTokens[0],\n token_out: swapTokens[1],\n min_amount_out: round(\n tokenOut.decimals,\n toNonDivisibleNumber(\n tokenOut.decimals,\n percentLess(slippageTolerance, swapTodos[i].estimate)\n )\n ),\n });\n }\n }\n\n transactions.push({\n receiverId: tokenIn.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: REF_FI_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenIn.decimals, amountIn),\n msg: !!referralId\n ? JSON.stringify({\n force: 0,\n actions: actionsList,\n referral_id: referralId,\n })\n : JSON.stringify({\n force: 0,\n actions: actionsList,\n }),\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n\n return transactions;\n};\n","import { getTotalPools, refFiViewFunction } from '../ref';\nimport { Pool, PoolRPCView } from '../types';\nimport { parsePool, toNonDivisibleNumber } from '../utils';\nimport { STABLE_LP_TOKEN_DECIMALS } from '../constant';\n\nlet DEFAULT_PAGE_LIMIT = 100;\nconst BLACK_TOKEN_LIST = ['meta-token.near'];\n\nexport const getRatedPoolDetail = async ({ id }: { id: string | number }) => {\n return refFiViewFunction({\n methodName: 'get_rated_pool',\n args: { pool_id: Number(id) },\n }).then(pool_info => ({\n ...pool_info,\n id: Number(id),\n pool_kind: 'RATED_SWAP',\n }));\n};\n\nexport const getUnRatedPoolDetail = async ({ id }: { id: string | number }) => {\n return refFiViewFunction({\n methodName: 'get_stable_pool',\n args: { pool_id: Number(id) },\n }).then(pool_info => ({\n ...pool_info,\n id: Number(id),\n pool_kind: 'STABLE_SWAP',\n rates: pool_info.c_amounts.map((_: any) =>\n toNonDivisibleNumber(STABLE_LP_TOKEN_DECIMALS, '1')\n ),\n }));\n};\n\nexport const getStablePools = async (stablePools: Pool[]) => {\n return Promise.all(\n stablePools.map(pool =>\n pool.pool_kind === 'RATED_SWAP'\n ? getRatedPoolDetail({ id: pool.id })\n : getUnRatedPoolDetail({ id: pool.id })\n )\n );\n};\n\nexport const getPool = async (id: number): Promise<Pool> => {\n return await refFiViewFunction({\n methodName: 'get_pool',\n args: { pool_id: id },\n }).then((pool: PoolRPCView) => parsePool(pool, id));\n};\n\nexport const getPoolByIds = async (ids: number[]): Promise<Pool[]> => {\n return await refFiViewFunction({\n methodName: 'get_pool_by_ids',\n args: { pool_ids: ids },\n }).then((pools: PoolRPCView[]) => pools.map((p, i) => parsePool(p, ids[i])));\n};\n\nexport const getRefPools = async (\n page: number = 1,\n perPage: number = DEFAULT_PAGE_LIMIT\n): Promise<Pool[]> => {\n const index = (page - 1) * perPage;\n const poolData: PoolRPCView[] = await refFiViewFunction({\n methodName: 'get_pools',\n args: { from_index: index, limit: perPage },\n });\n return poolData\n .map((rawPool, i) => parsePool(rawPool, i + index))\n .filter(\n p => !p.tokenIds?.find(tokenId => BLACK_TOKEN_LIST.includes(tokenId))\n );\n};\n\nexport const fetchAllPools = async (perPage?: number) => {\n if (perPage) {\n DEFAULT_PAGE_LIMIT = Math.min(perPage, 500);\n }\n const totalPools = await getTotalPools();\n const pages = Math.ceil(totalPools / DEFAULT_PAGE_LIMIT);\n const pools = (\n await Promise.all(\n [...Array(pages)].fill(0).map((_, i) => getRefPools(i + 1))\n )\n ).flat() as Pool[];\n return {\n simplePools: pools.filter(\n p => p.pool_kind && p.pool_kind === 'SIMPLE_POOL'\n ),\n unRatedPools: pools.filter(\n p => p.pool_kind && p.pool_kind === 'STABLE_SWAP'\n ),\n ratedPools: pools.filter(p => p.pool_kind && p.pool_kind === 'RATED_SWAP'),\n };\n};\n","import React, {\n useEffect,\n useState,\n useContext,\n createContext,\n ReactNode,\n} from 'react';\nimport {\n ftGetBalance,\n ftGetTokenMetadata,\n getGlobalWhitelist,\n nearDepositTransaction,\n nearWithdrawTransaction,\n REPLACE_TOKENS,\n} from '../ref';\nimport {\n EstimateSwapView,\n Pool,\n StablePool,\n TokenMetadata,\n Transaction,\n} from '../types';\nimport { fetchAllPools, getStablePools } from '../v1-swap/pool';\nimport { estimateSwap, SwapOptions, SwapParams } from '../v1-swap/swap';\nimport { SwapOutParams } from './types';\nimport {\n percentLess,\n separateRoutes,\n toNonDivisibleNumber,\n calculateExchangeRate,\n getAvgFee,\n} from '../utils';\nimport Big from 'big.js';\nimport { instantSwap } from '../v1-swap/instantSwap';\n\nimport { getExpectedOutputFromActionsORIG } from '../v1-swap/smartRoutingLogic.js';\nimport { Theme } from './constant';\nimport { defaultTheme } from './constant';\nimport {\n getTokenPriceList,\n getTokens,\n getWhiteListTokensIndexer,\n} from '../indexer';\nimport {\n toReadableNumber,\n ONLY_ZEROS,\n getExpectedOutputFromSwapTodos,\n} from '../utils';\nimport { getUserRegisteredTokens } from '../ref';\nimport { WRAP_NEAR_CONTRACT_ID, NEAR_META_DATA } from '../constant';\nimport { scientificNotationToString } from '../utils';\nimport metaIconDefaults from '../metaIcons';\n\nexport const ThemeContext = createContext<Theme>(defaultTheme);\n\nexport const ThemeContextProvider: React.FC<{\n customTheme: Theme | undefined;\n}> = ({ customTheme, children }) => {\n const [theme, setTheme] = useState<Theme>(customTheme || defaultTheme);\n\n useEffect(() => {\n if (!customTheme) return;\n setTheme(customTheme);\n }, [customTheme]);\n\n return (\n <ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>\n );\n};\n\nexport const estimateValidator = (\n swapTodos: EstimateSwapView[],\n tokenIn: TokenMetadata,\n parsedAmountIn: string,\n tokenOut: TokenMetadata\n) => {\n const tokenInId = swapTodos[0]?.inputToken;\n const tokenOutId = swapTodos[swapTodos.length - 1]?.outputToken;\n\n const totalPartialAmountIn =\n swapTodos.length === 0\n ? new Big(swapTodos[0].pool.partialAmountIn || 0)\n : swapTodos.reduce(\n (acc, cur, i) => acc.plus(cur.pool.partialAmountIn || 0),\n new Big(0)\n );\n\n if (\n tokenInId !== tokenIn.id ||\n tokenOutId !== tokenOut.id ||\n !totalPartialAmountIn.eq(parsedAmountIn || '0')\n ) {\n return false;\n }\n return true;\n};\n\nexport const useAllTokens = ({ reload }: { reload?: boolean }) => {\n const [tokens, setTokens] = useState<Record<string, TokenMetadata>>();\n const [tokensLoading, setTokensLoading] = useState<boolean>(true);\n\n useEffect(() => {\n const fetchTokens = async () => {\n const tokens = await getTokens(reload);\n setTokens(tokens);\n setTokensLoading(false);\n };\n fetchTokens();\n }, [reload]);\n\n return { tokens, tokensLoading };\n};\n\nexport const useTokensIndexer = ({\n defaultTokenList,\n AccountId,\n}: {\n defaultTokenList?: TokenMetadata[];\n AccountId?: string;\n}) => {\n const [tokens, setTokens] = useState<TokenMetadata[]>([]);\n\n const [tokenLoading, setTokenLoading] = useState<boolean>(false);\n\n useEffect(() => {\n setTokenLoading(true);\n\n const getTokensList = async () => {\n const whiteList = await getGlobalWhitelist();\n const globalWhiteListTokens = (\n await getWhiteListTokensIndexer(whiteList)\n ).filter(token => !!token) as TokenMetadata[];\n\n const parsedTokens = globalWhiteListTokens.map(t => {\n return t.id === WRAP_NEAR_CONTRACT_ID\n ? {\n ...NEAR_META_DATA,\n id: t.id,\n }\n : t;\n });\n\n if (!defaultTokenList || defaultTokenList.length === 0) {\n setTokens(parsedTokens);\n setTokenLoading(false);\n } else {\n const newList = defaultTokenList\n .map(t => {\n return t.id === WRAP_NEAR_CONTRACT_ID\n ? {\n ...NEAR_META_DATA,\n id: t.id,\n }\n : t;\n })\n .filter(t => {\n return parsedTokens.findIndex(p => p.id === t.id) !== -1;\n });\n setTokens(\n newList.map(t =>\n !t.icon || REPLACE_TOKENS.includes(t.id)\n ? {\n ...t,\n icon: metaIconDefaults[t.id],\n }\n : t\n )\n );\n setTokenLoading(false);\n }\n };\n\n getTokensList();\n }, [AccountId, defaultTokenList]);\n\n return { tokens, tokenLoading };\n};\n\nexport const useRefPools = (refreshTrigger: boolean) => {\n const [allPools, setAllPools] = useState<{\n simplePools: Pool[];\n ratedPools: Pool[];\n unRatedPools: Pool[];\n }>({\n simplePools: [],\n ratedPools: [],\n unRatedPools: [],\n });\n\n const [poolFetchingState, setPoolFetchingState] = useState<'loading' | 'end'>(\n 'loading'\n );\n\n const [allStablePools, setAllStablePools] = useState<StablePool[]>([]);\n\n useEffect(() => {\n setPoolFetchingState('loading');\n\n fetchAllPools()\n .then(allPools => {\n setAllPools(allPools);\n\n return allPools;\n })\n .then(allPools => {\n const pools: Pool[] = allPools.unRatedPools.concat(allPools.ratedPools);\n\n return getStablePools(pools).then(setAllStablePools);\n })\n .finally(() => {\n setPoolFetchingState('end');\n });\n }, [refreshTrigger]);\n\n return {\n allPools,\n allStablePools,\n poolFetchingState,\n };\n};\n\nexport const useSwap = (\n params: {\n tokenIn?: TokenMetadata;\n tokenOut?: TokenMetadata;\n amountIn: string;\n simplePools: Pool[];\n options?: SwapOptions;\n } & {\n slippageTolerance: number;\n refreshTrigger: boolean;\n onSwap: (transactionsRef: Transaction[]) => void;\n AccountId?: string;\n poolFetchingState?: 'loading' | 'end';\n referralId?: string;\n }\n): SwapOutParams => {\n const {\n slippageTolerance,\n refreshTrigger,\n onSwap,\n AccountId,\n poolFetchingState,\n referralId,\n ...swapParams\n } = params;\n\n const { tokenIn, tokenOut, amountIn } = params;\n\n const [estimates, setEstimates] = useState<EstimateSwapView[]>([]);\n\n const [canSwap, setCanSwap] = useState(false);\n\n const [swapError, setSwapError] = useState<Error | null>(null);\n\n const [amountOut, setAmountOut] = useState<string>('');\n\n const [isEstimating, setIsEstimating] = useState<boolean>(false);\n\n const [forceEstimate, setForceEstimate] = useState<boolean>(false);\n\n const minAmountOut = amountOut\n ? percentLess(slippageTolerance, amountOut)\n : '';\n\n const fee =\n !params.tokenOut || !params.tokenIn\n ? 0\n : getAvgFee(\n estimates,\n params.tokenOut.id,\n toNonDivisibleNumber(params.tokenIn.decimals, params.amountIn)\n );\n\n const rate = calculateExchangeRate(\n ONLY_ZEROS.test(params.amountIn) ? '1' : params.amountIn,\n amountOut || '1'\n );\n\n const makeSwap = async () => {\n if (!params.tokenIn || !params.tokenOut) return;\n\n const transactionsRef = await instantSwap({\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n amountIn: params.amountIn,\n swapTodos: estimates,\n slippageTolerance,\n AccountId: AccountId || '',\n referralId,\n });\n if (tokenIn && tokenIn.id === WRAP_NEAR_CONTRACT_ID) {\n transactionsRef.splice(-1, 0, nearDepositTransaction(amountIn));\n }\n if (tokenOut && tokenOut.id === WRAP_NEAR_CONTRACT_ID) {\n let outEstimate = new Big(0);\n const routes = separateRoutes(estimates, tokenOut.id);\n\n const bigEstimate = routes.reduce((acc, cur) => {\n const curEstimate = cur[cur.length - 1].estimate;\n return acc.plus(curEstimate);\n }, outEstimate);\n\n const minAmountOut = percentLess(\n slippageTolerance,\n\n scientificNotationToString(bigEstimate.toString())\n );\n\n transactionsRef.push(nearWithdrawTransaction(minAmountOut));\n }\n\n onSwap(transactionsRef);\n };\n\n const getEstimate = () => {\n if (\n !params.tokenIn ||\n !params.tokenOut ||\n poolFetchingState === 'loading'\n ) {\n setCanSwap(false);\n return;\n }\n setCanSwap(false);\n\n if (\n ONLY_ZEROS.test(params.amountIn) ||\n !params.tokenOut ||\n !params.tokenIn\n ) {\n setAmountOut('');\n setEstimates([]);\n return;\n }\n\n setSwapError(null);\n setIsEstimating(true);\n estimateSwap({\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n amountIn: params.amountIn,\n simplePools: params.simplePools,\n options: params.options,\n })\n .then(estimates => {\n if (\n ONLY_ZEROS.test(params.amountIn) ||\n !params.tokenOut ||\n !params.tokenIn\n ) {\n setAmountOut('');\n return;\n }\n setSwapError(null);\n\n const expectAmountOut = getExpectedOutputFromSwapTodos(\n estimates,\n params.tokenOut.id\n ).toString();\n\n setAmountOut(expectAmountOut);\n\n setEstimates(estimates);\n setCanSwap(true);\n })\n .catch(e => {\n setSwapError(e);\n setCanSwap(false);\n setAmountOut('');\n })\n .finally(() => {\n setIsEstimating(false);\n setForceEstimate(false);\n });\n };\n\n useEffect(() => {\n const estimateValidationPass =\n estimates.length > 0 &&\n params.tokenIn &&\n params.tokenOut &&\n estimateValidator(\n estimates,\n params.tokenIn,\n toNonDivisibleNumber(params.tokenIn.decimals, params.amountIn),\n params.tokenOut\n );\n\n if (isEstimating && estimates && !forceEstimate) return;\n if ((estimateValidationPass || swapError) && !forceEstimate) return;\n getEstimate();\n }, [\n params.amountIn,\n params.tokenIn?.id,\n params.tokenOut?.id,\n refreshTrigger,\n poolFetchingState,\n isEstimating,\n forceEstimate,\n ]);\n\n useEffect(() => {\n // setEstimating(false);\n\n setForceEstimate(true);\n }, [\n params.tokenIn?.id,\n params.tokenOut?.id,\n params.options?.enableSmartRouting,\n ]);\n\n return {\n amountOut,\n minAmountOut,\n fee,\n rate,\n estimates,\n makeSwap,\n canSwap,\n swapError,\n setAmountOut,\n isEstimating,\n };\n};\n\nexport const TokenPriceContext = createContext<Record<string, any> | null>(\n null\n);\n\nexport const useTokenPriceList = () => {\n const [tokenPriceList, setTokenPriceList] = useState<Record<string, any>>({});\n\n useEffect(() => {\n getTokenPriceList().then(setTokenPriceList);\n }, []);\n\n return tokenPriceList;\n};\n\nexport const TokenPriceContextProvider: React.FC = ({ children }) => {\n const tokenPriceList = useTokenPriceList();\n\n return (\n <TokenPriceContext.Provider value={tokenPriceList}>\n {children}\n </TokenPriceContext.Provider>\n );\n};\n\nexport const useTokenBalnces = (tokens: TokenMetadata[], AccountId: string) => {\n const [balances, setBalances] = useState<Record<string, string>>({});\n\n useEffect(() => {\n const validTokens = tokens.filter(t => !!t?.id);\n\n const ids = validTokens.map(token => token.id);\n\n Promise.all(\n ids.map(id =>\n ftGetBalance(id === WRAP_NEAR_CONTRACT_ID ? 'NEAR' : id, AccountId)\n )\n ).then(balances => {\n const balancesMap = validTokens.reduce((acc, token, index) => {\n return {\n ...acc,\n [token.id]: toReadableNumber(token.decimals, balances[index]),\n };\n }, {});\n\n setBalances(balancesMap);\n });\n }, [tokens.map(t => t?.id).join('-')]);\n\n return balances;\n};\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import React, { useState, useEffect, useContext, useRef, useMemo } from 'react';\nimport { TokenMetadata, EstimateSwapView, Pool } from '../types';\nimport {\n ThemeContext,\n useTokenPriceList,\n TokenPriceContext,\n useTokenBalnces,\n} from './state';\n\nimport { FiChevronDown } from '@react-icons/all-files/fi/FiChevronDown';\n\nimport { FiChevronLeft } from '@react-icons/all-files/fi/FiChevronLeft';\n\nimport { FiChevronUp } from '@react-icons/all-files/fi/FiChevronUp';\n\nimport { FaSearch } from '@react-icons/all-files/fa/FaSearch';\n\nimport { RiRefreshLine } from '@react-icons/all-files/ri/RiRefreshLine';\n\nimport { TiArrowSortedUp } from '@react-icons/all-files/ti/TiArrowSortedUp';\n\nimport { TiArrowSortedDown } from '@react-icons/all-files/ti/TiArrowSortedDown';\n\nimport { HiOutlineExternalLink } from '@react-icons/all-files/hi/HiOutlineExternalLink';\n\nimport { AiFillPushpin } from '@react-icons/all-files/ai/AiFillPushpin';\n\nimport { AiOutlinePushpin } from '@react-icons/all-files/ai/AiOutlinePushpin';\n\nimport { RiExchangeFill } from '@react-icons/all-files/ri/RiExchangeFill';\n\nimport { IoWarning } from '@react-icons/all-files/io5/IoWarning';\n\nimport { IoCloseOutline } from '@react-icons/all-files/io5/IoCloseOutline';\n\nimport { AiOutlineClose } from '@react-icons/all-files/ai/AiOutlineClose';\n\nimport './style.css';\nimport {\n getAccountName,\n symbolsArr,\n multiply,\n percentOfBigNumber,\n ONLY_ZEROS,\n toRealSymbol,\n toPrecision,\n toInternationalCurrencySystemLongString,\n calculateFeeCharge,\n calculateFeePercent,\n} from '../utils';\nimport { REF_WIDGET_STAR_TOKEN_LIST_KEY } from './constant';\nimport Big from 'big.js';\nimport {\n config,\n FEE_DIVISOR,\n getConfig,\n NEAR_META_DATA,\n TokenLinks,\n WRAP_NEAR_CONTRACT_ID,\n} from '../constant';\nimport {\n scientificNotationToString,\n percent,\n getPoolAllocationPercents,\n} from '../utils';\nimport {\n REF_WIDGET_SWAP_DETAIL_KEY,\n DEFAULT_START_TOKEN_LIST_TESTNET,\n DEFAULT_START_TOKEN_LIST_MAINNET,\n} from './constant';\nimport { PoolMode } from '../v1-swap/swap';\nimport { isMobile, separateRoutes, divide, getMax } from '../utils';\n\ninterface TokenAmountProps {\n balance?: string;\n reloading?: JSX.Element;\n token?: TokenMetadata;\n onSelectToken: () => void;\n amount: string;\n onChangeAmount?: (amount: string) => void;\n price?: string;\n onForceUpdate?: () => void;\n poolFetchingState?: 'loading' | 'end';\n}\n\nexport const getPriceImpact = (\n value: string,\n tokenIn: TokenMetadata,\n tokenInAmount: string\n) => {\n const textColor =\n Number(value) <= 1\n ? 'text-greenLight'\n : 1 < Number(value) && Number(value) <= 2\n ? 'text-warn'\n : 'text-error';\n\n const displayValue = scientificNotationToString(\n multiply(tokenInAmount || '0', divide(value, '100'))\n );\n\n const tokenInInfo =\n Number(displayValue) <= 0\n ? ` / 0 ${toRealSymbol(tokenIn.symbol)}`\n : ` / -${toInternationalCurrencySystemLongString(\n displayValue,\n 3\n )} ${toRealSymbol(tokenIn.symbol)}`;\n\n if (Number(value) < 0.01)\n return (\n <span className=\"text-greenLight\">\n {`< -0.01%`}\n {tokenInInfo}\n </span>\n );\n\n if (Number(value) > 1000)\n return (\n <span className=\"text-error\">\n {`< -1000%`}\n {tokenInInfo}\n </span>\n );\n\n return (\n <span className={`${textColor} font-sans`}>\n {`≈ -${toPrecision(value, 2)}%`}\n {tokenInInfo}\n </span>\n );\n};\n\nexport const SmartRouteV2 = ({\n tokens: tokensRaw,\n p,\n pools,\n}: {\n tokens: TokenMetadata[];\n p: string;\n pools: Pool[];\n}) => {\n const theme = useContext(ThemeContext);\n\n const tokens = tokensRaw.map(t =>\n t.id === WRAP_NEAR_CONTRACT_ID\n ? { ...NEAR_META_DATA, id: WRAP_NEAR_CONTRACT_ID }\n : t\n );\n\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n const ParaTokenFrom = ({\n tokenIn,\n p,\n }: {\n tokenIn: TokenMetadata;\n p: string;\n }) => {\n return (\n <div\n className=\"__ref-swap-widget-row-flex-center \"\n style={{\n width: '60px',\n }}\n >\n <span\n style={{\n marginRight: '4px',\n }}\n >\n {p}%\n </span>\n <span className=\"\">\n <Icon token={tokenIn} />\n </span>\n </div>\n );\n };\n const Icon = ({ token }: { token: TokenMetadata }) => {\n if (token.icon) {\n return (\n <img\n src={token.icon}\n alt=\"\"\n style={{\n borderRadius: '100%',\n height: '16px',\n width: '16px',\n flexShrink: 0,\n }}\n />\n );\n } else {\n return (\n <div\n style={{\n borderRadius: '100%',\n height: '16px',\n width: '16px',\n }}\n />\n );\n }\n };\n const Hub = ({ token, poolId }: { token: TokenMetadata; poolId: number }) => {\n return (\n <div\n className={`__ref-swap-widget-row-flex-center`}\n style={{\n width: '62px',\n height: '22px',\n }}\n >\n <div\n className={`w-full flex items-center justify-start pl-2 `}\n style={{\n marginRight: '4px',\n }}\n >\n <span className=\"text-gray-400\">{`#${poolId}`}</span>\n </div>\n <Icon token={token} />\n </div>\n );\n };\n\n if (tokens.length === 3) {\n return (\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap_route_row\">\n {/* <Hub token={tokens[0]} /> */}\n\n <ParaTokenFrom tokenIn={tokens[0]} p={p} />\n <div\n className=\"\"\n style={{\n position: 'relative',\n bottom: '1px',\n }}\n >\n <ArrowRight />\n </div>\n\n <Hub token={tokens[1]} poolId={pools?.[0]?.id} />\n <div\n className=\"px-3\"\n style={{\n position: 'relative',\n bottom: '1px',\n }}\n >\n <ArrowRight />\n </div>\n\n <Hub token={tokens[2]} poolId={pools?.[1]?.id} />\n </div>\n );\n } else if (tokens.length === 2) {\n return (\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap_route_row\">\n <ParaTokenFrom tokenIn={tokens[0]} p={p} />\n <div className=\"px-3\">\n <ArrowRight />\n </div>\n <Hub token={tokens[1]} poolId={pools?.[0]?.id} />\n </div>\n );\n } else {\n return null;\n }\n};\n\nexport const DetailView = ({\n tokenIn,\n tokenOut,\n rate,\n fee,\n minReceived,\n amountIn,\n amountOut,\n priceImpact,\n estimates,\n}: {\n tokenIn: TokenMetadata | undefined;\n tokenOut: TokenMetadata | undefined;\n rate: string;\n fee: number;\n minReceived: string;\n amountIn: string;\n amountOut: string;\n priceImpact: string;\n estimates: EstimateSwapView[];\n}) => {\n const theme = useContext(ThemeContext);\n\n const storagedOpen = !!localStorage.getItem(REF_WIDGET_SWAP_DETAIL_KEY);\n\n const [showDetail, setShowDetail] = useState(storagedOpen || false);\n const [isRateReverse, setIsRateReverse] = useState(false);\n\n const tokensPerRoute = estimates\n .filter(swap => swap.inputToken === tokenIn?.id)\n .map(swap => swap.tokens);\n\n const identicalRoutes = separateRoutes(\n estimates,\n estimates[estimates.length - 1]?.outputToken || ''\n );\n\n const pools = identicalRoutes.map(r => r[0]).map(hub => hub.pool);\n const percents = useMemo(() => {\n if (!pools || pools.length === 0) return [];\n return getPoolAllocationPercents(pools);\n }, [pools]);\n\n const priceImpactDisplay = useMemo(() => {\n if (!priceImpact || !tokenIn || !amountIn) return null;\n return getPriceImpact(priceImpact, tokenIn, amountIn);\n }, [priceImpact, tokenIn, amountIn]);\n if (!tokenIn || !tokenOut) return null;\n\n const displayRate = `1 ${toRealSymbol(tokenIn.symbol)} ≈ ${\n Number(rate) < 0.01 ? '< 0.01' : toPrecision(rate, 2)\n } ${toRealSymbol(tokenOut.symbol)}`;\n\n const revertRate = new Big(1).div(ONLY_ZEROS.test(rate) ? '1' : rate || '1');\n\n const revertDisplayRate = `1 ${toRealSymbol(tokenOut.symbol)} ≈ ${\n Number(revertRate) < 0.01 ? '< 0.01' : toPrecision(revertRate.toString(), 2)\n } ${toRealSymbol(tokenIn.symbol)}`;\n\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n return (\n <div\n className=\"__ref-widget-swap-detail-view __ref-swap-widget-col-flex-start\"\n style={{\n color: secondary,\n }}\n >\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap-detail-view-item\">\n <div\n style={{\n color: primary,\n cursor: 'pointer',\n }}\n className=\"__ref-swap-widget-row-flex-center\"\n onClick={() => {\n if (showDetail) localStorage.removeItem(REF_WIDGET_SWAP_DETAIL_KEY);\n else {\n localStorage.setItem(REF_WIDGET_SWAP_DETAIL_KEY, '1');\n }\n setShowDetail(!showDetail);\n }}\n >\n <div>Detail</div>\n <div\n style={{\n position: 'relative',\n }}\n >\n {!showDetail ? <FiChevronDown /> : <FiChevronUp />}\n </div>\n </div>\n\n {amountIn && amountOut && (\n <div className=\"__ref-swap-widget-row-flex-center\">\n <div>{isRateReverse ? revertDisplayRate : displayRate}</div>\n\n <RiExchangeFill\n onClick={() => {\n setIsRateReverse(!isRateReverse);\n }}\n size={16}\n style={{\n marginLeft: '4px',\n cursor: 'pointer',\n }}\n fill={iconDefault}\n />\n </div>\n )}\n </div>\n {!showDetail ? null : (\n <>\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap-detail-view-item\">\n <div>Minimum received</div>\n <div>{toPrecision(minReceived || '0', 8)}</div>\n </div>\n\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap-detail-view-item\">\n <div>Fee</div>\n\n <div>\n {!amountIn\n ? '0'\n : `${calculateFeeCharge(fee, amountIn)} ${toRealSymbol(\n tokenIn.symbol\n )}(${toPrecision(calculateFeePercent(fee).toString(), 2)}%)`}\n </div>\n </div>\n </>\n )}\n\n {!showDetail ? null : (\n <>\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap-detail-view-item\">\n <div>Price impact</div>\n\n <div>{priceImpactDisplay}</div>\n </div>\n </>\n )}\n\n {estimates && estimates.length > 1 && showDetail && (\n <div\n className=\"__ref-swap-widget-swap_routes __ref-swap-widget-row-flex-center\"\n style={{\n border: `1px solid ${borderColor}`,\n flexDirection: isMobile() ? 'column' : 'row',\n position: 'relative',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n }}\n >\n <div className=\"__ref-swap-widget-row-flex-center\">\n <RouterIcon />\n <span\n className=\"__ref-swap-widget-valueStyle\"\n style={{\n marginLeft: '4px',\n whiteSpace: 'nowrap',\n }}\n >\n {'Auto Router'}\n </span>\n </div>\n\n <div\n className=\"\"\n style={{\n width: isMobile() ? '100%' : 'auto',\n minWidth: !isMobile() ? '70%' : '',\n }}\n >\n {tokensPerRoute.every(r => !!r) &&\n tokensPerRoute.map((tokens, index) => {\n if (!tokens) return null;\n return (\n <SmartRouteV2\n key={index + '-swap-route'}\n tokens={tokens}\n p={percents[index]}\n pools={identicalRoutes[index].map(hub => hub.pool)}\n />\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport const HalfAndMaxAmount = ({\n max,\n onChangeAmount,\n token,\n amount,\n}: {\n max: string;\n token: TokenMetadata;\n onChangeAmount: (amount: string) => void;\n amount: string;\n}) => {\n const halfValue = percentOfBigNumber(50, max, token.decimals);\n\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n } = theme;\n\n const [hoverHalf, setHoverHalf] = useState<boolean>(false);\n const [hoverMax, setHoverMax] = useState<boolean>(false);\n\n return (\n <div className=\"__ref-swap-widget-token-amount_quick_selector __ref-swap-widget-row-flex-center\">\n <span\n className=\"__ref-swap-widget-token-amount_quick_selector_item \"\n style={{\n color: secondary,\n borderRadius,\n border: `1px solid ${borderColor}`,\n marginRight: '4px',\n\n background:\n amount === halfValue && !ONLY_ZEROS.test(halfValue)\n ? active\n : hoverHalf\n ? hover\n : 'transparent',\n }}\n onMouseEnter={() => setHoverHalf(true)}\n onMouseLeave={() => setHoverHalf(false)}\n onClick={() => {\n const half = percentOfBigNumber(50, max, token.decimals);\n\n onChangeAmount(half);\n }}\n >\n Half\n </span>\n\n <span\n className=\"__ref-swap-widget-token-amount_quick_selector_item\"\n onClick={() => {\n onChangeAmount(max);\n }}\n onMouseEnter={() => setHoverMax(true)}\n onMouseLeave={() => setHoverMax(false)}\n style={{\n color: secondary,\n borderRadius,\n border: `1px solid ${borderColor}`,\n background:\n amount === max && !ONLY_ZEROS.test(max)\n ? active\n : hoverMax\n ? hover\n : 'transparent',\n }}\n >\n Max\n </span>\n </div>\n );\n};\n\nexport const TokenAmount = (props: TokenAmountProps) => {\n const {\n balance,\n reloading,\n token,\n onSelectToken,\n amount,\n onChangeAmount,\n price,\n onForceUpdate,\n poolFetchingState,\n } = props;\n\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n } = theme;\n\n const ref = useRef<HTMLInputElement>(null);\n\n const [hoverSelect, setHoverSelect] = useState<boolean>(false);\n\n const handleChange = (amount: string) => {\n if (onChangeAmount) {\n onChangeAmount(amount);\n }\n if (ref.current) {\n ref.current.value = amount;\n }\n };\n\n useEffect(() => {\n if (\n ref.current &&\n onChangeAmount &&\n token &&\n balance &&\n token.id === WRAP_NEAR_CONTRACT_ID &&\n Number(balance) - Number(ref.current.value) < 0.5\n ) {\n ref.current.setCustomValidity(\n 'Must have 0.5N or more left in wallet for gas fee.'\n );\n } else {\n ref.current?.setCustomValidity('');\n }\n }, [ref, balance, ref.current, ref.current?.value, token, amount]);\n\n const curMax = token ? getMax(token.id, balance || '0') : '0';\n\n return (\n <>\n <div\n className=\"__ref-swap-widger-token-amount \"\n style={{\n background: secondaryBg,\n flexDirection: isMobile() ? 'column' : 'row',\n }}\n >\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n width: isMobile() ? 'auto' : '40%',\n }}\n >\n <div\n className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-token-amount_token-select-button\"\n style={{\n color: primary,\n background: hoverSelect ? hover : 'transparent',\n border: `1px solide ${hoverSelect ? borderColor : 'transparent'}`,\n }}\n onClick={onSelectToken}\n onMouseEnter={() => setHoverSelect(true)}\n onMouseLeave={() => setHoverSelect(false)}\n >\n {!token ? (\n <>\n <span\n style={{\n whiteSpace: 'nowrap',\n height: '26px',\n }}\n className=\"__ref-swap-widget-row-flex-center\"\n >\n Select Token\n </span>\n </>\n ) : (\n <>\n <img\n src={token?.icon}\n alt=\"\"\n className=\"__ref-swap-widget_token_icon\"\n style={{\n height: '26px',\n width: '26px',\n marginRight: '8px',\n }}\n />\n <span>{toRealSymbol(token?.symbol)}</span>\n </>\n )}\n <FiChevronDown\n style={{\n marginLeft: '4px',\n flexShrink: 0,\n }}\n />\n </div>\n\n {onForceUpdate && (\n <RiRefreshLine\n className={`${\n poolFetchingState === 'loading'\n ? '__ref-swap-widget-loading '\n : ''\n }`}\n style={{\n cursor: 'pointer',\n color: secondary,\n }}\n size={18}\n onClick={() => {\n onForceUpdate();\n }}\n />\n )}\n </div>\n\n <div\n className=\" __ref-swap-widget-token-amount_input\"\n style={{\n width: isMobile() ? '100%' : '60%',\n }}\n >\n <input\n ref={ref}\n max={!!onChangeAmount ? curMax : undefined}\n min=\"0\"\n onWheel={() => {\n if (ref.current) {\n ref.current.blur();\n }\n }}\n className=\"__ref-swap-widget-input-class\"\n step=\"any\"\n value={amount}\n type=\"number\"\n placeholder={!onChangeAmount ? '-' : '0.0'}\n onChange={({ target }) => {\n target.setCustomValidity('');\n handleChange(target.value);\n }}\n disabled={!onChangeAmount}\n onKeyDown={e => symbolsArr.includes(e.key) && e.preventDefault()}\n style={{\n color: primary,\n marginBottom: '8px',\n width: '100%',\n textAlign: 'right',\n fontSize: '20px',\n }}\n />\n\n <div\n style={{\n fontSize: '12px',\n color: secondary,\n textAlign: 'right',\n }}\n >\n {!price\n ? '$-'\n : '~$' +\n toInternationalCurrencySystemLongString(\n multiply(price, amount || '0'),\n 2\n )}\n </div>\n </div>\n </div>\n\n {!balance || !token || !onChangeAmount ? null : (\n <div\n className=\"__ref-swap-widger-token-amount_balance __ref-swap-widget-row-flex-center\"\n style={{\n fontSize: '12px',\n color: secondary,\n }}\n >\n <span>\n Balance:&nbsp;\n {toPrecision(balance, 2)}\n </span>\n {token && (\n <HalfAndMaxAmount\n token={token}\n max={getMax(token.id, balance)}\n onChangeAmount={handleChange}\n amount={amount}\n />\n )}\n </div>\n )}\n </>\n );\n};\n\nexport const SlippageSelector = ({\n slippageTolerance,\n onChangeSlippageTolerance,\n showSlip,\n setShowSlip,\n}: {\n slippageTolerance: number;\n onChangeSlippageTolerance: (slippageTolerance: number) => void;\n showSlip: boolean;\n setShowSlip: (showSlip: boolean) => void;\n}) => {\n const [invalid, setInValid] = useState<boolean>(false);\n\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n } = theme;\n\n const ref = useRef<HTMLInputElement>(null);\n\n const handleChange = (amount: string) => {\n onChangeSlippageTolerance(Number(amount));\n\n if (Number(amount) > 0 && Number(amount) < 100) {\n setInValid(false);\n } else {\n setInValid(true);\n }\n\n if (ref.current) {\n ref.current.value = amount;\n }\n };\n\n useEffect(() => {\n if (!showSlip) return;\n\n document.onclick = () => setShowSlip(false);\n\n return () => {\n document.onclick = null;\n };\n }, [showSlip, setShowSlip]);\n\n if (!showSlip) return null;\n\n return (\n <div\n className=\"__ref-swap-widget_slippage_selector __ref-swap-widget-col-flex-start\"\n onClick={e => e.stopPropagation()}\n style={{\n background: container,\n border: `1px solid ${borderColor}`,\n }}\n >\n <span\n style={{\n color: primary,\n paddingBottom: '14px',\n }}\n >\n Slippage tolerance\n </span>\n\n <div\n className={`__ref-swap-widget-row-flex-center\n `}\n >\n <div\n className={`__ref-swap-widget-row-flex-center\n __ref-swap-widget_slippage_selector_input_container`}\n style={{\n border: `1px solid ${invalid ? '#FF7575' : borderColor}`,\n borderRadius,\n }}\n >\n <input\n ref={ref}\n max={99.99999}\n min={0.000001}\n defaultValue={slippageTolerance ? slippageTolerance : 0.5}\n onWheel={() => {\n if (ref.current) {\n ref.current.blur();\n }\n }}\n value={slippageTolerance}\n step=\"any\"\n type=\"number\"\n required={true}\n placeholder=\"\"\n onChange={({ target }) => handleChange(target.value)}\n onKeyDown={e => symbolsArr.includes(e.key) && e.preventDefault()}\n style={{\n width: '100%',\n color: invalid ? '#FF7575' : primary,\n }}\n className=\"__ref-swap-widget-input-class\"\n />\n <span className=\"ml-2\">%</span>\n </div>\n\n <button\n className={`__ref-swap-widget_slippage_selector_button __ref-swap-widget-button ${\n isMobile()\n ? '__ref-swap-widget-opacity-active'\n : '__ref-swap-widget-opacity-hover'\n }`}\n style={{\n color: primary,\n background: buttonBg,\n borderRadius,\n }}\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n onChangeSlippageTolerance(0.5);\n setInValid(false);\n }}\n >\n Auto\n </button>\n </div>\n {invalid && (\n <div\n className=\" text-xs py-3 __ref-swap-widget-row-flex-center\"\n style={{\n color: '#FF7575',\n fontSize: '12px',\n padding: '10px 0px',\n alignItems: 'start',\n }}\n >\n <IoWarning\n className=\"\"\n style={{\n marginRight: '4px',\n }}\n size={20}\n />\n <div>{'The slippage tolerance is invalid.'}</div>\n </div>\n )}\n </div>\n );\n};\n\nconst StarToken = ({\n price,\n token,\n onDelete,\n onClick,\n}: {\n token: TokenMetadata;\n price: string;\n onDelete: (token: TokenMetadata) => void;\n onClick: (token: TokenMetadata) => void;\n}) => {\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n const [hoverIcon, setHoverIcon] = useState(false);\n\n const [hoverClose, setHoverClose] = useState(false);\n\n return (\n <div\n className=\"__ref-swap-widget_star_token __ref-swap-widget-row-flex-center\"\n onMouseEnter={() => setHoverIcon(true)}\n onMouseLeave={() => setHoverIcon(false)}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onClick(token);\n }}\n style={{\n background: hoverIcon ? hover : 'transparent',\n border: `1px solid ${borderColor}`,\n }}\n >\n {hoverIcon && (\n <div\n style={{\n position: 'absolute',\n top: '-4px',\n right: '-4px',\n boxShadow: '0px 0px 2px rgba(0, 0, 0, 0.25)',\n border: `1px solid ${borderColor}`,\n borderRadius: '100%',\n width: '16px',\n height: '16px',\n background: '#E3E3E3',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onDelete(token);\n }}\n onMouseEnter={() => setHoverClose(true)}\n onMouseLeave={() => setHoverClose(false)}\n >\n <IoCloseOutline stroke={hoverClose ? 'black' : '#7e8a93'} />\n </div>\n )}\n\n <img\n src={token.icon}\n alt=\"\"\n className=\"__ref-swap-widget_token_icon\"\n style={{\n height: '26px',\n width: '26px',\n marginRight: '2px',\n }}\n />\n\n <div className=\"__ref-swap-widget-col-flex-start\">\n <span\n style={{\n fontSize: '14px',\n color: primary,\n }}\n >\n {toRealSymbol(token.symbol)}\n </span>\n\n <span\n style={{\n fontSize: '10px',\n color: secondary,\n }}\n >\n {!price\n ? '$-'\n : '$' + toInternationalCurrencySystemLongString(price, 2)}\n </span>\n </div>\n </div>\n );\n};\n\ninterface TokenProps {\n token: TokenMetadata;\n onClick: (token: TokenMetadata) => void;\n onClickPin: (token: TokenMetadata) => void;\n balance: string;\n price?: string;\n isSticky?: boolean;\n index: number;\n setHoverIndex: (index: number) => void;\n hoverIndex: number;\n}\n\nconst Token = ({\n token,\n onClick,\n price,\n balance,\n isSticky,\n onClickPin,\n index,\n setHoverIndex,\n hoverIndex,\n}: TokenProps) => {\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n const displayBalance =\n 0 < Number(balance) && Number(balance) < 0.001\n ? '< 0.001'\n : toPrecision(String(balance), 3);\n\n const [hoverOutLink, setHoverOutLink] = useState(false);\n\n const [hoverPin, setHoverPin] = useState(false);\n\n return (\n <div\n className=\"__ref-swap-widget_token-selector-token-list-item __ref-swap-widget-row-flex-center\"\n style={{\n background: hoverIndex === index ? hover : 'transparent',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onClick(token);\n }}\n onMouseEnter={() => setHoverIndex(index)}\n onMouseLeave={() => setHoverIndex(-1)}\n >\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n justifyContent: 'space-between',\n }}\n >\n <img\n src={token.icon}\n alt=\"\"\n className=\"__ref-swap-widget_token_icon\"\n style={{\n height: '36px',\n width: '36px',\n marginRight: '10px',\n }}\n />\n\n <div className=\"__ref-swap-widget-col-flex-start\">\n <span\n style={{\n fontSize: '14px',\n color: primary,\n }}\n className=\"__ref-swap-widget-row-flex-center\"\n >\n {toRealSymbol(token.symbol)}\n\n {TokenLinks[token.symbol] && (\n <HiOutlineExternalLink\n onMouseEnter={() => setHoverOutLink(true)}\n onMouseLeave={() => setHoverOutLink(false)}\n style={{\n marginLeft: '4px',\n marginTop: '2px',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n window.open(TokenLinks[token.symbol], '_blank');\n }}\n stroke={hoverOutLink ? iconHover : iconDefault}\n />\n )}\n </span>\n\n <span\n style={{\n fontSize: '10px',\n color: secondary,\n marginTop: '2px',\n }}\n >\n {!price\n ? '$-'\n : '$' + toInternationalCurrencySystemLongString(price, 2)}\n </span>\n </div>\n </div>\n\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n color: primary,\n }}\n >\n {displayBalance}\n\n {isSticky ? (\n <AiFillPushpin\n onMouseEnter={() => setHoverPin(true)}\n onMouseLeave={() => setHoverPin(false)}\n fill={hoverPin && hoverIndex === index ? iconHover : iconDefault}\n style={{\n marginLeft: '10px',\n cursor: 'pointer',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onClickPin(token);\n }}\n />\n ) : (\n <AiOutlinePushpin\n style={{\n marginLeft: '10px',\n cursor: 'pointer',\n }}\n onMouseEnter={() => setHoverPin(true)}\n onMouseLeave={() => setHoverPin(false)}\n fill={hoverPin && hoverIndex === index ? iconHover : iconDefault}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onClickPin(token);\n }}\n />\n )}\n </div>\n </div>\n );\n};\n\ninterface TokenListProps {\n tokens: TokenMetadata[];\n onClick: (token: TokenMetadata) => void;\n balances: { [tokenId: string]: string };\n tokenPriceList: Record<string, any> | null;\n starList: string[];\n setStarList: (starList: string[]) => void;\n onDelete: (token: TokenMetadata) => void;\n}\n\nexport const TokenListTable = ({\n tokens,\n onClick,\n balances,\n tokenPriceList,\n starList,\n setStarList,\n onDelete,\n}: TokenListProps) => {\n const [currentSort, setCurrentSort] = useState('down');\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n const onClickPin = (token: TokenMetadata) => {\n if (starList.includes(token.id)) {\n onDelete(token);\n } else {\n const newList = [...starList, token.id];\n setStarList(newList);\n }\n };\n\n const [hoverIndex, setHoverIndex] = useState(-1);\n\n const tokenSorting = (a: TokenMetadata, b: TokenMetadata) => {\n const b1 = balances[a.id];\n const b2 = balances[b.id];\n\n if (currentSort === 'up') {\n return Number(b1) - Number(b2);\n } else return Number(b2) - Number(b1);\n };\n\n return !tokens || tokens.length === 0 ? null : (\n <div className=\"__ref-swap-widget_token_list_table\">\n <div\n className=\"__ref-swap-widget_token_list_table_header\"\n style={{\n color: secondary,\n borderBottom: `1px solid ${borderColor}`,\n }}\n >\n <span className=\"\">Asset</span>\n\n <span\n onClick={() => {\n setCurrentSort(currentSort === 'up' ? 'down' : 'up');\n }}\n style={{\n cursor: 'pointer',\n }}\n className=\"__ref-swap-widget-row-flex-center\"\n >\n <span className=\"ml-1\">Balance</span>\n {currentSort === 'up' ? <TiArrowSortedUp /> : <TiArrowSortedDown />}\n </span>\n </div>\n\n <div className=\"__ref-swap-widget_token_list_table_content\">\n {tokens.sort(tokenSorting).map((token, index) => (\n <Token\n key={token.id + '-select-token-list-item-' + index}\n onClick={onClick}\n index={index}\n token={token}\n price={tokenPriceList?.[token.id]?.price}\n balance={balances?.[token.id] || '0'}\n onClickPin={onClickPin}\n isSticky={starList.includes(token.id)}\n setHoverIndex={setHoverIndex}\n hoverIndex={hoverIndex}\n />\n ))}\n </div>\n </div>\n );\n};\n\nexport const TokenSelector = ({\n onSelect,\n width,\n tokens,\n onClose,\n AccountId,\n balances,\n className,\n}: {\n onSelect: (token: TokenMetadata) => void;\n width: string;\n tokens: TokenMetadata[];\n onClose: () => void;\n AccountId: string;\n balances: { [tokenId: string]: string };\n className?: string;\n}) => {\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n iconDefault,\n iconHover,\n } = theme;\n\n const [searchValue, setSearchValue] = useState<string>('');\n\n const tokenPriceList = useContext(TokenPriceContext);\n\n const handleSearch = (value: string) => {\n setSearchValue(value);\n };\n\n const storagedStartList = localStorage.getItem(REF_WIDGET_STAR_TOKEN_LIST_KEY)\n ? JSON.parse(localStorage.getItem(REF_WIDGET_STAR_TOKEN_LIST_KEY) || '[]')\n : null;\n\n const DEFAULT_START_TOKEN_LIST =\n getConfig().networkId === 'testnet'\n ? DEFAULT_START_TOKEN_LIST_TESTNET\n : DEFAULT_START_TOKEN_LIST_MAINNET;\n\n const [starList, setStarList] = useState<string[]>(\n storagedStartList || DEFAULT_START_TOKEN_LIST\n );\n\n const onDelete = (token: TokenMetadata) => {\n const newStarList = starList.filter(starToken => starToken !== token.id);\n\n setStarList(newStarList);\n\n localStorage.setItem(\n REF_WIDGET_STAR_TOKEN_LIST_KEY,\n JSON.stringify(newStarList)\n );\n };\n\n const tableListFilter = (token: TokenMetadata) => {\n if (!searchValue) return true;\n\n const searchValueLower = searchValue.toLowerCase();\n\n return token.symbol?.toLowerCase().includes(searchValueLower) || false;\n };\n\n return (\n <div\n className={`__ref-swap_widget-token_selector __ref-swap-widget-container ${className}`}\n style={{\n position: 'relative',\n width,\n background: container,\n }}\n >\n <FiChevronLeft\n onClick={onClose}\n style={{\n color: primary,\n position: 'absolute',\n cursor: 'pointer',\n }}\n />\n <div\n className=\"__ref-swap-widget-header-title __ref-swap-widget-row-flex-center\"\n style={{\n color: primary,\n justifyContent: 'center',\n paddingBottom: '24px',\n }}\n >\n Select a token\n </div>\n\n <div\n className=\"__ref-swap-widget-select-token_input __ref-swap-widget-row-flex-center\"\n style={{\n border: `1px solid ${buttonBg}`,\n background: secondaryBg,\n }}\n >\n <FaSearch\n fill={iconDefault}\n style={{\n marginRight: '8px',\n }}\n />\n\n <input\n className=\"__ref-swap-widget-input-class\"\n placeholder=\"Search token...\"\n onChange={evt => handleSearch(evt.target.value)}\n style={{\n fontSize: '14px',\n color: primary,\n }}\n />\n </div>\n\n <div className=\"__ref-swap-widget_token-selector-star-tokens __ref-swap-widget-row-flex-center\">\n {starList.map(id => {\n if (!tokens || tokens.length === 0) return null;\n\n const token = tokens.find(token => token.id === id);\n\n return !token ? null : (\n <StarToken\n key={token.id + '-star-token'}\n token={token}\n price={tokenPriceList?.[token.id]?.price}\n onDelete={onDelete}\n onClick={onSelect}\n />\n );\n })}\n </div>\n\n <TokenListTable\n tokens={tokens.filter(tableListFilter)}\n tokenPriceList={tokenPriceList}\n onClick={onSelect}\n balances={balances}\n starList={starList}\n setStarList={starList => {\n setStarList(starList);\n localStorage.setItem(\n REF_WIDGET_STAR_TOKEN_LIST_KEY,\n JSON.stringify(starList)\n );\n }}\n onDelete={onDelete}\n />\n </div>\n );\n};\n\nexport const Slider = ({\n showSlip,\n setShowSlip,\n}: {\n showSlip: boolean;\n setShowSlip: (show: boolean) => void;\n}) => {\n const [hover, setHover] = useState(false);\n\n return (\n <svg\n width=\"17\"\n height=\"17\"\n viewBox=\"0 0 17 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n onClick={() => setShowSlip(true)}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12.6957 13.0652C12.6957 14.1338 11.8294 15 10.7609 15C9.69235 15 8.82611 14.1338 8.82611 13.0652C8.82612 11.9967 9.69235 11.1304 10.7609 11.1304C11.8294 11.1304 12.6957 11.9967 12.6957 13.0652ZM14.5749 12.0941C14.6145 12.0894 14.6548 12.0869 14.6957 12.0869L15.9565 12.0869C16.5088 12.0869 16.9565 12.5346 16.9565 13.0869C16.9565 13.6392 16.5088 14.0869 15.9565 14.0869L14.6957 14.0869C14.651 14.0869 14.6071 14.084 14.564 14.0783C14.1171 15.7605 12.5837 17 10.7609 17C8.93806 17 7.40472 15.7605 6.95777 14.0783C6.91471 14.084 6.87078 14.0869 6.82617 14.0869L1.00009 14.0869C0.447802 14.0869 8.61245e-05 13.6392 8.61728e-05 13.0869C8.62211e-05 12.5346 0.447802 12.0869 1.00009 12.0869L6.82617 12.0869C6.86702 12.0869 6.90729 12.0894 6.94686 12.0941C7.37926 10.3906 8.92291 9.13044 10.7609 9.13044C12.5989 9.13044 14.1425 10.3906 14.5749 12.0941ZM4.26086 3.93478C4.26086 2.86623 5.1271 2 6.19565 2C7.2642 2 8.13043 2.86623 8.13043 3.93478C8.13043 5.00333 7.2642 5.86957 6.19565 5.86957C5.1271 5.86956 4.26086 5.00333 4.26086 3.93478ZM6.19565 9.66601e-07C4.3728 8.07243e-07 2.83946 1.23952 2.39252 2.92168C2.34944 2.91601 2.3055 2.91309 2.26087 2.91309L0.999999 2.91309C0.447715 2.91309 -7.14972e-07 3.3608 -7.63254e-07 3.91309C-8.11537e-07 4.46537 0.447715 4.91309 0.999999 4.91309L2.26087 4.91309C2.30173 4.91309 2.34202 4.91063 2.3816 4.90587C2.81401 6.60936 4.35766 7.86956 6.19565 7.86957C8.03363 7.86957 9.57728 6.60936 10.0097 4.90588C10.0493 4.91064 10.0895 4.91309 10.1304 4.91309L15.9565 4.91309C16.5087 4.91309 16.9565 4.46537 16.9565 3.91309C16.9565 3.3608 16.5087 2.91309 15.9565 2.91309L10.1304 2.91309C10.0858 2.91309 10.0418 2.91601 9.99877 2.92167C9.55182 1.23952 8.01849 1.12596e-06 6.19565 9.66601e-07Z\"\n fill={hover || showSlip ? '#00C6A2' : '#7E8A93'}\n />\n </svg>\n );\n};\n\nexport const RefIcon = (props: any) => {\n return (\n <svg\n {...props}\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 10 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M6.36365 10H10L6.36365 6.36363V10Z\" fill=\"currentColor\" />\n <path\n d=\"M10 4.05312e-06L7.87879 3.86767e-06L10 2.12122L10 4.05312e-06Z\"\n fill=\"#00C6A2\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.51531 6.36364C6.46444 6.36364 6.41387 6.36232 6.36365 6.35971V4.08371L8.83901 1.78516C9.18802 2.26148 9.3941 2.8491 9.3941 3.48485C9.3941 5.07476 8.10522 6.36364 6.51531 6.36364ZM8.19255 1.14486L6.36365 2.84313V0.60999C6.41387 0.607383 6.46444 0.606064 6.51531 0.606064C7.14111 0.606064 7.72027 0.805743 8.19255 1.14486Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.06046 0.606064H3.33319V3.29661L4.55696 4.52039L6.06046 3.12428V0.606064ZM6.06046 4.36486L4.5336 5.78267L3.33319 4.58226V10H6.06046V4.36486Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.0303 0.606064H0V4.50881L2.27284 2.23598L3.0303 2.99344V0.606064ZM3.0303 4.27909L2.27284 3.52162L0 5.79446V10H3.0303V4.27909Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport const Loading = () => {\n return (\n <svg\n width=\"38\"\n height=\"38\"\n viewBox=\"0 0 38 38\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"__ref-swap-widget-loading\"\n >\n <circle\n cx=\"19\"\n cy=\"19\"\n r=\"16\"\n stroke=\"#EEEEEE\"\n strokeWidth=\"6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M19 35C27.8366 35 35 27.8366 35 19C35 10.1634 27.8366 3 19 3C10.1634 3 3 10.1634 3 19\"\n stroke=\"#00C6A2\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n};\n\nexport const Warning = () => {\n return (\n <svg\n width=\"49\"\n height=\"49\"\n viewBox=\"0 0 49 49\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M21.0359 5.99999C22.5755 3.33333 26.4245 3.33333 27.9641 6L42.2535 30.75C43.7931 33.4167 41.8686 36.75 38.7894 36.75H10.2106C7.13137 36.75 5.20688 33.4167 6.74648 30.75L21.0359 5.99999Z\"\n stroke=\"#FF689E\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n <line\n x1=\"24\"\n y1=\"14\"\n x2=\"24\"\n y2=\"24\"\n stroke=\"#FF689E\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n <circle cx=\"24\" cy=\"30\" r=\"2\" fill=\"#FF689E\" />\n </svg>\n );\n};\n\nexport const Success = () => {\n return (\n <div\n style={{\n position: 'relative',\n height: '32px',\n width: '32px',\n }}\n >\n <svg\n width=\"38\"\n height=\"38\"\n viewBox=\"0 0 38 38\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n }}\n >\n <circle\n cx=\"19\"\n cy=\"19\"\n r=\"16\"\n stroke=\"#EEEEEE\"\n strokeWidth=\"6\"\n strokeLinecap=\"round\"\n />\n </svg>\n\n <svg\n width=\"30\"\n height=\"23\"\n viewBox=\"0 0 30 23\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n position: 'absolute',\n top: 4,\n left: 4,\n }}\n >\n <path\n d=\"M2 11.2727L10.4898 20L28 2\"\n stroke=\"#00C6A2\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n </svg>\n </div>\n );\n};\n\nexport const RouterIcon = () => {\n return (\n <svg\n width=\"16\"\n height=\"12\"\n viewBox=\"0 0 16 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"mr-2\"\n >\n <path\n d=\"M13.4862 6.25488C12.2813 6.25488 11.2485 7.10159 11.019 8.28698H6.02703L4.7647 7.21448C4.93684 6.8758 5.05159 6.48067 5.10897 6.0291C5.10897 5.52107 4.93684 4.9566 4.59257 4.56147L6.02703 3.1503H11.0763C11.478 4.44858 12.8551 5.23884 14.1748 4.84371C15.4945 4.44858 16.2978 3.09385 15.8961 1.79557C15.4945 0.497295 14.1174 -0.292963 12.7977 0.102166C11.937 0.327954 11.3059 1.00532 11.0763 1.79557H5.51062L3.50237 3.77122C3.21548 3.65832 2.92859 3.60188 2.58432 3.60188C1.20723 3.54543 0.0596573 4.61792 0.00227872 5.97265C-0.0550999 7.32738 0.977715 8.45632 2.3548 8.51276H2.58432C3.04334 8.51276 3.44499 8.39987 3.84664 8.17408L5.568 9.6417H11.1911C11.7075 10.8835 13.142 11.5045 14.4043 11.0529C15.6666 10.5449 16.2978 9.13368 15.8388 7.89185C15.4371 6.8758 14.5191 6.25488 13.4862 6.25488V6.25488ZM13.4862 1.344C14.1174 1.344 14.6338 1.85202 14.6338 2.47294C14.6338 3.09385 14.1174 3.60188 13.4862 3.60188C12.8551 3.60188 12.3387 3.09385 12.3387 2.47294C12.3387 1.85202 12.8551 1.344 13.4862 1.344ZM2.58432 7.15804C1.95315 7.15804 1.43674 6.65001 1.43674 6.0291C1.43674 5.40818 1.95315 4.90016 2.58432 4.90016C3.21548 4.90016 3.73189 5.40818 3.73189 6.0291C3.73189 6.65001 3.21548 7.15804 2.58432 7.15804ZM13.4862 9.86749C12.8551 9.86749 12.3387 9.35947 12.3387 8.73855C12.3387 8.11763 12.8551 7.60961 13.4862 7.60961C14.1174 7.60961 14.6338 8.11763 14.6338 8.73855C14.6338 9.35947 14.1174 9.86749 13.4862 9.86749Z\"\n fill=\"url(#paint0_linear_12461_2312)\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_12461_2312\"\n x1=\"8\"\n y1=\"0\"\n x2=\"8\"\n y2=\"11.2\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#00C6A2\" />\n <stop offset=\"1\" stopColor=\"#8C78FF\" />\n </linearGradient>\n </defs>\n </svg>\n );\n};\n\nexport const Notification = ({\n state,\n tx,\n detail,\n open,\n setOpen,\n setState,\n}: {\n state?: 'success' | 'fail' | null;\n setState?: (state: 'success' | 'fail' | null) => void;\n tx?: string;\n detail?: string;\n\n open: boolean;\n setOpen: (open: boolean) => void;\n}) => {\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n } = theme;\n\n if (!open) return null;\n\n return (\n <div\n className=\"__ref-swap-widget-notification\"\n style={{\n color: primary,\n background: container,\n }}\n >\n <div className=\"__ref-swap-widget-notification__icon\">\n {state === null && <Loading />}\n {state === 'fail' && <Warning />}\n {state === 'success' && <Success />}\n </div>\n\n <div\n style={{\n fontSize: '16px',\n marginTop: '10px',\n marginBottom: '6px',\n }}\n >\n {state === 'success' && <p>Success!</p>}\n {state === 'fail' && <p>Swap Failed!</p>}\n </div>\n <div\n className=\"__ref-swap-widget-notification__text\"\n style={{\n color: primary,\n }}\n >\n {(state === null || state === undefined) && (\n <p>Waiting for confirmation</p>\n )}\n {state === 'fail' && !!tx && (\n <a\n className=\"text-primary font-semibold\"\n href={`${config.explorerUrl}/txns/${tx}`}\n target=\"_blank\"\n style={{\n textDecoration: 'underline',\n fontSize: '14px',\n color: primary,\n }}\n rel=\"noreferrer\"\n >\n Click to view.\n </a>\n )}\n\n {state === 'success' && detail}\n </div>\n {state !== null && (\n <button\n className=\"__ref-swap-widget-notification__button __ref-swap-widget-button\"\n style={{\n background: buttonBg,\n fontWeight: 700,\n color: 'white',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n setOpen(false);\n setState && setState(null);\n }}\n >\n Close\n </button>\n )}\n </div>\n );\n};\n\nexport const ArrowRight = () => {\n return (\n <div className=\"mx-1\">\n <svg\n width=\"12\"\n height=\"5\"\n viewBox=\"0 0 12 5\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.864 4.4C9.024 4.05867 9.17867 3.76 9.328 3.504C9.488 3.248 9.64267 3.03467 9.792 2.864H0.464V2.192H9.792C9.64267 2.01067 9.488 1.792 9.328 1.536C9.17867 1.28 9.024 0.986666 8.864 0.656H9.424C10.096 1.43467 10.8 2.01067 11.536 2.384V2.672C10.8 3.03467 10.096 3.61067 9.424 4.4H8.864Z\"\n fill=\"#7E8A93\"\n />\n </svg>\n </div>\n );\n};\n\nexport const AccountButton = ({\n AccountId,\n onDisConnect,\n}: {\n AccountId: string;\n onDisConnect: () => void;\n}) => {\n const [hoverAccount, setHoverAccount] = useState<boolean>(false);\n\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n iconDefault,\n iconHover,\n borderColor,\n } = theme;\n\n return !AccountId ? null : (\n <div\n className=\"__ref-swap-widget-header-button-account __ref-swap-widget-row-flex-center\"\n style={{\n color: primary,\n background: secondaryBg,\n border: `1px solid ${borderColor}`,\n cursor: 'pointer',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n hoverAccount && onDisConnect();\n }}\n onMouseEnter={() => setHoverAccount(true)}\n onMouseLeave={() => setHoverAccount(false)}\n >\n {hoverAccount ? 'Disconnect' : getAccountName(AccountId)}\n </div>\n );\n};\n","import React, { useEffect, useMemo, useState } from 'react';\n\nimport { SwapWidgetProps } from './types';\nimport { TokenMetadata } from '../types';\nimport {\n useRefPools,\n useSwap,\n ThemeContextProvider,\n TokenPriceContextProvider,\n useAllTokens,\n} from './state';\nimport { ftGetBalance, ftGetTokenMetadata } from '../ref';\nimport {\n getAccountName,\n toReadableNumber,\n toPrecision,\n getPriceImpact,\n isMobile,\n} from '../utils';\nimport {\n Slider,\n SlippageSelector,\n TokenSelector,\n TokenAmount,\n DetailView,\n Notification,\n} from './components';\nimport { FiChevronDown } from '@react-icons/all-files/fi/FiChevronDown';\n\nimport { TiWarning } from '@react-icons/all-files/ti/TiWarning';\n\nimport './style.css';\nimport { useTokenPriceList, useTokenBalnces, useTokensIndexer } from './state';\n\nimport { CgArrowsExchangeAltV } from '@react-icons/all-files/cg/CgArrowsExchangeAltV';\nimport { RefIcon, AccountButton } from './components';\nimport Big from 'big.js';\nimport { ONLY_ZEROS } from '../utils';\nimport {\n defaultTheme,\n defaultDarkModeTheme,\n REF_WIDGET_SWAP_IN_KEY,\n REF_WIDGET_SWAP_OUT_KEY,\n} from './constant';\nimport {\n WRAP_NEAR_CONTRACT_ID,\n NEAR_META_DATA,\n REF_TOKEN_ID,\n REF_META_DATA,\n} from '../constant';\n\nexport const SwapWidget = (props: SwapWidgetProps) => {\n const {\n theme,\n defaultTokenList,\n onSwap,\n connection,\n width,\n height,\n enableSmartRouting,\n className,\n transactionState,\n onConnect,\n defaultTokenIn,\n defaultTokenOut,\n onDisConnect,\n darkMode,\n referralId,\n } = props;\n\n const curTheme = theme || (darkMode ? defaultDarkModeTheme : defaultTheme);\n\n const STORAGED_TOKEN_IN = localStorage.getItem(REF_WIDGET_SWAP_IN_KEY);\n\n const STORAGED_TOKEN_OUT = localStorage.getItem(REF_WIDGET_SWAP_OUT_KEY);\n\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n refIcon,\n } = curTheme;\n\n const { AccountId, isSignedIn: isSignedInProp } = connection;\n\n const isSignedIn = !!AccountId && isSignedInProp;\n\n const [tokenIn, setTokenIn] = useState<TokenMetadata>();\n\n const handleSetTokenIn = (token: TokenMetadata) => {\n setTokenIn(token);\n localStorage.setItem(REF_WIDGET_SWAP_IN_KEY, token.id);\n };\n\n const handleSetTokenOut = (token: TokenMetadata) => {\n setTokenOut(token);\n localStorage.setItem(REF_WIDGET_SWAP_OUT_KEY, token.id);\n };\n\n const [tokenOut, setTokenOut] = useState<TokenMetadata>();\n const [tokenInBalance, setTokenInBalance] = useState<string>('');\n\n const [tokenOutBalance, setTokenOutBalance] = useState<string>('');\n\n const [notOpen, setNotOpen] = useState<boolean>(false);\n\n useEffect(() => {\n if (!transactionState) return;\n\n if (transactionState && transactionState.state !== null) {\n setNotOpen(true);\n }\n transactionState?.setState(transactionState?.state || null);\n }, [transactionState]);\n\n const [widgetRoute, setWidgetRoute] = useState<\n 'swap' | 'token-selector-in' | 'token-selector-out'\n >('swap');\n\n const [amountIn, setAmountIn] = useState<string>('1');\n\n const [showSlip, setShowSlip] = useState<boolean>(false);\n\n const [slippageTolerance, setSlippageTolerance] = useState<number>(0.5);\n\n const { tokens, tokenLoading } = useTokensIndexer({\n defaultTokenList,\n AccountId,\n });\n\n // cache list tokens\n useAllTokens({ reload: true });\n\n const balances = useTokenBalnces(tokens, AccountId);\n\n const [refreshTrigger, setRreshTrigger] = useState<boolean>(false);\n\n const tokenPriceList = useTokenPriceList();\n\n const { allPools, allStablePools, poolFetchingState } = useRefPools(\n refreshTrigger\n );\n\n useEffect(() => {\n const defaultIn =\n STORAGED_TOKEN_IN || defaultTokenIn || WRAP_NEAR_CONTRACT_ID;\n\n const defaultOut = STORAGED_TOKEN_OUT || defaultTokenOut || REF_TOKEN_ID;\n\n if (\n tokens.length > 0 &&\n defaultIn &&\n tokens.findIndex(t => t.id === defaultIn) !== -1\n ) {\n if (defaultIn === WRAP_NEAR_CONTRACT_ID || defaultIn === 'NEAR') {\n handleSetTokenIn({\n ...NEAR_META_DATA,\n id: WRAP_NEAR_CONTRACT_ID,\n });\n } else {\n ftGetTokenMetadata(defaultIn).then(handleSetTokenIn);\n }\n } else if (\n tokens.length > 0 &&\n defaultIn &&\n tokens.findIndex(t => t.id === defaultIn) === -1\n ) {\n handleSetTokenIn({\n ...NEAR_META_DATA,\n id: WRAP_NEAR_CONTRACT_ID,\n });\n }\n if (\n tokens.length > 0 &&\n defaultOut &&\n tokens.findIndex(t => t.id === defaultOut) !== -1\n ) {\n if (defaultOut === WRAP_NEAR_CONTRACT_ID || defaultOut === 'NEAR') {\n handleSetTokenOut({\n ...NEAR_META_DATA,\n id: WRAP_NEAR_CONTRACT_ID,\n });\n } else {\n ftGetTokenMetadata(defaultOut).then(handleSetTokenOut);\n }\n } else if (\n tokens.length > 0 &&\n defaultOut &&\n tokens.findIndex(t => t.id === defaultOut) === -1\n ) {\n handleSetTokenOut(REF_META_DATA);\n }\n }, [tokens, tokenLoading]);\n\n useEffect(() => {\n if (!tokenIn) return;\n\n const wrapedId = tokenIn.id === WRAP_NEAR_CONTRACT_ID ? 'NEAR' : tokenIn.id;\n\n if (balances[wrapedId]) {\n setTokenInBalance(balances[wrapedId]);\n return;\n }\n\n ftGetBalance(wrapedId, AccountId).then(available => {\n setTokenInBalance(toReadableNumber(tokenIn.decimals, available));\n });\n }, [tokenIn, AccountId, balances]);\n\n useEffect(() => {\n if (!tokenOut) return;\n\n const wrapedId =\n tokenOut.id === WRAP_NEAR_CONTRACT_ID ? 'NEAR' : tokenOut.id;\n\n if (balances[wrapedId]) {\n setTokenOutBalance(balances[wrapedId]);\n return;\n }\n ftGetBalance(wrapedId, AccountId).then(available => {\n setTokenOutBalance(toReadableNumber(tokenOut.decimals, available));\n });\n }, [tokenOut, AccountId, balances]);\n\n const {\n amountOut,\n minAmountOut,\n rate,\n fee,\n estimates,\n canSwap,\n swapError,\n makeSwap,\n setAmountOut,\n } = useSwap({\n tokenIn: tokenIn,\n tokenOut: tokenOut,\n amountIn,\n simplePools: allPools.simplePools.filter(p => Number(p.shareSupply) > 0),\n options: {\n enableSmartRouting,\n stablePools: allPools.ratedPools\n .concat(allPools.unRatedPools)\n .filter(p => Number(p.shareSupply) > 0),\n stablePoolsDetail: allStablePools.filter(\n p => Number(p.shares_total_supply) > 0\n ),\n },\n slippageTolerance,\n onSwap,\n AccountId,\n refreshTrigger,\n poolFetchingState,\n referralId,\n });\n\n const priceImpact = useMemo(() => {\n if (!tokenIn || !tokenOut) return '0';\n\n return getPriceImpact({\n estimates,\n tokenIn,\n tokenOut,\n amountIn,\n amountOut,\n stablePools: allStablePools,\n });\n }, [estimates, tokenIn, tokenOut, amountIn, amountOut, allStablePools]);\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n setNotOpen(true);\n makeSwap();\n };\n\n const canSubmit =\n tokenIn &&\n tokenOut &&\n canSwap &&\n !swapError &&\n isSignedIn &&\n new Big(tokenInBalance || '0').gte(amountIn || '0') &&\n slippageTolerance > 0 &&\n slippageTolerance < 100 &&\n !ONLY_ZEROS.test(tokenInBalance);\n\n return (\n <ThemeContextProvider customTheme={curTheme}>\n <TokenPriceContextProvider>\n {widgetRoute === 'swap' && (\n <form\n className={`__ref-swap-widget-container ${className}`}\n onSubmit={handleSubmit}\n style={{\n background: container,\n fontFamily,\n width,\n height,\n }}\n >\n <div className=\"__ref-swap-widget-header __ref-swap-widget-row-flex-center\">\n <div\n style={{\n color: primary,\n }}\n className=\"__ref-swap-widget-header-title\"\n >\n Swap\n </div>\n\n <div\n className=\"__ref-swap-widget-header-button __ref-swap-widget-row-flex-center\"\n style={{\n position: 'relative',\n }}\n >\n <AccountButton\n onDisConnect={onDisConnect}\n AccountId={AccountId}\n />\n\n <Slider showSlip={showSlip} setShowSlip={setShowSlip} />\n\n <SlippageSelector\n slippageTolerance={slippageTolerance}\n onChangeSlippageTolerance={setSlippageTolerance}\n showSlip={showSlip}\n setShowSlip={setShowSlip}\n />\n </div>\n </div>\n\n <TokenAmount\n amount={amountIn}\n balance={tokenInBalance}\n token={tokenIn}\n price={!tokenIn ? null : tokenPriceList?.[tokenIn.id]?.price}\n onChangeAmount={setAmountIn}\n onSelectToken={() => {\n setWidgetRoute('token-selector-in');\n }}\n />\n\n <div\n className={`__ref-swap-widget-exchange-button __ref-swap-widget-row-flex-center `}\n style={{\n color: iconDefault,\n }}\n >\n <CgArrowsExchangeAltV\n style={{\n cursor: 'pointer',\n }}\n className={`__ref-swap-widget-exchange-button-icon ${\n isMobile()\n ? '__ref-swap-widget-active'\n : '__ref-swap-widget-hover'\n }`}\n size={30}\n onClick={() => {\n tokenOut && handleSetTokenIn(tokenOut);\n tokenIn && handleSetTokenOut(tokenIn);\n setAmountIn('1');\n setAmountOut('');\n }}\n />\n </div>\n\n <TokenAmount\n amount={toPrecision(amountOut, 8)}\n balance={tokenOutBalance}\n token={tokenOut}\n price={!tokenOut ? null : tokenPriceList?.[tokenOut.id]?.price}\n onSelectToken={() => {\n setWidgetRoute('token-selector-out');\n }}\n onForceUpdate={() => {\n setRreshTrigger(!refreshTrigger);\n }}\n poolFetchingState={poolFetchingState}\n />\n {!swapError && amountIn && amountOut && (\n <DetailView\n fee={fee}\n rate={rate}\n amountIn={amountIn}\n minReceived={minAmountOut}\n tokenIn={tokenIn}\n tokenOut={tokenOut}\n amountOut={amountOut}\n priceImpact={priceImpact}\n estimates={estimates}\n />\n )}\n\n {swapError && (\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n color: '#DE9450',\n fontSize: '14px',\n\n paddingTop: '16px',\n }}\n >\n <TiWarning fill=\"#DE9450\" size={20} />\n &nbsp;\n {swapError.message}\n </div>\n )}\n {isSignedIn ? (\n <button\n type=\"submit\"\n className=\"__ref-swap-widget-submit-button __ref-swap-widget-button\"\n style={{\n color: 'white',\n background: buttonBg,\n opacity: !canSubmit ? 0.5 : 1,\n cursor: !canSubmit ? 'not-allowed' : 'pointer',\n }}\n disabled={!canSubmit}\n >\n {'Swap'}\n </button>\n ) : (\n <button\n type=\"button\"\n className=\"__ref-swap-widget-submit-button __ref-swap-widget-button\"\n onClick={onConnect}\n style={{\n color: 'white',\n background: buttonBg,\n cursor: 'pointer',\n }}\n >\n {'Connect Wallet'}\n </button>\n )}\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n justifyContent: 'center',\n }}\n >\n <a\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n color: secondary,\n justifyContent: 'center',\n paddingTop: '12px',\n fontSize: '14px',\n display: 'inline-flex',\n }}\n href=\"https://ref.finance\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <RefIcon\n style={{\n color: refIcon || 'black',\n }}\n />\n &nbsp; Powered by Ref.finance\n </a>\n </div>\n\n <Notification\n state={transactionState?.state}\n setState={transactionState?.setState}\n open={notOpen}\n setOpen={setNotOpen}\n tx={transactionState?.tx}\n detail={transactionState?.detail}\n />\n </form>\n )}\n\n {widgetRoute === 'token-selector-in' && (\n <TokenSelector\n balances={balances}\n tokens={tokens}\n width={width}\n onSelect={token => {\n handleSetTokenIn(token);\n setWidgetRoute('swap');\n }}\n onClose={() => setWidgetRoute('swap')}\n AccountId={AccountId}\n className={className}\n />\n )}\n\n {widgetRoute === 'token-selector-out' && (\n <TokenSelector\n tokens={tokens}\n balances={balances}\n width={width}\n onSelect={token => {\n handleSetTokenOut(token);\n setWidgetRoute('swap');\n }}\n onClose={() => setWidgetRoute('swap')}\n AccountId={AccountId}\n className={className}\n />\n )}\n </TokenPriceContextProvider>\n </ThemeContextProvider>\n );\n};\n","import { getConfig } from '../constant';\n\nexport const DefaultTestnetTokenList = [\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped NEAR fungible token',\n symbol: 'wNEAR',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'wrap.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Banana',\n symbol: 'BANANA',\n icon:\n 'https://assets.onlinelabels.com/images/clip-art/pitr/pitr_Bananas_icon.png',\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'banana.ft-fin.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NEAR Wrapped USDC',\n symbol: 'nUSDC',\n icon: 'https://s2.coinmarketcap.com/static/img/coins/64x64/3408.png',\n reference: null,\n reference_hash: null,\n decimals: 2,\n id: 'nusdc.ft-fin.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NEAR Wrapped Tether',\n symbol: 'nUSDT',\n icon: 'https://s2.coinmarketcap.com/static/img/coins/64x64/825.png',\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'nusdt.ft-fin.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Ref Finance Token',\n symbol: 'RFT',\n icon: '',\n reference: null,\n reference_hash: null,\n decimals: 8,\n id: 'rft.tokenfactory.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USD Coin',\n symbol: 'USDC',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle cx='16' cy='16' r='16' fill='%232775C9'/%3E%3Cpath d='M15.75 27.5C9.26 27.5 4 22.24 4 15.75S9.26 4 15.75 4 27.5 9.26 27.5 15.75A11.75 11.75 0 0115.75 27.5zm-.7-16.11a2.58 2.58 0 00-2.45 2.47c0 1.21.74 2 2.31 2.33l1.1.26c1.07.25 1.51.61 1.51 1.22s-.77 1.21-1.77 1.21a1.9 1.9 0 01-1.8-.91.68.68 0 00-.61-.39h-.59a.35.35 0 00-.28.41 2.73 2.73 0 002.61 2.08v.84a.705.705 0 001.41 0v-.85a2.62 2.62 0 002.59-2.58c0-1.27-.73-2-2.46-2.37l-1-.22c-1-.25-1.47-.58-1.47-1.14 0-.56.6-1.18 1.6-1.18a1.64 1.64 0 011.59.81.8.8 0 00.72.46h.47a.42.42 0 00.31-.5 2.65 2.65 0 00-2.38-2v-.69a.705.705 0 00-1.41 0v.74zm-8.11 4.36a8.79 8.79 0 006 8.33h.14a.45.45 0 00.45-.45v-.21a.94.94 0 00-.58-.87 7.36 7.36 0 010-13.65.93.93 0 00.58-.86v-.23a.42.42 0 00-.56-.4 8.79 8.79 0 00-6.03 8.34zm17.62 0a8.79 8.79 0 00-6-8.32h-.15a.47.47 0 00-.47.47v.15a1 1 0 00.61.9 7.36 7.36 0 010 13.64 1 1 0 00-.6.89v.17a.47.47 0 00.62.44 8.79 8.79 0 005.99-8.34z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'usdc.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tether USD',\n symbol: 'USDT.e',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle cx='16' cy='16' r='16' fill='%2326A17B'/%3E%3Cpath fill='%23FFF' d='M17.922 17.383v-.002c-.11.008-.677.042-1.942.042-1.01 0-1.721-.03-1.971-.042v.003c-3.888-.171-6.79-.848-6.79-1.658 0-.809 2.902-1.486 6.79-1.66v2.644c.254.018.982.061 1.988.061 1.207 0 1.812-.05 1.925-.06v-2.643c3.88.173 6.775.85 6.775 1.658 0 .81-2.895 1.485-6.775 1.657m0-3.59v-2.366h5.414V7.819H8.595v3.608h5.414v2.365c-4.4.202-7.709 1.074-7.709 2.118 0 1.044 3.309 1.915 7.709 2.118v7.582h3.913v-7.584c4.393-.202 7.694-1.073 7.694-2.116 0-1.043-3.301-1.914-7.694-2.117'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'usdt.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Dai Stablecoin',\n symbol: 'DAI',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle fill='%23F4B731' fill-rule='nonzero' cx='16' cy='16' r='16'/%3E%3Cpath d='M9.277 8h6.552c3.985 0 7.006 2.116 8.13 5.194H26v1.861h-1.611c.031.294.047.594.047.898v.046c0 .342-.02.68-.06 1.01H26v1.86h-2.08C22.767 21.905 19.77 24 15.83 24H9.277v-5.131H7v-1.86h2.277v-1.954H7v-1.86h2.277V8zm1.831 10.869v3.462h4.72c2.914 0 5.078-1.387 6.085-3.462H11.108zm11.366-1.86H11.108v-1.954h11.37c.041.307.063.622.063.944v.045c0 .329-.023.65-.067.964zM15.83 9.665c2.926 0 5.097 1.424 6.098 3.528h-10.82V9.666h4.72z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'dai.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='256' height='256'%3E%3Cdefs%3E%3Ctext id='A' x='50' y='180' font-size='180'%3E🍌%3C/text%3E%3C/defs%3E%3Cuse xlink:href='%23A'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'weth.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'HAPI',\n symbol: 'HAPI',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_2' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' width='600px' height='600px' viewBox='0 0 600 600' enable-background='new 0 0 600 600' xml:space='preserve'%3E %3Cg%3E %3Cg%3E %3Cpath fill='%23141414' d='M263.7,122.8c-3.6,0.3-7.1,0.9-10.7,1.8c-24.5,6-40.3,18.1-50.4,31c24.5-4.7,49.9,1.3,67.3,7.4 c0.5,0.2,1,0.4,1.6,0.6c-2.7-4.2-5.2-9-7.2-14.4C261.2,141.1,261.6,131.6,263.7,122.8z'/%3E %3Cpath fill='%23141414' d='M201.2,197.7c-9.8-1.1-19.1-2.1-24.6-2.1c-0.7,0-1.4,0-2,0.1c-38.1,2.6-67.2,37.3-69.1,82.4 c-1.4,32.2,13.5,53.1,23.3,63.4c-1.5-12.5-0.1-25,4.3-37.3c11.7-32.6,34.3-42.1,60.6-53.1c10.8-4.5,22.5-9.5,34.3-16.6l50.1-39.6 c-10.1,2.2-24.4,4.5-42.9,5.3C227.1,200.6,213.9,199.1,201.2,197.7z'/%3E %3Cpath fill='%23141414' d='M319.1,176.5c-0.5,1.1,0.9,2.1,1.8,1.2c5.3-5.4,16.3-14.3,30.8-14.2c15.6,0.1,35.5,10.2,40.5,22.1 c4,9.8-6.6,16.5-6.6,16.5l0,0c-2.5-2.7-8-6.3-18.2-6.6c-15-0.5-25.3,12.1-24.1,12.9c7.5,4.7,17.3,3.7,23.1,3.5 c5.8-0.2,15.1-2.5,17.8-3.5c4.7-1.8,11.7-7.8,14.9-16.1c2.5-6.5,8.4-28.7-25.2-34.4C352.7,154.3,327,159.6,319.1,176.5z'/%3E %3Cpath fill='%23141414' d='M473.1,225.1c-0.5-0.6-1.1-1.3-1.7-2l-0.3-0.3c-3.9-4.4-7.6-8.3-9.4-10.1c1.2-4.2,4-16.2,1-26.1 c-2.3-7.7-6.8-15.5-9.2-19.4l-0.8-1.2h0c-0.4-0.6-0.8-1.2-1.1-1.7c-0.3-0.4-0.5-0.7-0.6-1l-0.2-0.7c-2.5-7-8.6-22.3-16.4-28.1 l59.4-91.7c2.3-3.5-2.1-7.5-5.4-5l-86.8,66.5c-8.7-12.3-21.1-21.8-21.8-22.4c-0.8-0.6-2-0.7-2.9-0.2c-0.9,0.5-1.4,1.6-1.3,2.6 c0,0.1,0.6,5.9-2.9,17.6c7.5,2.7,13.9,6,19.3,9.7l-4.5,3.5c-8.8-5.7-20-10.5-34.3-12.6c-17.7-2.6-31.9,1-42.1,10.7c0,0,0,0,0,0 c5.9,3.8,13.1,8.7,17,12.4c0.8,0.7,1.5,1.5,2.2,2.3c-3.1,0.9-6.2,1.9-9.3,2.9c-0.3-0.2-0.5-0.5-0.8-0.7c-1.9-1.7-4.4-3.4-7-5.3 c-5.4-3.8-11.7-8.3-15.8-14c-2.2-3.1-3.8-6.5-4.3-10.4c-0.3-2.4-1-4-2.2-4.9c0,0,0,0,0,0c0,0,0,0,0,0c-0.6-0.5-2.8-2-5.8,0.3 c-2,1.6-4.4,5.3-6.5,10.3c-5.2,12.3-8.7,32.1-1.8,46.1c1.2,2.3,2.4,4.5,3.7,6.6c-0.4,1-0.7,2.1-0.9,3.1c-0.6,3.4-0.9,7.8-1.2,12.7 c-19.8-8.3-50.5-17.5-78.5-10.7c-23.9,5.8-39.4,17.5-49.6,30c7.4-3.1,15.2-5,23.5-5.6c5.6-0.4,16.4,0.8,27.9,2.1 c11.8,1.3,25.3,2.8,32.9,2.4c19.2-0.8,33.7-3.3,43.5-5.6c0,5.4,0.1,11.1,0.4,16.9c0.7,16.8,2.5,34.3,5,46.5 c3.6,17.9,16.5,55.2,31.4,64.6c5.5,3.5,13.5,8.2,22.9,13.4c-2.5,6.4-5.1,15.1-5.1,23.5c0,15.2,5.2,26.6,11,37 c4.6,8.2,9.6,15.7,12.8,24c2.5,6.5-2.7,27.7-5.6,38.9c-1.2,4.5-1.9,7.3-1.7,7c3.7-5.1,7.5-10.8,11.3-16.8 c15.3-24.2,19.4-47,19.5-48l0.2-1.4l-1.1-1c-0.2-0.2-17.2-15.7-18.3-33.3c-0.4-6.9,1-11.5,4.3-13.8c0.5-0.3,1-0.6,1.6-0.9 c7.5,3.7,15,7.3,22.2,10.5c2.8,3.5,9,9.4,11.8,12c3.4,3.2,6.9,7.8,12.2,7.8c5.3,0,15.9,0,21.3,0s13.1,0,17.3-2.1 c4.2-2.1,10.9-5.6,11-12.6c0-1.5,0.4-3.9,0.9-6.8c3.7-4.9,4.1-10.6,4.8-19.2c0.5-5.7,1.7-15.5,3-25.9c2-15.7,4.1-32,3.9-37.9 c-0.2-8.2-1.1-14.3-1.4-16.2C475.3,249.4,479.5,232.4,473.1,225.1z M318,310.6c-13.3-8.4-25.6-44.6-29-61.2 c-4.8-23.9-6.9-68.5-3.9-86.8c2.7-16.7,49-34.5,81.7-35.6c1.9-0.1,3.8-0.1,5.6-0.1c1,0,2,0,3,0c-0.1,4.9,1.3,15.6,13.8,25.5 c13.9,11,30.4,5,30.4,5l12.1-18.7c4.5,3.5,9.4,12.7,13,22.1c-0.9-0.4-1.9-0.7-3.1-0.9c-8.1-1.3-31.6-0.9-24,31.3 c1,4,5.2,9.4,17.2,22.3c2.8,3,5.1,5.3,7,7.2c5.6,5.6,7.4,7.4,7.5,11.8c0,0.3-0.2,1.6-0.4,3c-0.8-0.6-1.9-1.1-3.4-1 c-3.6-0.2-33.7,5.6-42.4,15.1c-1.7,1.9-4.5,2.6-6.7,1.4c-0.1-0.1-0.2-0.1-0.3-0.2c-1.4-0.8-2.3-1.9-2.8-3.5 c-1.3-5.1,2.9-13.2,4.6-16c0.6-1,0.3-2.3-0.6-2.9c-1-0.6-2.3-0.3-2.9,0.6c-0.1,0.2-0.9,1.5-1.9,3.5c-3.3,6.6-8.2,12.2-14.3,16.3 c-9.8,6.6-24,15.2-35.5,18.2c-18,4.7-24.9-8.2-25.2-8.8c-0.5-1-1.8-1.4-2.8-0.9c-1,0.5-1.5,1.8-0.9,2.8 c0.1,0.1,6.3,12.1,21.5,12.1c0.6,0,1.4-0.1,2.2-0.2c4.3-0.5,8.6,0.5,12.3,2.7c3.5,2.1,8,4.7,12.5,7c12.6,6.3,14.7,6.2,19.5,5.4 c1.1-0.2,49.8-2.4,80.1-8.2l3.6,0.2c2.4,0.1,4.3,2.3,4,4.7l0,0.1c-0.2,1.4-1,2.6-2.2,3.3c-2.7,1.5-6.5,3.5-9.9,4.9 c-1.6,0.6-3.3,1.2-5.1,1.6c-5.5,1.3-11.1,1.6-11.1,1.6s-5.4,1.2-13.5,2.1c-3.4,0.4-7.2,0.7-11.3,0.9c-14,0.7-13,1.6-24.8,1 c-2.9-0.1-5.7-0.3-8.3-0.6c-2.5-0.3-3.2,3.4-0.7,4c6.1,1.5,13.3,2.6,21.3,2.5c1,0,1.9,0,2.9,0c12.8-0.1,24.4,7.5,29.4,19.3 c2.1,5,4.1,12,5.4,18.5c1.8,8.4-5.3,16.1-13.8,15.3c-12.5-1.3-26.6-4.8-34.6-8.3C365.3,338.1,332.4,319.8,318,310.6z M448.7,169.2 l1.2,1.9c2.4,4,5.9,10.5,7.9,16.9c3.1,10.4-1.4,24.4-1.4,24.5l-0.5,1.5l1.1,1.1c0,0.1,5,5.2,10.3,11.1l0.1,0.2 c0.6,0.7,1.2,1.3,1.8,2c3.7,4.3,1.9,17-0.1,23.9l-0.2,0.6l0.1,0.6c0,0,0.3,1.5,0.6,3.9c-2.7,0.3-4.7,2.7-4.4,5.5l0.8,7.5l-8.6,0.1 l-13.5-15.3c-1-1.2-1-3,0.2-4c0,0,0,0,0,0c7.1-6.4,8.1-9.5,8.3-10.7c0.9-5.4,1.2-7.4,1.2-8.1c0-6.1-2.9-9-8.7-14.8 c-1.9-1.9-4.2-4.2-6.9-7.1c-0.6-0.6-1.1-1.2-1.7-1.8c2.1,0.6,4.9,1.2,8.5,1.5c8.4,0.7,10.9-1.4,10.9-1.4s1.5-2.7-1.1-6.6 c-2.6-3.9-6.2-6.7-13.2-6.9c-5-0.2-9.5,3.7-11.7,6c-0.9-1-2.9-4.7-3.8-10.9c-1.5-9.7,2.1-14.2,4.7-16.4c4.6-3.9,10.9-7.7,14.4-7.5 c0.9,0.1,1.9,0.2,2.7,0.4C447.8,167.7,448.2,168.4,448.7,169.2z M463.4,332.9c-0.7,8.2-1.1,12.8-3.8,16.5c-2.3,3.1-7.3,0.8-6.6-3 c0.4-2.1,0.7-4.3,0.8-6.4c0.3-10.7-4.9-20.9-6.7-27.7c0,0,0-0.1,0-0.1c-0.9-3.8,1.2-7.7,4.8-9.3c1.6-0.7,3.4-1.6,5.3-2.6 c4.6-2.3,9.9,1.3,9.2,6.4l0,0.1C465.2,317.2,463.9,327.1,463.4,332.9z M385.1,249.4c1.8-1.3,4.4-0.8,5.6,1.2 c0.8,1.4,1.9,2.9,3.4,4.1c4.5,3.7,9.8,3.5,13.2,3.5c3.3,0,5.4-0.6,6-0.8c0,0,0,0,0,0c2.4-0.5,4.3,2,3.1,4.2 c-2.6,4.8-6.1,11.1-6.5,11.4c-0.7,0.5-22.8,5.1-25.6,5.4s-11.6,1.2-18.2-3c-2.8-1.7-5.5-3.7-7.7-5.3c-1.7-1.2-1.4-3.8,0.4-4.7 C368.8,260.4,378.7,253.9,385.1,249.4z M436.8,263.8l8.3,9.1c1.5,1.7,0.5,4.4-1.7,4.7c-5,0.6-10,1.2-14.9,1.7 c-2.3,0.2-3.9-2.3-2.7-4.3c1.9-3,4.3-7,6.5-10.8C433.2,262.6,435.5,262.4,436.8,263.8z M396.4,117.1l83.5-69.1l-76.9,76.9 c-2.5,2.4-6.6,1.6-8.1-1.5h0C393.9,121.2,394.5,118.5,396.4,117.1z'/%3E %3Cpath fill='%23141414' d='M196.6,258.1c-25.6,10.7-45.8,19.2-56.4,48.7c-15.1,42,9.4,88.5,62.5,120.1c-17.4-68,3.5-93.1,22.1-115.3 c6.4-7.7,12.5-15,16.9-23.7c12.9-25.8,12.3-50.5,11.1-62C233.7,242.5,214.1,250.8,196.6,258.1z'/%3E %3C/g%3E %3Cg%3E %3Cpath d='M201.6,477.1h-9.1l-2.8,17.1h-14.3l2.8-17.1h-9.1l-2.8,17.1h-9.3l-1.5,9.1h9.3l-2.3,14h-9.4l-1.5,9.1h9.4l-2.8,17.1h9.1 l2.8-17.1h14.3l-2.8,17.1h9.1l2.8-17.1h9.3l1.5-9.1h-9.3l2.3-14h9.4l1.5-9.1h-9.4L201.6,477.1z M186,517.4h-14.3l2.3-14h14.3 L186,517.4z'/%3E %3Cpolygon points='260.8,505.3 230,505.3 230,477.1 218,477.1 218,543.6 230,543.6 230,515.4 260.8,515.4 260.8,543.6 272.9,543.6 272.9,477.1 260.8,477.1 '/%3E %3Cpath d='M307.1,477.1l-23.4,66.4h12.8l5.5-16.4h25l5.5,16.4h12.8l-23.4-66.4H307.1z M305.3,517.5l9-26.8h0.5l9,26.8H305.3z'/%3E %3Cpath d='M394,480c-3.5-1.9-7.8-2.9-12.9-2.9h-24.9v66.4h12v-22.4H381c5.1,0,9.4-0.9,12.9-2.8s6.2-4.5,7.9-7.8 c1.8-3.3,2.7-7.1,2.7-11.3c0-4.2-0.9-8-2.7-11.3C400.1,484.5,397.4,481.9,394,480z M390.9,505.4c-0.9,1.8-2.3,3.2-4.2,4.3 c-1.9,1-4.3,1.6-7.3,1.6h-11.1v-24h11c3,0,5.5,0.5,7.4,1.5c1.9,1,3.3,2.4,4.2,4.2c0.9,1.8,1.4,3.9,1.4,6.2 S391.8,503.6,390.9,505.4z'/%3E %3Crect x='417.1' y='477.1' width='12' height='66.4'/%3E %3C/g%3E %3C/g%3E %3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'hapi.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'PARAS',\n symbol: 'PARAS',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'paras.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Ref Finance Token',\n symbol: 'REF',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'ref.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Pulse',\n symbol: 'PULSE',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgdmlld0JveD0iMCAwIDIwMCAyMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxjaXJjbGUgY3g9IjEwMCIgY3k9IjEwMCIgcj0iMTAwIiBmaWxsPSIjMEYyQUMzIi8+CjxwYXRoIGQ9Ik0xMDMuNTc0IDg0LjU3M0MxMDIuMDUyIDg2LjU4MDggMTAwLjg1MyA4OS4xNDAyIDk5LjY5NzIgOTEuNjU1OUM5OC41NDA5IDk0LjE3MTYgOTcuMzkyIDk2LjY1OTYgOTYuMjE0OSA5OC40MjU1Qzk1LjAzNzggMTAwLjE5MSA5My45Mjg0IDEwMS4wNTggOTIuNzMyNiAxMDEuMDU4QzkxLjI3MDMgMTAxLjA1OCA5MC40NDI1IDEwMC42NDMgODkuNzEwMiA5OS44NjcyQzg4Ljk3NzYgOTkuMDkxNiA4OC40MDY1IDk3LjkwNSA4Ny44NzAzIDk2LjY3MDRDODcuMzMzOSA5NS40MzU4IDg2Ljg0NzcgOTQuMTM1MSA4Ni4wMzA1IDkzLjAzNDlDODUuMjEzMyA5MS45MzQ3IDgzLjkxMDQgOTEuMDI5MSA4Mi4yMTk4IDkxLjAyOTFDODEuMjYzMyA5MS4wMjkxIDgwLjQyMzcgOTEuNDQ1MSA3OS43ODg2IDkyLjAzMkM3OS4xNTM0IDkyLjYxODkgNzguNjkwMSA5My4zOTAxIDc4LjI3NzQgOTQuMjI1OUM3Ny40NTIxIDk1Ljg5NjggNzYuODM1NCA5Ny45NjgyIDc2LjA0MzUgOTkuOTkyN0M3NS4yNTE2IDEwMi4wMTcgNzQuMjc3MSAxMDMuOTk1IDcyLjk1NTUgMTA1LjM4M0M3MS42MzM2IDEwNi43NzIgNjkuOTk5MiAxMDcuNjQgNjcuNTAxOCAxMDcuNjRIMzguMDY2MkMzNy42ODcxIDEwNy42MzUgMzcuMzM0NSAxMDcuODI1IDM3LjE0MzMgMTA4LjEzN0MzNi45NTIyIDEwOC40NDkgMzYuOTUyMiAxMDguODM2IDM3LjE0MzMgMTA5LjE0OEMzNy4zMzQ1IDEwOS40NjEgMzcuNjg3MSAxMDkuNjUxIDM4LjA2NjIgMTA5LjY0Nkg2Ny41MDE4QzcwLjU0NzkgMTA5LjY0NiA3Mi44OTg1IDEwOC40MTYgNzQuNTMyMyAxMDYuN0M3Ni4xNjYyIDEwNC45ODQgNzcuMTg3NSAxMDIuNzk3IDc4LjAxNDYgMTAwLjY4MkM3OC44NDE3IDk4LjU2NzUgNzkuNDc1IDk2LjQ3NDEgODAuMTgyOCA5NS4wNDA3QzgwLjUzNyA5NC4zMjQgODAuODg5MyA5My43OTE5IDgxLjIzNDEgOTMuNDczOEM4MS41Nzg5IDkzLjE1NTIgODEuODI2NiA5My4wMzQ5IDgyLjIxOTggOTMuMDM0OUM4My4yMjc5IDkzLjAzNDkgODMuNzQyNyA5My40NDUzIDg0LjMyMjIgOTQuMjI1OUM4NC45MDE4IDk1LjAwNiA4NS40MTIgOTYuMjEyNyA4NS45NjQ5IDk3LjQ4NTRDODYuNTE3NyA5OC43NTc3IDg3LjA4OTYgMTAwLjA3OCA4OC4xMzMxIDEwMS4xODRDODkuMTc2NiAxMDIuMjg5IDkwLjczNzUgMTAzLjA2NCA5Mi43MzI2IDEwMy4wNjRDOTQuOTkzOCAxMDMuMDY0IDk2LjY1OTEgMTAxLjQ4NiA5Ny45ODg4IDk5LjQ5MTJDOTkuMzE4NSA5Ny40OTYyIDEwMC40NTQgOTQuOTY5NSAxMDEuNjAzIDkyLjQ3MDlDMTAyLjc1MSA4OS45NzE4IDEwMy45NTMgODcuNTE2OSAxMDUuMjgyIDg1Ljc2MzhDMTA2LjYxMSA4NC4wMTA3IDEwNy45MjUgODMuMDA1OCAxMDkuNTUzIDgzLjAwNThDMTEwLjI5NSA4My4wMDU4IDExMC45NDYgODMuMjcyOCAxMTEuNjU2IDgzLjg4MzRDMTEyLjM2NSA4NC40OTM5IDExMy4wNjggODUuNDUxNyAxMTMuNzU4IDg2LjY0MTRDMTE1LjEzOCA4OS4wMjA3IDExNi40NDcgOTIuMzI4OCAxMTcuODMyIDk1LjY2NzVDMTE5LjIxNiA5OS4wMDYyIDEyMC43MTcgMTAyLjM3NiAxMjIuNjk0IDEwNS4wMDdDMTI0LjY3MSAxMDcuNjM4IDEyNy4yMzQgMTA5LjU4MyAxMzAuNTc4IDEwOS41ODNIMTYwLjkzNEMxNjEuMzEzIDEwOS41ODggMTYxLjY2NiAxMDkuMzk4IDE2MS44NTcgMTA5LjA4NkMxNjIuMDQ4IDEwOC43NzMgMTYyLjA0OCAxMDguMzg3IDE2MS44NTcgMTA4LjA3NEMxNjEuNjY2IDEwNy43NjIgMTYxLjMxMyAxMDcuNTcyIDE2MC45MzQgMTA3LjU3N0gxMzAuNTc4QzEyOC4wNjcgMTA3LjU3NyAxMjYuMTcgMTA2LjIzMiAxMjQuNDAyIDEwMy44NzlDMTIyLjYzNCAxMDEuNTI2IDEyMS4xMDggOTguMjgzNyAxMTkuNzM3IDk0Ljk3ODFDMTE4LjM2NiA5MS42NzIxIDExNy4xMDggODguMzA1MiAxMTUuNTk4IDg1LjcwMTJDMTE0Ljg0MyA4NC4zOTkxIDExNC4wOCA4My4yODQ2IDExMy4xMDEgODIuNDQxOEMxMTIuMTIyIDgxLjU5ODcgMTEwLjg4MyA4MSAxMDkuNTUzIDgxQzEwNy4wMzYgODEgMTA1LjA5NiA4Mi41NjUzIDEwMy41NzQgODQuNTczWiIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSI1Ii8+Cjwvc3ZnPgo=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'pulse.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Ether',\n symbol: 'ETH',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'eth.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Aurora',\n symbol: 'AURORA',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 288 288' style='enable-background:new 0 0 288 288;' xml:space='preserve'%3E %3Cstyle type='text/css'%3E .st0%7Bfill:%2370D44B;%7D .st1%7Bfill:%23FFFFFF;%7D %3C/style%3E %3Cpath class='st0' d='M144,0L144,0c79.5,0,144,64.5,144,144v0c0,79.5-64.5,144-144,144h0C64.5,288,0,223.5,0,144v0 C0,64.5,64.5,0,144,0z'/%3E %3Cpath class='st1' d='M144,58.8c7.6,0,14.5,4.3,17.9,11.1l56.2,112.5c4.9,9.9,0.9,21.9-9,26.8c-2.8,1.4-5.8,2.1-8.9,2.1H87.8 c-11,0-20-9-20-20c0-3.1,0.7-6.2,2.1-8.9l56.2-112.5C129.5,63,136.4,58.7,144,58.8 M144,45c-12.8,0-24.5,7.2-30.2,18.7L57.6,176.2 c-8.3,16.7-1.6,36.9,15.1,45.3c4.7,2.3,9.9,3.6,15.1,3.6h112.5c18.6,0,33.8-15.1,33.8-33.7c0-5.2-1.2-10.4-3.6-15.1L174.2,63.7 C168.5,52.2,156.8,45,144,45z'/%3E %3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'aurora.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Skyward Finance Token',\n symbol: 'SKYWARD',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'skyward.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked NEAR',\n symbol: 'STNEAR',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 67.79 67.79' version='1.1'%3E%3Cpath style='fill:%23fff' d='M33.934.311a33.9 33.9 0 1 0 33.89 33.9 33.9 33.9 0 0 0-33.89-33.9z' id='path505'%3E%3C/path%3E%3Cpath style='fill:%23ffbd00;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1' d='m11.803 27.8 12.387.359 2.361 5.959 7.616 3.31 8.523-3.322 2.348-5.87 12.269.03L54.822 54.2 31.837 58.86 12.89 52.648z' id='path1051'%3E%3C/path%3E%3Cpath style='fill:%23a0a0ff;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1' d='m34.657 12.575-10.43 9.633 1.096 10.01 8.844 5.21 9.785-5.287 1.086-11.33z' id='path1815'%3E%3C/path%3E%3Cpath id='path928' style='fill:%23666;fill-opacity:1' d='M33.928 4.282a29.93 29.93 0 0 1 4.682.367 29.93 29.93 0 0 1 25.244 29.572 29.93 29.93 0 0 1-29.92 29.92 29.93 29.93 0 0 1-.006-59.86zm.729 8.293c-2.03 5.668-8.815 9.76-8.815 14.521 0 4.76 3.912 8.62 8.737 8.62 4.824 0 8.736-3.86 8.736-8.62s-6.707-8.697-8.658-14.521zM37.84 22.67a2.524 2.446 0 0 1 .246.012 2.524 2.446 0 0 1 .246.035 2.524 2.446 0 0 1 .24.059 2.524 2.446 0 0 1 .233.08 2.524 2.446 0 0 1 .225.104 2.524 2.446 0 0 1 .213.123 2.524 2.446 0 0 1 .197.142 2.524 2.446 0 0 1 .183.162 2.524 2.446 0 0 1 .168.178 2.524 2.446 0 0 1 .147.191 2.524 2.446 0 0 1 .127.207 2.524 2.446 0 0 1 .105.217 2.524 2.446 0 0 1 .084.227 2.524 2.446 0 0 1 .06.232 2.524 2.446 0 0 1 .038.237 2.524 2.446 0 0 1 .012.24 2.524 2.446 0 0 1-.086.633 2.524 2.446 0 0 1-.252.59 2.524 2.446 0 0 1-.403.507 2.524 2.446 0 0 1-.521.389 2.524 2.446 0 0 1-.61.244 2.524 2.446 0 0 1-.652.084 2.524 2.446 0 0 1-.654-.084 2.524 2.446 0 0 1-.607-.244 2.524 2.446 0 0 1-.524-.389 2.524 2.446 0 0 1-.4-.508 2.524 2.446 0 0 1-.252-.59 2.524 2.446 0 0 1-.086-.632 2.524 2.446 0 0 1 .086-.633 2.524 2.446 0 0 1 .252-.59 2.524 2.446 0 0 1 .4-.506A2.524 2.446 0 0 1 36.58 23a2.524 2.446 0 0 1 .607-.247 2.524 2.446 0 0 1 .654-.082zM24.19 28.16a16.579 2.485 0 0 0-6.502 1.965 16.579 2.485 0 0 0 7.635 2.093 10.483 10.6 0 0 1-1.133-4.058zm20.848.078a10.483 10.6 0 0 1-1.086 3.904 16.579 2.485 0 0 0 6.894-2.017 16.579 2.485 0 0 0-5.808-1.887zm6.925 3.21c-.455 1.177-4.097 2.154-9.273 2.659a10.483 10.6 0 0 1-8.072 3.861 10.483 10.6 0 0 1-8.067-3.85c-5.276-.506-8.978-1.498-9.398-2.64h-.049v5.17h.049a.69.69 0 0 0-.049.24c0 1.8 7.81 3.25 17.43 3.25 9.62 0 17.43-1.45 17.43-3.25a.69.69 0 0 0 0-.24zm.032 7.323c-.67 1.73-8.22 3.03-17.43 3.03-9.23 0-16.771-1.34-17.381-3h-.049v5.17h.049a.69.69 0 0 0-.049.24c0 1.8 7.81 3.25 17.43 3.25 9.62 0 17.43-1.45 17.43-3.25a.69.69 0 0 0 0-.24zm0 7.21c-.67 1.69-8.22 3.03-17.43 3.03-9.23 0-16.771-1.34-17.381-3h-.049v5.17h.049a.69.69 0 0 0-.049.24c0 1.8 7.81 3.25 17.43 3.25 9.62 0 17.43-1.45 17.43-3.25a.69.69 0 0 0 0-.24z'%3E%3C/path%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'stnear.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Octopus Network Token',\n symbol: 'OCT',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='O' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 113.39 113.39' style='enable-background:new 0 0 113.39 113.39;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23014299;%7D .st1%7Bfill:%23FFFFFF;%7D %3C/style%3E%3Ccircle class='st0' cx='56.69' cy='56.69' r='56.69'/%3E%3Cg%3E%3Cpath class='st1' d='M44.25,59.41c-1.43,0-2.59,1.16-2.59,2.59v20.28c0,1.43,1.16,2.59,2.59,2.59c1.43,0,2.59-1.16,2.59-2.59V62 C46.84,60.57,45.68,59.41,44.25,59.41z'/%3E%3Cpath class='st1' d='M56.69,59.41c-1.45,0-2.62,1.17-2.62,2.62v26.47c0,1.45,1.17,2.62,2.62,2.62s2.62-1.17,2.62-2.62V62.02 C59.31,60.58,58.14,59.41,56.69,59.41z'/%3E%3Cpath class='st1' d='M79.26,78.87c-0.33,0.15-0.64,0.28-0.95,0.38c0,0-0.01,0-0.01,0c-0.59,0.19-1.13,0.29-1.63,0.31h-0.06 c-1,0.03-1.84-0.27-2.59-0.75c-0.49-0.32-0.91-0.73-1.25-1.23c-0.3-0.43-0.53-0.93-0.71-1.51c0-0.01-0.01-0.02-0.01-0.03 c-0.22-0.74-0.34-1.61-0.34-2.59V62.02c0-1.45-1.17-2.62-2.62-2.62c-1.45,0-2.62,1.17-2.62,2.62v11.43c0,4.5,1.64,8.03,4.63,9.96 c1.5,0.97,3.21,1.45,5.04,1.45c1.68,0,3.45-0.41,5.25-1.22c1.32-0.59,1.9-2.14,1.31-3.46C82.13,78.86,80.57,78.27,79.26,78.87z'/%3E%3Cpath class='st1' d='M68.33,45.9c0-2.15-1.75-3.9-3.9-3.9c-2.15,0-3.9,1.75-3.9,3.9s1.75,3.9,3.9,3.9 C66.58,49.8,68.33,48.05,68.33,45.9z'/%3E%3Cpath class='st1' d='M48.96,41.99c-2.15,0-3.9,1.75-3.9,3.9s1.75,3.9,3.9,3.9s3.9-1.75,3.9-3.9S51.11,41.99,48.96,41.99z'/%3E%3Cpath class='st1' d='M56.69,22.28c-15.17,0-27.52,12.34-27.52,27.52v15.09c0,1.46,1.18,2.64,2.64,2.64s2.64-1.18,2.64-2.64V49.8 c0-12.26,9.98-22.24,22.24-22.24c12.26,0,22.24,9.98,22.24,22.24v15.09c0,1.46,1.18,2.64,2.64,2.64s2.64-1.18,2.64-2.64V49.8 C84.21,34.62,71.87,22.28,56.69,22.28z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'oct.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Debio',\n symbol: 'DBIO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIxOTAgOTcgNDIwIDQyMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgODAwIDgwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48c3R5bGU+LnN0MHtmaWxsOiMzNjM2MzZ9LnN0M3tmaWxsOiNmZjU2ZTB9PC9zdHlsZT48L2RlZnM+PGNpcmNsZSBjbGFzcz0ic3QzIiBjeD0iNDAwIiBjeT0iMzA3LjM5IiByPSIyMDguNTgiLz48cGF0aCBkPSJNNDczLjk5IDIxMS4zczIuMzQgNTYuMjUtNzcuMzQgOTguNDMtNzAuMzEgOTMuNzQtNzAuMzEgOTMuNzQiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNlNmU2ZTY7c3Ryb2tlLXdpZHRoOjM3LjQ5NzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTAiLz48cGF0aCBkPSJNMzI2LjAxIDIxMS4zcy0yLjM0IDU2LjI1IDc3LjM0IDk4LjQzIDcwLjMxIDkzLjc0IDcwLjMxIDkzLjc0IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDozNy40OTc1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwIi8+PGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iNDAwIiBjeT0iMjE2LjQyIiByPSIyMC40OSIvPjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjQwMCIgY3k9IjM5OC4zNiIgcj0iMjAuNDkiLz48dGV4dCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMzYuMzQyIDY1OC4wNzUpIiBjbGFzcz0ic3QzIiBzdHlsZT0id2hpdGUtc3BhY2U6cHJlO2ZvbnQtc2l6ZToxMTIuNDkyNXB4O2ZvbnQtZmFtaWx5OidBcnRlZ3JhU2Fucy1TZW1pQm9sZCciPkRlQmlvPC90ZXh0Pjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'dbio.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Game GEM!!',\n symbol: 'gGEM',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 4,\n id: 'gem.thegame.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Game Gold!!',\n symbol: 'gGOLD',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 2,\n id: 'gold.thegame.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Game Elixir!!',\n symbol: 'gELXR',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 2,\n id: 'elixir.thegame.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USN',\n symbol: 'USN',\n icon:\n \"data:image/svg+xml;charset=UTF-8,%3Csvg width='38' height='38' viewBox='0 0 38 38' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='38' height='38' rx='19' fill='black'/%3E%3Cpath d='M14.8388 10.6601C14.4203 10.1008 13.6748 9.86519 12.9933 10.0768C12.3119 10.2885 11.85 10.8991 11.85 11.5883V14.7648H8V17.9412H11.85V20.0589H8V23.2353H11.85V28H15.15V16.5108L23.1612 27.2165C23.5797 27.7758 24.3252 28.0114 25.0067 27.7997C25.6881 27.5881 26.15 26.9775 26.15 26.2882V23.2353H30V20.0589H26.15V17.9412H30V14.7648H26.15V10.0001H22.85V21.3658L14.8388 10.6601Z' fill='white'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'usdn.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Learn NEAR Club',\n symbol: 'LNC',\n icon:\n 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAQwAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAAHRyWFlaAAABZAAAABRnWFlaAAABeAAAABRiWFlaAAABjAAAABRyVFJDAAABoAAAAChnVFJDAAABoAAAAChiVFJDAAABoAAAACh3dHB0AAAByAAAABRjcHJ0AAAB3AAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAFgAAAAcAHMAUgBHAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z3BhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABYWVogAAAAAAAA9tYAAQAAAADTLW1sdWMAAAAAAAAAAQAAAAxlblVTAAAAIAAAABwARwBvAG8AZwBsAGUAIABJAG4AYwAuACAAMgAwADEANv/bAEMAAwICAgICAwICAgMDAwMEBgQEBAQECAYGBQYJCAoKCQgJCQoMDwwKCw4LCQkNEQ0ODxAQERAKDBITEhATDxAQEP/bAEMBAwMDBAMECAQECBALCQsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/AABEIACAAIAMBIgACEQEDEQH/xAAZAAADAAMAAAAAAAAAAAAAAAAABgcDBAj/xAAjEAACAgICAgMAAwAAAAAAAAABAgMEBQYAEQcSEyExFCJB/8QAGAEAAgMAAAAAAAAAAAAAAAAAAQMABwj/xAAlEQACAQMDBAIDAAAAAAAAAAABEQMAAgQxQWESIZHwUXGBwfH/2gAMAwEAAhEDEQA/AOqOHNHN5vF67jnyuZtCtVSSKJpCjN00kixoOlBP27qPz/fv64qZDzBq+L8h2/Gt2rk0yVXFJlROK3tVlVhMwhEoPSzeteZgr+vsqMVJ9W6zZHBLKCbLSV38J+GKva+aONC8p/v+U88ORWv5t3fyTFTbwTpWPvxpjMfl8lc2O49SvCLldbENGMwLJ72vidWf7CxB4ifcSDqmaPseS2rXIMtmdYva9kRJLWuY632TDPE5jf436HyxFlJjlAAdCrADvrjZ8OXHt6pEOGGPhjUP3alxZUc9ys78oo/R0rD5E1O3u+oXdboZaPGWrD15oLctU2EikhnjlUtGHQuCYwCPZf394jZDwNc2pdht75uMF3LZ2ji4I72LxQpGhZoT25YLMKySzdN1aVSpJBCOD2shVa7w5IcyaC3ojKDegex1T2HbTtRkxYpruq8MpannbTc1EcB4D3jx3UxaeLPK1fFSpgcfhsxBkcH/AC6V+epWirR5CKFZ42gn+OPpv7uHCQq31GDymeP9XymnarTwed27JbPk0LzXcrfIElmeRy8jKgJEUfsxCRKSqIFUdgd8YuHDPmzZIUpB5QB4ZAZ9+BQhxIoC4wR+SvDXvNf/2Q==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'lnc.factory.tokenhub.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped BTC',\n symbol: 'WBTC',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle fill='%23201A2D' cx='16' cy='16' r='16'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M22.818 9.586l-.6.6a8.494 8.494 0 010 11.464l.6.6a9.352 9.352 0 000-12.678v.014zM10.2 9.638a8.494 8.494 0 0111.464 0l.6-.6a9.352 9.352 0 00-12.678 0l.614.6zm-.562 12.018a8.494 8.494 0 010-11.458l-.6-.6a9.352 9.352 0 000 12.678l.6-.62zm12.018.554a8.494 8.494 0 01-11.464 0l-.6.6a9.352 9.352 0 0012.678 0l-.614-.6zm-1.942-8.286c-.12-1.252-1.2-1.672-2.566-1.8V10.4h-1.056v1.692h-.844V10.4H14.2v1.736h-2.142v1.13s.78-.014.768 0a.546.546 0 01.6.464v4.752a.37.37 0 01-.128.258.366.366 0 01-.272.092c.014.012-.768 0-.768 0l-.2 1.262h2.122v1.764h1.056V20.12h.844v1.73h1.058v-1.744c1.784-.108 3.028-.548 3.184-2.218.126-1.344-.506-1.944-1.516-2.186.614-.302.994-.862.908-1.778zm-1.48 3.756c0 1.312-2.248 1.162-2.964 1.162v-2.328c.716.002 2.964-.204 2.964 1.166zm-.49-3.28c0 1.2-1.876 1.054-2.472 1.054v-2.116c.596 0 2.472-.188 2.472 1.062z'/%3E%3Cpath d='M15.924 26.852C9.89 26.851 5 21.959 5 15.925 5 9.892 9.892 5 15.925 5c6.034 0 10.926 4.89 10.927 10.924a10.926 10.926 0 01-10.928 10.928zm0-21c-5.559.004-10.062 4.513-10.06 10.072.002 5.559 4.51 10.064 10.068 10.064 5.559 0 10.066-4.505 10.068-10.064A10.068 10.068 0 0015.924 5.852z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 8,\n id: 'wbtc.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Huobi BTC',\n symbol: 'HBTC',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'hbtc.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Celo Dollar',\n symbol: 'cUSD',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTEwMCA1MGMwLTI3LjYxNDItMjIuMzg1OC01MC01MC01MHMtNTAgMjIuMzg1OC01MCA1MCAyMi4zODU4IDUwIDUwIDUwIDUwLTIyLjM4NTggNTAtNTB6IiBmaWxsPSIjNDVjZDg1Ii8+PGcgZmlsbD0iI2ZmZiI+PHBhdGggZD0ibTY5Ljg4MDUgNjIuNjQzOGMtMS41NjcxIDMuMzkzMS0zLjkzNzUgNi4zNTMyLTYuOTA2MSA4LjYyNDEtMi45Njg1IDIuMjcwOC02LjQ0NTggMy43ODQxLTEwLjEzMDcgNC40MDg3LTMuNjg1LjYyNDYtNy40NjY3LjM0MTctMTEuMDE3Ny0uODI0MS0zLjU1MTEtMS4xNjU4LTYuNzY0Ni0zLjE3OTQtOS4zNjIzLTUuODY2Ni0yLjU5NzgtMi42ODcxLTQuNTAxNS01Ljk2NjktNS41NDY1LTkuNTU1NC0xLjA0NDktMy41ODg1LTEuMTk5Ni03LjM3NzUtLjQ1MDctMTEuMDM5My43NDg5LTMuNjYxNyAyLjM3ODktNy4wODU3IDQuNzQ4OS05Ljk3NTggMi4zNzAxLTIuODkgNS40MDg3LTUuMTU4OSA4Ljg1MjktNi42MTAzbDIuMjY2OCA1LjM3OTJjLTIuNTcgMS4wODMxLTQuODM3NSAyLjc3NjEtNi42MDYgNC45MzI3LTEuNzY4NSAyLjE1NjUtMi45ODQ4IDQuNzExNS0zLjU0MzYgNy40NDM5LS41NTg5IDIuNzMyNC0uNDQzNSA1LjU1OTguMzM2MyA4LjIzNzYuNzc5OCAyLjY3NzcgMi4yMDAzIDUuMTI1MSA0LjEzODggNy4xMzAyIDEuOTM4NCAyLjAwNTIgNC4zMzYzIDMuNTA3OCA2Ljk4NjEgNC4zNzc3czUuNDcxNyAxLjA4MSA4LjIyMTUuNjE0OWMyLjc0OTctLjQ2NjEgNS4zNDQ0LTEuNTk1MyA3LjU1OTUtMy4yODk4IDIuMjE1Mi0xLjY5NDUgMy45ODQtMy45MDMzIDUuMTUzNC02LjQzNTNsNS45MTg5LjMwNDJ6Ii8+PHBhdGggZD0ibTU2LjEwNjEgMjQuNXYtNGg0LjUwMDV2NGMyIDAgNS4xNjY3LjY2NjcgNi41IDF2NC41Yy0xOS0zLTE1LjUwMTEgMy44NDYyLTggNSA2LjcyMTcgMS4wMzM5IDExIDIgMTEuNSA5IC40IDUuNi01LjgzMzMgNy42NjY3LTkgOHYzLjVoLTV2LTMuNWMtMi40IDAtNi42NjY3LTEuNjY2Ny04LjUtMi41di01LjVjNC41IDIuNSAxNyA0LjUgMTcgMHMtMTYuNTAxMS0zLTE4LjAwMDUtMTFjLTEuMDAyMy01LjM0NzUgNS4zMzMzLTcuODMzMyA5LTguNXoiLz48L2c+PC9zdmc+',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'cusd.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'LiNEAR',\n symbol: 'LINEAR',\n icon:\n \"data:image/svg+xml,%3Csvg width='40' height='40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M30.74 28.78c.21-.36.32-.78.32-1.21v-6.33c0-.24-.06-.46-.17-.66-.12-.21-.28-.38-.48-.49l-16.86-9.77c-.35-.2-.73-.31-1.13-.32-.64 0-1.24.26-1.69.72-.45.45-.7 1.07-.71 1.71v6.39c0 .24.06.47.18.67.11.21.28.37.48.48l16.82 9.71c.36.22.77.32 1.19.32.41 0 .82-.12 1.19-.33.36-.21.66-.52.86-.89zm.32-16.27c0-.42-.1-.84-.29-1.21-.2-.38-.49-.7-.85-.93-.36-.22-.78-.34-1.21-.34-.42 0-.84.12-1.21.34l-4.97 2.81c-.04.02-.08.07-.1.12-.03.04-.04.1-.04.14 0 .06.01.11.04.16.02.04.06.08.1.1l8.05 4.62c.05.02.1.04.15.04.05 0 .1-.02.15-.05.04-.02.08-.06.11-.11.02-.04.04-.1.03-.15l.04-5.54zM10.05 27.5c-.01.43.08.86.28 1.23.2.38.49.7.85.93.36.22.78.34 1.2.34.42 0 .83-.12 1.2-.34l4.92-2.85c.04-.02.08-.06.1-.11.03-.04.05-.1.05-.15 0-.05-.02-.11-.05-.15-.02-.05-.06-.09-.1-.12l-8.05-4.6c-.05-.03-.09-.04-.15-.04-.05 0-.1.01-.15.04-.05.02-.08.07-.11.12-.02.04-.04.09-.04.14l.05 5.56z' fill='url(%23paint0_linear_186_370)'/%3E%3Cdefs%3E%3ClinearGradient id='paint0_linear_186_370' x1='11.135' y1='11.152' x2='30.145' y2='30.457' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%231BB3CC'/%3E%3Cstop offset='1' stop-color='%23824ACC'/%3E%3C/linearGradient%3E%3C/defs%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'linear-protocol.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked NEAR',\n symbol: 'STNEAR',\n icon:\n \"data:image/svg+xml,%3Csvg width='96' height='96' viewBox='0 0 96 96' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='96' height='96' rx='48' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M48.0006 20L41.2575 26.7431L48.0006 33.4862L54.7437 26.7431L48.0006 20ZM37.281 30.7188L30.7144 37.2853L47.9998 54.5707L65.2851 37.2853L58.7186 30.7188L47.9998 41.4376L37.281 30.7188ZM26.7384 41.261L19.9953 48.0041L47.9995 76.0083L76.0037 48.0041L69.2606 41.2611L47.9995 62.5221L26.7384 41.261Z' fill='%23231B51'/%3E%3C/svg%3E\",\n reference: 'https://metapool.app',\n reference_hash: null,\n decimals: 24,\n id: 'meta-v2.pool.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NearX',\n symbol: 'NearX',\n icon:\n \"data:image/svg+xml,%0A%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24 12C24 18.6274 18.6274 24 12 24C5.37258 24 0 18.6274 0 12C0 5.37258 5.37258 0 12 0C18.6274 0 24 5.37258 24 12ZM17.1421 21.3848L21.3848 17.1421L19.3669 15.1243C18.5576 17.0303 17.0303 18.5576 15.1243 19.3669L17.1421 21.3848ZM9.43294 19.5793C7.45322 18.909 5.82115 17.4848 4.87848 15.6484L3.24264 17.2843L7.48528 21.5269L9.43294 19.5793ZM4.63306 8.8757C5.44239 6.96975 6.96975 5.44239 8.8757 4.63306L7.24264 3L3 7.24264L4.63306 8.8757ZM15.6484 4.87848L17.3848 3.14214L21.6274 7.38478L19.5793 9.43294C18.909 7.45322 17.4848 5.82115 15.6484 4.87848Z' fill='black'/%3E%3Cpath d='M8.00119 11.9921C8.00119 11.0268 8.00119 10.0615 8.00119 9.09612C8.00119 8.50505 8.16497 8.1743 8.56285 8.05781C8.97778 7.93628 9.40619 7.97917 9.79565 8.45228C11.3533 10.3447 12.9343 12.218 14.5092 14.0959C14.5692 14.1676 14.6117 14.3122 14.734 14.2626C14.8496 14.2157 14.7858 14.0805 14.786 13.9878C14.7904 12.6326 14.7898 11.2774 14.7868 9.92226C14.7868 9.83668 14.838 9.7162 14.7271 9.67372C14.6401 9.64029 14.5824 9.74185 14.522 9.79358C14.0492 10.1981 13.5804 10.6073 13.1088 11.0133C13.0208 11.089 12.9332 11.2118 12.8002 11.1012C12.6657 10.9894 12.7696 10.8872 12.8364 10.7881C13.3547 10.0186 13.8728 9.24898 14.3909 8.47919C14.6656 8.07085 15.0079 7.92282 15.4056 8.04141C15.786 8.15475 15.9986 8.48592 15.9992 8.97668C16.0007 10.0905 15.9996 11.2045 15.9996 12.3183C15.9996 13.2094 16.0003 14.1005 15.9994 14.9916C15.999 15.4826 15.8137 15.798 15.4512 15.9324C15.0256 16.0901 14.5767 15.9683 14.2734 15.6058C12.6823 13.705 11.0924 11.8029 9.50198 9.90144C9.46029 9.85161 9.42303 9.7961 9.37377 9.75489C9.28998 9.68487 9.21967 9.68108 9.21314 9.81797C9.20999 9.88273 9.21188 9.94791 9.21188 10.0129C9.21188 11.3496 9.21062 12.6862 9.2142 14.0227C9.21441 14.1186 9.15609 14.2557 9.26114 14.3038C9.38093 14.3587 9.45061 14.2178 9.52998 14.1503C9.98259 13.7651 10.4291 13.3728 10.8805 12.9859C10.9729 12.9066 11.0626 12.7651 11.208 12.8973C11.3402 13.0176 11.2213 13.1196 11.159 13.2127C10.6323 13.9989 10.1032 14.7837 9.57145 15.5663C9.32788 15.9248 8.9881 16.056 8.61085 15.9488C8.23739 15.8428 8.00498 15.5246 8.00287 15.0827C7.99761 14.0523 8.00119 13.022 8.00119 11.9917V11.9921Z' fill='white'/%3E%3C/svg%3E\",\n reference: 'https://near.staderlabs.com',\n reference_hash: null,\n decimals: 24,\n id: 'v2-nearx.staderlabs.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'refLove Finance Token',\n symbol: 'refLove',\n icon:\n 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDIxLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAyODggMzI0IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyODggMzI0OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuc3Qwe2ZpbGw6IzAwQzA4Qjt9Cjwvc3R5bGU+CjxnPgoJPHBhdGggZD0iTTE3My40LDE5MS40VjI2OEgyNTBMMTczLjQsMTkxLjR6IE0xMDcuMiwxMjUuMmwzMCwzMGwzMC4zLTMwLjNWNjkuMmgtNjAuNFYxMjUuMnogTTEwNy4yLDE1Mi4zVjI2OGg2MC40VjE1MmwtMzAuMywzMC4zCgkJTDEwNy4yLDE1Mi4zeiBNMTc3LjEsNjkuMmgtMy43VjExOUwyMTIsODAuNUMyMDEuOCw3My4yLDE4OS42LDY5LjIsMTc3LjEsNjkuMnogTTM4LDE3NS41VjI2OGg2My4zVjE0Ni40bC0xNy4xLTE3LjFMMzgsMTc1LjV6CgkJIE0zOCwxNDguNWw0Ni4yLTQ2LjJsMTcuMSwxNy4xVjY5LjJIMzhWMTQ4LjV6IE0yMzYuOCwxMjguOUwyMzYuOCwxMjguOWMwLTEyLjUtMy45LTI0LjctMTEuMi0zNC44bC01Mi4xLDUydjQyLjRoMy43CgkJQzIxMC4xLDE4OC41LDIzNi44LDE2MS44LDIzNi44LDEyOC45eiIvPgoJPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIyMTAuMiw1NiAyNTAsOTUuOCAyNTAsNTYgCSIvPgo8L2c+Cjwvc3ZnPgo=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'v010.refve.testnet',\n },\n {\n decimals: 18,\n icon:\n 'data:image/png;base64,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',\n name: 'Ether',\n reference: null,\n reference_hash: null,\n spec: 'ft-1.0.0',\n symbol: 'ETH',\n id: 'aurora',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USDT',\n symbol: 'USDT',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 288 288'%3E%3Cg id='l' data-name='l'%3E%3Cpath d='M187.58,79.81l-30.1,44.69a3.2,3.2,0,0,0,4.75,4.2L191.86,103a1.2,1.2,0,0,1,2,.91v80.46a1.2,1.2,0,0,1-2.12.77L102.18,77.93A15.35,15.35,0,0,0,90.47,72.5H87.34A15.34,15.34,0,0,0,72,87.84V201.16A15.34,15.34,0,0,0,87.34,216.5h0a15.35,15.35,0,0,0,13.08-7.31l30.1-44.69a3.2,3.2,0,0,0-4.75-4.2L96.14,186a1.2,1.2,0,0,1-2-.91V104.61a1.2,1.2,0,0,1,2.12-.77l89.55,107.23a15.35,15.35,0,0,0,11.71,5.43h3.13A15.34,15.34,0,0,0,216,201.16V87.84A15.34,15.34,0,0,0,200.66,72.5h0A15.35,15.35,0,0,0,187.58,79.81Z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'usdt.itachicara.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USDC',\n symbol: 'USDC',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 288 288'%3E%3Cg id='l' data-name='l'%3E%3Cpath d='M187.58,79.81l-30.1,44.69a3.2,3.2,0,0,0,4.75,4.2L191.86,103a1.2,1.2,0,0,1,2,.91v80.46a1.2,1.2,0,0,1-2.12.77L102.18,77.93A15.35,15.35,0,0,0,90.47,72.5H87.34A15.34,15.34,0,0,0,72,87.84V201.16A15.34,15.34,0,0,0,87.34,216.5h0a15.35,15.35,0,0,0,13.08-7.31l30.1-44.69a3.2,3.2,0,0,0-4.75-4.2L96.14,186a1.2,1.2,0,0,1-2-.91V104.61a1.2,1.2,0,0,1,2.12-.77l89.55,107.23a15.35,15.35,0,0,0,11.71,5.43h3.13A15.34,15.34,0,0,0,216,201.16V87.84A15.34,15.34,0,0,0,200.66,72.5h0A15.35,15.35,0,0,0,187.58,79.81Z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'usdc.itachicara.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked CORN',\n symbol: 'xCORN',\n icon:\n \"data:image/svg+xml,%3Csvg width='300' height='300' viewBox='0 0 300 300' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M150.43 32L99.7144 61.4389L150.43 90.8705L201.145 61.4389L150.43 32Z' fill='%235C65A5'/%3E%3Cpath d='M201.146 61.4388L150.431 90.8703L201.146 120.309L251.854 90.8703L201.146 61.4388Z' fill='%233B4274'/%3E%3Cpath d='M99.7152 61.4388L49 90.8703L99.7152 120.309L150.43 90.8703L99.7152 61.4388Z' fill='%233B4274'/%3E%3Cpath d='M150.43 90.8707L99.7144 120.31L150.43 149.749L201.145 120.31L150.43 90.8707Z' fill='%235C65A5'/%3E%3Cpath d='M99.7152 120.31L49 90.8707V149.749L99.7152 179.187V120.31Z' fill='%235C65A5'/%3E%3Cpath d='M150.43 149.748L99.7144 120.309V179.187L150.43 208.626V149.748Z' fill='%233B4274'/%3E%3Cpath d='M99.7152 179.187L49 149.748V208.626L99.7152 238.058V179.187Z' fill='%233B4274'/%3E%3Cpath d='M150.43 208.626L99.7144 179.187V238.057L150.43 267.496V208.626Z' fill='%235C65A5'/%3E%3Cpath d='M150.431 267.496L201.146 238.057L150.431 208.626V267.496Z' fill='%233B4274'/%3E%3Cpath d='M224.085 213.702L209.447 198.197L194.809 213.702H167.656L195.643 182.183L167.656 150.665H194.809L209.447 166.933L224.085 150.665H251.086L223.175 182.183L251.086 213.702H224.085Z' fill='%233B4274'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'xcorn.corndao.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tether USD',\n symbol: 'USDt',\n icon:\n \"data:image/svg+xml,%3Csvg width='111' height='90' viewBox='0 0 111 90' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24.4825 0.862305H88.0496C89.5663 0.862305 90.9675 1.64827 91.7239 2.92338L110.244 34.1419C111.204 35.7609 110.919 37.8043 109.549 39.1171L58.5729 87.9703C56.9216 89.5528 54.2652 89.5528 52.6139 87.9703L1.70699 39.1831C0.305262 37.8398 0.0427812 35.7367 1.07354 34.1077L20.8696 2.82322C21.6406 1.60483 23.0087 0.862305 24.4825 0.862305ZM79.8419 14.8003V23.5597H61.7343V29.6329C74.4518 30.2819 83.9934 32.9475 84.0642 36.1425L84.0638 42.803C83.993 45.998 74.4518 48.6635 61.7343 49.3125V64.2168H49.7105V49.3125C36.9929 48.6635 27.4513 45.998 27.3805 42.803L27.381 36.1425C27.4517 32.9475 36.9929 30.2819 49.7105 29.6329V23.5597H31.6028V14.8003H79.8419ZM55.7224 44.7367C69.2943 44.7367 80.6382 42.4827 83.4143 39.4727C81.0601 36.9202 72.5448 34.9114 61.7343 34.3597V40.7183C59.7966 40.8172 57.7852 40.8693 55.7224 40.8693C53.6595 40.8693 51.6481 40.8172 49.7105 40.7183V34.3597C38.8999 34.9114 30.3846 36.9202 28.0304 39.4727C30.8066 42.4827 42.1504 44.7367 55.7224 44.7367Z' fill='%23009393'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'usdtt.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked CORN',\n symbol: 'xCORN',\n icon:\n \"data:image/svg+xml,%3Csvg width='300' height='300' viewBox='0 0 300 300' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M150.43 32L99.7144 61.4389L150.43 90.8705L201.145 61.4389L150.43 32Z' fill='%235C65A5'/%3E%3Cpath d='M201.146 61.4388L150.431 90.8703L201.146 120.309L251.854 90.8703L201.146 61.4388Z' fill='%233B4274'/%3E%3Cpath d='M99.7152 61.4388L49 90.8703L99.7152 120.309L150.43 90.8703L99.7152 61.4388Z' fill='%233B4274'/%3E%3Cpath d='M150.43 90.8707L99.7144 120.31L150.43 149.749L201.145 120.31L150.43 90.8707Z' fill='%235C65A5'/%3E%3Cpath d='M99.7152 120.31L49 90.8707V149.749L99.7152 179.187V120.31Z' fill='%235C65A5'/%3E%3Cpath d='M150.43 149.748L99.7144 120.309V179.187L150.43 208.626V149.748Z' fill='%233B4274'/%3E%3Cpath d='M99.7152 179.187L49 149.748V208.626L99.7152 238.058V179.187Z' fill='%233B4274'/%3E%3Cpath d='M150.43 208.626L99.7144 179.187V238.057L150.43 267.496V208.626Z' fill='%235C65A5'/%3E%3Cpath d='M150.431 267.496L201.146 238.057L150.431 208.626V267.496Z' fill='%233B4274'/%3E%3Cpath d='M224.085 213.702L209.447 198.197L194.809 213.702H167.656L195.643 182.183L167.656 150.665H194.809L209.447 166.933L224.085 150.665H251.086L223.175 182.183L251.086 213.702H224.085Z' fill='%233B4274'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'xcorn.v1.corndao.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tiptoken',\n symbol: 'TT',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'tiptoken.testnet',\n },\n];\n\nexport const DefaultMainnetTokenList = [\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped NEAR fungible token',\n symbol: 'wNEAR',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'wrap.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USD Coin',\n symbol: 'USDC',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle cx='16' cy='16' r='16' fill='%232775C9'/%3E%3Cpath d='M15.75 27.5C9.26 27.5 4 22.24 4 15.75S9.26 4 15.75 4 27.5 9.26 27.5 15.75A11.75 11.75 0 0115.75 27.5zm-.7-16.11a2.58 2.58 0 00-2.45 2.47c0 1.21.74 2 2.31 2.33l1.1.26c1.07.25 1.51.61 1.51 1.22s-.77 1.21-1.77 1.21a1.9 1.9 0 01-1.8-.91.68.68 0 00-.61-.39h-.59a.35.35 0 00-.28.41 2.73 2.73 0 002.61 2.08v.84a.705.705 0 001.41 0v-.85a2.62 2.62 0 002.59-2.58c0-1.27-.73-2-2.46-2.37l-1-.22c-1-.25-1.47-.58-1.47-1.14 0-.56.6-1.18 1.6-1.18a1.64 1.64 0 011.59.81.8.8 0 00.72.46h.47a.42.42 0 00.31-.5 2.65 2.65 0 00-2.38-2v-.69a.705.705 0 00-1.41 0v.74zm-8.11 4.36a8.79 8.79 0 006 8.33h.14a.45.45 0 00.45-.45v-.21a.94.94 0 00-.58-.87 7.36 7.36 0 010-13.65.93.93 0 00.58-.86v-.23a.42.42 0 00-.56-.4 8.79 8.79 0 00-6.03 8.34zm17.62 0a8.79 8.79 0 00-6-8.32h-.15a.47.47 0 00-.47.47v.15a1 1 0 00.61.9 7.36 7.36 0 010 13.64 1 1 0 00-.6.89v.17a.47.47 0 00.62.44 8.79 8.79 0 005.99-8.34z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 6,\n id: 'a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tether USD',\n symbol: 'USDT.e',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle cx='16' cy='16' r='16' fill='%2326A17B'/%3E%3Cpath fill='%23FFF' d='M17.922 17.383v-.002c-.11.008-.677.042-1.942.042-1.01 0-1.721-.03-1.971-.042v.003c-3.888-.171-6.79-.848-6.79-1.658 0-.809 2.902-1.486 6.79-1.66v2.644c.254.018.982.061 1.988.061 1.207 0 1.812-.05 1.925-.06v-2.643c3.88.173 6.775.85 6.775 1.658 0 .81-2.895 1.485-6.775 1.657m0-3.59v-2.366h5.414V7.819H8.595v3.608h5.414v2.365c-4.4.202-7.709 1.074-7.709 2.118 0 1.044 3.309 1.915 7.709 2.118v7.582h3.913v-7.584c4.393-.202 7.694-1.073 7.694-2.116 0-1.043-3.301-1.914-7.694-2.117'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 6,\n id: 'dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Dai Stablecoin',\n symbol: 'DAI',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle fill='%23F4B731' fill-rule='nonzero' cx='16' cy='16' r='16'/%3E%3Cpath d='M9.277 8h6.552c3.985 0 7.006 2.116 8.13 5.194H26v1.861h-1.611c.031.294.047.594.047.898v.046c0 .342-.02.68-.06 1.01H26v1.86h-2.08C22.767 21.905 19.77 24 15.83 24H9.277v-5.131H7v-1.86h2.277v-1.954H7v-1.86h2.277V8zm1.831 10.869v3.462h4.72c2.914 0 5.078-1.387 6.085-3.462H11.108zm11.366-1.86H11.108v-1.954h11.37c.041.307.063.622.063.944v.045c0 .329-.023.65-.067.964zM15.83 9.665c2.926 0 5.097 1.424 6.098 3.528h-10.82V9.666h4.72z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '6b175474e89094c44da98b954eedeac495271d0f.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: '1INCH Token',\n symbol: '1INCH',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '111111111117dc0aa78b770fa6a738034120c302.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Graph Token',\n symbol: 'GRT',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'c944e90c64b2c07662a292be6244bdf05cda44a7.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Skyward Finance Token',\n symbol: 'SKYWARD',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.skyward.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Banana',\n symbol: 'BANANA',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='256' height='256'%3E%3Cdefs%3E%3Ctext id='A' x='50' y='180' font-size='180'%3E🍌%3C/text%3E%3C/defs%3E%3Cuse xlink:href='%23A'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'berryclub.ek.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Cucumber',\n symbol: 'CUCUMBER',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='256' height='256'%3E%3Cdefs%3E%3Ctext id='A' x='50' y='180' font-size='180'%3E🥒%3C/text%3E%3C/defs%3E%3Cuse xlink:href='%23A'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'farm.berryclub.ek.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'HuobiToken',\n symbol: 'HT',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '6f259637dcd74c767781e37bc6133cd6a68aa161.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Gitcoin',\n symbol: 'GTC',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'de30da39c46104798bb5aa3fe8b9e0e1f348163f.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Uniswap',\n symbol: 'UNI',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle fill='%23FF007A' fill-rule='nonzero' cx='16' cy='16' r='16'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M12.261 5.767c-.285-.044-.297-.05-.163-.07.257-.04.865.015 1.284.114.977.233 1.866.828 2.816 1.885l.252.28.36-.057c1.52-.245 3.067-.05 4.36.547.356.164.917.491.987.576.023.026.064.199.091.383.096.637.048 1.125-.146 1.49-.106.198-.112.26-.041.43a.416.416 0 00.372.236c.322 0 .668-.52.828-1.243l.064-.287.126.143c.692.784 1.235 1.853 1.328 2.613l.025.199-.117-.18c-.2-.31-.4-.522-.658-.693-.464-.307-.955-.411-2.255-.48-1.174-.062-1.839-.162-2.497-.377-1.121-.365-1.686-.852-3.018-2.599-.591-.776-.957-1.205-1.32-1.55-.827-.786-1.639-1.198-2.678-1.36z' fill-rule='nonzero'/%3E%3Cpath d='M22.422 7.5c.03-.52.1-.863.242-1.176.056-.124.109-.226.117-.226a.773.773 0 01-.055.204c-.103.304-.12.72-.049 1.203.09.614.142.702.79 1.365.305.311.659.703.787.872l.233.306-.233-.219c-.285-.267-.941-.79-1.086-.864-.097-.05-.112-.049-.172.01-.055.056-.067.138-.074.529-.012.608-.095 1-.296 1.39-.108.21-.125.166-.027-.073.073-.178.08-.256.08-.845 0-1.184-.141-1.468-.966-1.956a9.046 9.046 0 00-.764-.396 2.916 2.916 0 01-.374-.182c.023-.023.827.211 1.15.336.482.185.561.209.62.186.039-.015.058-.129.077-.464zm-9.607 2.025c-.579-.797-.937-2.02-.86-2.934l.024-.283.132.024c.248.045.675.204.875.326.548.333.786.772 1.027 1.898.071.33.164.703.207.83.068.203.328.678.54.987.152.222.05.327-.286.297-.514-.047-1.21-.527-1.659-1.145zm8.905 5.935c-2.707-1.09-3.66-2.036-3.66-3.632 0-.235.008-.427.017-.427.01 0 .115.077.233.172.549.44 1.164.628 2.865.876 1.001.147 1.565.265 2.085.437 1.652.548 2.674 1.66 2.918 3.174.07.44.029 1.265-.086 1.7-.09.344-.367.963-.44.987-.02.006-.04-.071-.046-.178-.028-.568-.315-1.122-.798-1.537-.549-.471-1.286-.847-3.089-1.572zm-1.9.452a4.808 4.808 0 00-.131-.572l-.07-.206.129.144c.177.2.318.454.436.794.091.259.101.336.1.757 0 .414-.011.5-.095.734a2.32 2.32 0 01-.571.908c-.495.504-1.13.782-2.048.898-.16.02-.624.054-1.033.075-1.03.054-1.707.164-2.316.378a.488.488 0 01-.174.042c-.024-.025.39-.272.733-.437.483-.233.963-.36 2.04-.539.532-.089 1.082-.196 1.221-.239 1.318-.404 1.995-1.446 1.778-2.737z' fill-rule='nonzero'/%3E%3Cpath d='M21.06 18.116c-.36-.773-.442-1.52-.245-2.216.021-.074.055-.135.075-.135a.73.73 0 01.189.102c.166.112.498.3 1.383.782 1.105.603 1.735 1.07 2.164 1.602.375.467.607.999.719 1.647.063.367.026 1.25-.068 1.62-.297 1.166-.988 2.082-1.972 2.616a2.53 2.53 0 01-.288.143c-.014 0 .038-.133.117-.297.33-.692.369-1.366.118-2.116-.153-.459-.466-1.02-1.097-1.966-.734-1.1-.914-1.394-1.095-1.782zm-10.167 4.171c1.005-.848 2.254-1.45 3.393-1.635.49-.08 1.308-.048 1.762.068.728.186 1.38.604 1.719 1.101.33.486.473.91.62 1.852.06.372.123.745.142.83.11.488.327.879.595 1.075.425.311 1.158.33 1.878.05a.981.981 0 01.236-.074c.026.026-.336.269-.592.397a2.014 2.014 0 01-.983.238c-.66 0-1.208-.335-1.665-1.02-.09-.135-.292-.538-.45-.897-.482-1.1-.72-1.436-1.28-1.803-.489-.32-1.118-.377-1.591-.145-.622.305-.795 1.1-.35 1.603.177.2.507.373.777.406a.83.83 0 00.939-.83c0-.332-.128-.52-.448-.665-.437-.197-.907.033-.905.444.001.175.077.285.253.365.113.05.115.055.023.036-.401-.084-.495-.567-.172-.888.387-.386 1.188-.216 1.463.31.116.221.129.662.028.928-.225.595-.883.907-1.55.737-.454-.116-.639-.241-1.186-.805-.951-.98-1.32-1.17-2.692-1.384l-.263-.041.3-.253z' fill-rule='nonzero'/%3E%3Cpath d='M6.196 3.35l.096.117c3.708 4.54 5.624 6.896 5.746 7.064.2.278.125.527-.219.723-.191.109-.585.219-.781.219-.223 0-.474-.107-.657-.28-.129-.123-.65-.901-1.853-2.768a188.53 188.53 0 00-1.712-2.633c-.049-.046-.048-.045 1.618 2.936 1.046 1.872 1.4 2.533 1.4 2.622 0 .18-.05.274-.272.522-.37.413-.535.877-.655 1.837-.134 1.077-.51 1.837-1.554 3.138-.61.762-.71.902-.865 1.209-.194.386-.247.603-.269 1.091-.023.516.022.85.18 1.343.138.432.282.718.65 1.288.318.493.501.859.501 1.002 0 .114.022.114.515.003 1.179-.266 2.136-.735 2.675-1.309.333-.355.411-.551.414-1.038.001-.318-.01-.385-.096-.568-.14-.298-.395-.546-.957-.93-.737-.504-1.051-.91-1.138-1.467-.072-.457.011-.78.419-1.634.421-.884.526-1.26.597-2.151.045-.576.108-.803.274-.985.172-.19.328-.255.755-.313.696-.095 1.139-.275 1.503-.61.316-.292.448-.573.468-.995l.016-.32-.177-.206c-.254-.296-2.355-2.614-6.304-6.956l-.106-.115-.212.165zM7.91 19.732a.566.566 0 00-.174-.746c-.228-.152-.583-.08-.583.118 0 .06.033.104.108.143.127.065.136.139.037.288-.101.152-.093.286.023.377.186.146.45.065.59-.18zm5.524-7.176c-.327.1-.644.447-.743.81-.06.221-.026.61.064.73.145.194.286.245.666.242.744-.005 1.39-.324 1.466-.723.062-.327-.223-.78-.614-.98-.202-.102-.631-.143-.839-.079zm.87.68c.115-.163.064-.34-.13-.458-.372-.227-.934-.04-.934.312 0 .174.293.365.561.365.18 0 .424-.107.503-.219z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '1f9840a85d5af5bf1d1762f925bdaddc4201f984.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped BTC',\n symbol: 'WBTC',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle fill='%23201A2D' cx='16' cy='16' r='16'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M22.818 9.586l-.6.6a8.494 8.494 0 010 11.464l.6.6a9.352 9.352 0 000-12.678v.014zM10.2 9.638a8.494 8.494 0 0111.464 0l.6-.6a9.352 9.352 0 00-12.678 0l.614.6zm-.562 12.018a8.494 8.494 0 010-11.458l-.6-.6a9.352 9.352 0 000 12.678l.6-.62zm12.018.554a8.494 8.494 0 01-11.464 0l-.6.6a9.352 9.352 0 0012.678 0l-.614-.6zm-1.942-8.286c-.12-1.252-1.2-1.672-2.566-1.8V10.4h-1.056v1.692h-.844V10.4H14.2v1.736h-2.142v1.13s.78-.014.768 0a.546.546 0 01.6.464v4.752a.37.37 0 01-.128.258.366.366 0 01-.272.092c.014.012-.768 0-.768 0l-.2 1.262h2.122v1.764h1.056V20.12h.844v1.73h1.058v-1.744c1.784-.108 3.028-.548 3.184-2.218.126-1.344-.506-1.944-1.516-2.186.614-.302.994-.862.908-1.778zm-1.48 3.756c0 1.312-2.248 1.162-2.964 1.162v-2.328c.716.002 2.964-.204 2.964 1.166zm-.49-3.28c0 1.2-1.876 1.054-2.472 1.054v-2.116c.596 0 2.472-.188 2.472 1.062z'/%3E%3Cpath d='M15.924 26.852C9.89 26.851 5 21.959 5 15.925 5 9.892 9.892 5 15.925 5c6.034 0 10.926 4.89 10.927 10.924a10.926 10.926 0 01-10.928 10.928zm0-21c-5.559.004-10.062 4.513-10.06 10.072.002 5.559 4.51 10.064 10.068 10.064 5.559 0 10.066-4.505 10.068-10.064A10.068 10.068 0 0015.924 5.852z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 8,\n id: '2260fac5e5542a773aa44fbcfedf7c193bc2c599.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'ChainLink Token',\n symbol: 'LINK',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle fill='%232A5ADA' cx='16' cy='16' r='16'/%3E%3Cpath d='M16 6l-1.799 1.055L9.3 9.945 7.5 11v10l1.799 1.055 4.947 2.89L16.045 26l1.799-1.055 4.857-2.89L24.5 21V11l-1.799-1.055-4.902-2.89L16 6zm-4.902 12.89v-5.78L16 10.22l4.902 2.89v5.78L16 21.78l-4.902-2.89z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '514910771af9ca656af840dff83e8264ecf986ca.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Octopus Network Token',\n symbol: 'OCT',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='O' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 113.39 113.39' style='enable-background:new 0 0 113.39 113.39;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23014299;%7D .st1%7Bfill:%23FFFFFF;%7D %3C/style%3E%3Ccircle class='st0' cx='56.69' cy='56.69' r='56.69'/%3E%3Cg%3E%3Cpath class='st1' d='M44.25,59.41c-1.43,0-2.59,1.16-2.59,2.59v20.28c0,1.43,1.16,2.59,2.59,2.59c1.43,0,2.59-1.16,2.59-2.59V62 C46.84,60.57,45.68,59.41,44.25,59.41z'/%3E%3Cpath class='st1' d='M56.69,59.41c-1.45,0-2.62,1.17-2.62,2.62v26.47c0,1.45,1.17,2.62,2.62,2.62s2.62-1.17,2.62-2.62V62.02 C59.31,60.58,58.14,59.41,56.69,59.41z'/%3E%3Cpath class='st1' d='M79.26,78.87c-0.33,0.15-0.64,0.28-0.95,0.38c0,0-0.01,0-0.01,0c-0.59,0.19-1.13,0.29-1.63,0.31h-0.06 c-1,0.03-1.84-0.27-2.59-0.75c-0.49-0.32-0.91-0.73-1.25-1.23c-0.3-0.43-0.53-0.93-0.71-1.51c0-0.01-0.01-0.02-0.01-0.03 c-0.22-0.74-0.34-1.61-0.34-2.59V62.02c0-1.45-1.17-2.62-2.62-2.62c-1.45,0-2.62,1.17-2.62,2.62v11.43c0,4.5,1.64,8.03,4.63,9.96 c1.5,0.97,3.21,1.45,5.04,1.45c1.68,0,3.45-0.41,5.25-1.22c1.32-0.59,1.9-2.14,1.31-3.46C82.13,78.86,80.57,78.27,79.26,78.87z'/%3E%3Cpath class='st1' d='M68.33,45.9c0-2.15-1.75-3.9-3.9-3.9c-2.15,0-3.9,1.75-3.9,3.9s1.75,3.9,3.9,3.9 C66.58,49.8,68.33,48.05,68.33,45.9z'/%3E%3Cpath class='st1' d='M48.96,41.99c-2.15,0-3.9,1.75-3.9,3.9s1.75,3.9,3.9,3.9s3.9-1.75,3.9-3.9S51.11,41.99,48.96,41.99z'/%3E%3Cpath class='st1' d='M56.69,22.28c-15.17,0-27.52,12.34-27.52,27.52v15.09c0,1.46,1.18,2.64,2.64,2.64s2.64-1.18,2.64-2.64V49.8 c0-12.26,9.98-22.24,22.24-22.24c12.26,0,22.24,9.98,22.24,22.24v15.09c0,1.46,1.18,2.64,2.64,2.64s2.64-1.18,2.64-2.64V49.8 C84.21,34.62,71.87,22.28,56.69,22.28z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'f5cfbc74057c610c8ef151a439252680ac68c6dc.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Ref Finance Token',\n symbol: 'REF',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.v2.ref-finance.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'HAPI',\n symbol: 'HAPI',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_2' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' width='600px' height='600px' viewBox='0 0 600 600' enable-background='new 0 0 600 600' xml:space='preserve'%3E %3Cg%3E %3Cg%3E %3Cpath fill='%23141414' d='M263.7,122.8c-3.6,0.3-7.1,0.9-10.7,1.8c-24.5,6-40.3,18.1-50.4,31c24.5-4.7,49.9,1.3,67.3,7.4 c0.5,0.2,1,0.4,1.6,0.6c-2.7-4.2-5.2-9-7.2-14.4C261.2,141.1,261.6,131.6,263.7,122.8z'/%3E %3Cpath fill='%23141414' d='M201.2,197.7c-9.8-1.1-19.1-2.1-24.6-2.1c-0.7,0-1.4,0-2,0.1c-38.1,2.6-67.2,37.3-69.1,82.4 c-1.4,32.2,13.5,53.1,23.3,63.4c-1.5-12.5-0.1-25,4.3-37.3c11.7-32.6,34.3-42.1,60.6-53.1c10.8-4.5,22.5-9.5,34.3-16.6l50.1-39.6 c-10.1,2.2-24.4,4.5-42.9,5.3C227.1,200.6,213.9,199.1,201.2,197.7z'/%3E %3Cpath fill='%23141414' d='M319.1,176.5c-0.5,1.1,0.9,2.1,1.8,1.2c5.3-5.4,16.3-14.3,30.8-14.2c15.6,0.1,35.5,10.2,40.5,22.1 c4,9.8-6.6,16.5-6.6,16.5l0,0c-2.5-2.7-8-6.3-18.2-6.6c-15-0.5-25.3,12.1-24.1,12.9c7.5,4.7,17.3,3.7,23.1,3.5 c5.8-0.2,15.1-2.5,17.8-3.5c4.7-1.8,11.7-7.8,14.9-16.1c2.5-6.5,8.4-28.7-25.2-34.4C352.7,154.3,327,159.6,319.1,176.5z'/%3E %3Cpath fill='%23141414' d='M473.1,225.1c-0.5-0.6-1.1-1.3-1.7-2l-0.3-0.3c-3.9-4.4-7.6-8.3-9.4-10.1c1.2-4.2,4-16.2,1-26.1 c-2.3-7.7-6.8-15.5-9.2-19.4l-0.8-1.2h0c-0.4-0.6-0.8-1.2-1.1-1.7c-0.3-0.4-0.5-0.7-0.6-1l-0.2-0.7c-2.5-7-8.6-22.3-16.4-28.1 l59.4-91.7c2.3-3.5-2.1-7.5-5.4-5l-86.8,66.5c-8.7-12.3-21.1-21.8-21.8-22.4c-0.8-0.6-2-0.7-2.9-0.2c-0.9,0.5-1.4,1.6-1.3,2.6 c0,0.1,0.6,5.9-2.9,17.6c7.5,2.7,13.9,6,19.3,9.7l-4.5,3.5c-8.8-5.7-20-10.5-34.3-12.6c-17.7-2.6-31.9,1-42.1,10.7c0,0,0,0,0,0 c5.9,3.8,13.1,8.7,17,12.4c0.8,0.7,1.5,1.5,2.2,2.3c-3.1,0.9-6.2,1.9-9.3,2.9c-0.3-0.2-0.5-0.5-0.8-0.7c-1.9-1.7-4.4-3.4-7-5.3 c-5.4-3.8-11.7-8.3-15.8-14c-2.2-3.1-3.8-6.5-4.3-10.4c-0.3-2.4-1-4-2.2-4.9c0,0,0,0,0,0c0,0,0,0,0,0c-0.6-0.5-2.8-2-5.8,0.3 c-2,1.6-4.4,5.3-6.5,10.3c-5.2,12.3-8.7,32.1-1.8,46.1c1.2,2.3,2.4,4.5,3.7,6.6c-0.4,1-0.7,2.1-0.9,3.1c-0.6,3.4-0.9,7.8-1.2,12.7 c-19.8-8.3-50.5-17.5-78.5-10.7c-23.9,5.8-39.4,17.5-49.6,30c7.4-3.1,15.2-5,23.5-5.6c5.6-0.4,16.4,0.8,27.9,2.1 c11.8,1.3,25.3,2.8,32.9,2.4c19.2-0.8,33.7-3.3,43.5-5.6c0,5.4,0.1,11.1,0.4,16.9c0.7,16.8,2.5,34.3,5,46.5 c3.6,17.9,16.5,55.2,31.4,64.6c5.5,3.5,13.5,8.2,22.9,13.4c-2.5,6.4-5.1,15.1-5.1,23.5c0,15.2,5.2,26.6,11,37 c4.6,8.2,9.6,15.7,12.8,24c2.5,6.5-2.7,27.7-5.6,38.9c-1.2,4.5-1.9,7.3-1.7,7c3.7-5.1,7.5-10.8,11.3-16.8 c15.3-24.2,19.4-47,19.5-48l0.2-1.4l-1.1-1c-0.2-0.2-17.2-15.7-18.3-33.3c-0.4-6.9,1-11.5,4.3-13.8c0.5-0.3,1-0.6,1.6-0.9 c7.5,3.7,15,7.3,22.2,10.5c2.8,3.5,9,9.4,11.8,12c3.4,3.2,6.9,7.8,12.2,7.8c5.3,0,15.9,0,21.3,0s13.1,0,17.3-2.1 c4.2-2.1,10.9-5.6,11-12.6c0-1.5,0.4-3.9,0.9-6.8c3.7-4.9,4.1-10.6,4.8-19.2c0.5-5.7,1.7-15.5,3-25.9c2-15.7,4.1-32,3.9-37.9 c-0.2-8.2-1.1-14.3-1.4-16.2C475.3,249.4,479.5,232.4,473.1,225.1z M318,310.6c-13.3-8.4-25.6-44.6-29-61.2 c-4.8-23.9-6.9-68.5-3.9-86.8c2.7-16.7,49-34.5,81.7-35.6c1.9-0.1,3.8-0.1,5.6-0.1c1,0,2,0,3,0c-0.1,4.9,1.3,15.6,13.8,25.5 c13.9,11,30.4,5,30.4,5l12.1-18.7c4.5,3.5,9.4,12.7,13,22.1c-0.9-0.4-1.9-0.7-3.1-0.9c-8.1-1.3-31.6-0.9-24,31.3 c1,4,5.2,9.4,17.2,22.3c2.8,3,5.1,5.3,7,7.2c5.6,5.6,7.4,7.4,7.5,11.8c0,0.3-0.2,1.6-0.4,3c-0.8-0.6-1.9-1.1-3.4-1 c-3.6-0.2-33.7,5.6-42.4,15.1c-1.7,1.9-4.5,2.6-6.7,1.4c-0.1-0.1-0.2-0.1-0.3-0.2c-1.4-0.8-2.3-1.9-2.8-3.5 c-1.3-5.1,2.9-13.2,4.6-16c0.6-1,0.3-2.3-0.6-2.9c-1-0.6-2.3-0.3-2.9,0.6c-0.1,0.2-0.9,1.5-1.9,3.5c-3.3,6.6-8.2,12.2-14.3,16.3 c-9.8,6.6-24,15.2-35.5,18.2c-18,4.7-24.9-8.2-25.2-8.8c-0.5-1-1.8-1.4-2.8-0.9c-1,0.5-1.5,1.8-0.9,2.8 c0.1,0.1,6.3,12.1,21.5,12.1c0.6,0,1.4-0.1,2.2-0.2c4.3-0.5,8.6,0.5,12.3,2.7c3.5,2.1,8,4.7,12.5,7c12.6,6.3,14.7,6.2,19.5,5.4 c1.1-0.2,49.8-2.4,80.1-8.2l3.6,0.2c2.4,0.1,4.3,2.3,4,4.7l0,0.1c-0.2,1.4-1,2.6-2.2,3.3c-2.7,1.5-6.5,3.5-9.9,4.9 c-1.6,0.6-3.3,1.2-5.1,1.6c-5.5,1.3-11.1,1.6-11.1,1.6s-5.4,1.2-13.5,2.1c-3.4,0.4-7.2,0.7-11.3,0.9c-14,0.7-13,1.6-24.8,1 c-2.9-0.1-5.7-0.3-8.3-0.6c-2.5-0.3-3.2,3.4-0.7,4c6.1,1.5,13.3,2.6,21.3,2.5c1,0,1.9,0,2.9,0c12.8-0.1,24.4,7.5,29.4,19.3 c2.1,5,4.1,12,5.4,18.5c1.8,8.4-5.3,16.1-13.8,15.3c-12.5-1.3-26.6-4.8-34.6-8.3C365.3,338.1,332.4,319.8,318,310.6z M448.7,169.2 l1.2,1.9c2.4,4,5.9,10.5,7.9,16.9c3.1,10.4-1.4,24.4-1.4,24.5l-0.5,1.5l1.1,1.1c0,0.1,5,5.2,10.3,11.1l0.1,0.2 c0.6,0.7,1.2,1.3,1.8,2c3.7,4.3,1.9,17-0.1,23.9l-0.2,0.6l0.1,0.6c0,0,0.3,1.5,0.6,3.9c-2.7,0.3-4.7,2.7-4.4,5.5l0.8,7.5l-8.6,0.1 l-13.5-15.3c-1-1.2-1-3,0.2-4c0,0,0,0,0,0c7.1-6.4,8.1-9.5,8.3-10.7c0.9-5.4,1.2-7.4,1.2-8.1c0-6.1-2.9-9-8.7-14.8 c-1.9-1.9-4.2-4.2-6.9-7.1c-0.6-0.6-1.1-1.2-1.7-1.8c2.1,0.6,4.9,1.2,8.5,1.5c8.4,0.7,10.9-1.4,10.9-1.4s1.5-2.7-1.1-6.6 c-2.6-3.9-6.2-6.7-13.2-6.9c-5-0.2-9.5,3.7-11.7,6c-0.9-1-2.9-4.7-3.8-10.9c-1.5-9.7,2.1-14.2,4.7-16.4c4.6-3.9,10.9-7.7,14.4-7.5 c0.9,0.1,1.9,0.2,2.7,0.4C447.8,167.7,448.2,168.4,448.7,169.2z M463.4,332.9c-0.7,8.2-1.1,12.8-3.8,16.5c-2.3,3.1-7.3,0.8-6.6-3 c0.4-2.1,0.7-4.3,0.8-6.4c0.3-10.7-4.9-20.9-6.7-27.7c0,0,0-0.1,0-0.1c-0.9-3.8,1.2-7.7,4.8-9.3c1.6-0.7,3.4-1.6,5.3-2.6 c4.6-2.3,9.9,1.3,9.2,6.4l0,0.1C465.2,317.2,463.9,327.1,463.4,332.9z M385.1,249.4c1.8-1.3,4.4-0.8,5.6,1.2 c0.8,1.4,1.9,2.9,3.4,4.1c4.5,3.7,9.8,3.5,13.2,3.5c3.3,0,5.4-0.6,6-0.8c0,0,0,0,0,0c2.4-0.5,4.3,2,3.1,4.2 c-2.6,4.8-6.1,11.1-6.5,11.4c-0.7,0.5-22.8,5.1-25.6,5.4s-11.6,1.2-18.2-3c-2.8-1.7-5.5-3.7-7.7-5.3c-1.7-1.2-1.4-3.8,0.4-4.7 C368.8,260.4,378.7,253.9,385.1,249.4z M436.8,263.8l8.3,9.1c1.5,1.7,0.5,4.4-1.7,4.7c-5,0.6-10,1.2-14.9,1.7 c-2.3,0.2-3.9-2.3-2.7-4.3c1.9-3,4.3-7,6.5-10.8C433.2,262.6,435.5,262.4,436.8,263.8z M396.4,117.1l83.5-69.1l-76.9,76.9 c-2.5,2.4-6.6,1.6-8.1-1.5h0C393.9,121.2,394.5,118.5,396.4,117.1z'/%3E %3Cpath fill='%23141414' d='M196.6,258.1c-25.6,10.7-45.8,19.2-56.4,48.7c-15.1,42,9.4,88.5,62.5,120.1c-17.4-68,3.5-93.1,22.1-115.3 c6.4-7.7,12.5-15,16.9-23.7c12.9-25.8,12.3-50.5,11.1-62C233.7,242.5,214.1,250.8,196.6,258.1z'/%3E %3C/g%3E %3Cg%3E %3Cpath d='M201.6,477.1h-9.1l-2.8,17.1h-14.3l2.8-17.1h-9.1l-2.8,17.1h-9.3l-1.5,9.1h9.3l-2.3,14h-9.4l-1.5,9.1h9.4l-2.8,17.1h9.1 l2.8-17.1h14.3l-2.8,17.1h9.1l2.8-17.1h9.3l1.5-9.1h-9.3l2.3-14h9.4l1.5-9.1h-9.4L201.6,477.1z M186,517.4h-14.3l2.3-14h14.3 L186,517.4z'/%3E %3Cpolygon points='260.8,505.3 230,505.3 230,477.1 218,477.1 218,543.6 230,543.6 230,515.4 260.8,515.4 260.8,543.6 272.9,543.6 272.9,477.1 260.8,477.1 '/%3E %3Cpath d='M307.1,477.1l-23.4,66.4h12.8l5.5-16.4h25l5.5,16.4h12.8l-23.4-66.4H307.1z M305.3,517.5l9-26.8h0.5l9,26.8H305.3z'/%3E %3Cpath d='M394,480c-3.5-1.9-7.8-2.9-12.9-2.9h-24.9v66.4h12v-22.4H381c5.1,0,9.4-0.9,12.9-2.8s6.2-4.5,7.9-7.8 c1.8-3.3,2.7-7.1,2.7-11.3c0-4.2-0.9-8-2.7-11.3C400.1,484.5,397.4,481.9,394,480z M390.9,505.4c-0.9,1.8-2.3,3.2-4.2,4.3 c-1.9,1-4.3,1.6-7.3,1.6h-11.1v-24h11c3,0,5.5,0.5,7.4,1.5c1.9,1,3.3,2.4,4.2,4.2c0.9,1.8,1.4,3.9,1.4,6.2 S391.8,503.6,390.9,505.4z'/%3E %3Crect x='417.1' y='477.1' width='12' height='66.4'/%3E %3C/g%3E %3C/g%3E %3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'd9c2d319cd7e6177336b0a9c93c21cb48d84fb54.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'PARAS',\n symbol: 'PARAS',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.paras.near',\n },\n {\n spec: 'ft-1.0.0',\n name: '1MILNFT',\n symbol: '1MIL',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='O' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 146 146' xml:space='preserve'%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M0 0L0 31L31 31L31 0L0 0z'/%3E %3Cpath style='fill:%23df01ae; stroke:none;' d='M31 0L31 31L32 31L31 0z'/%3E %3Cpath style='fill:%23000000; stroke:none;' d='M32 0L32 32L0 32L0 38L32 38L32 70L0 70L0 76L32 76L32 109L0 109L0 114L32 114L32 146L38 146L38 114L70 114L70 146L76 146L76 114C82.7843 114 102.446 110.653 107.397 115.603C112.241 120.448 109 139.378 109 146L114 146L114 114L146 114L146 109C139.378 109 120.448 112.241 115.603 107.397C110.653 102.446 114 82.7843 114 76L146 76L146 70L114 70L114 38L146 38L146 32C139.378 32 120.448 35.2414 115.603 30.3966C110.759 25.5518 114 6.6225 114 0L109 0L109 32L76 32L76 0L71 0L71 32L38 32L38 0L32 0z'/%3E %3Cpath style='fill:%23459f00; stroke:none;' d='M38 0L38 32L70 32L70 31L39 31L38 0z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M39 0L39 31L70 31L70 0L39 0z'/%3E %3Cpath style='fill:%230d2000; stroke:none;' d='M70 0L70 32L71 32L70 0z'/%3E %3Cpath style='fill:%233f0180; stroke:none;' d='M76 0L76 32L108 32L108 31L77 31L76 0z'/%3E %3Cpath style='fill:%237f00ff; stroke:none;' d='M77 0L77 31L108 31L108 0L77 0z'/%3E %3Cpath style='fill:%232f0060; stroke:none;' d='M108 0L108 32L109 32L108 0z'/%3E %3Cpath style='fill:%231d4101; stroke:none;' d='M114 0L114 31L115 31L114 0z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M115 0L115 31L146 31L146 0L115 0z'/%3E %3Cpath style='fill:%239f017c; stroke:none;' d='M0 31L0 32L32 32L0 31z'/%3E %3Cpath style='fill:%23459f00; stroke:none;' d='M115 31L115 32L146 32L115 31z'/%3E %3Cpath style='fill:%2300f0ff; stroke:none;' d='M0 38L0 69L31 69L31 38L0 38z'/%3E %3Cpath style='fill:%2300d2df; stroke:none;' d='M31 38L31 69L0 69L0 70L32 70L31 38z'/%3E %3Cpath style='fill:%23be0094; stroke:none;' d='M38 38L38 70L39 70L38 38z'/%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M39 38L39 69L70 69L70 38L39 38z'/%3E %3Cpath style='fill:%23200018; stroke:none;' d='M70 38L70 70L71 70L70 38z'/%3E %3Cpath style='fill:%23007880; stroke:none;' d='M76 38L76 70L77 70L76 38z'/%3E %3Cpath style='fill:%2300f0ff; stroke:none;' d='M77 38L77 69L108 69L108 38L77 38z'/%3E %3Cpath style='fill:%23015a60; stroke:none;' d='M108 38L108 70L109 70L108 38z'/%3E %3Cpath style='fill:%23400032; stroke:none;' d='M114 38L114 70L115 70L114 38z'/%3E %3Cpath style='fill:%23de00ad; stroke:none;' d='M115 38L115 39L146 39L115 38z'/%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M115 39L115 70L146 70L146 39L115 39z'/%3E %3Cpath style='fill:%23df01ae; stroke:none;' d='M39 69L39 70L70 70L39 69z'/%3E %3Cpath style='fill:%2300d2df; stroke:none;' d='M77 69L77 70L108 70L77 69z'/%3E %3Cpath style='fill:%2354bf00; stroke:none;' d='M0 76L0 77L32 77L0 76z'/%3E %3Cpath style='fill:%235f00be; stroke:none;' d='M38 76L38 108L39 108L39 77L70 77L38 76z'/%3E %3Cpath style='fill:%230f001f; stroke:none;' d='M70 76L70 108L71 108L70 76z'/%3E %3Cpath style='fill:%23388000; stroke:none;' d='M76 76L76 108L77 108L76 76z'/%3E %3Cpath style='fill:%2354bf00; stroke:none;' d='M77 76L77 77L108 77L77 76z'/%3E %3Cpath style='fill:%232a6000; stroke:none;' d='M108 76L108 108L109 108L108 76z'/%3E %3Cpath style='fill:%23003d40; stroke:none;' d='M114 76L114 108L115 108L114 76z'/%3E %3Cpath style='fill:%2300b4bf; stroke:none;' d='M115 76L115 77L146 77L115 76z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M0 77L0 108L32 108L32 77L0 77z'/%3E %3Cpath style='fill:%237f00ff; stroke:none;' d='M39 77L39 108L70 108L70 77L39 77z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M77 77L77 108L108 108L108 77L77 77z'/%3E %3Cpath style='fill:%2300f0ff; stroke:none;' d='M115 77L115 108L146 108L146 77L115 77z'/%3E %3Cpath style='fill:%230f2000; stroke:none;' d='M0 108L0 109L32 109L0 108M76 108L76 109L108 109L76 108z'/%3E %3Cpath style='fill:%23001e20; stroke:none;' d='M115 108L115 109L146 109L115 108z'/%3E %3Cpath style='fill:%23810064; stroke:none;' d='M0 114L0 115L32 115L0 114z'/%3E %3Cpath style='fill:%23398000; stroke:none;' d='M38 114L38 115L70 115L38 114z'/%3E %3Cpath style='fill:%23800063; stroke:none;' d='M76 114L76 146L77 146L77 115L108 115L76 114z'/%3E %3Cpath style='fill:%23200041; stroke:none;' d='M114 114L114 146L115 146L114 114z'/%3E %3Cpath style='fill:%23410080; stroke:none;' d='M115 114L115 115L146 115L115 114z'/%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M0 115L0 146L31 146L31 115L0 115z'/%3E %3Cpath style='fill:%23df01ae; stroke:none;' d='M31 115L31 146L32 146L31 115z'/%3E %3Cpath style='fill:%2354bf00; stroke:none;' d='M38 115L38 146L39 146L38 115z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M39 115L39 146L70 146L70 115L39 115z'/%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M77 115L77 146L108 146L108 115L77 115z'/%3E %3Cpath style='fill:%2360004a; stroke:none;' d='M108 115L108 146L109 146L108 115z'/%3E %3Cpath style='fill:%237f00ff; stroke:none;' d='M115 115L115 146L146 146L146 115L115 115z'/%3E %3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'a4ef4b0b23c1fc81d3f9ecf93510e64f58a4a016.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'marma j token',\n symbol: 'marmaj',\n icon:\n 'data:image/jpeg;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'marmaj.tkn.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked NEAR',\n symbol: 'STNEAR',\n icon:\n \"data:image/svg+xml,%3csvg width='96' height='96' viewBox='0 0 96 96' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='96' height='96' rx='48' fill='white'/%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M48.0006 20L41.2575 26.7431L48.0006 33.4862L54.7437 26.7431L48.0006 20ZM37.281 30.7188L30.7144 37.2853L47.9998 54.5707L65.2851 37.2853L58.7186 30.7188L47.9998 41.4376L37.281 30.7188ZM26.7384 41.261L19.9953 48.0041L47.9995 76.0083L76.0037 48.0041L69.2606 41.2611L47.9995 62.5221L26.7384 41.261Z' fill='%23231B51'/%3e%3c/svg%3e\",\n reference: 'https://metapool.app',\n reference_hash: null,\n decimals: 24,\n id: 'meta-pool.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Cheddar',\n symbol: 'Cheddar',\n icon:\n 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI1LjMuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA2NCA2NCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjQgNjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDp1cmwoI1hNTElEXzE2Xyk7fQoJLnN0MXtmaWxsOiNGRkU5NTk7fQoJLnN0MntvcGFjaXR5OjAuMjt9Cgkuc3Qze2ZpbGw6IzQyNDI0Mjt9Cgkuc3Q0e29wYWNpdHk6MC45O2ZpbGw6dXJsKCNYTUxJRF8xN18pO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyAgICA7fQoJLnN0NXtmaWxsOnVybCgjU1ZHSURfMV8pO30KCS5zdDZ7ZmlsbDp1cmwoI1hNTElEXzE4Xyk7fQoJLnN0N3tvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMTlfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDh7ZmlsbDp1cmwoI1hNTElEXzIwXyk7fQoJLnN0OXtvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMjFfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDEwe2ZpbGw6dXJsKCNTVkdJRF8yXyk7fQoJLnN0MTF7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzIyXyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3QxMntmaWxsOnVybCgjWE1MSURfMjNfKTt9Cgkuc3QxM3tvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMjRfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDE0e2ZpbGw6dXJsKCNTVkdJRF8zXyk7fQoJLnN0MTV7ZmlsbDp1cmwoI1hNTElEXzI2Xyk7fQoJLnN0MTZ7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzI3Xyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3QxN3tmaWxsOnVybCgjWE1MSURfMzFfKTt9Cgkuc3QxOHtvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMzNfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDE5e2ZpbGw6dXJsKCNTVkdJRF80Xyk7fQoJLnN0MjB7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzM0Xyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3QyMXtmaWxsOnVybCgjWE1MSURfMzZfKTt9Cgkuc3QyMntvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMzdfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDIze2ZpbGw6dXJsKCNTVkdJRF81Xyk7fQoJLnN0MjR7ZmlsbDp1cmwoI1hNTElEXzM4Xyk7fQoJLnN0MjV7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzM5Xyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3QyNntmaWxsOnVybCgjWE1MSURfNDBfKTt9Cgkuc3QyN3tvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfNDFfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDI4e2ZpbGw6dXJsKCNTVkdJRF82Xyk7fQoJLnN0Mjl7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzQyXyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cjwvc3R5bGU+CjxnIGlkPSJMYXllcl8xXzFfIj4KCQoJCTxsaW5lYXJHcmFkaWVudCBpZD0iWE1MSURfMTZfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9Ii0xODIxLjEzNTMiIHkxPSI5ODMuMTc0MyIgeDI9Ii0xODIxLjEzNTMiIHkyPSI5OTguMDU0MyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMSAwIDAgMSAtMTc5MC4yNzUzIC05NDYpIj4KCQk8c3RvcCAgb2Zmc2V0PSIxLjk3MDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNGN0JDMDAiLz4KCQk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojRkNENzNFIi8+Cgk8L2xpbmVhckdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzY4XyIgY2xhc3M9InN0MCIgZD0iTTUyLjMsNDAuMnYxNC4xbC00MC4yLTYuMWMtMS41LTAuMy0yLjYtMS4zLTIuNi0yLjNjMC4xLTMuOC0wLjEtNy41LDAtMTEuMQoJCWMwLTAuNywwLjEtMS41LDEuMi0xLjdjMC43LTAuMSwxLjYsMC4yLDIuMywwLjNsNC45LDAuOGMwLDAuMSwwLDAuMywwLDAuNGMwLDEuNiwxLjcsMyw0LDMuMWMyLDAuMSwzLjYtMC44LDMuOS0yLjJMNDAuNiwzOAoJCWMtMC4xLDAuMi0wLjIsMC40LTAuMiwwLjVjMCwwLjcsMC45LDEuMywxLjksMS40YzEuMSwwLjEsMS45LTAuNCwxLjktMS4yYzAtMC4xLDAtMC4xLDAtMC4yQzQ0LjEsMzguNiw1Mi4zLDQwLjIsNTIuMyw0MC4yeiIvPgoJPHBhdGggY2xhc3M9InN0MSIgZD0iTTkuNSwzNC44YzAuMy0xLjItMC40LTIuNiwzLjUtMS41bDQuOSwwLjhjMC40LTEsMi0xLjYsMy44LTEuNGMyLjIsMC4xLDQsMS4zLDQsMi41YzAsMC4xLDAsMC4yLDAsMC4zCgkJTDQwLjUsMzhsMCwwYzAuMy0wLjMsMS0wLjQsMS43LTAuNGMxLDAuMSwxLjksMC41LDEuOSwxLjFsOC4yLDEuNkwzMC44LDI3LjVjLTItMS4yLTQuNS0xLjctNi43LTEuM2MtMi4yLDAuMy01LDAuOC03LjEsMS42CgkJYy0yLjUsMC45LTQuOCwyLjQtNi4yLDMuNmMtMC4xLDAuMS0wLjYsMC41LTAuOSwxLjFDOS41LDMzLDkuNSwzMy44LDkuNSwzNC44eiIvPgoJPGcgY2xhc3M9InN0MiI+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI1LjQsMjdjMS42LDAsMy4zLDAuNCw0LjcsMS4zbDIxLDEyLjV2MTIuNmwtMzguOC01LjljLTAuOS0wLjItMS43LTAuOC0xLjYtMS40YzAtMi4yLDAtNC4zLDAtNi41CgkJCWMwLTEuNSwwLTMuMSwwLTQuN2MwLTAuMSwwLTAuMiwwLTAuNGwwLDBjMC0wLjUsMC4xLTEuMiwwLjMtMS42YzAuMi0wLjQsMC41LTAuNywwLjYtMC44YzEuNC0xLjEsMy42LTIuNSw1LjgtMy40CgkJCWMxLjYtMC42LDQtMS4xLDYuOC0xLjVDMjQuNiwyNywyNC45LDI3LDI1LjQsMjcgTTI1LjQsMjYuMWMtMC40LDAtMC45LDAtMS4zLDAuMWMtMi4yLDAuMy01LDAuOC03LjEsMS42CgkJCWMtMi41LDAuOS00LjgsMi40LTYuMiwzLjZjLTAuMSwwLjEtMC42LDAuNS0wLjksMS4xYy0wLjMsMC41LTAuMywxLjItMC40LDEuOWMwLDAuMiwwLDAuMywwLDAuNGMwLDMuNywwLjEsNy41LDAuMSwxMS4xCgkJCWMwLDEuMSwxLjEsMi4xLDIuNiwyLjNsNDAuMiw2LjFWNDAuMkwzMC44LDI3LjVDMjkuMiwyNi42LDI3LjMsMjYuMSwyNS40LDI2LjFMMjUuNCwyNi4xeiIvPgoJPC9nPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF8xN18iIGN4PSItMzA0NS4xOTg3IiBjeT0iMjA0Ny40NDY5IiByPSI2Ljg2ODciIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuNDI1OCAwIDAgMC4zMjI1IC0xMjc5Ljk4MTMgLTYxNy4xODk5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzM1XyIgY2xhc3M9InN0NCIgZD0iTTE4LjQsNDMuOGMwLDEuMi0xLjMsMi4xLTMsMmMtMS42LTAuMS0zLTEuMi0zLTIuM3MxLjMtMi4xLDMtMkMxNyw0MS41LDE4LjQsNDIuNiwxOC40LDQzLjh6IgoJCS8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlNWR0lEXzFfIiBjeD0iLTMwNjQuNDI3NSIgY3k9IjIwMTUuOTU3IiByPSIxNC4xMzIxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjQyNTggMCAwIDAuMzIyNSAtMTI3OS45ODEzIC02MTcuMTg5OSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjEzMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNERTdGMTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjMzODkiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQTdEMTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU5OTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRTc2MEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjg2MDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTZDMDUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0FENjUwMCIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGNsYXNzPSJzdDUiIGQ9Ik0xNy44LDM0LjRjMCwxLjYsMS43LDMsNCwzLjFjMiwwLjEsMy42LTAuOCwzLjktMi4yaC0wLjFsLTAuMy0wLjFsMC40LDAuMWMwLTAuMSwwLTAuMiwwLTAuMwoJCWMwLTEuMy0xLjgtMi40LTQtMi41Yy0xLjgtMC4xLTMuNCwwLjUtMy44LDEuNEMxNy44LDM0LjIsMTcuOCwzNC40LDE3LjgsMzQuNHoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMThfIiBjeD0iLTEzMjguMjIwMiIgY3k9IjM0ODEuNzQ3MSIgcj0iNy4xMDIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMzA3OCAwLjIyMjggMC4yNDA5IDAuMTkwOSAtMTIyMS41MjUxIC0zNDAuNzk4NCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4Ljc1MDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNEOTk5MTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjQwOTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNENTk2MTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjczNSIgc3R5bGU9InN0b3AtY29sb3I6I0M5OEQwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQkE4MjA3Ii8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzMyXyIgY2xhc3M9InN0NiIgZD0iTTI2LjgsMjkuNGMwLDAuNS0wLjksMS0yLDAuOXMtMi0wLjYtMi0xLjJzMC45LTEsMi0wLjlDMjYsMjguMiwyNi44LDI4LjgsMjYuOCwyOS40eiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF8xOV8iIGN4PSItMzA3OS41NTMiIGN5PSIyMDQ0LjQxMSIgcj0iMTUuNjcyNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC40MjU4IDAgMCAwLjMyMjUgLTEyNzkuOTgxMyAtNjE3LjE4OTkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC4xMzAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojREU3RjE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zMzg5IiBzdHlsZT0ic3RvcC1jb2xvcjojREE3RDEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC41OTkzIiBzdHlsZT0ic3RvcC1jb2xvcjojQ0U3NjBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC44NjAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQkE2QzA1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBRDY1MDAiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMzBfIiBjbGFzcz0ic3Q3IiBkPSJNMzUuMSw0My40YzAsMi4xLTIuMiwzLjUtNSwzLjNzLTUtMi01LTRjMC0yLjEsMi4yLTMuNSw1LTMuM0MzMi44LDM5LjYsMzUuMSw0MS40LDM1LjEsNDMuNHoiCgkJLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMjBfIiBjeD0iLTMwNzYuMzYxNiIgY3k9IjIwMTEuMTY0OCIgcj0iMTAuOTExOCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC40MjU4IDAgMCAwLjMyMjUgLTEyNzkuOTgxMyAtNjE3LjE4OTkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC43NTAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojRDk5OTE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC40MDk4IiBzdHlsZT0ic3RvcC1jb2xvcjojRDU5NjEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC43MzUiIHN0eWxlPSJzdG9wLWNvbG9yOiNDOThEMEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0JBODIwNyIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGlkPSJYTUxJRF8yOV8iIGNsYXNzPSJzdDgiIGQ9Ik0zNS44LDMzLjFjMCwwLjgtMS4zLDEuMy0yLjksMS4yYy0xLjYtMC4yLTIuOS0wLjgtMi45LTEuNmMwLTAuOCwxLjMtMS4zLDIuOS0xLjIKCQlDMzQuNiwzMS43LDM1LjgsMzIuMywzNS44LDMzLjF6Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlhNTElEXzIxXyIgY3g9Ii0zMTAyLjMwMzUiIGN5PSIyMDU5Ljc2NjgiIHI9IjUuOTI4NSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC40MjU4IDAgMCAwLjMyMjUgLTEyNzkuOTgxMyAtNjE3LjE4OTkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC4xMzAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojREU3RjE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zMzg5IiBzdHlsZT0ic3RvcC1jb2xvcjojREE3RDEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC41OTkzIiBzdHlsZT0ic3RvcC1jb2xvcjojQ0U3NjBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC44NjAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQkE2QzA1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBRDY1MDAiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMjhfIiBjbGFzcz0ic3Q5IiBkPSJNNDIuMyw0Ny43YzAsMS0xLjIsMS44LTIuNiwxLjdjLTEuNC0wLjEtMi42LTEtMi42LTIuMWMwLTEuMSwxLjItMS44LDIuNi0xLjcKCQlDNDEuMSw0NS45LDQyLjMsNDYuOCw0Mi4zLDQ3Ljd6Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlNWR0lEXzJfIiBjeD0iLTMxMDYuODA4OCIgY3k9IjIwMzAuMDM0MyIgcj0iOC44NDA4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjQyNTggMCAwIDAuMzIyNSAtMTI3OS45ODEzIC02MTcuMTg5OSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjYwMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNDNzczMTUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjM3NzQiIHN0eWxlPSJzdG9wLWNvbG9yOiNDMzcxMTMiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjY3MTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNCNzZDMEYiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk2NjkiIHN0eWxlPSJzdG9wLWNvbG9yOiNBMzY0MDciLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0ExNjMwNiIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGNsYXNzPSJzdDEwIiBkPSJNNDAuMiwzOC41YzAsMC43LDAuOSwxLjMsMS45LDEuNGMxLjEsMC4xLDEuOS0wLjQsMS45LTEuMmMwLTAuMSwwLTAuMSwwLTAuMmwwLDBjMC0wLjUtMC45LTEtMS45LTEuMQoJCWMtMC43LTAuMS0xLjQsMC4xLTEuNywwLjRsMCwwQzQwLjMsMzguMSw0MC4yLDM4LjMsNDAuMiwzOC41eiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF8yMl8iIGN4PSItMzExOS4yMjA1IiBjeT0iMjA0OC44OTk5IiByPSI0LjM5ODUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuNDI1OCAwIDAgMC4zMjI1IC0xMjc5Ljk4MTMgLTYxNy4xODk5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzI1XyIgY2xhc3M9InN0MTEiIGQ9Ik00OC43LDQ0YzAsMC41LTAuNiwxLTEuMywwLjljLTAuNy0wLjEtMS4zLTAuNS0xLjMtMS4xYzAtMC41LDAuNi0xLDEuMy0wLjkKCQlDNDgsNDMsNDguNyw0My40LDQ4LjcsNDR6Ii8+CjwvZz4KPGcgaWQ9IkxheWVyXzFfMl8iPgoJCgkJPGxpbmVhckdyYWRpZW50IGlkPSJYTUxJRF8yM18iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iLTIxMjYuNTcyIiB5MT0iMTAyNi43NzYxIiB4Mj0iLTIxMjYuNTcyIiB5Mj0iMTAzOS45Mzc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjc2NTIgLTEuNjc0MTIzZS0wMiAtMS44Nzk5NDdlLTAyIDAuODU5MyAtMTU3Ni4yMTU3IC04OTMuNDA4NSkiPgoJCTxzdG9wICBvZmZzZXQ9IjEuOTcwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0Y3QkMwMCIvPgoJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNGQ0Q3M0UiLz4KCTwvbGluZWFyR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfN18iIGNsYXNzPSJzdDEyIiBkPSJNNDcsMjdsLTAuNCwxMC45bC0yOC41LTUuMWMtMS4xLTAuMi0xLjgtMS0xLjgtMS44YzAuMi0yLjksMC4xLTUuOCwwLjMtOC42CgkJYzAtMC41LDAuMS0xLjIsMC45LTEuM2MwLjUtMC4xLDEuMiwwLjIsMS43LDAuM2wzLjQsMC43YzAsMC4xLDAsMC4yLDAsMC4zYzAsMS4yLDEuMiwyLjMsMi43LDIuNGMxLjQsMC4xLDIuNi0wLjYsMi44LTEuNgoJCWwxMC41LDIuMmMtMC4xLDAuMS0wLjIsMC4zLTAuMiwwLjRjMCwwLjUsMC41LDEuMSwxLjMsMS4yYzAuNywwLjEsMS4zLTAuNCwxLjMtMC45YzAtMC4xLDAtMC4xLDAtMC4yQzQxLjEsMjUuNiw0NywyNyw0NywyN3oiLz4KCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xNi41LDIyLjRjMC4yLTAuOS0wLjItMiwyLjUtMS4ybDMuNCwwLjdjMC4zLTAuNywxLjQtMS4yLDIuOC0xLjFjMS41LDAuMSwyLjgsMS4xLDIuOCwyYzAsMC4xLDAsMC4yLDAsMC4yCgkJbDEwLjUsMi4ybDAsMGMwLjItMC4zLDAuNy0wLjQsMS4zLTAuNGMwLjcsMC4xLDEuMywwLjQsMS4zLDAuOGw1LjgsMS4zTDMyLDE3Yy0xLjMtMC45LTMuMS0xLjMtNC44LTEuMWMtMS42LDAuMi0zLjYsMC41LTUuMSwxLjIKCQljLTEuOCwwLjYtMy40LDEuOC00LjUsMi43Yy0wLjEsMC4xLTAuNCwwLjQtMC42LDAuOEMxNi42LDIxLjEsMTYuNiwyMS43LDE2LjUsMjIuNHoiLz4KCTxnIGNsYXNzPSJzdDIiPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yOC4xLDE2LjVjMS4yLDAsMi4zLDAuNCwzLjMsMWwxNC43LDkuOEw0NS45LDM3bC0yNy42LTQuOWMtMC42LTAuMS0xLjItMC42LTEuMi0xLjIKCQkJYzAuMS0xLjYsMC4xLTMuMywwLjItNC45YzAtMS4yLDAuMS0yLjQsMC4xLTMuNmMwLTAuMSwwLTAuMiwwLTAuM2wwLDBjMC0wLjQsMC4xLTAuOSwwLjItMS4zYzAuMS0wLjMsMC40LTAuNSwwLjQtMC42CgkJCWMxLTAuOCwyLjYtMS45LDQuMy0yLjVjMS4yLTAuNCwyLjktMC44LDQuOS0xLjFDMjcuNSwxNi41LDI3LjgsMTYuNSwyOC4xLDE2LjUgTTI4LjEsMTUuOGMtMC40LDAtMC42LDAtMSwwLjEKCQkJYy0xLjYsMC4yLTMuNiwwLjUtNS4xLDEuMmMtMS44LDAuNi0zLjQsMS44LTQuNSwyLjdjLTAuMSwwLjEtMC40LDAuNC0wLjYsMC44Yy0wLjIsMC40LTAuMywwLjktMC4zLDEuNGMwLDAuMSwwLDAuMiwwLDAuMwoJCQljLTAuMSwyLjktMC4xLDUuOC0wLjMsOC42YzAsMC44LDAuNywxLjYsMS44LDEuOGwyOC41LDUuMUw0NywyN0wzMS45LDE3QzMwLjgsMTYuMywyOS40LDE1LjgsMjguMSwxNS44TDI4LjEsMTUuOHoiLz4KCTwvZz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMjRfIiBjeD0iLTM5OTEuOTUyOSIgY3k9IjI0MDEuOTY1MSIgcj0iNi44Njg3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjMwMzcgLTQuMzQ2MjA4ZS0wMyAtNy41ODc3MjFlLTAzIDAuMjQ4NCAtMTE3Mi42NTQ4IC01ODUuMTI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzZfIiBjbGFzcz0ic3QxMyIgZD0iTTIyLjcsMjkuNGMwLDAuOS0xLDEuNi0yLjIsMS40Yy0xLjItMC4yLTIuMS0wLjktMi4xLTEuOWMwLTEsMS0xLjYsMi4yLTEuNAoJCVMyMi43LDI4LjUsMjIuNywyOS40eiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJTVkdJRF8zXyIgY3g9Ii00MDExLjE4MTYiIGN5PSIyMzcwLjQ3NTMiIHI9IjE0LjEzMjEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMzAzNyAtNC4zNDYyMDhlLTAzIC03LjU4NzcyMWUtMDMgMC4yNDg0IC0xMTcyLjY1NDggLTU4NS4xMjkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC4xMzAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojREU3RjE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zMzg5IiBzdHlsZT0ic3RvcC1jb2xvcjojREE3RDEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC41OTkzIiBzdHlsZT0ic3RvcC1jb2xvcjojQ0U3NjBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC44NjAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQkE2QzA1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBRDY1MDAiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBjbGFzcz0ic3QxNCIgZD0iTTIyLjQsMjIuMmMwLDEuMiwxLjIsMi4zLDIuNywyLjRjMS40LDAuMSwyLjYtMC42LDIuOC0xLjZoLTAuMWgtMC4ybDAuMywwLjFjMC0wLjEsMC0wLjIsMC0wLjIKCQljMC0xLTEuMy0xLjktMi44LTJjLTEuMy0wLjEtMi40LDAuNC0yLjgsMS4xQzIyLjUsMjIsMjIuNCwyMi4xLDIyLjQsMjIuMnoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMjZfIiBjeD0iLTE3NjcuOTQ2NSIgY3k9IjQ1OTMuOTUyMSIgcj0iNy4xMDIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMjI0OCAwLjE2ODUgMC4xNjczIDAuMTQ5NSAtMTEzNy40NjU2IC0zNzEuNjE3OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4Ljc1MDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNEOTk5MTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjQwOTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNENTk2MTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjczNSIgc3R5bGU9InN0b3AtY29sb3I6I0M5OEQwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQkE4MjA3Ii8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzVfIiBjbGFzcz0ic3QxNSIgZD0iTTI5LjEsMTguNGMwLDAuNC0wLjYsMC43LTEuNCwwLjdjLTAuNy0wLjEtMS4zLTAuNC0xLjMtMC45YzAtMC40LDAuNi0wLjcsMS40LTAuNwoJCUMyOC40LDE3LjYsMjkuMSwxNy45LDI5LjEsMTguNHoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMjdfIiBjeD0iLTQwMjYuMzA3MSIgY3k9IjIzOTguOTI5MiIgcj0iMTUuNjcyNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4zMDM3IC00LjM0NjIwOGUtMDMgLTcuNTg3NzIxZS0wMyAwLjI0ODQgLTExNzIuNjU0OCAtNTg1LjEyOSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjEzMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNERTdGMTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjMzODkiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQTdEMTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU5OTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRTc2MEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjg2MDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTZDMDUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0FENjUwMCIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGlkPSJYTUxJRF80XyIgY2xhc3M9InN0MTYiIGQ9Ik0zNC42LDI5LjNjLTAuMSwxLjUtMS43LDIuNy0zLjcsMi41Yy0yLTAuMi0zLjYtMS42LTMuNS0zLjFjMC4xLTEuNSwxLjctMi43LDMuNy0yLjUKCQlDMzMsMjYuMywzNC42LDI3LjcsMzQuNiwyOS4zeiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF8zMV8iIGN4PSItNDAyMy4xMTU3IiBjeT0iMjM2NS42ODMxIiByPSIxMC45MTE4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjMwMzcgLTQuMzQ2MjA4ZS0wMyAtNy41ODc3MjFlLTAzIDAuMjQ4NCAtMTE3Mi42NTQ4IC01ODUuMTI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguNzUwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0Q5OTkxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNDA5OCIgc3R5bGU9InN0b3AtY29sb3I6I0Q1OTYxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNzM1IiBzdHlsZT0ic3RvcC1jb2xvcjojQzk4RDBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTgyMDciLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfM18iIGNsYXNzPSJzdDE3IiBkPSJNMzUuNCwyMS4zYzAsMC42LTEsMS0yLjEsMC45Yy0xLjEtMC4xLTIuMS0wLjYtMi4xLTEuM3MxLTEsMi4xLTAuOQoJCUMzNC41LDIwLjIsMzUuNCwyMC43LDM1LjQsMjEuM3oiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzNfIiBjeD0iLTQwNDkuMDU3OSIgY3k9IjI0MTQuMjg1MiIgcj0iNS45Mjg1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjMwMzcgLTQuMzQ2MjA4ZS0wMyAtNy41ODc3MjFlLTAzIDAuMjQ4NCAtMTE3Mi42NTQ4IC01ODUuMTI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzJfIiBjbGFzcz0ic3QxOCIgZD0iTTM5LjYsMzIuN2MwLDAuOC0wLjksMS4zLTEuOSwxLjNjLTEtMC4xLTEuOC0wLjgtMS44LTEuNnMwLjktMS4zLDEuOS0xLjMKCQlDMzguOSwzMS4yLDM5LjcsMzEuOSwzOS42LDMyLjd6Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlNWR0lEXzRfIiBjeD0iLTQwNTMuNTYzIiBjeT0iMjM4NC41NTI1IiByPSI4Ljg0MDgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMzAzNyAtNC4zNDYyMDhlLTAzIC03LjU4NzcyMWUtMDMgMC4yNDg0IC0xMTcyLjY1NDggLTU4NS4xMjkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC42MDAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQzc3MzE1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zNzc0IiBzdHlsZT0ic3RvcC1jb2xvcjojQzM3MTEzIi8+CgkJPHN0b3AgIG9mZnNldD0iMC42NzE4IiBzdHlsZT0ic3RvcC1jb2xvcjojQjc2QzBGIi8+CgkJPHN0b3AgIG9mZnNldD0iMC45NjY5IiBzdHlsZT0ic3RvcC1jb2xvcjojQTM2NDA3Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBMTYzMDYiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBjbGFzcz0ic3QxOSIgZD0iTTM4LjQsMjUuNmMwLDAuNSwwLjUsMS4xLDEuMywxLjJjMC43LDAuMSwxLjMtMC40LDEuMy0wLjljMC0wLjEsMC0wLjEsMC0wLjJsMCwwYzAtMC40LTAuNi0wLjgtMS4zLTAuOAoJCWMtMC41LTAuMS0xLDAuMS0xLjMsMC40bDAsMEMzOC40LDI1LjMsMzguNCwyNS41LDM4LjQsMjUuNnoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzRfIiBjeD0iLTQwNjUuOTc0NiIgY3k9IjI0MDMuNDE4MiIgcj0iNC4zOTg1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjMwMzcgLTQuMzQ2MjA4ZS0wMyAtNy41ODc3MjFlLTAzIDAuMjQ4NCAtMTE3Mi42NTQ4IC01ODUuMTI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzFfIiBjbGFzcz0ic3QyMCIgZD0iTTQ0LjMsMjkuOWMwLDAuNC0wLjQsMC43LTEsMC43cy0xLTAuNC0xLTAuOWMwLTAuNCwwLjQtMC43LDEtMC43CgkJQzQzLjgsMjkuMSw0NC4zLDI5LjQsNDQuMywyOS45eiIvPgo8L2c+CjxnIGlkPSJMYXllcl8xXzNfIj4KCQoJCTxsaW5lYXJHcmFkaWVudCBpZD0iWE1MSURfMzZfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9Ii0yNDIyLjUxNzMiIHkxPSIxMDA1LjY1NDYiIHgyPSItMjQyMi41MTczIiB5Mj0iMTAxNC43NjQzIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjYyODcgLTMuOTI5MDMwZS0wMiAtNS4wNDc5OThlLTAyIDAuODA3NyAtMTQ0MC42ODE1IC04OTIuMDUxMykiPgoJCTxzdG9wICBvZmZzZXQ9IjEuOTcwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0Y3QkMwMCIvPgoJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNGQ0Q3M0UiLz4KCTwvbGluZWFyR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMTRfIiBjbGFzcz0ic3QyMSIgZD0iTTQwLjYsMTcuMmwtMC42LDcuMmwtMTYuNy0zLjhjLTAuNi0wLjItMS4xLTAuNy0xLTEuM2MwLjItMS45LDAuMy0zLjksMC40LTUuOAoJCWMwLTAuNCwwLjEtMC44LDAuNS0wLjljMC40LTAuMSwwLjcsMC4xLDEsMC4ybDIsMC41YzAsMC4xLDAsMC4yLDAsMC4yYy0wLjEsMC44LDAuNiwxLjUsMS41LDEuNmMwLjgsMC4xLDEuNS0wLjQsMS43LTEuMWw2LjIsMS41CgkJYy0wLjEsMC4xLTAuMSwwLjItMC4xLDAuM2MwLDAuNCwwLjMsMC43LDAuNywwLjhzMC44LTAuMiwwLjktMC41di0wLjFDMzcuMiwxNi4yLDQwLjYsMTcuMiw0MC42LDE3LjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNMjIuOCwxMy43YzAuMi0wLjUsMC0xLjMsMS41LTAuN2wyLDAuNWMwLjItMC40LDAuOS0wLjgsMS43LTAuN2MwLjksMC4xLDEuNiwwLjcsMS41LDEuM2MwLDAuMSwwLDAuMSwwLDAuMgoJCWw2LjIsMS41bDAsMGMwLjItMC4yLDAuNC0wLjMsMC43LTAuMmMwLjQsMC4xLDAuNywwLjMsMC43LDAuNWwzLjQsMUwzMiwxMC4zYy0wLjgtMC42LTEuOC0wLjktMi44LTAuOGMtMSwwLjItMi4yLDAuNC0zLjEsMC43CgkJYy0xLjEsMC40LTIuMSwxLjItMi44LDEuN2MwLDAtMC4zLDAuMy0wLjQsMC41QzIyLjksMTIuOCwyMi44LDEzLjIsMjIuOCwxMy43eiIvPgoJPGcgY2xhc3M9InN0MiI+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI5LjgsOS45YzAuNywwLDEuMywwLjMsMS45LDAuN2w4LjQsNi43bC0wLjUsNi41bC0xNi4xLTMuN2MtMC40LTAuMS0wLjYtMC40LTAuNi0wLjgKCQkJYzAuMS0xLjEsMC4yLTIuMiwwLjMtMy4zYzAuMS0wLjgsMC4xLTEuNiwwLjItMi40YzAtMC4xLDAtMC4xLDAtMC4ybDAsMGMwLTAuMywwLjEtMC42LDAuMi0wLjhjMC4xLTAuMiwwLjMtMC40LDAuMy0wLjQKCQkJYzAuNi0wLjUsMS42LTEuMywyLjYtMS42YzAuNy0wLjMsMS43LTAuNSwzLTAuNkMyOS40LDkuOSwyOS42LDkuOSwyOS44LDkuOSBNMjkuOSw5LjVjLTAuMiwwLTAuNCwwLTAuNiwwYy0xLDAuMi0yLjIsMC40LTMuMSwwLjcKCQkJYy0xLjEsMC40LTIuMSwxLjItMi44LDEuN2MwLDAtMC4zLDAuMy0wLjQsMC41Yy0wLjEsMC4zLTAuMiwwLjUtMC4yLDFjMCwwLjEsMCwwLjIsMCwwLjJjLTAuMiwxLjktMC4zLDMuOS0wLjQsNS44CgkJCWMtMC4xLDAuNSwwLjQsMS4xLDEsMS4zbDE2LjYsMy45bDAuNi03LjNMMzIsMTAuM0MzMS40LDkuOCwzMC42LDkuNiwyOS45LDkuNUwyOS45LDkuNXoiLz4KCTwvZz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzdfIiBjeD0iLTYzMDAuMDcxMyIgY3k9IjMxODQuNDk5MyIgcj0iNi44Njg3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjE3OTYgLTYuODIyNTU0ZS0wMyAtMS4zOTA2NjJlLTAyIDAuMTY1NiAtMTA2MS43Nzg2IC01NTIuMjIzMykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjEzMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNERTdGMTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjMzODkiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQTdEMTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU5OTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRTc2MEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjg2MDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTZDMDUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0FENjUwMCIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGlkPSJYTUxJRF8xM18iIGNsYXNzPSJzdDIyIiBkPSJNMjYuMSwxOC41Yy0wLjEsMC42LTAuNiwxLjEtMS4zLDFjLTAuNy0wLjEtMS4yLTAuNi0xLjItMS4zYzAuMS0wLjYsMC42LTEuMSwxLjMtMQoJCUMyNS43LDE3LjMsMjYuMiwxNy45LDI2LjEsMTguNXoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iU1ZHSURfNV8iIGN4PSItNjMxOS4zMDAzIiBjeT0iMzE1My4wMDk1IiByPSIxNC4xMzIxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjE3OTYgLTYuODIyNTU0ZS0wMyAtMS4zOTA2NjJlLTAyIDAuMTY1NiAtMTA2MS43Nzg2IC01NTIuMjIzMykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjEzMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNERTdGMTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjMzODkiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQTdEMTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU5OTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRTc2MEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjg2MDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTZDMDUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0FENjUwMCIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGNsYXNzPSJzdDIzIiBkPSJNMjYuMywxMy43Yy0wLjEsMC44LDAuNiwxLjUsMS41LDEuNmMwLjgsMC4xLDEuNS0wLjQsMS43LTEuMWgtMC4xaC0wLjFoMC4yYzAtMC4xLDAtMC4xLDAtMC4yCgkJYzAuMS0wLjYtMC42LTEuMy0xLjUtMS4zYy0wLjgtMC4xLTEuNCwwLjItMS43LDAuN0MyNi4zLDEzLjUsMjYuMywxMy42LDI2LjMsMTMuN3oiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzhfIiBjeD0iLTI4OTUuMTQ2NyIgY3k9IjcyMzAuOTM4NSIgcj0iNy4xMDIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTM5NSAwLjEwOTUgOS4zMzg2MjdlLTAyIDAuMTAxOSAtMTA0OS4wOTQyIC00MDkuMzQ3OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4Ljc1MDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNEOTk5MTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjQwOTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNENTk2MTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjczNSIgc3R5bGU9InN0b3AtY29sb3I6I0M5OEQwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQkE4MjA3Ii8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzEyXyIgY2xhc3M9InN0MjQiIGQ9Ik0zMC4zLDExLjJjMCwwLjMtMC40LDAuNC0wLjksMC40cy0wLjgtMC40LTAuOC0wLjZzMC40LTAuNCwwLjktMC40CgkJQzMwLDEwLjYsMzAuMywxMC45LDMwLjMsMTEuMnoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzlfIiBjeD0iLTYzMzQuNDI1OCIgY3k9IjMxODEuNDYzNCIgcj0iMTUuNjcyNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4xNzk2IC02LjgyMjU1NGUtMDMgLTEuMzkwNjYyZS0wMiAwLjE2NTYgLTEwNjEuNzc4NiAtNTUyLjIyMzMpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC4xMzAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojREU3RjE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zMzg5IiBzdHlsZT0ic3RvcC1jb2xvcjojREE3RDEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC41OTkzIiBzdHlsZT0ic3RvcC1jb2xvcjojQ0U3NjBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC44NjAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQkE2QzA1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBRDY1MDAiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMTFfIiBjbGFzcz0ic3QyNSIgZD0iTTMzLjIsMTguNWMtMC4xLDEuMS0xLjEsMS44LTIuMiwxLjZzLTIuMS0xLjEtMi0yLjJjMC4xLTEuMSwxLjEtMS44LDIuMi0xLjYKCQlDMzIuNCwxNi42LDMzLjMsMTcuNSwzMy4yLDE4LjV6Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlhNTElEXzQwXyIgY3g9Ii02MzMxLjIzNDQiIGN5PSIzMTQ4LjIxNzMiIHI9IjEwLjkxMTgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTc5NiAtNi44MjI1NTRlLTAzIC0xLjM5MDY2MmUtMDIgMC4xNjU2IC0xMDYxLjc3ODYgLTU1Mi4yMjMzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguNzUwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0Q5OTkxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNDA5OCIgc3R5bGU9InN0b3AtY29sb3I6I0Q1OTYxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNzM1IiBzdHlsZT0ic3RvcC1jb2xvcjojQzk4RDBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTgyMDciLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMTBfIiBjbGFzcz0ic3QyNiIgZD0iTTMzLjksMTMuMmMwLDAuNC0wLjYsMC42LTEuMywwLjVjLTAuNi0wLjEtMS4yLTAuNC0xLjItMC45YzAtMC40LDAuNi0wLjYsMS4zLTAuNQoJCVMzMy45LDEyLjksMzMuOSwxMy4yeiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF80MV8iIGN4PSItNjM1Ny4xNzYzIiBjeT0iMzE5Ni44MTkzIiByPSI1LjkyODUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTc5NiAtNi44MjI1NTRlLTAzIC0xLjM5MDY2MmUtMDIgMC4xNjU2IC0xMDYxLjc3ODYgLTU1Mi4yMjMzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzlfIiBjbGFzcz0ic3QyNyIgZD0iTTM2LDIwLjljMCwwLjUtMC41LDAuOS0xLjIsMC44Yy0wLjYtMC4xLTEuMS0wLjUtMS0xLjFjMC0wLjUsMC41LTAuOSwxLjItMC44CgkJQzM1LjYsMTkuOSwzNi4xLDIwLjMsMzYsMjAuOXoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iU1ZHSURfNl8iIGN4PSItNjM2MS42ODE2IiBjeT0iMzE2Ny4wODY3IiByPSI4Ljg0MDgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTc5NiAtNi44MjI1NTRlLTAzIC0xLjM5MDY2MmUtMDIgMC4xNjU2IC0xMDYxLjc3ODYgLTU1Mi4yMjMzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguNjAwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0M3NzMxNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzc3NCIgc3R5bGU9InN0b3AtY29sb3I6I0MzNzExMyIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNjcxOCIgc3R5bGU9InN0b3AtY29sb3I6I0I3NkMwRiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTY2OSIgc3R5bGU9InN0b3AtY29sb3I6I0EzNjQwNyIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQTE2MzA2Ii8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggY2xhc3M9InN0MjgiIGQ9Ik0zNS41LDE2LjFjMCwwLjQsMC4zLDAuNywwLjcsMC44YzAuNCwwLjEsMC44LTAuMiwwLjktMC41di0wLjFsMCwwYzAtMC4zLTAuNC0wLjUtMC43LTAuNQoJCWMtMC40LDAtMC42LDAtMC43LDAuMmwwLDBDMzUuNiwxNS45LDM1LjUsMTYsMzUuNSwxNi4xeiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF80Ml8iIGN4PSItNjM3NC4wOTMzIiBjeT0iMzE4NS45NTI0IiByPSI0LjM5ODUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTc5NiAtNi44MjI1NTRlLTAzIC0xLjM5MDY2MmUtMDIgMC4xNjU2IC0xMDYxLjc3ODYgLTU1Mi4yMjMzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzhfIiBjbGFzcz0ic3QyOSIgZD0iTTM4LjksMTkuMWMwLDAuMy0wLjMsMC40LTAuNiwwLjRjLTAuNCwwLTAuNS0wLjMtMC41LTAuNnMwLjMtMC40LDAuNi0wLjQKCQlDMzguNywxOC41LDM4LjksMTguOCwzOC45LDE5LjF6Ii8+CjwvZz4KPC9zdmc+Cg==',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'token.cheddar.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Pulse',\n symbol: 'PULSE',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iMTYiIGN5PSIxNiIgcj0iMTYiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNi41NTAzNSAxOS4xMjM5TDkuMTcxNjYgMTQuOTQ5MkM5LjMyNzMxIDE0LjcwMTMgOS41OTk0OCAxNC41NTA4IDkuODkyMiAxNC41NTA4SDE4LjQxNEMxOS41NDEyIDE0LjU1MDggMjAuNTYxNCAxMy44ODM2IDIxLjAxMzMgMTIuODUwOUMyMS4zNjQ3IDEyLjA0NzYgMjAuNzc2MSAxMS4xNDc3IDE5Ljg5OTMgMTEuMTQ3N0gxMS45NzQyTDExLjU0ODggMTEuMjU0TDEzLjY0NjEgNy40NDA3OEMxMy43OTU2IDcuMTY4OTEgMTQuMDgxMyA3IDE0LjM5MTUgN0gyMi4wNzU0QzI1LjA1NDMgNyAyNy4xMTA3IDkuOTgyNzkgMjYuMDUxMyAxMi43NjdMMjUuODYzMSAxMy4yNjEzQzI0LjU0NDQgMTYuNzI2OSAyMS4yMjE4IDE5LjAxNzYgMTcuNTEzOCAxOS4wMTc2SDYuOTc1NzVMNi41NTAzNSAxOS4xMjM5Wk04LjM2ODg0IDE5Ljk3NDdDNy4wNTA0MiAxOS45NzQ3IDUuODM2NTUgMjAuNjkyNSA1LjIwMTE4IDIxLjg0NzdDNC42MTIyMyAyMi45MTg1IDUuMzg2OTQgMjQuMjI4NyA2LjYwOTAzIDI0LjIyODdIMTAuODA0NEwxMy40NjMxIDE5Ljg2ODRMMTMuMTQ0MSAxOS45NzQ3SDguMzY4ODRaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfMjBfMykiLz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8yMF8zIiB4MT0iMTguMDI2NiIgeTE9IjUuNTI5MjYiIHgyPSIyLjI2ODYxIiB5Mj0iMzAuMTExNyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjREQ1OUZGIi8+CjxzdG9wIG9mZnNldD0iMC40NzM5NTgiIHN0b3AtY29sb3I9IiM1MDY5RkYiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDAyNUZGIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==',\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '52a047ee205701895ee06a375492490ec9c597ce.factory.bridge.near',\n },\n {\n decimals: 18,\n icon:\n 'data:image/png;base64,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',\n name: 'Ether',\n reference: null,\n reference_hash: null,\n spec: 'ft-1.0.0',\n symbol: 'ETH',\n id: 'aurora',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Pixeltoken',\n symbol: 'PXT',\n icon:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAANdJREFUWIXll70RwjAMhWUuNGwARVgEmuyQJRgo7AA7uGESGioaGlpTcK+w7nR+gcIyfJ1zys/7dHKSsO53SSqyqHlzEZFu7gm364Wq22z3VF07BpB8CANXn971JRP+Dejk8fSgLoz6kgm/Btjk58MqW4/TM6svmfBrQIOkSAiO92W2Hmc+gF8D6BV6h17qhOxUWPg18C16OizaN2AlxXTEFEWkxZ2QRe8DoJQctG8AIDH4vS8iFjY5aM8Au8Ox+DdgvRUBO+8W/g0AbUIf/5TqBsLf/x2/ADJHSOenTxC2AAAAAElFTkSuQmCC',\n reference: '',\n reference_hash: '',\n decimals: 6,\n id: 'pixeltoken.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Debio',\n symbol: 'DBIO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIxOTAgOTcgNDIwIDQyMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgODAwIDgwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48c3R5bGU+LnN0MHtmaWxsOiMzNjM2MzZ9LnN0M3tmaWxsOiNmZjU2ZTB9PC9zdHlsZT48L2RlZnM+PGNpcmNsZSBjbGFzcz0ic3QzIiBjeD0iNDAwIiBjeT0iMzA3LjM5IiByPSIyMDguNTgiLz48cGF0aCBkPSJNNDczLjk5IDIxMS4zczIuMzQgNTYuMjUtNzcuMzQgOTguNDMtNzAuMzEgOTMuNzQtNzAuMzEgOTMuNzQiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNlNmU2ZTY7c3Ryb2tlLXdpZHRoOjM3LjQ5NzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTAiLz48cGF0aCBkPSJNMzI2LjAxIDIxMS4zcy0yLjM0IDU2LjI1IDc3LjM0IDk4LjQzIDcwLjMxIDkzLjc0IDcwLjMxIDkzLjc0IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDozNy40OTc1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwIi8+PGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iNDAwIiBjeT0iMjE2LjQyIiByPSIyMC40OSIvPjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjQwMCIgY3k9IjM5OC4zNiIgcj0iMjAuNDkiLz48dGV4dCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMzYuMzQyIDY1OC4wNzUpIiBjbGFzcz0ic3QzIiBzdHlsZT0id2hpdGUtc3BhY2U6cHJlO2ZvbnQtc2l6ZToxMTIuNDkyNXB4O2ZvbnQtZmFtaWx5OidBcnRlZ3JhU2Fucy1TZW1pQm9sZCciPkRlQmlvPC90ZXh0Pjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'dbio.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Aurora',\n symbol: 'AURORA',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 288 288' style='enable-background:new 0 0 288 288;' xml:space='preserve'%3E %3Cstyle type='text/css'%3E .st0%7Bfill:%2370D44B;%7D .st1%7Bfill:%23FFFFFF;%7D %3C/style%3E %3Cpath class='st0' d='M144,0L144,0c79.5,0,144,64.5,144,144v0c0,79.5-64.5,144-144,144h0C64.5,288,0,223.5,0,144v0 C0,64.5,64.5,0,144,0z'/%3E %3Cpath class='st1' d='M144,58.8c7.6,0,14.5,4.3,17.9,11.1l56.2,112.5c4.9,9.9,0.9,21.9-9,26.8c-2.8,1.4-5.8,2.1-8.9,2.1H87.8 c-11,0-20-9-20-20c0-3.1,0.7-6.2,2.1-8.9l56.2-112.5C129.5,63,136.4,58.7,144,58.8 M144,45c-12.8,0-24.5,7.2-30.2,18.7L57.6,176.2 c-8.3,16.7-1.6,36.9,15.1,45.3c4.7,2.3,9.9,3.6,15.1,3.6h112.5c18.6,0,33.8-15.1,33.8-33.7c0-5.2-1.2-10.4-3.6-15.1L174.2,63.7 C168.5,52.2,156.8,45,144,45z'/%3E %3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'aaaaaa20d9e0e2461697782ef11675f668207961.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Meta Token',\n symbol: '$META',\n icon:\n \"data:image/svg+xml,%3csvg width='96' height='96' viewBox='0 0 96 96' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='96' height='96' rx='48' fill='white'/%3e%3cpath d='M29.2241 28.7456C28.396 27.9423 27.0094 28.5289 27.0091 29.6825L27 66.6773C26.9997 67.8501 28.4257 68.4286 29.2426 67.5872L48.6529 47.5943L29.2241 28.7456Z' fill='%23231B51'/%3e%3cpath d='M66.7759 28.7456C67.604 27.9423 68.9906 28.5289 68.9909 29.6825L69 66.6773C69.0003 67.8501 67.5743 68.4286 66.7574 67.5872L47.3471 47.5943L66.7759 28.7456Z' fill='%23231B51'/%3e%3c/svg%3e\",\n reference: 'https://metapool.app',\n reference_hash: null,\n decimals: 24,\n id: 'meta-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Potato 🥔',\n symbol: 'POTATO',\n icon:\n 'data:image/jpeg;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'v1.dacha-finance.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Flux Token',\n symbol: 'FLX',\n icon:\n \"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='140px' height='140px' viewBox='0 0 140 140' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3EFlux Logo New%3C/title%3E%3Cdefs%3E%3CradialGradient cx='50%25' cy='0%25' fx='50%25' fy='0%25' r='248.533062%25' gradientTransform='translate(0.500000,0.000000),scale(1.000000,0.393939),rotate(90.000000),translate(-0.500000,-0.000000)' id='radialGradient-1'%3E%3Cstop stop-color='%23FE84FC' offset='0%25'%3E%3C/stop%3E%3Cstop stop-color='%232ED1FF' offset='100%25'%3E%3C/stop%3E%3C/radialGradient%3E%3C/defs%3E%3Cg id='logos' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Group' transform='translate(-143.000000, -251.000000)'%3E%3Cg id='Group-2' transform='translate(0.000000, 251.000000)'%3E%3Cg id='Flux-Logo' transform='translate(143.000000, 0.000000)'%3E%3Cg id='Flux-Logo-New' transform='translate(70.000000, 70.000000) rotate(90.000000) translate(-70.000000, -70.000000) '%3E%3Ccircle id='Oval' fill='%23FFFFFF' cx='70' cy='70' r='70'%3E%3C/circle%3E%3Crect id='Rectangle' fill='%230F0E25' transform='translate(70.000000, 83.000000) rotate(90.000000) translate(-70.000000, -83.000000) ' x='57' y='50' width='26' height='66' rx='13'%3E%3C/rect%3E%3Cpath d='M50,30 C57.1797017,30 63,35.8202983 63,43 L63,96 L63,96 L50,96 C42.8202983,96 37,90.1797017 37,83 L37,43 C37,35.8202983 42.8202983,30 50,30 Z' id='Rectangle' fill='%230F0E25'%3E%3C/path%3E%3Cpath d='M63,44 L76,44 C83.1797017,44 89,49.8202983 89,57 L89,97 C89,104.179702 83.1797017,110 76,110 C68.8202983,110 63,104.179702 63,97 L63,44 L63,44 Z' id='Rectangle' fill='url(%23radialGradient-1)'%3E%3C/path%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '3ea8ea4237344c9931214796d9417af1a1180770.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'nUSDO',\n symbol: 'nUSDO',\n icon:\n 'data:image/png;base64,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',\n reference: '',\n reference_hash: '',\n decimals: 8,\n id: 'v3.oin_finance.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'oinfinance',\n symbol: 'OIN',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 974.66 974.66'%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bisolation:isolate;%7D.cls-2%7Bfill:%235a8dff;%7D.cls-3%7Bfill:%23fff;%7D.cls-4,.cls-5%7Bfill:%231b57f6;%7D.cls-5%7Bmix-blend-mode:multiply;%7D%3C/style%3E%3C/defs%3E%3Cg class='cls-1'%3E%3Cg id='图层_1' data-name='图层 1'%3E%3Ccircle class='cls-2' cx='487.33' cy='484.76' r='473.82'/%3E%3Ccircle class='cls-3' cx='487.33' cy='484.76' r='358.99'/%3E%3Cpath class='cls-4' d='M487.33,98.08c-213.55,0-386.67,173.12-386.67,386.68S273.78,871.43,487.33,871.43,874,698.31,874,484.76,700.88,98.08,487.33,98.08ZM368.59,297.83a9,9,0,0,1,12.71-.14,287,287,0,0,0,137.53,75,110.56,110.56,0,0,1,51.78,28.2,9,9,0,0,1-12.49,12.93,92.54,92.54,0,0,0-43.3-23.61,304.9,304.9,0,0,1-146.09-79.66A9,9,0,0,1,368.59,297.83Zm216.7,197.36a9,9,0,0,1,17.93,1.3c-1.86,25.6-15.92,49.6-38.58,65.86-18.31,13.13-40.08,19.87-63.28,19.87a130.41,130.41,0,0,1-32.7-4.3,9,9,0,0,1,4.52-17.4c29.91,7.76,58.67,3.23,81-12.78C572.48,534.61,583.82,515.45,585.29,495.19Zm-9.7-47.57a15.39,15.39,0,1,1,12.8,17.6A15.39,15.39,0,0,1,575.59,447.62Zm-244-118.07a9,9,0,0,1,12.71,0,335.48,335.48,0,0,0,163.36,90.53c30.07,6.9,50.7,33.19,48,61.16-1.64,17.07-9.08,30.42-21.52,38.59-8.23,5.41-18.1,8.14-28.9,8.14a76.36,76.36,0,0,1-23.39-3.91,9,9,0,1,1,5.52-17.1c14.54,4.69,27.64,3.93,36.9-2.15,7.73-5.08,12.39-13.82,13.49-25.29,2-20.88-15.76-37.71-34.1-41.92a353.42,353.42,0,0,1-172.1-95.35A9,9,0,0,1,331.59,329.55Zm-30,41.34a9,9,0,0,1,12.71-.23c36.29,35,81.18,62.68,133.43,82.22a9,9,0,0,1-3.15,17.41,8.89,8.89,0,0,1-3.14-.58c-54.58-20.41-101.55-49.38-139.62-86.11A9,9,0,0,1,301.56,370.89ZM452.39,512.8a15.39,15.39,0,1,1-12.8-17.6A15.38,15.38,0,0,1,452.39,512.8ZM278.9,429.48a9,9,0,0,1,12.54-2.07c38.33,27.47,67.76,43.32,105.66,61.43a9,9,0,1,1-7.75,16.21c-38.8-18.53-69-34.79-108.38-63A9,9,0,0,1,278.9,429.48Zm-4.46,60.34A9,9,0,0,1,287,487.67c45.31,32,91.6,55,137.57,68.37a9,9,0,0,1-2.5,17.62,8.76,8.76,0,0,1-2.51-.36c-47.9-13.9-96-37.78-142.94-70.95A9,9,0,0,1,274.44,489.82Zm18.28,73.95a9,9,0,0,1,12.38-2.89c44.19,27.46,93.91,45,123.06,51.75,27.43,6.32,56.78,9,65.69,9,77.91,0,141.29-63.38,141.29-141.29,0-65.78-46.6-123.81-110.81-138L516,340.57l0-.24a257.48,257.48,0,0,1-100.58-53,9,9,0,1,1,11.69-13.66A239.17,239.17,0,0,0,528.3,324.87l8.22,1.9,0,.16c68.06,19,116.62,82.18,116.62,153.46,0,87.82-71.45,159.27-159.27,159.27-9.61,0-40.9-2.87-69.72-9.51-30.5-7-82.46-25.38-128.52-54A9,9,0,0,1,292.72,563.77ZM493.85,688.36l-9-.07c-5.35-.12-10.74-.42-16.1-.9a302.94,302.94,0,0,1-109.22-31.85,9,9,0,1,1,8.2-16,284.85,284.85,0,0,0,102.64,29.94,225.63,225.63,0,0,0,23.34.87l7.29-.11c101.46-3.78,182.84-87.49,182.84-189.86,0-89.16-63.2-167.31-150.26-185.83l-.12,0-.11,0a206.73,206.73,0,0,1-49.14-18.68A9,9,0,0,1,492.69,260,188.85,188.85,0,0,0,537.56,277h0c95.18,20.37,164.23,105.85,164.23,203.35C701.82,595.07,608.53,688.36,493.85,688.36Z'/%3E%3Cpath class='cls-5' d='M144.68,484.76c0-206.19,161.39-374.67,364.73-386-7.27-.41-14.58-.64-21.94-.64-213.56,0-386.68,173.12-386.68,386.68S273.91,871.43,487.47,871.43c7.36,0,14.67-.23,21.94-.64C306.07,859.42,144.68,690.94,144.68,484.76Z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 8,\n id: '9aeb50f542050172359a0e1a25a9933bc8c01259.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Myria',\n symbol: 'MYRIA',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNjAwIj48ZGVmcz48Y2xpcFBhdGggaWQ9ImNsaXAtcGF0aCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtLjEzKSI+PHBhdGggc3R5bGU9ImZpbGw6bm9uZSIgZD0iTTAgMGg2MDB2NjAwSDB6Ii8+PC9jbGlwUGF0aD48c3R5bGU+LmNscy00e2ZpbGw6I2ZmZn08L3N0eWxlPjwvZGVmcz48ZyBzdHlsZT0iY2xpcC1wYXRoOnVybCgjY2xpcC1wYXRoKSI+PHBhdGggZD0iTTYwMCAzMDAuMTNjMCAxNjUuNjktMTM0LjMxIDMwMC0zMDAgMzAwUzAgNDY1LjgxIDAgMzAwLjEzIDEzNC4zMS4xMyAzMDAgLjEzczMwMCAxMzQuMzEgMzAwIDMwMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtLjEzKSIgc3R5bGU9ImZpbGw6Izg2MmFlOSIvPjxwYXRoIGNsYXNzPSJjbHMtNCIgZD0iTTQ3MS4xMSA0MjEuMjFhMTcuNzUgMTcuNzUgMCAwIDAgMi4wNy04IDcuMjQgNy4yNCAwIDAgMCAwLTEuMVYyNjMuNDdhOTUuMzYgOTUuMzYgMCAwIDAtMTQyLjYxLTgxLjcybC0xLjQ5Ljg1LTEyNi42NCA3My4xMi0xLjExLjY1YTE4LjE4IDE4LjE4IDAgMCAwLTUuNzcgNS43NWMtLjE1LjIxLS4yNi40MS0uMzkuNjNhMTguMzMgMTguMzMgMCAwIDAgNi43MSAyNWwyNDMuODQgMTQwLjgzYTE4LjMzIDE4LjMzIDAgMCAwIDI1LTYuNzFjLjEzLS4yMi4yNC0uNDIuMzUtLjY1TTIxMi41NCAyNzEuOTNsMTQuNzQtOC41MyA2Mi44NC0zNi4yNiA0OS4zOC0yOC41MSAxLjYtLjkxYTc2LjM0IDc2LjM0IDAgMCAxIDExMyA2NS4yNnYxNDguNDNaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC0uMTMpIi8+PHBhdGggY2xhc3M9ImNscy00IiBkPSJNMTI4Ljg5IDQyMS4yMWExNy43NyAxNy43NyAwIDAgMS0yLjA4LTggNy41IDcuNSAwIDAgMSAwLTEuMVYyNjMuNDdhOTUuMzYgOTUuMzYgMCAwIDEgMTQyLjYxLTgxLjcybDEuNDkuODUgMTI2LjY1IDczLjExIDEuMTEuNjVhMTguMTcgMTguMTcgMCAwIDEgNS43NyA1Ljc1Yy4xNS4yMS4yNi40MS4zOS42M2ExOC4zMyAxOC4zMyAwIDAgMS02LjcxIDI1TDE1NC4yOCA0MjguNThhMTguMzMgMTguMzMgMCAwIDEtMjUtNi43MWMtLjEzLS4yMi0uMjQtLjQyLS4zNS0uNjVtMjU4LjUzLTE0OS4yOS0xNC43NC04LjUzLTYyLjgzLTM2LjI2LTQ5LjM5LTI4LjUyLTEuNi0uOTFhNzYuMzQgNzYuMzQgMCAwIDAtMTEzIDY1LjI2djE0OC40NFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLS4xMykiLz48L2c+PC9zdmc+',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'myriadcore.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'xRef Finance Token',\n symbol: 'xREF',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNjIiIHZpZXdCb3g9IjAgMCA1NiA2MiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEuODU2OTMgMTcuODg1NkMxLjg1NjkzIDE2LjAyNzggMi44ODY5MiAxNC4zMjMyIDQuNTMxNTEgMTMuNDU5MkwyNS45MjE2IDIuMjIxNzJDMjcuMzc3NSAxLjQ1NjgzIDI5LjExNjUgMS40NTY4MyAzMC41NzI0IDIuMjIxNzJMNTEuOTYyNCAxMy40NTkyQzUzLjYwNyAxNC4zMjMyIDU0LjYzNyAxNi4wMjc4IDU0LjYzNyAxNy44ODU2VjQ1LjYzMDRDNTQuNjM3IDQ3LjYwMjEgNTMuNDc4MiA0OS4zODk4IDUxLjY3ODMgNTAuMTk0N0wzMC4yODgyIDU5Ljc2MDZDMjguOTg5NCA2MC4zNDE0IDI3LjUwNDYgNjAuMzQxNSAyNi4yMDU3IDU5Ljc2MDZMNC44MTU3IDUwLjE5NDdDMy4wMTU3NCA0OS4zODk4IDEuODU2OTMgNDcuNjAyMSAxLjg1NjkzIDQ1LjYzMDRMMS44NTY5MyAxNy44ODU2WiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzEyNDYxXzIwNzUpIiBzdHJva2U9IiMwMEM2QTIiIHN0cm9rZS13aWR0aD0iMiIvPgo8cGF0aCBkPSJNMTMuNjk3OCAyMC4zMzJMMjguMjQ3MSAxNEwyOC4yMjAyIDMwLjU0MTdMMjAuMjgwMyAyMy43MTE2TDEyLjMxMzUgMzAuOTI5NVYyMi4zNjU0QzEyLjMxNTIgMjEuNDkyMiAxMi44NTM4IDIwLjY5OTMgMTMuNjk3OCAyMC4zMzJaIiBmaWxsPSIjMDBDNkEyIiBmaWxsLW9wYWNpdHk9IjAuNSIvPgo8cGF0aCBkPSJNMTQuMTAyMyA0Mi43NjQ1TDI4LjI0NzEgNDYuODYyNkwyOC4yMjAyIDM0LjU5NDRMMjAuMjc5NCAyNy45NDE0TDEyLjMxMzUgMzQuOTcyMlY0MC41Mjc0QzEyLjMxMzUgNDEuNTUxNSAxMy4wMzY3IDQyLjQ1NTkgMTQuMTAyMyA0Mi43NjQ1WiIgZmlsbD0iIzAwQzZBMiIgZmlsbC1vcGFjaXR5PSIwLjUiLz4KPHBhdGggZD0iTTQzLjY0NDUgNDIuNzYzM0wyOC4yNzQ0IDQ2Ljg2MzJMMjguMjQ2OCAzNC41MTU3TDQzLjIyMSAyMi40NjQ4QzQzLjIyMSAyMi40NjQ4IDQ1Ljc5MyAyNC4zOTk2IDQ1LjAzNzMgMjcuODE5NkM0My43MDQ4IDMzLjg1MTEgMzUuMTc5NiAzNS45ODY5IDM1LjE3OTYgMzUuOTg2OUw0My45MDk2IDQxLjE1NjFDNDQuNjE1NSA0MS41NzggNDQuNDU1NCA0Mi41NDcgNDMuNjQ0NSA0Mi43NjMzWiIgZmlsbD0iIzQ1RkZERSIvPgo8cGF0aCBkPSJNMzguNTkwMyAxOC45NzkzTDI4LjI3MzQgMTRMMjguMjQ2OCAzMC40MzE1TDQwLjY5NSAyMC4zNTA5QzQwLjY5NSAyMC4zNTA5IDQwLjQyNzEgMjAuMDU5NyAzOS42OTAxIDE5LjU4MDVDMzkuNDI4OSAxOS40MTE0IDM4LjU5MDMgMTguOTc5MyAzOC41OTAzIDE4Ljk3OTNaIiBmaWxsPSIjNDVGRkRFIi8+CjxwYXRoIGQ9Ik00MC41NTEgMTYuMDEwMUw0Ni42NjAyIDE4LjI4MDVDNDYuOTY3NSAxOC4zOTQzIDQ3LjE2OCAxOC42NjU2IDQ3LjE2OCAxOC45NjVWMjMuMTIwN0M0Ny4xNjggMjMuNDM4OCA0Ni43MjYgMjMuNTgyMiA0Ni41MDQyIDIzLjMzNDNMNDAuMjU1MyAxNi4zNjg3QzQwLjA4OTMgMTYuMTgzMSA0MC4zMDYyIDE1LjkxODEgNDAuNTUxIDE2LjAxMDFaIiBmaWxsPSIjNDVGRkRFIi8+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMTI0NjFfMjA3NSIgeDE9IjI4LjI0NyIgeTE9IjEiIHgyPSIyOC4yNDciIHkyPSI2MC42NzM1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiMwMTEzMjAiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDAxMzIwIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'xtoken.ref-finance.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Solana',\n symbol: 'SOL',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxsaW5lYXJHcmFkaWVudCBpZD0iYSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSI1MCIgeDI9IjUwIiB5MT0iMjciIHkyPSI3NCI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMTRlNmFkIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYTk2NGRlIi8+PC9saW5lYXJHcmFkaWVudD48Y2xpcFBhdGggaWQ9ImIiPjxwYXRoIGQ9Im0wIDBoMTAwdjEwMGgtMTAweiIvPjwvY2xpcFBhdGg+PGcgY2xpcC1wYXRoPSJ1cmwoI2IpIj48cGF0aCBkPSJtNTAgMGM5Ljg4OTEgMCAxOS41NTYxIDIuOTMyNDUgMjcuNzc4NSA4LjQyNjUyIDguMjIyNSA1LjQ5NDA4IDE0LjYzMTEgMTMuMzAyOTggMTguNDE1NSAyMi40MzkyOHM0Ljc3NSAxOS4xODk3IDIuODQ1MyAyOC44ODg3Yy0xLjkyOTMgOS42OTkxLTYuNjkxMyAxOC42MDgyLTEzLjY4NCAyNS42MDA4LTYuOTkyNiA2Ljk5MjctMTUuOTAxNyAxMS43NTQ3LTI1LjYwMDggMTMuNjg0LTkuNjk5IDEuOTI5Ny0xOS43NTI0LjkzOTEtMjguODg4Ny0yLjg0NTNzLTE2Ljk0NTItMTAuMTkzLTIyLjQzOTI4LTE4LjQxNTVjLTUuNDk0MDctOC4yMjI0LTguNDI2NTItMTcuODg5NC04LjQyNjUyLTI3Ljc3ODUgMC0xMy4yNjA4IDUuMjY3ODQtMjUuOTc4NSAxNC42NDQ3LTM1LjM1NTMgOS4zNzY4LTkuMzc2ODYgMjIuMDk0NS0xNC42NDQ3IDM1LjM1NTMtMTQuNjQ0N3oiIGZpbGw9IiMwMDAiLz48ZyBmaWxsPSJ1cmwoI2EpIiBmaWxsLW9wYWNpdHk9Ii45MiI+PHBhdGggZD0ibTMwLjM4MDYgNjIuNzg4OWMuMzEzMS0uMzIzNC44MzQ5LS41MzkgMS4zNTY3LS41MzloNDYuMjMwN2MuODM0OSAwIDEuMjUyMyAxLjA3NzkuNjI2MiAxLjcyNDdsLTkuMTgzNiA5LjQ4NjRjLS4zMTMuMzIzNC0uODM0OC41MzktMS4zNTY2LjUzOWgtNDYuMTI2NGMtLjgzNDggMC0xLjI1MjItMS4wNzgtLjYyNjEtMS43MjQ4eiIvPjxwYXRoIGQ9Im0zMC4zODA2IDI3LjUzOWMuMzEzMS0uMzIzNC44MzQ5LS41MzkgMS4zNTY3LS41MzloNDYuMjMwN2MuODM0OSAwIDEuMjUyMyAxLjA3OC42MjYxIDEuNzI0OGwtOS4xODM1IDkuNDg2M2MtLjMxMzEuMzIzNC0uODM0OC41MzktMS4zNTY2LjUzOWgtNDYuMTI2NGMtLjgzNDkgMC0xLjI1MjMtMS4wNzgtLjYyNjEtMS43MjQ4eiIvPjxwYXRoIGQ9Im02OS41MTUgNDUuMDAxOGMtLjMxMzEtLjMyMzQtLjgzNDktLjUzOS0xLjM1NjctLjUzOWgtNDYuMjMwN2MtLjgzNDggMC0xLjI1MjIgMS4wNzgtLjYyNjEgMS43MjQ4bDkuMTgzNSA5LjQ4NjRjLjMxMzEuMzIzMy44MzQ5LjUzODkgMS4zNTY3LjUzODloNDYuMjMwNmMuODM0OSAwIDEuMjUyNC0xLjA3OC42MjYyLTEuNzI0OHoiLz48L2c+PC9nPjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'sol.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'TerraUSD',\n symbol: 'UST',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTgxLjA5NiAxMy43MjItLjAxLS4wMS4wMTQtLjAwOGE0NC4xNzQgNDQuMTc0IDAgMCAwIC0yOC43NjUtMTAuNTc0IDQ0LjE2NyA0NC4xNjcgMCAwIDAgLTE4LjAxIDMuODI1Yy0zLjcwNSAxLjU2NS02LjcxNSAzLjYzNS05LjE5NSA2Ljg4NS0xMi43NCAxNi44MyAyOS45NiAyOS4wNiA1Mi43OSAyOS4xMDQgMTAuNDkyIDcuNTI4IDEzLjQ0Ni0yMS4yMzYgMy4xNzctMjkuMjIyeiIgZmlsbD0iIzBkM2NhNCIvPjxwYXRoIGQ9Im0zNi44OTMgMTQuMDYzYy01Ljg2MyA4LjgxNi0yNS40MDMgMTUuMDI3LTI4LjYxNSAxNC4wNTdsLS4wMTktLjA0Yy4xMzItLjI2OC4yNjgtLjUzMi40LS43OTVhNDYuNjcyIDQ2LjY3MiAwIDAgMSA4LjQ4LTExLjU4IDQ3LjIxIDQ3LjIxIDAgMCAxIDkuMTg1LTcuMTUxYzIuNzM3LTEuNTg0IDUuNTM2LTEuNjg4IDYuNDU4LTEuNzIgOC43MDguMTc3IDQuMTYgNy4xNiA0LjExIDcuMjI5em0tNC44MDYgNjIuMzAzYy40MTggMi43NzItLjAwOSAxMy43MTMtLjU4IDE0LjYzNC0uNDg2LjAzMi0xLjUwMy4wOTUtNC40NDgtMS41NTdhNDYuODI3IDQ2LjgyNyAwIDAgMSAtOS45Mi03LjU3MyA0Ni45NTIgNDYuOTUyIDAgMCAxIC04LjQ4LTExLjU4IDQ2LjUyNCA0Ni41MjQgMCAwIDEgLTUuMjIzLTIxLjVjMC0yLjU4MS4yMDgtNS4xMTguNjEyLTcuNTg3YTQ2LjUxMSA0Ni41MTEgMCAwIDEgMi4yNjUtOC41OThjMy4zNzYgNC40ODMgNy4yNzggOC41NDQgMTAuNTk1IDEzLjA3MyAzLjE1OSA0LjMxNSA3LjUwNiAxMS4zNDQgOC4zODYgMTIuODUgNS41IDkuMzE2IDYuMzc2IDE1LjA3NCA2Ljc5MyAxNy44Mzh6bS0zLjMxMi0zOC44NTdjLTIuMDA2LTE1LjMxIDI5LjA1NS0yNS45NzkgNDIuNzA1LTI2LjM4MiAxLjYzOC4wMTggNi42MTYuMDc3IDkuNTI1IDIuNDM2IDUzLjQ5NSA1MC45MzctNDYuOTU3IDY0LjI0LTUyLjIzIDIzLjk0N3oiIGZpbGw9IiM1NDk0ZjgiLz48cGF0aCBkPSJtMjAuNDU3IDkyLjM1YzAgMS44MjUgMS4yNyAzLjMwNCAyLjg0NSAzLjMxMyAzNy40OTYuMjU5IDczLjY5NC0xLjQ2IDczLjY5NC03LjA4MyAwLTE3LjAwNy03Ni41MzkgMy43Ny03Ni41MzkgMy43N3oiIGZpbGw9IiM3NjAxMDEiLz48cGF0aCBkPSJtMjMuMzIgNDQuMTg3YTIuODYzIDIuODYzIDAgMCAwIC0yLjg2MyAyLjg2M3Y0NS4zYzAgMS41NzQgMS4yNyAyLjg1IDIuODQ1IDIuODU4IDM3LjQ5Ni0uMjc2IDczLjc0LTEyLjY4NyA3My42OTQtNi42M3YtNTEuMDI0Yy4wNDUtNi4wNTMtMzYuMTg5IDYuMzUzLTczLjY3NiA2LjYzNHoiIGZpbGw9IiNkZTMwMzAiLz48cGF0aCBkPSJtODQgODBjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ny0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMy02My41IDcuNXYtNGMxMS41IDAgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzJjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ny0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMy02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzJjOC44LTEuNiAxMi4zMzMtLjMzNCAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2OC0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMi02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzNjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ny0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMy02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzNjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ni0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzNC02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzJjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ny0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMy02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0ibTI4LjU5MyA3MS41NGEyMDQuMTEyIDIwNC4xMTIgMCAwIDAgNy4wNjYtLjM3NiAyNTEuNzQ1IDI1MS43NDUgMCAwIDAgNi43MDYtLjU3MmMxLjEzLS4xMDkgMi4yNy0uMjIyIDMuNDQ1LS4zNSAxLjE3LS4xMjYgMi4zNjgtLjI1OCAzLjYxMi0uNDEyIDEuMjQzLS4xNSAyLjUzNi0uMzEzIDMuODg5LS40OSAxLjM1Mi0uMTczIDIuNzYzLS4zNzIgNC4yMzgtLjU5di0yNy41M2MtMTAuNTMyIDEuNTU2LTIyLjMxNyAyLjg3Mi0zNC4yMjkgMi45NThhMi44NjMgMi44NjMgMCAwIDAgLTIuODYzIDIuODY0djI0LjY1M2MxLjQ4NCAwIDIuODk1LS4wMTggNC4yNDctLjA1IDEuMzUzLS4wMTggMi42NDYtLjA2IDMuODktLjEwNXoiIGZpbGw9IiMxYTNhYjkiLz48cGF0aCBkPSJtMjMuMDUzIDQ2LjQ4IDEuMjIxIDEuODYzLTIuMjIzLjEyNiAxLjAwMi0xLjk4OHptNS4xMzUtLjI5IDEuMjIgMS44NjItMi4yMjIuMTI2em01LjEzNS0uMjkyIDEuMjIgMS44NjItMi4yMjMuMTI2em01LjEzNS0uMjkxIDEuMjIgMS44NjItMi4yMjMuMTI2em01LjEzNC0uMjkyIDEuMjIxIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MSAxLjIyMSAxLjg2Mi0yLjIyMy4xMjZ6bTUuMTMzLS4yOTIgMS4yMiAxLjg2Mi0yLjIyMi4xMjZ6bS0yOC4wNDcgNS4wMjYgMS4yMiAxLjg2Mi0yLjIyMi4xMjd6bTUuMTM1LS4yOTEgMS4yMiAxLjg2My0yLjIyMy4xMjZ6bTUuMTM1LS4yOTIgMS4yMiAxLjg2My0yLjIyMy4xMjZ6bTUuMTM0LS4yOTEgMS4yMjEgMS44NjItMi4yMjMuMTI3em01LjEzNS0uMjkyIDEuMjIxIDEuODYzLTIuMjIzLjEyNnptNS4xMzUtLjI5MSAxLjIyIDEuODYyLTIuMjIzLjEyN3ptLTI4LjA0NyA1LjAyNiAxLjIyIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MiAxLjIyIDEuODYzLTIuMjIzLjEyNnptNS4xMzUtLjI5MiAxLjIyIDEuODYzLTIuMjIzLjEyNiAxLjAwMi0xLjk4OXptNS4xMzQtLjI5IDEuMjIxIDEuODYyLTIuMjIzLjEyNiAxLjAwMi0xLjk4OXptNS4xMzUtLjI5MyAxLjIyIDEuODYzLTIuMjIyLjEyNnptNS4xMzUtLjI5IDEuMjIgMS44NjItMi4yMjMuMTI2em01LjEzMi0uMjkyIDEuMjIxIDEuODYyLTIuMjIzLjEyNiAxLjAwMi0xLjk4OXptLTI4LjA0MiA1LjAyNiAxLjIyIDEuODYyLTIuMjIzLjEyNyAxLjAwMy0xLjk5em01LjEzNC0uMjkxIDEuMjIxIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MyAxLjIyMSAxLjg2My0yLjIyMy4xMjd6bTUuMTM1LS4yOSAxLjIyIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MiAxLjIyIDEuODYyLTIuMjIzLjEyNnptNS4xMzQtLjI5MSAxLjIyMSAxLjg2Mi0yLjIyMy4xMjZ6bS0yOC4wNDggNS4wMjYgMS4yMiAxLjg2My0yLjIyMy4xMjZ6bTUuMTM0LS4yOTEgMS4yMjEgMS44NjMtMi4yMjMuMTI2em01LjEzNS0uMjkyIDEuMjIxIDEuODYzLTIuMjIzLjEyNnptNS4xMzUtLjI5IDEuMjIgMS44NjItMi4yMjMuMTI2IDEuMDAzLTEuOTg5em01LjEzNS0uMjkzIDEuMjIgMS44NjMtMi4yMjMuMTI2em01LjEzNC0uMjkxIDEuMjIxIDEuODYyLTIuMjIzLjEyN3ptNS4xMzMtLjI5MiAxLjIyMSAxLjg2My0yLjIyMy4xMjZ6bS0zMC42NTUgOS4wNDEgMS4yMjIgMS44NjMtMi4yMjMuMTI2IDEuMDAyLTEuOTg5em01LjEzNi0uMjkxIDEuMjIgMS44NjMtMi4yMjMuMTI2em01LjEzNC0uMjkyIDEuMjIxIDEuODYzLTIuMjIzLjEyNnptNS4xMzUtLjI5MSAxLjIyMSAxLjg2My0yLjIyMy4xMjZ6bTUuMTM1LS4yOTEgMS4yMjEgMS44NjItMi4yMjMuMTI2IDEuMDAyLTEuOTg5em01LjEzNS0uMjkyIDEuMjIgMS44NjMtMi4yMjMuMTI2em01LjEzMy0uMjkyIDEuMjIgMS44NjMtMi4yMjMuMTI2em0tMjguMTk2LTIuMjY2IDEuMjIxIDEuODYzLTIuMjIzLjEyNiAxLjAwMi0xLjk4OHptNS4xMzUtLjI5IDEuMjIxIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MiAxLjIyIDEuODYyLTIuMjIzLjEyNnptNS4xMzQtLjI5MSAxLjIyMSAxLjg2Mi0yLjIyMy4xMjZ6bTUuMTM1LS4yOTIgMS4yMjEgMS44NjItMi4yMjMuMTI2em01LjEzNS0uMjkyIDEuMjIxIDEuODYzLTIuMjIzLjEyNnoiIGZpbGw9IiNmZmYiLz48L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'ust.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Celo',\n symbol: 'CELO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZD0ibTAgMGgxMDB2MTAwaC0xMDB6Ii8+PC9jbGlwUGF0aD48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Im01MCAwYzkuODg5MSAwIDE5LjU1NjEgMi45MzI0NSAyNy43Nzg1IDguNDI2NTIgOC4yMjI1IDUuNDk0MDggMTQuNjMxMSAxMy4zMDI5OCAxOC40MTU1IDIyLjQzOTI4czQuNzc1IDE5LjE4OTcgMi44NDUzIDI4Ljg4ODdjLTEuOTI5MyA5LjY5OTEtNi42OTEzIDE4LjYwODItMTMuNjg0IDI1LjYwMDgtNi45OTI2IDYuOTkyNy0xNS45MDE3IDExLjc1NDctMjUuNjAwOCAxMy42ODQtOS42OTkgMS45Mjk3LTE5Ljc1MjQuOTM5MS0yOC44ODg3LTIuODQ1M3MtMTYuOTQ1Mi0xMC4xOTMtMjIuNDM5MjgtMTguNDE1NWMtNS40OTQwNy04LjIyMjQtOC40MjY1Mi0xNy44ODk0LTguNDI2NTItMjcuNzc4NSAwLTEzLjI2MDggNS4yNjc4NC0yNS45Nzg1IDE0LjY0NDctMzUuMzU1MyA5LjM3NjgtOS4zNzY4NiAyMi4wOTQ1LTE0LjY0NDcgMzUuMzU1My0xNC42NDQ3eiIgZmlsbD0iI2ZiY2M1YyIvPjxnIGZpbGw9IiNmZmYiPjxwYXRoIGQ9Im00My41NDIxIDczLjcyNDljMy40MDg1LjAwODMgNi43NDI5LS45OTQ4IDkuNTgxMS0yLjg4MjUgMi44MzgxLTEuODg3NiA1LjA1MjQtNC41NzQ4IDYuMzYyNi03LjcyMTVzMS42NTczLTYuNjExNC45OTc1LTkuOTU1NWMtLjY1OTktMy4zNDQtMi4yOTcxLTYuNDE3Mi00LjcwNDMtOC44MzAzLTIuNDA3My0yLjQxMzItNS40NzY0LTQuMDU3OS04LjgxODktNC43MjU5LTMuMzQyNC0uNjY4MS02LjgwNzktLjMyOTQtOS45NTc4Ljk3My0zLjE0OTkgMS4zMDI1LTUuODQyNSAzLjUxMDItNy43MzcxIDYuMzQzOC0xLjg5NDYgMi44MzM1LTIuOTA1OSA2LjE2NTQtMi45MDU5IDkuNTc0IDAgNC41NjEgMS44MDkgOC45MzU5IDUuMDMwMiAxMi4xNjQ5IDMuMjIxMiAzLjIyOTEgNy41OTE2IDUuMDQ4OCAxMi4xNTI2IDUuMDZ6bTAgNi4yNzUxYy00LjY0OTYuMDA4My05LjE5NzMtMS4zNjI5LTEzLjA2NzMtMy45NC0zLjg3MDEtMi41NzcyLTYuODg4Ny02LjI0NDQtOC42NzM4LTEwLjUzNzgtMS43ODUyLTQuMjkzMy0yLjI1NjYtOS4wMTk3LTEuMzU0Ni0xMy41ODFzMy4xMzY5LTguNzUyNSA2LjQyMTctMTIuMDQzM2MzLjI4NDgtMy4yOTA3IDcuNDcyMS01LjUzMzEgMTIuMDMxOC02LjQ0MzMgNC41NTk3LS45MTAxIDkuMjg2OS0uNDQ3MiAxMy41ODM0IDEuMzMwMnM3Ljk2OTIgNC43ODk0IDEwLjU1MzMgOC42NTQ5YzIuNTg0IDMuODY1NSAzLjk2MzQgOC40MTA2IDMuOTYzNCAxMy4wNjAzLjAwNTUgMy4wODQtLjU5NzIgNi4xMzg5LTEuNzczNiA4Ljk4OTgtMS4xNzYzIDIuODUwOS0yLjkwMzQgNS40NDE5LTUuMDgyMiA3LjYyNDZzLTQuNzY2NiAzLjkxNDQtNy42MTU0IDUuMDk1OS01LjkwMjYgMS43ODk3LTguOTg2NyAxLjc4OTd6Ii8+PHBhdGggZD0ibTU2LjUgNjAuNzI0OWMzLjQwODYuMDA4MyA2Ljc0MjktLjk5NDggOS41ODExLTIuODgyNHM1LjA1MjUtNC41NzQ5IDYuMzYyNi03LjcyMTZjMS4zMTAyLTMuMTQ2NyAxLjY1NzMtNi42MTEzLjk5NzUtOS45NTU0LS42NTk5LTMuMzQ0MS0yLjI5NzEtNi40MTcyLTQuNzA0My04LjgzMDQtMi40MDczLTIuNDEzMS01LjQ3NjQtNC4wNTc4LTguODE4OC00LjcyNTktMy4zNDI1LS42NjgtNi44MDgtLjMyOTQtOS45NTc5Ljk3MzEtMy4xNDk5IDEuMzAyNC01Ljg0MjUgMy41MTAyLTcuNzM3MSA2LjM0MzdzLTIuOTA1OSA2LjE2NTQtMi45MDU5IDkuNTc0YzAgNC41NjEgMS44MDkgOC45MzU5IDUuMDMwMiAxMi4xNjVzNy41OTE2IDUuMDQ4OCAxMi4xNTI2IDUuMDU5OXptMCA2LjI3NTFjLTQuNjQ3OSAwLTkuMTkxMy0xLjM3ODItMTMuMDU1OS0zLjk2MDUtMy44NjQ1LTIuNTgyMi02Ljg3NjYtNi4yNTI0LTguNjU1My0xMC41NDY0LTEuNzc4Ni00LjI5NDEtMi4yNDQtOS4wMTkyLTEuMzM3Mi0xMy41Nzc3LjkwNjctNC41NTg2IDMuMTQ0OS04Ljc0NTkgNi40MzE0LTEyLjAzMjRzNy40NzM4LTUuNTI0NyAxMi4wMzI0LTYuNDMxNGM0LjU1ODUtLjkwNjggOS4yODM2LS40NDE0IDEzLjU3NzcgMS4zMzcyIDQuMjk0IDEuNzc4NyA3Ljk2NDIgNC43OTA4IDEwLjU0NjQgOC42NTUzIDIuNTgyMiAzLjg2NDYgMy45NjA1IDguNDA4IDMuOTYwNSAxMy4wNTU5LS4wMTExIDYuMjI5Mi0yLjQ5MDYgMTIuMi02Ljg5NTMgMTYuNjA0N3MtMTAuMzc1NSA2Ljg4NDItMTYuNjA0NyA2Ljg5NTN6Ii8+PHBhdGggZD0ibTU3LjY4ODkgNjcuODU3MWMxLjYyMzQtMS45NzM4IDIuNzg2LTQuMjg0OCAzLjQwMzQtNi43NjQ3IDIuNDczNy0uNjM0MSA0Ljc4MTItMS43OTUgNi43NjQ3LTMuNDAzNC0uMDk4MyAyLjg5MDUtLjcyNDkgNS43Mzg2LTEuODQ4NyA4LjQwMzQtMi42NDQxIDEuMDg1MS01LjQ2MjUgMS42ODMtOC4zMTk0IDEuNzY0N3ptLTE3LjQzNy0yNy42MDVjLTIuNDM1NC42MzQ2LTQuNzAxNiAxLjc5NjQtNi42Mzg2IDMuNDAzMy4wNzI1LTIuODkzNi43MDAxLTUuNzQ2NCAxLjg0ODctOC40MDMzIDIuNjU4NS0xLjE0MzcgNS41MTA0LTEuNzcxMSA4LjQwMzQtMS44NDg4LTEuNjIzNCAxLjk3MzgtMi43ODYgNC4yODQ4LTMuNDAzNCA2Ljc2NDd6Ii8+PC9nPjwvZz48L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'celo.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Celo Dollar',\n symbol: 'cUSD',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTEwMCA1MGMwLTI3LjYxNDItMjIuMzg1OC01MC01MC01MHMtNTAgMjIuMzg1OC01MCA1MCAyMi4zODU4IDUwIDUwIDUwIDUwLTIyLjM4NTggNTAtNTB6IiBmaWxsPSIjNDVjZDg1Ii8+PGcgZmlsbD0iI2ZmZiI+PHBhdGggZD0ibTY5Ljg4MDUgNjIuNjQzOGMtMS41NjcxIDMuMzkzMS0zLjkzNzUgNi4zNTMyLTYuOTA2MSA4LjYyNDEtMi45Njg1IDIuMjcwOC02LjQ0NTggMy43ODQxLTEwLjEzMDcgNC40MDg3LTMuNjg1LjYyNDYtNy40NjY3LjM0MTctMTEuMDE3Ny0uODI0MS0zLjU1MTEtMS4xNjU4LTYuNzY0Ni0zLjE3OTQtOS4zNjIzLTUuODY2Ni0yLjU5NzgtMi42ODcxLTQuNTAxNS01Ljk2NjktNS41NDY1LTkuNTU1NC0xLjA0NDktMy41ODg1LTEuMTk5Ni03LjM3NzUtLjQ1MDctMTEuMDM5My43NDg5LTMuNjYxNyAyLjM3ODktNy4wODU3IDQuNzQ4OS05Ljk3NTggMi4zNzAxLTIuODkgNS40MDg3LTUuMTU4OSA4Ljg1MjktNi42MTAzbDIuMjY2OCA1LjM3OTJjLTIuNTcgMS4wODMxLTQuODM3NSAyLjc3NjEtNi42MDYgNC45MzI3LTEuNzY4NSAyLjE1NjUtMi45ODQ4IDQuNzExNS0zLjU0MzYgNy40NDM5LS41NTg5IDIuNzMyNC0uNDQzNSA1LjU1OTguMzM2MyA4LjIzNzYuNzc5OCAyLjY3NzcgMi4yMDAzIDUuMTI1MSA0LjEzODggNy4xMzAyIDEuOTM4NCAyLjAwNTIgNC4zMzYzIDMuNTA3OCA2Ljk4NjEgNC4zNzc3czUuNDcxNyAxLjA4MSA4LjIyMTUuNjE0OWMyLjc0OTctLjQ2NjEgNS4zNDQ0LTEuNTk1MyA3LjU1OTUtMy4yODk4IDIuMjE1Mi0xLjY5NDUgMy45ODQtMy45MDMzIDUuMTUzNC02LjQzNTNsNS45MTg5LjMwNDJ6Ii8+PHBhdGggZD0ibTU2LjEwNjEgMjQuNXYtNGg0LjUwMDV2NGMyIDAgNS4xNjY3LjY2NjcgNi41IDF2NC41Yy0xOS0zLTE1LjUwMTEgMy44NDYyLTggNSA2LjcyMTcgMS4wMzM5IDExIDIgMTEuNSA5IC40IDUuNi01LjgzMzMgNy42NjY3LTkgOHYzLjVoLTV2LTMuNWMtMi40IDAtNi42NjY3LTEuNjY2Ny04LjUtMi41di01LjVjNC41IDIuNSAxNyA0LjUgMTcgMHMtMTYuNTAxMS0zLTE4LjAwMDUtMTFjLTEuMDAyMy01LjM0NzUgNS4zMzMzLTcuODMzMyA5LTguNXoiLz48L2c+PC9zdmc+',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'cusd.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'ABR',\n symbol: 'ABR',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjEyMSIgdmlld0JveD0iMCAwIDEyMSAxMjEiIHdpZHRoPSIxMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48Y2lyY2xlIGN4PSI2MC41IiBjeT0iNjAuNSIgZmlsbD0iIzBlMGIwZiIgZmlsbC1ydWxlPSJub256ZXJvIiByPSI2MC41Ii8+PGNpcmNsZSBjeD0iNjAuNSIgY3k9IjYwLjUiIHI9IjYwIiBzdHJva2U9IiMyZDJjMmUiIHN0cm9rZS1vcGFjaXR5PSIuODEiLz48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iPjxwYXRoIGQ9Im04MS4xNjg3IDUyLjIxNDctMTEuNjUzLTExLjY1MjloLTE3LjY1NTlsLTUuNjQ5MyA1LjY0OTl2LTIwLjEyNzdoLTYuMDAzN3YzNS42NjQ4IDcuNzY4NmwxMS42NTMgMTEuNjUyOWgxNy42NTU5bDUuNjUwMi01LjY0OTl2MjAuMTI3N2g2LjM1NjN2LTMzLjU0NjJ6bS0xNC40NzgxIDIyLjk1MjZoLTExLjY1MjJsLTguNDc1My04LjQ3NDh2LTQuOTQzNy02LjcwOTJsOC40NzUzLTguNDc0OGgxMS42NTIybDguNDc1MyA4LjQ3NDh2Ny40MTU1IDQuMjM3NHoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJtMzEuNzMzNCA3Mi42OTUydi0zMi4xMzM3aC02LjAwMjh2MzQuOTU4NmwyMC40ODEgMjAuNDgwOGgyMC40ODAxdi02LjAwM2gtMTcuNjU1OXoiIGZpbGw9IiM2ZGQiLz48cGF0aCBkPSJtNTUuMDM4OCAyNS43MzA1djYuMDAzaDE3LjY1NTlsMTcuMzAyNCAxNy4zMDI3djMyLjEzMzdoNi4wMDI4di0zNC45NTg2bC0yMC40ODEtMjAuNDgwOHoiIGZpbGw9IiM2ZGQiLz48L2c+PC9nPjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'abr.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Utopia',\n symbol: 'UTO',\n icon:\n \"data:image/svg+xml,%3Csvg id='Layer_1' data-name='Layer 1' xmlns='http://www.w3.org/2000/svg' viewBox='-40 -40 600 600'%3E%3Cdefs%3E%3Cstyle%3E .cls-1%7Bfill:%239f9f9f%7D.cls-2%7Bfill:%23fefefe%7D.cls-4%7Bfill:%23030303%7D %3C/style%3E%3C/defs%3E%3Cpath d='M371.65 15v23.92l-.47.71C368.82 41.48 366 41 363.36 41q-36.94.09-73.88 0h-176c-3.06 0-6.31.67-9.1-1.37l-.47-.71V15ZM55.21 355.33H31.66a2.81 2.81 0 0 1-.26-.3.82.82 0 0 1-.13-.37v-24H6.67V136.41h24.6l.69.44c2 2.64 1.38 5.75 1.39 8.67q.07 73.11 0 146.2c0 12.44.26 12.68 12.64 12.76 3 0 6-.29 8.85 1a3 3 0 0 1 1.23 1.1 12.38 12.38 0 0 1 1.18 6.17q.1 18 0 36.05c0 2.09.17 4.28-1.36 6.06ZM420.4 452.82v23.51c-3.87.66-178.64.93-195 .29v-23.8l.47-.71c2.79-2 6-1.37 9.1-1.37q75.33-.09 150.68 0c9.25 0 18.49-.06 27.74 0 2.25 0 4.6-.25 6.54 1.37ZM176.66 428H128v-23.83H79.16v-24.9l.39-.66c1.9-1.69 4.27-1.4 6.51-1.42 10.55-.08 21.09 0 31.63-.05 6.6-.05 7.89-1.5 8.12-8.1.16-4.52-.77-9.14 1.06-13.53a2.94 2.94 0 0 1 1.1-1.14 58.19 58.19 0 0 1 24.44-.12 3 3 0 0 1 1.2 1.07c1.29 2.36 1.19 4.95 1.2 7.5v30.75c.05 6.74 1.61 8.24 8.36 8.37 3.7.08 7.41-.1 11.1.23 2.23.2 3.9 1.14 4.1 3.54a107.23 107.23 0 0 1-.06 20 3.93 3.93 0 0 1-1 1.85c-.2.17-.43.31-.65.44Z'/%3E%3Cpath d='M225.4 452.82h-48.74V428c1.46-1.94 3.61-2 5.74-2.06 6.36-.1 12.72-.14 19.08.09 6.33-.23 12.67-.21 19-.07 1.93 0 4-.19 5.56 1.42 2.71 7.57 1.34 15.33 1 23-.04 1.09-.97 1.72-1.64 2.44ZM31.27 136.41V87.67h23.94l.7.45c1.36 1.51 1.34 3.39 1.35 5.22q.18 18.9 0 37.8a11.41 11.41 0 0 1-1 5 3.12 3.12 0 0 1-1.12 1.24c-7.1 2.15-14.32 1.17-21.51.74-1.03-.12-1.63-1.04-2.36-1.71Z'/%3E%3Cpath d='M55.21 87.67v-24.8h23.95l.69.44a3.53 3.53 0 0 1 1 1.84c.36 7.46 1.36 14.94-.69 22.33A3 3 0 0 1 79 88.65c-7.08 2-14.25 1.13-21.4.67-1.07-.06-1.67-.99-2.39-1.65ZM469.14 404.07V428h-24.8l-.71-.47a5.34 5.34 0 0 1-1.24-3.54q-.37-8.07 0-16.15a7 7 0 0 1 1.61-4.3 8.54 8.54 0 0 1 5.24-1.52c5-.13 10-.14 15 0 1.86.09 3.65.41 4.9 2.05Z'/%3E%3Cpath d='M79.16 62.87V38.92H104c.79.8 1.71 1.56 1.76 2.78.29 7 1.2 14-.69 20.86a3 3 0 0 1-1.13 1.23C96.52 66 89 64.92 81.56 64.53c-1.07-.06-1.68-1-2.4-1.66ZM444.34 428v24.8H420.4c-.67-.72-1.62-1.34-1.66-2.38-.33-7.7-1.67-15.44 1-23 1.15-1.33 2.78-1.33 4.32-1.4 5.11-.22 10.23-.18 15.35 0 1.9.03 3.68.36 4.93 1.98ZM79.16 379.27H55.21v-23.94c.52-.48.95-1.21 1.63-1.34a70.78 70.78 0 0 1 21.55-.16c1.55.19 2.36 1.57 2.5 3.09a109.82 109.82 0 0 1 0 19.53 4.76 4.76 0 0 1-1.73 2.82ZM444.34 111.61h24.8v73.54c-1.36 1.8-3.33 2-5.35 2-5 .13-9.94.18-14.9 0-5.5-.2-6.49-1.05-6.55-6.57-.18-14.62-.28-29.24.06-43.86-.24-6.35-.22-12.7-.12-19.06 0-2-.09-4 1.36-5.63ZM395.59 62.87h24.81v24.8c-.15.23-.3.46-.44.69a3.62 3.62 0 0 1-1.84 1c-7.43.4-14.88 1.3-22.25-.61a3 3 0 0 1-1.2-1.1c-1.72-8.12-2.21-16.24.23-24.32Z'/%3E%3Cpath d='M420.4 87.67h23.94v23.94c-.79.79-1.55 1.71-2.77 1.76-7 .29-14 1.2-20.87-.69a3.11 3.11 0 0 1-1.23-1.13c-2.14-7.1-1.16-14.3-.74-21.49.07-1.06 1-1.67 1.67-2.39ZM371.65 38.92h23.94v23.95c-.79.79-1.55 1.7-2.77 1.75-7 .3-14 1.2-20.87-.68a3.18 3.18 0 0 1-1.23-1.13c-2.13-7.1-1.16-14.31-.73-21.49.06-1.07 1.01-1.67 1.66-2.4Z'/%3E%3Cpath class='cls-1' d='M371.65 38.92v23.95c-.9 1.57-2.44 1.81-4 2-1.85.17-3.7.15-5.55.15q-124.27 0-248.55-.06c-3.25 0-6.93 1.15-9.57-2.05V38.92Z'/%3E%3Cpath class='cls-2' d='M104 62.87h267.65c1.92 1.47 2 3.6 2.07 5.74.1 3.68-.12 7.36.14 11 .28 4.05 1.77 5.54 5.81 5.83 3.53.25 7.07 0 10.6.14 2 .07 4 .3 5.32 2.07 1.93 1.47 2 3.6 2.08 5.74.11 3.53-.09 7.07.15 10.6.23 3.35 2 5.16 5.38 5.38 3.82.24 7.64 0 11.45.15 2.15.06 4.28.15 5.75 2.07 1.92 1.47 2 3.6 2.07 5.75.1 3.67-.12 7.35.13 11 .28 4 1.78 5.54 5.82 5.83 3.53.25 7.07 0 10.6.14 2 .06 4 .29 5.32 2.06v48.74h24.8v72.69c-1.25 1.62-3 2-4.92 2-3 .11-6 .06-9 .08-7.41.08-8.77 1.36-8.79 8.67-.05 14.34 0 28.68 0 43 0 3.27-.09 6.54 0 9.8.21 5.2 1.79 6.74 7.07 6.93 3.4.12 6.81 0 10.22.09 2 .06 4 .29 5.35 2.06v24.8c-1.45 1.93-3.59 2-5.71 2.05-6.32.1-12.64.16-19-.11-8 .24-16 .29-24 0-6.61.26-13.22.21-19.84.11a11 11 0 0 1-4.52-.85 3.53 3.53 0 0 1-1.28-.81c-1.44-2.28-1.36-4.85-1.38-7.4 0-3.11.09-6.23-.06-9.34-.22-4.62-1.65-6.06-6.2-6.29a67.32 67.32 0 0 0-7.65 0c-4.07.28-5.5 1.71-5.74 5.85-.22 3.68 0 7.37-.11 11.05-.06 2.4-.11 4.83-1.82 6.81-4.08 1.73-8.36.85-12.56 1s-8.19.09-12.28-.15c-6.36.26-12.72.22-19.08.12a11 11 0 0 1-4.54-.85 3.47 3.47 0 0 1-1.28-.82c-1.36-2.15-1.35-4.57-1.37-7 0-3.26.09-6.53-.07-9.79-.22-4.59-1.67-6-6.26-6.25-2.4-.12-4.82-.09-7.23 0-5.4.14-6.83 1.53-7 6.83-.11 3.54 0 7.09-.08 10.63-.07 2.27-.19 4.55-1.89 6.36-2.12 1.1-4.43.92-6.69.92q-29.41.09-58.84 0c-2.41 0-4.85.08-7.08-1.09-2.15-1.51-2.23-3.84-2.31-6.12-.14-3.56 0-7.12-.09-10.68-.17-5.33-1.6-6.72-7-6.86-2.13-.06-4.27-.09-6.41 0-4.58.25-6 1.68-6.19 6.35-.18 5.55.05 11.11-.27 16.67.34 6.24.22 12.48.14 18.72a11 11 0 0 1-1 4.55 2.94 2.94 0 0 1-1 1.19c-7.82 2.28-15.77 1.2-23.67.74-2.42-.14-2.95-2.34-3.11-4.45-.3-4 0-8-.22-11.93-.23-5.19-1.87-6.82-7-7-3.12-.14-6.25 0-9.38-.11-2-.07-4-.27-5.36-2.05-1.78-1.35-2-3.28-2.07-5.32-.09-3.82.1-7.65-.12-11.46-.24-4.14-1.67-5.57-5.75-5.83a69.87 69.87 0 0 0-8.92 0c-4.09.26-5.51 1.69-5.75 5.83-.23 3.81 0 7.64-.12 11.46 0 2-.29 4-2.07 5.32-.52.48-1 1.22-1.62 1.35a70.79 70.79 0 0 1-21.6.17c-2.15-.26-2.53-2.44-2.67-4.35-.32-4.26 0-8.53-.23-12.78-.22-5.2-1.85-6.83-7-7-4.26-.17-8.52 0-12.78-.2-3.1-.17-4.62-1.69-4.78-4.79-.22-4 0-8-.21-11.93-.23-5.18-1.86-6.8-7-7-3.12-.14-6.25 0-9.38-.11-2-.07-4-.28-5.36-2.05a5.39 5.39 0 0 1-2-4.1c-.09-1.71-.14-3.41-.14-5.12V145.58c0-3.16-.87-6.66 2.07-9.22 1.37-1.78 3.35-2 5.37-2 3.14-.11 6.27 0 9.4-.11 5.22-.22 6.91-1.8 7-7 .18-10.54 0-21.07.1-31.61 0-2.78-.52-5.79 2.08-7.93 1.47-1.93 3.6-2 5.74-2.08 3.68-.1 7.36.13 11-.13 4-.29 5.54-1.78 5.82-5.83.26-3.66 0-7.34.14-11 .15-2.2.21-4.33 2.21-5.8ZM469.14 404.07h-24.8l-.71-.47a5.84 5.84 0 0 1-1.28-3.92c-.19-5.76-.23-11.51 0-17.26.07-1.4.18-2.84 1.39-3.84 7.57-2.59 15.3-1.31 23-1 1 0 1.66 1 2.37 1.65Z'/%3E%3Cpath class='cls-1' d='M469.14 379.27h-24.8c-1.66-.8-1.87-2.36-1.95-3.92-.26-5.33-.25-10.66 0-16a5.23 5.23 0 0 1 1.95-4h24.8Z'/%3E%3Cpath d='M469.14 330.53h-24.36c-.65-3.68-.88-58.4-.29-72.69h24.65Z'/%3E%3Cpath class='cls-1' d='M55.21 136.41v170.18H31.72a2.76 2.76 0 0 1-.3-.29.64.64 0 0 1-.15-.36V136.41Z'/%3E%3Cpath d='M55.21 306.59H78.7a1.67 1.67 0 0 1 .31.28.73.73 0 0 1 .14.36v23.15h24.21a4.48 4.48 0 0 1 .45.45.8.8 0 0 1 .14.36v24.14h24v23.94H79.16v-23.94H55.21Z' fill='%23a1a1a1'/%3E%3Cpath class='cls-1' d='M420.4 428v24.8h-195V428c.7-1.53 2.11-1.78 3.55-1.94a48.57 48.57 0 0 1 5.12-.17h177.66c2.95.11 6.36-.98 8.67 2.11ZM152.71 355.33h23.49a1.72 1.72 0 0 1 .31.29.7.7 0 0 1 .14.36v23.29h24.8c2 1.24 2 3.31 2 5.26q.24 19.08 0 38.16c0 2-.25 4-2 5.33h-24.8v-23.5a1.7 1.7 0 0 0-.3-.3.62.62 0 0 0-.36-.14h-23.28Z'/%3E%3Cpath class='cls-1' d='M127.91 355.33V331a1.64 1.64 0 0 1 .29-.3.62.62 0 0 1 .36-.14h24.15v24.8Z'/%3E%3Cpath class='cls-2' d='M201.46 428v-48.73c1.48-1.95 3.64-2 5.79-2 6-.09 11.95-.17 17.92.12 7-.27 14-.31 20.93-.08 5.06.17 5.88 1.07 6.13 6.13.21 4-.06 8 .17 12 .27 4.69 1.92 6.25 6.65 6.56 11.72.77 13-.4 13-12.27 0-12.46 0-12.47 12.37-12.48h30.76c2.41 0 4.86-.13 7.15.88a3.53 3.53 0 0 1 1.27.77c2.32 4.12 1.32 8.63 1.39 13 .15 9.66.55 10.16 10.16 10.16h.85c7.68 0 8.7-1 8.75-8.55v-8.54a11.49 11.49 0 0 1 1.24-5.78 3 3 0 0 1 1.23-1 13.24 13.24 0 0 1 5.42-.92c14.31 0 28.63-.21 42.94.11 6.25-.24 12.51-.16 18.76-.12a14.32 14.32 0 0 1 6.23 1.14c1.93 1.13 1.76 3.1 1.84 4.9.2 4 0 7.93.14 11.88.2 5 1.73 6.58 6.68 6.8 3.26.15 6.51 0 9.77.1 2 .07 4 .29 5.33 2.06V428H201.46Z'/%3E%3Cpath class='cls-1' d='M79.16 87.67v48.74H55.21V87.67ZM104 62.87v24.8H79.16v-24.8ZM444.34 136.41H420.4v-24.8h23.94ZM395.59 87.67h-23.94v-24.8h23.94ZM420.4 111.61h-24.81V87.67h24.81Z'/%3E%3Cpath d='M322.9 379.27h-48.27a2.07 2.07 0 0 0-.31.27.68.68 0 0 0-.16.36v24h-23.67c.06.06-.06 0-.14-.14a.7.7 0 0 1-.14-.36v-24.15H225.4c-.46-.52-1.24-.92-1.33-1.59-.92-7.32-1.93-14.66.63-21.89l.7-.46h72.7c4-3.06 20.75-3.06 24.8 0 3.1 4.03 3.1 20.08 0 23.96ZM274.15 257.84H225.4V209.1c1.37-1.8 3.35-2 5.37-2q19-.19 38 0c2 0 4 .24 5.37 2 1.8 1.36 2 3.34 2 5.37q.19 19 0 38c.03 2.03-.14 4.01-1.99 5.37ZM395.59 257.84h-48.74V209.1c1.36-1.8 3.34-2 5.36-2q19-.19 38 0c2 0 4 .24 5.37 2 1.81 1.36 2 3.34 2 5.37q.21 19 0 38c.03 2.03-.18 4.01-1.99 5.37Z'/%3E%3Cpath class='cls-1' d='M395.59 257.84V209.1H420c.64 3.58.85 35.66.29 48.74Z'/%3E%3Cpath d='M444.34 404.07H420.4v-24.8c-3-4-3-19.92 0-23.94h23.94v48.74ZM395.59 379.27h-48.74c-.36-.45 0 .24-.35-.23-2.73-3.92-2.49-20 .35-23.71h24.8c4-3 19.93-3 23.94 0 3.04 4.02 3.04 19.93 0 23.94Z'/%3E%3Cpath class='cls-1' d='M274.15 209.1H225.4v-23.5c3.58-.64 35.65-.85 48.75-.3ZM395.59 209.1h-48.74v-23.5c3.58-.64 35.65-.85 48.74-.3ZM274.15 257.84V209.1h23.5c.64 3.58.85 35.65.3 48.74ZM322.9 355.33h-24.8V331a1.64 1.64 0 0 1 .29-.3.62.62 0 0 1 .36-.14h24.15ZM395.59 355.33h-23.94V331a1.64 1.64 0 0 1 .29-.3.62.62 0 0 1 .36-.14h23.29Z'/%3E%3Cpath d='M201.46 355.33V331a1.64 1.64 0 0 1 .29-.3.62.62 0 0 1 .36-.14h23.29v24.8c-4.01 3-19.93 3-23.94-.03Z'/%3E%3Cpath class='cls-1' d='M127.78 136.53v23.73h-23.64v-23.73ZM346.85 355.33v23.94c-4 3-19.93 3-24 0v-23.94ZM152.83 111.49V87.76h23.64v23.73Z'/%3E%3Cpath d='M322.9 379.27h24v24.35a2.07 2.07 0 0 1-.29.3.67.67 0 0 1-.37.15H322.9Z'/%3E%3Cpath class='cls-1' d='M127.79 136.27V111.7h24.91v24.57ZM201.45 379.25v-23.91h23.94v23.91ZM395.57 379.25v-23.91h24.86v23.91Z'/%3E%3Cpath class='cls-4' d='M469.17 404.08v-73.61h23.92v73.61ZM469.17 257.76v-72.61h23.92v72.61Z'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 8,\n id: 'utopia.secretskelliessociety.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'DEIP Token',\n symbol: 'DEIP',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDUiIGhlaWdodD0iNDUiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iLjg5MiIgeT0iLjkxIiB3aWR0aD0iNDMuMTYxIiBoZWlnaHQ9IjQzLjE2MSIgcng9IjIxLjU4MSIgZmlsbD0iI0Y4RkVGQSIvPjxwYXRoIGQ9Ik05LjcgMTAuNmgxNC41MzRjNi41NjcgMCAxMS44OTIgNS4zMjMgMTEuODkyIDExLjg5IDAgNi41NjgtNS4zMjQgMTEuODkyLTExLjg5MiAxMS44OTJIOS43VjEwLjZaIiBmaWxsPSJ1cmwoI2EpIi8+PGNpcmNsZSBjeD0iMjIuNDczIiBjeT0iMjIuNDkxIiByPSI0Ljg0NSIgZmlsbD0iIzAwMCIvPjxkZWZzPjxyYWRpYWxHcmFkaWVudCBpZD0iYSIgY3g9IjAiIGN5PSIwIiByPSIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjE2IDExLjY5NTUgLTExLjkyNjc3IC4yMjAyOCAyMi42OTcgMjIuNjg3KSI+PHN0b3Agb2Zmc2V0PSIuMzU5IiBzdG9wLWNvbG9yPSIjRTlGRjAwIi8+PHN0b3Agb2Zmc2V0PSIuNzYiIHN0b3AtY29sb3I9IiMyNjM4MDAiLz48c3RvcCBvZmZzZXQ9IjEiLz48L3JhZGlhbEdyYWRpZW50PjwvZGVmcz48L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'deip-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wootrade Network',\n symbol: 'WOO',\n icon:\n \"data:image/svg+xml,%3Csvg width='125' height='83' viewBox='0 0 125 83' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M102.422 0H122.958L113.203 30.9433H92.9243L102.422 0ZM75.982 29.4048L86.0788 53.3388L89.8436 41.0299H109.951L98.5713 78.0422C97.6301 80.9485 94.9776 82.9145 91.8972 82.9145H80.4314C77.6078 82.9145 75.0408 81.2049 73.9285 78.5551L61.2648 47.8682L48.8578 78.5551C47.831 81.2904 45.2641 83 42.3549 83H30.718C27.6376 83 24.9851 80.9485 24.0439 78.0422L0 5.85842e-05H20.1934L36.2797 53.3388L46.8898 29.3193C49.2857 23.3358 55.0185 19.4038 61.4359 19.4038C67.8533 19.4038 73.6718 23.3358 75.982 29.4048Z' fill='%2320252F'/%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '4691937a7508860f876c9c0a2a617e7d9e945d4b.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'LiNEAR',\n symbol: 'LINEAR',\n icon:\n \"data:image/svg+xml,%3Csvg width='40' height='40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M30.74 28.78c.21-.36.32-.78.32-1.21v-6.33c0-.24-.06-.46-.17-.66-.12-.21-.28-.38-.48-.49l-16.86-9.77c-.35-.2-.73-.31-1.13-.32-.64 0-1.24.26-1.69.72-.45.45-.7 1.07-.71 1.71v6.39c0 .24.06.47.18.67.11.21.28.37.48.48l16.82 9.71c.36.22.77.32 1.19.32.41 0 .82-.12 1.19-.33.36-.21.66-.52.86-.89zm.32-16.27c0-.42-.1-.84-.29-1.21-.2-.38-.49-.7-.85-.93-.36-.22-.78-.34-1.21-.34-.42 0-.84.12-1.21.34l-4.97 2.81c-.04.02-.08.07-.1.12-.03.04-.04.1-.04.14 0 .06.01.11.04.16.02.04.06.08.1.1l8.05 4.62c.05.02.1.04.15.04.05 0 .1-.02.15-.05.04-.02.08-.06.11-.11.02-.04.04-.1.03-.15l.04-5.54zM10.05 27.5c-.01.43.08.86.28 1.23.2.38.49.7.85.93.36.22.78.34 1.2.34.42 0 .83-.12 1.2-.34l4.92-2.85c.04-.02.08-.06.1-.11.03-.04.05-.1.05-.15 0-.05-.02-.11-.05-.15-.02-.05-.06-.09-.1-.12l-8.05-4.6c-.05-.03-.09-.04-.15-.04-.05 0-.1.01-.15.04-.05.02-.08.07-.11.12-.02.04-.04.09-.04.14l.05 5.56z' fill='url(%23paint0_linear_186_370)'/%3E%3Cdefs%3E%3ClinearGradient id='paint0_linear_186_370' x1='11.135' y1='11.152' x2='30.145' y2='30.457' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%231BB3CC'/%3E%3Cstop offset='1' stop-color='%23824ACC'/%3E%3C/linearGradient%3E%3C/defs%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'linear-protocol.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USN',\n symbol: 'USN',\n icon:\n \"data:image/svg+xml;charset=UTF-8,%3Csvg width='38' height='38' viewBox='0 0 38 38' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='38' height='38' rx='19' fill='black'/%3E%3Cpath d='M14.8388 10.6601C14.4203 10.1008 13.6748 9.86519 12.9933 10.0768C12.3119 10.2885 11.85 10.8991 11.85 11.5883V14.7648H8V17.9412H11.85V20.0589H8V23.2353H11.85V28H15.15V16.5108L23.1612 27.2165C23.5797 27.7758 24.3252 28.0114 25.0067 27.7997C25.6881 27.5881 26.15 26.9775 26.15 26.2882V23.2353H30V20.0589H26.15V17.9412H30V14.7648H26.15V10.0001H22.85V21.3658L14.8388 10.6601Z' fill='white'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'usn',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Huobi BTC',\n symbol: 'HBTC',\n icon:\n \"data:image/svg+xml,%3C%3Fxml version='1.0' standalone='no'%3F%3E%3C!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN' 'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'%3E%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' id='body_1' width='32' height='32'%3E%3Cg transform='matrix(1.3333334 0 0 1.3333334 0 0)'%3E%3Cimage x='0' y='0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAA/tJREFUWIXtln9oVWUYxz/vOc67iWtNS9IkjcSui8RUsv40TbLfVoZE5R+li1JJioqYFlKI/bBQo+417A+pTSgkiH5p0ETIBIvaaosiRcRqYVM3t3Oe97zv0x+eO27jXt1kWoFfOJzDeX59npf3fc6B8/o/atNXOmKocgVnEmSt3vOvAaxr1stEdN5QAQwbbIAV7kO0dqgABrUCDR9rpVhdJqIO4KUdmjmnAEnCMon0Uom18/ltekXVSNafM4CVH+h4SVglkUdEDwELgoBHNu7RG846wIomb2xCXoQLpMdhRX8GrnWWwMDWV5v9mLMK0JuYx8QyX3ocNlZEtAWY3HPcE51w47z4rU9t1zM60qc9BYu36ExreQWArgTjNB5WEbaqMjE+AVZcZAzhyMBPA74ZUoBFeT/aJrwPZJAE0+sA9o2p9aPiKCYMg2dC53NrFlUdHWzhAQEk1mzGMAFVzFEBpxjDrrg3qg3CYOr6+pqDUT477tlc9iHgOqAW6AT2YGisXNp++HQAppzhttf9LcaYjwDoEUy3ABAYbtz+QvXOOHdVqLjVwNNAqXkQA+sM4ZpM/Q+uXJ2yG8cmZpVYEFFspyCxYkW7vHO7JV8XKK4RWN2v+ALgMNCUvl+tuEbJ15WtU9Iwe63WiWWWWLBdFht5rCgS66YP114YefVPAgsLrMBc4DmD+Q5oAT4vSrcw9R84gLXMEQtiQdLuJVa1lrfi3JQaoKHIvQK4tbK+fU2mvm1/EAY3pxDfFvk0pHEDAxDLlWIViRy2O0FEEdG25jdrDip6O1BdKk+Uy272zjdhOATcVWSvTuMGCJBQJYkpLo6I/pSap5cI2Zne64C7USabwPwB+CKfUnFlV6BDrCLdCTbWwtVd6KafuzXGfBnlspOAN4wJLq+sb9+lXh/tl79/XHkAm+hesWB7fd8KxHHfP0BHkWsvsCWztK0LuBd4V9X/GOWzNZycB8XqoIRKDqLEmU+d0yNBwmgTa+H1tAnzOg1cv7vItRl4OX1uArqA2iAIurzzyj+1mxIquQL7N5pem/CimLB4D4y3ksw0ATuAA6nrTcAvcX7KJOABjNlmCPLe6QxOzoiCDpjA7BgwAEDizIZ4+PBPxFI4hljxT2SWtFtgOVDo8IiqzgXGovq44n8D3QtMTO0KLM8sabOl6pQdxQCjFmuV6+h+jz9P3NmXTJl/bN8ln0W57ArgtaImfgdC4OKiFB5YWVnfvqFcjVMCAIy43xtz8NiDelwacH6SwhFVZketY1uiXHZOCnF1idCWtPgXp8p/WoCCLrrDmuO//jWdxF+jQEXIOz2tY52+PdXEzs4AnUXf19B8nQkr9pmHv++/Ec/rv6e/AQ/TFRmUSxQZAAAAAElFTkSuQmCC' width='24' height='24'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '0316eb71485b0ab14103307bf65a021042c6d380.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'PembRock',\n symbol: 'PEM',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyMDAgMjAwIj48cGF0aCBmaWxsPSIjMUUxRTFGIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMTMuMiAxNzAuNDJhODMuNTEgODMuNTEgMCAwIDAgNzAuNy04Mi42IDgzLjUgODMuNSAwIDAgMC01Ljc4LTMwLjYxbDEzLjY4LTIzLjg3aC0yOC4wOGE4My4xIDgzLjEgMCAwIDAtNjMuMi0yOS4wNiA4My4xIDgzLjEgMCAwIDAtNjMuMiAyOS4wNkg4LjU4TDIyLjcgNTcuNzhhODMuNSA4My41IDAgMCAwLTUuNTUgMzAuMDUgODMuNTEgODMuNTEgMCAwIDAgNzAuNiA4Mi41N2wxMi43NyAyMi4xMSAxMi42Ny0yMi4xWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI0VBRUNFRiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAwLjUzIDcuOTJBNzguNjYgNzguNjYgMCAwIDAgNDAuNjEgMzUuNmwtMS4xOCAxLjE3SDE2LjY1TDI4LjIzIDU3LjFsLS42OCAxLjc3Yy0zLjQgOC44Ny02LjA3IDE4LjEtNi4wNyAyOC4yIDAgMzkuNzcgMjkuMDMgNzMuMTQgNjYuOTQgNzlsMS44Ni4zIDEwLjM0IDE3Ljc5IDEwLjA2LTE3Ljc4IDEuODctLjNjMzcuOTUtNS44MSA2Ny4wMy0zOC44IDY3LjAzLTc4LjYxIDAtMTAuMy0yLjI0LTIwLjEzLTUuNzgtMjkuMTVsLS42OS0xLjc4IDExLjE4LTE5Ljc3aC0yMi42NWwtMS4xOC0xLjE3YTc4LjY2IDc4LjY2IDAgMCAwLTU5LjkzLTI3LjY3Wk0zNS44NCAyOS4wNEE4Ni40OCA4Ni40OCAwIDAgMSAxMDAuNTQgMGE4Ni40OCA4Ni40OCAwIDAgMSA2NC42OCAyOS4wNGgzMi42N0wxODEuODEgNTcuMmMzLjQ2IDkuNDMgNS42NSAxOS42MyA1LjY1IDMwLjI2IDAgNDMuMTItMzEuMDIgNzguOTUtNzEuODMgODYuMTRMMTAwLjY1IDIwMGwtMTUuMy0yNi40MmMtNDAuNzctNy4yMy03MS43NC00My40NC03MS43NC04Ni41MyAwLTEwLjQgMi42Mi0xOS45OSA1LjkzLTI5LjI1TDMgMjkuMDRoMzIuODRaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjRjY4MjFGIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0zMS44NSA0NS40MSA2OC43NSAxMjAuNDIgOC4wNi0xNC4xMi0yNy40Ny00OC4xM2gyNC4zTDcyLjMzIDQ1LjRIMzEuODVabTQ5LjE5IDAgNDQuMTUgNzcuMzIgNy42Ny0xMy40NC0yOC4xOC00OS4zNGg4LjM3bDIzLjk5IDQyLjAyTDE0NSA4OGwtMTYuMDItMjguMDVoMTYuNDJsLTQuNDMgNy43NiA3LjgxIDEzLjcgMjAuNTctMzZIODEuMDRaTTU2LjMgNTkuOTVsMTYuNjIgMjkuMTFoOC42N0w2NC45NyA1OS45NUg1Ni4zWk00NC4yIDg0LjZhNTYuNjUgNTYuNjUgMCAwIDAgMzEuMDUgNTQuMTJsNi4zMiAxMS4wMWE2NC40NSA2NC40NSAwIDAgMS00NS4yOS02MS43YzAtNC45Ny41Ni05LjggMS42LTE0LjQ0bDYuMzMgMTEuMDJabTc5LjY1LTQ3LjlhNTUuNDYgNTUuNDYgMCAwIDAtMjMuNjYtNS4yNyA1NS40NSA1NS40NSAwIDAgMC0yMy42NSA1LjI2SDYxLjVhNjMuMjYgNjMuMjYgMCAwIDEgMzguNy0xMy4xNmMxNC41NCAwIDI3Ljk1IDQuOSAzOC43IDEzLjE2aC0xNS4wNVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNGNjgyMUYiIGQ9Ik00NC4xIDg4LjAyYzAtMS4xNC4wNC0yLjI4LjEtMy40MWwtNi4zLTExLjAyYTY1LjI2IDY1LjI2IDAgMCAwLTEuNiAxNC40MyA2NC40NSA2NC40NSAwIDAgMCA0NS4yOCA2MS43MWwtNi4zMS0xMWE1Ni42NSA1Ni42NSAwIDAgMS0zMS4xNS01MC43Wm0xMTMuMTIgMGMwLTEuMTQtLjItMi4yOC0uMjctMy40MWw2LjI1LTExLjAyYTY1LjMxIDY1LjMxIDAgMCAxIDEuODQgMTQuNDMgNjQuNDUgNjQuNDUgMCAwIDEtNDUuMjkgNjEuNzFsNi4zMS0xMWE1Ni42NSA1Ni42NSAwIDAgMCAzMS4xNi01MC43WiIvPjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.pembrock.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Atocha Coin',\n symbol: 'ATO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMzYuODggMTM2Ljg4Ij48Y2lyY2xlIGN4PSI2OC40NCIgY3k9IjY4LjQ0IiByPSI2OC40NCIgc3R5bGU9ImZpbGw6Z29sZCIgZGF0YS1uYW1lPSJMYXllciAyIi8+PGcgZGF0YS1uYW1lPSJMYXllciAxIj48cGF0aCBkPSJNNzEuNjUgNzkuNXYyNC40MWMwIDEuMjcuMjQgMS40OSAxLjQ3IDEuMTcgMS4wOC0uMjkgMi4xMy0uNjggMy4xOC0xYTExLjU4IDExLjU4IDAgMCAwIDEuNS0uNTljMS40MS0uNzIgMi44NC0xLjQgNC4xOC0yLjIyYTI1LjU5IDI1LjU5IDAgMCAwIDUuNTktNC42NGMxLjM2LTEuNTIgMi41NC0zLjIgMy43OC00LjgyLjMzLS40My4xOS0uNzItLjM1LS43MS0uODYgMC0xLjcyLjEzLTIuNTguMjItLjQ5IDAtMSAuMTMtMS40Ny4xOWEuMzkuMzkgMCAwIDEtLjQ4LS4zN2wtLjMzLTJhMS41NSAxLjU1IDAgMCAwLS4wNy0uNDIgNS43OCA1Ljc4IDAgMCAxLS4zMy0yLjEzYy0uMDktMS0uMjUtMS45NC0uMzQtMi45Mi0uMDctLjc4LjA1LS44NC44My0uOTQgMS41OS0uMTkgMy4xOC0uNDQgNC43Ny0uNjVsMi43OS0uMzcgMS4xNC0uMTUgNC44Ny0uNzRjLjI3IDAgLjU0LS4wNS44LS4wOWwyLjE4LS4zNWEyLjc1IDIuNzUgMCAwIDEgLjU1LS4wOC40Ny40NyAwIDAgMSAuMzUuMTcgOS44NSA5Ljg1IDAgMCAxIC40NCAxLjFjLjI0LjY5LjQ2IDEuMzkuNjkgMi4wOGEyLjY5IDIuNjkgMCAwIDEgLjA5LjI4Yy4xNy44My4zMyAxLjY2LjUxIDIuNDkuMjYgMS4xNC41NCAyLjI3LjgxIDMuNC4zMSAxLjMxLjYgMi42My45MyAzLjkzLjE5Ljc1LjQ1IDEuNDkuNjUgMi4yNHMuNDUgMS44MS42NiAyLjcxYS40LjQgMCAwIDEtLjE0LjM0IDMuMzkgMy4zOSAwIDAgMS0uODEuMzVjLTEuMzYuMzYtMi43Mi42OS00LjA5IDFsLTIuNTEuNjVjLS42My4xNy0uNzcuMDgtLjkyLS41NHEtLjM5LTEuNTktLjgyLTMuMTdjMC0uMTQtLjIxLS4zNC0uMzItLjM0YS45MS45MSAwIDAgMC0uNTkuMjRjLS4yOS4zMy0uNDguNzQtLjc1IDEuMDgtLjkzIDEuMTgtMS45IDIuMzMtMi44MyAzLjUxYTMwIDMwIDAgMCAxLTQuNiA0LjMgMzkuNCAzOS40IDAgMCAxLTMuNzQgMi41OCAyNi41OSAyNi41OSAwIDAgMS0yLjcxIDEuNTljLTEuMDguNTMtMi4yIDEtMy4zMiAxLjQycy0yIC43OC0zLjA3IDEuMTFjLS43MS4yMy0xLjQ1LjM3LTIuMTcuNTUtLjIuMDUtLjQuMTQtLjYuMjFhNC41MSA0LjUxIDAgMCAxLS40NC4xNmMtLjYxLjE1LTEuMjMuMy0xLjg1LjQzYS42Mi42MiAwIDAgMC0uNTMuN2MwIC43OCAwIDEuNTctLjA2IDIuMzRhNS4yOCA1LjI4IDAgMCAxLS44IDIuNDkgMy44OCAzLjg4IDAgMCAxLTEuNTIgMS4zMiAxMi41NyAxMi41NyAwIDAgMS0xLjU0LjcxIDEuMjQgMS4yNCAwIDAgMS0uNzguMDcgNS44NiA1Ljg2IDAgMCAxLTMuNzMtMi45MiA4IDggMCAwIDEtLjQtMi42MiAxMCAxMCAwIDAgMSAwLTEuMjguNjcuNjcgMCAwIDAtLjYxLS43NGMtLjc1LS4xNC0xLjUtLjI2LTIuMjQtLjQ0cy0xLjU3LS40NC0yLjM1LS42OGMtLjUtLjE1LTEtLjI4LTEuNS0uNDctMS42My0uNjEtMy4yOC0xLjE5LTQuODktMS44NmExNS4xMiAxNS4xMiAwIDAgMS0yLjI3LTEuMjljLTEuMzgtLjg5LTIuNzgtMS43Ny00LjEtMi43Ni0xLS43Ni0xLjkyLTEuNjgtMi44OC0yLjUyYTM2LjMzIDM2LjMzIDAgMCAxLTQuODEtNS42OGMtLjU4LS43Ny0xLjEtMS41OC0xLjY4LTIuMzVhLjgxLjgxIDAgMCAwLS42LS4yOWMtLjE2IDAtLjM3LjI1LS40My40My0uMzEgMS0uNTcgMi4wNy0uODYgMy4xMXEtLjE5LjctLjQgMS4zOWMtLjExLjM1LS4zOS4zNC0uNjYuMjgtLjU4LS4xMy0xLjE2LS4yOC0xLjczLS40My0xLjYyLS40Mi0zLjI0LS44NC00Ljg2LTEuMjhhNi41NSA2LjU1IDAgMCAxLTEtLjQuMzQuMzQgMCAwIDEtLjEyLS4zYy4yMS0xIC40MS0xLjkzLjY2LTIuODkuMzMtMS4yNC43Mi0yLjQ3IDEtMy43Mi4zOC0xLjQ4LjcyLTMgMS4wOC00LjQ3LjIyLS44OS40Ni0xLjc4LjY4LTIuNjguMTgtLjcyLjM0LTEuNDUuNTItMi4xN3MuMzItMS4yMy41Mi0xLjgzLjM4LS41NS44OC0uNDJhNi43NCA2Ljc0IDAgMCAwIC45Mi4xNWMxLjIuMTUgMi4zOS4yOCAzLjU5LjQ0bDUuNi43NSA0LjYxLjU3Yy44NS4xMSAxLjY5LjI1IDIuNTMuMzYuMyAwIC40Ny4xOS40NC41MXYuNDNjLS4xMyAxLjI0LS4yMiAyLjQ5LS40IDMuNzJzLS40NSAyLjM4LS42NiAzLjU4Yy0uMDYuMzQtLjIzLjQ3LS41NS40MmwtMi4xNC0uMzVhMi4yIDIuMiAwIDAgMC0uNDcgMGMtLjQgMC0uNTcuMjItLjQyLjU5YTcuOTIgNy45MiAwIDAgMCAuNzEgMS4zNCAyNC45NCAyNC45NCAwIDAgMCAzLjUyIDQuMjFjLjkxLjg4IDEuODIgMS43NiAyLjc4IDIuNTdhMTkgMTkgMCAwIDAgNC4yOSAyLjY5YzEuMTEuNTEgMi4yMiAxIDMuMzcgMS40N3MyLjM4LjggMy41OCAxLjE4YTIgMiAwIDAgMCAuNTEuMDUuNDcuNDcgMCAwIDAgLjUyLS40IDIuOTEgMi45MSAwIDAgMCAuMDctLjU1Yy4wNy0zLjYuMTgtNy4xOS4yLTEwLjc5LjA1LTguMzIuMDYtMTYuNjQuMDgtMjVWNTQuODVjMC0uOS0uMi0xLjA5LTEuMS0xLjA5aC0xNmExMy41MSAxMy41MSAwIDAgMS0yLjc4LS4zOSAxLjMxIDEuMzEgMCAwIDEtLjczLS43IDMuNDUgMy40NSAwIDAgMS0uMzMtMS4zNXYtNC4zMWEzLjQ1IDMuNDUgMCAwIDEgLjMxLTEuMSAxIDEgMCAwIDEgLjk1LS42M2MxLjMtLjExIDIuNi0uMjQgMy45MS0uMjYgMy42MyAwIDcuMjUgMCAxMC44OC0uMDVoMy44M2MuNjYgMCAxLS4yNyAxLS45M1YzMi41NmExLjQzIDEuNDMgMCAwIDAtLjc1LTEuMzQgMTAuNDkgMTAuNDkgMCAwIDEtMy41NS0zLjU2IDcuNTcgNy41NyAwIDAgMS0xLjI5LTMuN2MtLjA2LTEuMTkgMC0yLjM5IDAtMy41OEE4LjM1IDguMzUgMCAwIDEgNTguNDEgMTdhOS41IDkuNSAwIDAgMSA0LTMuNzYgNi41MyA2LjUzIDAgMCAxIDIuNjgtMWMuNzMtLjA4IDEuNDQtLjMgMi4xNy0uMzRhNi4xNiA2LjE2IDAgMCAxIDEuNDIuMjJjLjEzIDAgLjI1LjA4LjM3LjA5YTEwLjM1IDEwLjM1IDAgMCAxIDUgMi4zNSA3LjYyIDcuNjIgMCAwIDEgMi4xOCAyLjhjLjQ2LjkzLjggMS45MyAxLjE3IDIuOWEyLjEyIDIuMTIgMCAwIDEgLjEuNjd2MS40NWE4LjEyIDguMTIgMCAwIDEtLjcxIDMuNTUgMTIuMzEgMTIuMzEgMCAwIDEtMi4xNyAzLjYzIDUuOCA1LjggMCAwIDEtMS45MyAxLjU3IDEuNjggMS42OCAwIDAgMC0xLjA2IDEuNzR2MTEuMjZjMCAuNjIuMjkuODYuOTIuODhIODUuNjljMS43NiAwIDMuNTIuMTQgNS4yOC4xNmExLjgyIDEuODIgMCAwIDEgMS42OCAxLjg1djQuNjFhMi4zMyAyLjMzIDAgMCAxLS41NyAxLjQ0IDEuMzUgMS4zNSAwIDAgMS0uNy40MSAyMC4wNyAyMC4wNyAwIDAgMS01LjE4LjM0SDcyLjY3Yy0uOTEgMC0xLjA3LjE2LTEuMDcgMS4wNnEuMDUgMTIuMzQuMDUgMjQuNjJabS00LjQ5LTUxLjU1YTUuNzQgNS43NCAwIDAgMCA1LjcxLTUuNjQgNS44MiA1LjgyIDAgMCAwLTYuMDgtNS42M2MtMi41Mi4wNS01LjExIDIuODMtNS4wNyA1LjcxYTUuNiA1LjYgMCAwIDAgNS40NCA1LjU2WiIvPjxwYXRoIGQ9Ik04MC45NCA3Ny41YTIwIDIwIDAgMCAxLTIuNjktLjM3IDcuMzMgNy4zMyAwIDAgMS00LjM0LTMgNy43IDcuNyAwIDAgMS0xLTYuMjQgNy43OCA3Ljc4IDAgMCAxIDMuNzYtNSAxMC4yNSAxMC4yNSAwIDAgMSA2LjM4LTEuNTEgOC4xIDguMSAwIDAgMSA2LjE3IDMuNEE3LjY1IDcuNjUgMCAwIDEgOTAuNTcgNzFhNi40NiA2LjQ2IDAgMCAxLTIuMTQgMy40NiAxMi4yNyAxMi4yNyAwIDAgMS0zLjQ2IDIuMjEgMTAuNjQgMTAuNjQgMCAwIDEtNC4wMy44M1ptMy01LjY2YTYuNjkgNi42OSAwIDAgMCAwLS44NSAyMi41IDIyLjUgMCAwIDAtMS4xNy00Ljc3IDEuODMgMS44MyAwIDAgMC0xLjQ4LTEuMzFjLTEuMjYtLjEzLTEuOTIgMS0xLjggMi4xOWEyMy43MiAyMy43MiAwIDAgMCAuNjQgMy40IDEzLjA3IDEzLjA3IDAgMCAwIC44NiAyLjM5IDEuNDggMS40OCAwIDAgMCAyLjMzLjU2IDEuODEgMS44MSAwIDAgMCAuNjEtMS42M1pNNDMuOTQgNzMuMzFhMy44NyAzLjg3IDAgMCAxIDItMy42QTguOTEgOC45MSAwIDAgMSA1MSA2OC4zOWE1LjU5IDUuNTkgMCAwIDAgLjYgMCAxIDEgMCAwIDAgMS0xIDEwIDEwIDAgMCAwLS4yNy0yLjU2IDEuMzMgMS4zMyAwIDAgMC0yLjM0LS41NGMtLjU3LjU1LTEgMS4yMS0xLjU3IDEuNzlhMi41NiAyLjU2IDAgMCAxLTIuMjIuOTQgMS40NyAxLjQ3IDAgMCAxLTEuMjEtMiAzLjkzIDMuOTMgMCAwIDEgMi0yLjA5IDEzLjI2IDEzLjI2IDAgMCAxIDIuNTctMS4wOCAxMC4zMSAxMC4zMSAwIDAgMSA1LjEzLS4yNyA3LjM1IDcuMzUgMCAwIDEgMi45MyAxLjM2QTMuMzggMy4zOCAwIDAgMSA1OSA2NS4zOWMuMDcgMS4yNy4wOCAyLjU0LjE1IDMuODEuMDYgMSAuMTYgMiAuMjYgM2ExLjIzIDEuMjMgMCAwIDAgLjg4IDEuMDVjLjY3LjI3Ljc0LjQ2LjU3IDEuMTRhMy44IDMuOCAwIDAgMS0yIDIuMzUgNC4zOCA0LjM4IDAgMCAxLTMuNjguNDUgMy4zIDMuMyAwIDAgMS0xLjE1LS42OWMtLjc0LS42OC0uODItLjc1LTEuNjItLjE5YTYuMjEgNi4yMSAwIDAgMS00LjY5IDEgNC4yMSA0LjIxIDAgMCAxLTMuMS0xLjgxIDMuMSAzLjEgMCAwIDEtLjY4LTIuMTlabTcuNy0yLjkxYTIgMiAwIDAgMC0xLjE3IDMuNDMgMS4yMiAxLjIyIDAgMCAwIDEuNzQtLjI0IDIuOSAyLjkgMCAwIDAgLjI2LTIuNjIuNzYuNzYgMCAwIDAtLjgyLS41N1oiLz48L2c+PC9zdmc+',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'atocha-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'SeatlabNFT',\n symbol: 'SEAT',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' x='0px' y='0px' width='32px' height='32px' viewBox='0 0 32 32' style='enable-background:new 0 0 32 32;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23050035;%7D .st1%7Bfill:url(%23SVGID_1_);%7D%0A%3C/style%3E%3Cg id='Layer_1'%3E%3Ccircle class='st0' cx='16' cy='16' r='16'/%3E%3C/g%3E%3Cg id='Isolation_Mode'%3E%3ClinearGradient id='SVGID_1_' gradientUnits='userSpaceOnUse' x1='6.2375' y1='16' x2='25.7625' y2='16'%3E%3Cstop offset='0' style='stop-color:%2300C2FF'/%3E%3Cstop offset='1' style='stop-color:%230067FF'/%3E%3C/linearGradient%3E%3Cpath class='st1' d='M14,6.1c-0.3,0-0.5,0.1-0.8,0.2L8.1,9.4L7.8,9.6L7.2,10c-0.5,0.3-0.9,0.6-0.9,1.7v4.1c0,0.9,0.3,1.6,0.9,1.9 l6.2,3.8c1,0.6,2.3-0.1,2.3-1.3v-2.9c0-0.7-0.4-1.4-1-1.8l-2.9-1.8l3-1.9c0.5-0.3,0.8-0.9,0.8-1.5V7.6C15.6,6.7,14.8,6.1,14,6.1z M14.7,10.4c0,0.3-0.2,0.6-0.4,0.8l-3.4,2.1l-1.8-1.1c-0.5-0.3-0.8-0.5-1.1-0.8c-0.3-0.3-0.2-0.8,0.2-1c0,0,0,0,0,0L13.7,7 C13.8,7,13.9,6.9,14,6.9c0.3,0,0.7,0.3,0.7,0.7V10.4z M24.9,14.3l-6.2-3.8c-1-0.6-2.3,0.1-2.3,1.3v2.9c0,0.7,0.4,1.4,1,1.8l2.9,1.8 l-3,1.9c-0.5,0.3-0.8,0.9-0.8,1.5v2.8c0,0.9,0.8,1.6,1.6,1.6c0.3,0,0.5-0.1,0.8-0.2l5.1-3.1l0.4-0.2l0.6-0.4 c0.5-0.3,0.9-0.6,0.9-1.7v-4.1C25.8,15.3,25.4,14.6,24.9,14.3z M23.8,21.6C23.8,21.6,23.8,21.6,23.8,21.6L18.3,25 c-0.1,0.1-0.2,0.1-0.4,0.1c-0.3,0-0.7-0.3-0.7-0.7v-2.8c0-0.3,0.2-0.6,0.4-0.8l3.4-2.1l1.8,1.1c0.5,0.3,0.8,0.5,1.1,0.8 C24.3,20.9,24.2,21.4,23.8,21.6z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 5,\n id: 'token.stlb.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Burrow Token',\n symbol: 'BRRR',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.burrow.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'FUSOTAO',\n symbol: 'TAO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTU1LjQxIDI5LjYzNS03LjI5NiA2LjE0N2ExLjY1OSAxLjY1OSAwIDAgMS0uNjc1IDIuMzlsMS44NDggOS41NDZjLjgwNS0uMjA4IDEuNTM2LS43MDIgMi4wODktMS41MzlhMTIuODE2IDEyLjgxNiAwIDAgMCAxLjk4Mi01LjI4OWMuMTctMS4yNTEuNTY0LTIuNDczIDEuMTU2LTMuNTg2YTEyLjgzMyAxMi44MzMgMCAwIDAgMS40ODItNS40NjljLjAzNS0uODYzLS4xODYtMS42LS41ODctMi4yeiIgZmlsbD0idXJsKCNhKSIvPjxwYXRoIGQ9Ik00NS4zNDIgMzUuOTA2YTEuNjM3IDEuNjM3IDAgMCAxIDIuMTgzLS42M2w3LjM3OC02LjE5M2MtMS4yODMtMS4xOTMtMy40NTktMS41NDctNS40NDUtLjkwM2wtMTIuNzQyIDQuMTM1Yy0uMzEuMS0uNTUzLjI5Ny0uNzE2LjU0Mmw5LjM0MiAzLjA0OXoiIGZpbGw9InVybCgjYikiLz48cGF0aCBkPSJNNDMuODkyIDQ1LjM3YzEuMTQ5IDEuNTkyIDIuOTQ3IDIuNTcyIDQuNTk5IDIuNTI0bC0xLjg0NC05LjQ4N2ExLjY0NCAxLjY0NCAwIDAgMS0xLjUzOC0xLjY4bC05LjM2NC0zLjA1NWMuMDA0LjI2OC4wODcuNTQuMjYuNzhsNy44ODcgMTAuOTE5eiIgZmlsbD0idXJsKCNjKSIvPjxwYXRoIGQ9Im00MS40MSA1My4yMjMtOC4wNTYtNS4wOTJhMS42MzEgMS42MzEgMCAwIDEtMi40NjQuMDkxbC04LjQzOCA0LjcyMWMuNDQ0LjcwOCAxLjEzNiAxLjI1NiAyLjA5NyAxLjUyNyAxLjc5NC41MDYgMy43NC42MDMgNS42MDUuMjY1YTEwLjUzNiAxMC41MzYgMCAwIDEgMy43NDIgMGMxLjg3LjMzOSAzLjgyMS4yNCA1LjYxOS0uMjcuODI2LS4yMzMgMS40NTMtLjY3MyAxLjg5NS0xLjI0MnoiIGZpbGw9InVybCgjZCkiLz48cGF0aCBkPSJNMzIuMzg5IDQ1LjQzOGExLjY0NiAxLjY0NiAwIDAgMSAxLjI3IDEuODlsOC4xNDUgNS4xMzRjLjczNC0xLjU5NC4zOTctMy43ODItLjgyNy01LjQ4TDMzLjEyMyAzNi4wOWExLjM1NCAxLjM1NCAwIDAgMC0uNzM0LS41MTZ2OS44NjR6IiBmaWxsPSJ1cmwoI2UpIi8+PHBhdGggZD0iTTIyLjk3IDQ3LjAxN2MtMS4xNTEgMS41ODgtMS41MjQgMy42MDgtLjk2OSA1LjE3bDguNDItNC42OTJhMS42NDggMS42NDggMCAwIDEgMS4xMTctMS45ODd2LTkuODg0Yy0uMjUzLjA4Ny0uNDg1LjI1LS42NTkuNDlsLTcuOTA4IDEwLjkwM3oiIGZpbGw9InVybCgjZikiLz48cGF0aCBkPSJtMTUuODg2IDM1Ljc4Mi03LjI5NS02LjE0N2MtLjQwMS42LS42MjIgMS4zMzctLjU4NyAyLjJhMTIuODMgMTIuODMgMCAwIDAgMS40ODIgNS40NjkgMTAuNzUxIDEwLjc1MSAwIDAgMSAxLjE1NiAzLjU4NmMuMjU4IDEuODkyLjk1IDMuNzI3IDEuOTgyIDUuMjkuNTUzLjgzNiAxLjI4NCAxLjMzIDIuMDg5IDEuNTM4bDEuODQ4LTkuNTQ2YTEuNjU5IDEuNjU5IDAgMCAxLS42NzUtMi4zOXoiIGZpbGw9InVybCgjZykiLz48cGF0aCBkPSJNMTUuNTY4IDQ3Ljg1NmMxLjY0OS4wNDggMy40NDUtLjkzMiA0LjU5Mi0yLjUyMWw3Ljg3NS0xMC45MDhhMS4zNiAxLjM2IDAgMCAwIC4yNi0uNzhsLTkuMzUgMy4wNTJhMS42NDcgMS42NDcgMCAwIDEtMS41MzYgMS42NzlsLTEuODQgOS40Nzh6IiBmaWxsPSJ1cmwoI2gpIi8+PHBhdGggZD0iTTE2Ljc0NSAzNS4xOTNhMS42NCAxLjY0IDAgMCAxIDEuOTI3Ljc0bDkuMzU2LTMuMDUyYTEuMzU3IDEuMzU3IDAgMCAwLS43MTctLjU0M2wtMTIuNzYxLTQuMTRjLTEuOTktLjY0NC00LjE2OC0uMjktNS40NTMuOTA1bDcuMzkgNi4yYy4wOC0uMDQ0LjE2Ny0uMDguMjU4LS4xMXoiIGZpbGw9InVybCgjaSkiLz48cGF0aCBkPSJtNDAuNTcxIDE4LjA5LTMuNTQ2LTguODkyYy42ODktLjE5OCAxLjQ1My0uMTgyIDIuMjU4LjExOGExMi42NSAxMi42NSAwIDAgMSA0LjcwMyAzLjExIDEwLjYxNCAxMC42MTQgMCAwIDAgMy4wMjcgMi4yMTYgMTIuNjc2IDEyLjY3NiAwIDAgMSA0LjM4IDMuNTM1Yy42MTkuNzg4Ljg2IDEuNjQxLjgwNiAyLjQ3N2wtOS41OC0xLjE3OWExLjY0OSAxLjY0OSAwIDAgMC0uNjYyLTEuMTI2IDEuNjI2IDEuNjI2IDAgMCAwLTEuMzg2LS4yNnoiIGZpbGw9InVybCgjaikiLz48cGF0aCBkPSJNMzkuNzY0IDE4Ljc5Yy0uNDYzLjY0LS40IDEuNS4xMDQgMi4wNjZsLTUuNzczIDcuOThhMS4zNjMgMS4zNjMgMCAwIDEtLjI5Mi0uODVsLjAyMS0xMy40NDljLjAwNC0yLjA5NiAxLjAxMi00LjA2NCAyLjUzOC00LjkybDMuNTg1IDguOTZhMS42NiAxLjY2IDAgMCAwLS4xODMuMjEzeiIgZmlsbD0idXJsKCNrKSIvPjxwYXRoIGQ9Ik01Mi4xNiAyMS41NDhjLS40NjUgMS41OTEtMS45NSAzLjAwNi0zLjgxMiAzLjYxbC0xMi43ODIgNC4xNTVhMS4zNTIgMS4zNTIgMCAwIDEtLjgyLjAwOGw1Ljc4OC03Ljk5NmExLjY0IDEuNjQgMCAwIDAgMi4wNjctLjk0OWw5LjU1OSAxLjE3MnoiIGZpbGw9InVybCgjbCkiLz48cGF0aCBkPSJtMjcuNDYgOS4xOTgtMy41NDcgOC44OTJhMS42MjYgMS42MjYgMCAwIDAtMS4zODYuMjYgMS42NSAxLjY1IDAgMCAwLS42NjIgMS4xMjVsLTkuNTggMS4xNzljLS4wNTMtLjgzNi4xODctMS42OS44MDYtMi40NzdhMTIuNjc3IDEyLjY3NyAwIDAgMSA0LjM4LTMuNTM0IDEwLjYxNiAxMC42MTYgMCAwIDAgMy4wMjctMi4yMTcgMTIuNjUgMTIuNjUgMCAwIDEgNC43MDMtMy4xMWMuODA1LS4zIDEuNTY5LS4zMTYgMi4yNTgtLjExOHoiIGZpbGw9InVybCgjbSkiLz48cGF0aCBkPSJNMTYuMTk1IDI1LjE0M2MtMS44Ni0uNjA1LTMuMzQyLTIuMDE3LTMuODA2LTMuNjA3bDkuNTQ0LTEuMTdhMS42MzYgMS42MzYgMCAwIDAgMi4wNjQuOTQ4bDUuNzggNy45ODdhMS4zNDkgMS4zNDkgMCAwIDEtLjgxOS0uMDA4bC0xMi43NjMtNC4xNXoiIGZpbGw9InVybCgjbikiLz48cGF0aCBkPSJNMjQuNjM5IDIwLjg2N2ExLjY1NCAxLjY1NCAwIDAgMC0uMDc5LTIuMjgxbDMuNTktOC45N2MxLjUzLjg1NyAyLjUzOSAyLjgyOCAyLjU0MiA0LjkyNmwuMDIxIDEzLjQ2MmMuMDAxLjMyNy0uMTEuNjItLjI5Mi44NTJsLTUuNzgyLTcuOTg5eiIgZmlsbD0idXJsKCNvKSIvPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iaCIgeDE9IjgiIHkxPSI0My40NjciIHgyPSIxNi4zOTkiIHkyPSIzNy45MzgiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjOUEwQTBFIi8+PHN0b3Agb2Zmc2V0PSIuODY5IiBzdG9wLWNvbG9yPSIjREExODFGIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImEiIHgxPSI0NS45MjYiIHkxPSIzNi4wNTMiIHgyPSI1MS4wNjgiIHkyPSI0My41NjEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9Ii40NjQiIHN0b3AtY29sb3I9IiNFQTMwMkEiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNDNTE1MUIiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9IjQ1LjkyNiIgeTE9IjM2LjA1MyIgeDI9IjUxLjA2OCIgeTI9IjQzLjU2MSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjQ2NCIgc3RvcC1jb2xvcj0iI0VBMzAyQSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0M1MTUxQiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJkIiB4MT0iMzEuOTAxIiB5MT0iNTQuOTMzIiB4Mj0iMzEuOTAxIiB5Mj0iNDcuNDIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzlFMEIwRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0RBMTgxRiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJlIiB4MT0iMzEuOTAxIiB5MT0iNTQuOTMzIiB4Mj0iMzEuOTAxIiB5Mj0iNDcuNDIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzlFMEIwRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0RBMTgxRiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJmIiB4MT0iMzEuOTAxIiB5MT0iNTQuOTMzIiB4Mj0iMzEuOTAxIiB5Mj0iNDcuNDIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzlFMEIwRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0RBMTgxRiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJnIiB4MT0iOCIgeTE9IjQzLjQ2NyIgeDI9IjE2LjM5OSIgeTI9IjM3LjkzOCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM5QTBBMEUiLz48c3RvcCBvZmZzZXQ9Ii44NjkiIHN0b3AtY29sb3I9IiNEQTE4MUYiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjQ1LjkyNiIgeTE9IjM2LjA1MyIgeDI9IjUxLjA2OCIgeTI9IjQzLjU2MSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjQ2NCIgc3RvcC1jb2xvcj0iI0VBMzAyQSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0M1MTUxQiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJpIiB4MT0iOCIgeTE9IjQzLjQ2NyIgeDI9IjE2LjM5OSIgeTI9IjM3LjkzOCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM5QTBBMEUiLz48c3RvcCBvZmZzZXQ9Ii44NjkiIHN0b3AtY29sb3I9IiNEQTE4MUYiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iaiIgeDE9IjQyLjk2MyIgeTE9IjEyLjIzIiB4Mj0iMzMuODY1IiB5Mj0iMjcuMDUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjRjlCMTk4Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRUUxQzI1Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImsiIHgxPSI0Mi45NjMiIHkxPSIxMi4yMyIgeDI9IjMzLjg2NSIgeTI9IjI3LjA1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iI0Y5QjE5OCIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0VFMUMyNSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJsIiB4MT0iNDIuOTYzIiB5MT0iMTIuMjMiIHgyPSIzMy44NjUiIHkyPSIyNy4wNSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNGOUIxOTgiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRTFDMjUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibSIgeDE9IjE4Ljc2NSIgeTE9IjEzLjQxNiIgeDI9IjI5LjU0NSIgeTI9IjMyLjU4NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNFRTI3MjkiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRTFDMjUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibiIgeDE9IjE4Ljc2NSIgeTE9IjEzLjQxNiIgeDI9IjI5LjU0NSIgeTI9IjMyLjU4NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNFRTI3MjkiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRTFDMjUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibyIgeDE9IjE4Ljc2NSIgeTE9IjEzLjQxNiIgeDI9IjI5LjU0NSIgeTI9IjMyLjU4NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNFRTI3MjkiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRTFDMjUiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'fusotao-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NearX',\n symbol: 'NearX',\n icon:\n \"data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24 12C24 18.6274 18.6274 24 12 24C5.37258 24 0 18.6274 0 12C0 5.37258 5.37258 0 12 0C18.6274 0 24 5.37258 24 12ZM17.1421 21.3847L21.3848 17.1421L19.3669 15.1243C18.5576 17.0302 17.0303 18.5576 15.1243 19.3669L17.1421 21.3847ZM9.4329 19.5792C7.45318 18.9089 5.82112 17.4847 4.87847 15.6484L3.24263 17.2842L7.48527 21.5269L9.4329 19.5792ZM4.63307 8.87568C5.4424 6.96973 6.96977 5.44237 8.87573 4.63305L7.24263 2.99995L2.99999 7.24259L4.63307 8.87568ZM15.6484 4.87847L17.3848 3.14209L21.6274 7.38473L19.5792 9.4329C18.9089 7.45318 17.4847 5.82112 15.6484 4.87847Z' fill='%232FA8AF'/%3E%3Cpath d='M8.00119 11.9921C8.00119 11.0268 8.00119 10.0615 8.00119 9.09612C8.00119 8.50505 8.16497 8.1743 8.56285 8.05781C8.97778 7.93628 9.40619 7.97917 9.79565 8.45228C11.3533 10.3447 12.9343 12.218 14.5092 14.0959C14.5692 14.1676 14.6117 14.3122 14.734 14.2626C14.8496 14.2157 14.7858 14.0805 14.786 13.9878C14.7904 12.6326 14.7898 11.2774 14.7868 9.92226C14.7868 9.83668 14.838 9.7162 14.7271 9.67372C14.6401 9.64029 14.5824 9.74185 14.522 9.79358C14.0492 10.1981 13.5804 10.6073 13.1088 11.0133C13.0208 11.089 12.9332 11.2118 12.8002 11.1012C12.6657 10.9894 12.7696 10.8872 12.8364 10.7881C13.3547 10.0186 13.8728 9.24898 14.3909 8.47919C14.6656 8.07085 15.0079 7.92282 15.4056 8.04141C15.786 8.15475 15.9986 8.48592 15.9992 8.97668C16.0007 10.0905 15.9996 11.2045 15.9996 12.3183C15.9996 13.2094 16.0003 14.1005 15.9994 14.9916C15.999 15.4826 15.8137 15.798 15.4512 15.9324C15.0256 16.0901 14.5767 15.9683 14.2734 15.6058C12.6823 13.705 11.0924 11.8029 9.50198 9.90144C9.46029 9.85161 9.42303 9.7961 9.37377 9.75489C9.28998 9.68487 9.21967 9.68108 9.21314 9.81797C9.20999 9.88273 9.21188 9.94791 9.21188 10.0129C9.21188 11.3496 9.21062 12.6862 9.2142 14.0227C9.21441 14.1186 9.15609 14.2557 9.26114 14.3038C9.38093 14.3587 9.45061 14.2178 9.52998 14.1503C9.98259 13.7651 10.4291 13.3728 10.8805 12.9859C10.9729 12.9066 11.0626 12.7651 11.208 12.8973C11.3402 13.0176 11.2213 13.1196 11.159 13.2127C10.6323 13.9989 10.1032 14.7837 9.57145 15.5663C9.32788 15.9248 8.9881 16.056 8.61085 15.9488C8.23739 15.8428 8.00498 15.5246 8.00287 15.0827C7.99761 14.0523 8.00119 13.022 8.00119 11.9917V11.9921Z' fill='white'/%3E%3C/svg%3E%0A\",\n reference: 'https://near.staderlabs.com',\n reference_hash: null,\n decimals: 24,\n id: 'v2-nearx.stader-labs.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'DISCOVOL TOKEN',\n symbol: 'DISC',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSLlm77lsYJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4PSIwIiB5PSIwIiB2aWV3Qm94PSIwIDAgMTQxLjcgMTQxLjciIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDE0MS43IDE0MS43IiB4bWw6c3BhY2U9InByZXNlcnZlIj48c3R5bGU+LnN0MHtmaWxsOiNmOTcxMTZ9PC9zdHlsZT48cGF0aCBjbGFzcz0ic3QwIiBkPSJNNDYuMSAxOC43djEwNS42czIxLjMtNS41IDMzLjEtMjljMCAwIDEyLjctMjIuMi0uOS00OS43IDAgMC0xMC4xLTIwLjktMzIuMi0yNi45eiIvPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMDUuNyA5LjRjMzEuMSAxOC4zIDM0LjUgNDguNCAzNC41IDQ4LjQgNi40IDM3LjktMTcgNjAuMy0xNyA2MC4zLTMxLjQgMzQuNS03My40IDIwLjMtNzMuNCAyMC4zIDMwLjYtOS4zIDQxLjktMzUuMSA0MS45LTM1LjEgMTYuNi0zNS41IDAtNjMuMiAwLTYzLjJDNzcgOS43IDQ3LjMgMy45IDQ3LjMgMy45YzMyLjQtMTEuMyA1OC40IDUuNSA1OC40IDUuNXptNyAxMS41UzExMS4xIDM4IDk0LjcgMzhjMCAwIDE2IDIuOCAxNy41IDE4LjggMCAwIDEuNC0xNy41IDE4LjItMTguMy0uMSAwLTE4LjUtMS41LTE3LjctMTcuNnpNMjUuNiAxNS45aDUuOXYxMTAuOEgyN1M4IDExMiAyLjIgODkuMmMwIDAtNy43LTI2LjIgNS01MC40LjEuMSA5LjUtMTcgMTguNC0yMi45eiIvPjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 14,\n id: 'discovol-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Stader',\n symbol: 'SD',\n icon:\n \"data:image/svg+xml,%3Csvg width='256' height='256' viewBox='0 0 256 256' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M128 256C198.692 256 256 198.692 256 128C256 57.3075 198.692 0 128 0C57.3075 0 0 57.3075 0 128C0 198.692 57.3075 256 128 256Z' fill='%236259D4'/%3E%3Cpath d='M126.852 191.869L126.822 181.088L153.98 165.105L153.886 133.025L163.667 127.882L164.056 170.723L126.852 191.869Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M153.98 165.105L126.822 181.088L126.852 191.869L164.056 170.723L163.667 127.882L153.886 133.025L153.98 165.105ZM154.207 133.218L154.3 165.104C154.301 165.218 154.241 165.323 154.143 165.381L127.143 181.271L127.171 191.32L163.735 170.538L163.352 128.41L154.207 133.218Z' fill='%236259D4'/%3E%3Cpath d='M134.785 112.611L145.906 106.314L173.184 123.396L173.334 175.037L164.063 170.734L163.673 127.894L134.785 112.611Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M163.673 127.894L164.063 170.734L173.334 175.037L173.184 123.396L145.906 106.314L134.785 112.611L163.673 127.894ZM135.451 112.601L163.823 127.611C163.927 127.666 163.992 127.773 163.993 127.891L164.381 170.529L173.013 174.535L172.865 123.574L145.898 106.687L135.451 112.601Z' fill='%236259D4'/%3E%3Cpath d='M126.443 53.3335L173.06 79.8728L173.094 90.9255L126.49 64.9081L126.443 53.3335Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M126.443 53.3335L126.49 64.9081L173.094 90.9255L173.06 79.8728L126.443 53.3335ZM126.766 53.8852L126.81 64.7198L172.773 90.3795L172.741 80.0592L126.766 53.8852Z' fill='%236259D4'/%3E%3Cpath d='M80.1584 134.322L80 80.4074L126.432 53.3335L126.48 64.9081L88.7187 86.0335L88.5731 128.106L80.1584 134.322Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M88.7187 86.0335L126.48 64.9081L126.432 53.3335L80 80.4074L80.1584 134.322L88.5731 128.106L88.7187 86.0335ZM88.2536 127.944L88.3987 86.0324C88.3991 85.9169 88.4617 85.8106 88.5624 85.7542L126.159 64.7209L126.115 53.8892L80.3205 80.5909L80.4766 133.689L88.2536 127.944Z' fill='%236259D4'/%3E%3Cpath d='M107.511 149.374L80.1562 134.324L88.5709 128.108L135.44 154.885L107.58 170.601L98.2445 175.794L126.85 191.879L164.054 170.733L173.325 175.035L126.619 202.66L80.2804 176.371L117.215 154.711L107.511 149.374Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M107.58 170.601L135.44 154.885L88.5709 128.108L80.1562 134.324L117.215 154.711L80.2804 176.371L126.619 202.66L173.325 175.035L164.054 170.733L126.85 191.879L98.2445 175.794L107.58 170.601ZM164.069 171.092L127.008 192.157C126.91 192.213 126.791 192.213 126.693 192.158L98.0877 176.073C97.9866 176.016 97.9242 175.909 97.9245 175.794C97.9248 175.678 97.9877 175.571 98.0889 175.515L107.423 170.322L134.792 154.884L88.5932 128.49L80.7483 134.285L107.666 149.093L117.369 154.431C117.47 154.486 117.533 154.592 117.535 154.707C117.536 154.822 117.476 154.929 117.377 154.987L80.9208 176.367L126.615 202.29L172.639 175.069L164.069 171.092Z' fill='%236259D4'/%3E%3Cpath d='M88.7207 86.0458L126.482 64.9204L173.085 90.9378L145.902 106.323L134.781 112.619L163.669 127.902L153.888 133.044L116.808 112.11L153.764 90.4499L144.947 85.4178L126.512 74.8955L99.0623 90.6069L88.7207 86.0458Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M173.085 90.9378L126.482 64.9204L88.7207 86.0458L99.0623 90.6069L126.512 74.8955L153.764 90.4499L116.808 112.11L153.888 133.044L163.669 127.902L134.781 112.619L173.085 90.9378ZM162.983 127.901L134.631 112.902C134.528 112.847 134.462 112.741 134.461 112.624C134.459 112.507 134.521 112.398 134.623 112.341L145.744 106.044L172.432 90.9397L126.482 65.287L89.4368 86.0119L99.0436 90.2489L126.353 74.6177C126.451 74.5614 126.572 74.5614 126.67 74.6175L153.923 90.172C154.022 90.2286 154.083 90.3338 154.084 90.4481C154.085 90.5623 154.024 90.6682 153.926 90.726L117.45 112.105L153.894 132.68L162.983 127.901Z' fill='%236259D4'/%3E%3Cpath d='M98.252 175.789L107.587 170.596L126.827 181.093L126.857 191.874L98.252 175.789Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M98.252 175.789L126.857 191.874L126.827 181.093L107.587 170.596L98.252 175.789ZM98.9075 175.791L126.536 191.326L126.508 181.283L107.589 170.962L98.9075 175.791Z' fill='%236259D4'/%3E%3Cpath d='M80.2804 176.368L80.2461 164.785L107.511 149.371L117.215 154.708L80.2804 176.368Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M80.2804 176.368L117.215 154.708L107.511 149.371L80.2461 164.785L80.2804 176.368ZM80.5987 175.81L116.567 154.717L107.513 149.737L80.5666 164.971L80.5987 175.81Z' fill='%236259D4'/%3E%3Cpath d='M116.809 112.109L116.92 101.073L144.947 85.417L153.764 90.4491L116.809 112.109Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M116.809 112.109L153.764 90.4491L144.947 85.417L116.92 101.073L116.809 112.109ZM117.134 111.547L153.125 90.4528L144.946 85.7845L117.238 101.262L117.134 111.547Z' fill='%236259D4'/%3E%3Cpath d='M88.5723 128.087L88.7179 86.0142L99.0595 90.5753L99.1537 123.589L135.407 143.582L135.442 154.864L88.5723 128.087Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M99.1537 123.589L99.0595 90.5753L88.7179 86.0142L88.5723 128.087L135.442 154.864L135.407 143.582L99.1537 123.589ZM135.088 143.771L98.9992 123.869C98.8974 123.813 98.8341 123.706 98.8337 123.59L98.7401 90.7841L89.0362 86.5043L88.8929 127.901L135.12 154.311L135.088 143.771Z' fill='%236259D4'/%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '30d20208d987713f46dfd34ef128bb16c404d10f.factory.bridge.near',\n },\n {\n spec: 'ft-1.0',\n name: 'SWEAT',\n symbol: 'SWEAT',\n icon:\n \"data:image/svg+xml,%3Csvg viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='100' height='100' rx='50' fill='%23FF0D75'/%3E%3Cg clip-path='url(%23clip0_283_2788)'%3E%3Cpath d='M39.4653 77.5455L19.0089 40.02L35.5411 22.2805L55.9975 59.806L39.4653 77.5455Z' stroke='white' stroke-width='10'/%3E%3Cpath d='M66.0253 77.8531L45.569 40.3276L62.1012 22.5882L82.5576 60.1136L66.0253 77.8531Z' stroke='white' stroke-width='10'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0_283_2788'%3E%3Crect width='100' height='56' fill='white' transform='translate(0 22)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.sweat',\n },\n {\n spec: 'ft-1.0.0',\n name: 'APYSwap',\n symbol: 'APYS',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iLTEwIC0xMCAxMjAgMTIwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMTQ2OF81MTk1KSI+CjxwYXRoIGQ9Ik0zOC40MzUzIDEyLjY4NUw3NC41ODY5IDc3Ljg2NzdMOTguOTk5OSA3OC41NjYzTDYyLjY3NDkgMTMuMzc4N0wzOC40MzUzIDEyLjY4NVoiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8xNDY4XzUxOTUpIi8+CjxwYXRoIGQ9Ik0xMi43NjcyIDU1LjQwNzFMODYuOTM2NiA1Ni42MzI2TDk4Ljk5ODIgNzcuODM0OEwwLjAxMTcwNDYgNzYuMTk5MkwxMi43NjcyIDU1LjQwNzFaIiBmaWxsPSJ1cmwoI3BhaW50MV9saW5lYXJfMTQ2OF81MTk1KSIvPgo8cGF0aCBkPSJNNjIuMjQxMSAxMy4wOTRMMjMuODY5OCA3Ny4wODU2TC0wLjUxMDgwNSA3Ni45MTIyTDM3Ljg2NzMgMTIuOTIwN0w2Mi4yNDExIDEzLjA5NFoiIGZpbGw9InVybCgjcGFpbnQyX2xpbmVhcl8xNDY4XzUxOTUpIi8+CjwvZz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8xNDY4XzUxOTUiIHgxPSI1NS45Njc3IiB5MT0iMjMuODc4MSIgeDI9Ijg1LjQ4MjUiIHkyPSI3Ny4wMTI2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiMwOEFFRUEiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMkFGNTk4Ii8+CjwvbGluZWFyR3JhZGllbnQ+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQxX2xpbmVhcl8xNDY4XzUxOTUiIHgxPSIyOS40ODcxIiB5MT0iNjcuODQzIiB4Mj0iNjguOTYzNiIgeTI9IjY4LjgwMzIiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzA4QUVFQSIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMyQUY1OTgiLz4KPC9saW5lYXJHcmFkaWVudD4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDJfbGluZWFyXzE0NjhfNTE5NSIgeDE9IjUxLjk4MzUiIHkxPSIzLjEzMzQ1IiB4Mj0iMzEuMjQxOCIgeTI9IjM2LjE3MzUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzA4QUVFQSIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMyQUY1OTgiLz4KPC9saW5lYXJHcmFkaWVudD4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xNDY4XzUxOTUiPgo8cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'apys.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tether USD',\n symbol: 'USDt',\n icon:\n \"data:image/svg+xml,%3Csvg width='111' height='90' viewBox='0 0 111 90' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24.4825 0.862305H88.0496C89.5663 0.862305 90.9675 1.64827 91.7239 2.92338L110.244 34.1419C111.204 35.7609 110.919 37.8043 109.549 39.1171L58.5729 87.9703C56.9216 89.5528 54.2652 89.5528 52.6139 87.9703L1.70699 39.1831C0.305262 37.8398 0.0427812 35.7367 1.07354 34.1077L20.8696 2.82322C21.6406 1.60483 23.0087 0.862305 24.4825 0.862305ZM79.8419 14.8003V23.5597H61.7343V29.6329C74.4518 30.2819 83.9934 32.9475 84.0642 36.1425L84.0638 42.803C83.993 45.998 74.4518 48.6635 61.7343 49.3125V64.2168H49.7105V49.3125C36.9929 48.6635 27.4513 45.998 27.3805 42.803L27.381 36.1425C27.4517 32.9475 36.9929 30.2819 49.7105 29.6329V23.5597H31.6028V14.8003H79.8419ZM55.7224 44.7367C69.2943 44.7367 80.6382 42.4827 83.4143 39.4727C81.0601 36.9202 72.5448 34.9114 61.7343 34.3597V40.7183C59.7966 40.8172 57.7852 40.8693 55.7224 40.8693C53.6595 40.8693 51.6481 40.8172 49.7105 40.7183V34.3597C38.8999 34.9114 30.3846 36.9202 28.0304 39.4727C30.8066 42.4827 42.1504 44.7367 55.7224 44.7367Z' fill='%23009393'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'usdt.tether-token.near',\n },\n];\n\nexport function getDefaultTokenList() {\n const env = getConfig().networkId;\n\n switch (env) {\n case 'mainnet':\n return DefaultMainnetTokenList;\n case 'testnet':\n return DefaultTestnetTokenList;\n default:\n return DefaultMainnetTokenList;\n }\n}\n","import { TokenMetadata, Transaction } from '../types';\n\nimport {\n priceToPoint,\n toNonDivisibleNumber,\n toPrecision,\n registerAccountOnToken,\n} from '../utils';\nimport { ONE_YOCTO_NEAR, WRAP_NEAR_CONTRACT_ID, config } from '../constant';\nimport { DCLSwapGetStorageBalance } from '../ref';\nimport { DCL_POOL_FEE_LIST, getDCLPoolId } from './dcl-pool';\nimport {\n nearDepositTransaction,\n ftGetStorageBalance,\n refDCLSwapViewFunction,\n} from '../ref';\nimport _ from 'lodash';\nimport { toReadableNumber, percentLess } from '../utils';\nimport { NoPoolOnThisPair, SlippageError } from '../error';\n\ninterface SwapInfo {\n tokenA: TokenMetadata;\n tokenB: TokenMetadata;\n amountA: string;\n}\n\ninterface DCLSwapProps {\n swapInfo: SwapInfo;\n Swap?: {\n pool_ids: string[];\n min_output_amount: string;\n };\n SwapByOutput?: {\n pool_ids: string[];\n output_amount: string;\n };\n LimitOrderWithSwap?: {\n pool_id: string;\n output_amount: string;\n };\n SwapByStopPoint?: {\n pool_id: string;\n stop_point: number;\n skip_unwrap_near: boolean;\n };\n AccountId: string;\n}\nexport const DCL_POOL_SPLITER = '|';\n\nexport const DCLSwap = async ({\n Swap,\n SwapByOutput,\n LimitOrderWithSwap,\n SwapByStopPoint,\n AccountId,\n swapInfo,\n}: DCLSwapProps) => {\n const transactions: Transaction[] = [];\n\n const { tokenA, tokenB, amountA } = swapInfo;\n\n if (Swap) {\n const pool_ids = Swap.pool_ids;\n\n const tokenRegistered = await ftGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: tokenB.id,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n\n const output_token = tokenB.id;\n const min_output_amount = toPrecision(Swap.min_output_amount, 0);\n\n const msg = JSON.stringify({\n Swap: {\n pool_ids,\n output_token,\n min_output_amount,\n client_id: '',\n },\n });\n\n transactions.push({\n receiverId: tokenA.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.REF_DCL_SWAP_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenA.decimals, amountA),\n msg,\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n } else if (SwapByOutput) {\n const pool_ids = SwapByOutput.pool_ids;\n const output_token = tokenB.id;\n const output_amount = toNonDivisibleNumber(\n tokenB.decimals,\n SwapByOutput.output_amount\n );\n const msg = JSON.stringify({\n SwapByOutput: {\n pool_ids,\n output_token,\n output_amount,\n client_id: '',\n },\n });\n const tokenRegistered = await ftGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: tokenB.id,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n\n transactions.push({\n receiverId: tokenA.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.REF_DCL_SWAP_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenA.decimals, amountA),\n msg,\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n } else if (LimitOrderWithSwap) {\n const pool_id = LimitOrderWithSwap.pool_id;\n\n const fee = Number(pool_id.split(DCL_POOL_SPLITER)[2]);\n\n const buy_token = tokenB.id;\n const point = priceToPoint({\n amountA,\n amountB: LimitOrderWithSwap.output_amount,\n tokenA,\n tokenB,\n fee,\n });\n\n const tokenRegistered = await ftGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: tokenB.id,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n\n const DCLRegistered = await DCLSwapGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (DCLRegistered === null) {\n transactions.push({\n receiverId: config.REF_DCL_SWAP_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'storage_deposit',\n args: {\n registration_only: true,\n account_id: AccountId,\n },\n gas: '30000000000000',\n amount: '0.5',\n },\n ],\n });\n }\n\n const new_point =\n pool_id.split(DCL_POOL_SPLITER)[0] === tokenA.id ? point : -point;\n\n const msg = JSON.stringify({\n LimitOrderWithSwap: {\n pool_id,\n buy_token,\n point: new_point,\n client_id: '',\n },\n });\n\n transactions.push({\n receiverId: tokenA.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.REF_DCL_SWAP_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenA.decimals, amountA),\n msg,\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n } else if (SwapByStopPoint) {\n const tokenRegistered = await ftGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: tokenB.id,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n const msg = JSON.stringify({\n SwapByStopPoint: SwapByStopPoint,\n });\n transactions.push({\n receiverId: tokenA.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.REF_DCL_SWAP_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenA.decimals, amountA),\n msg,\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n }\n\n if (tokenA.id === WRAP_NEAR_CONTRACT_ID) {\n const registered = await ftGetStorageBalance(\n WRAP_NEAR_CONTRACT_ID,\n AccountId\n );\n if (registered === null) {\n transactions.unshift({\n receiverId: WRAP_NEAR_CONTRACT_ID,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n }\n\n return transactions;\n};\n\nexport const quote = async ({\n pool_ids,\n input_amount,\n input_token,\n output_token,\n tag,\n}: {\n pool_ids: string[];\n input_token: TokenMetadata;\n output_token: TokenMetadata;\n input_amount: string;\n tag?: string;\n}) => {\n return refDCLSwapViewFunction({\n methodName: 'quote',\n args: {\n pool_ids,\n input_token: input_token.id,\n output_token: output_token.id,\n input_amount: toNonDivisibleNumber(input_token.decimals, input_amount),\n tag,\n },\n });\n};\n\nexport const list_user_assets = async (AccountId: string) => {\n if (!AccountId) return;\n\n return refDCLSwapViewFunction({\n methodName: 'list_user_assets',\n args: {\n account_id: AccountId,\n },\n });\n};\n\nexport const DCLSwapByInputOnBestPool = async ({\n tokenA,\n tokenB,\n amountA,\n slippageTolerance,\n AccountId,\n}: {\n tokenA: TokenMetadata;\n tokenB: TokenMetadata;\n amountA: string;\n slippageTolerance: number;\n AccountId: string;\n}) => {\n if (slippageTolerance <= 0 || slippageTolerance >= 100) {\n throw SlippageError;\n }\n\n const estimates = await Promise.all(\n DCL_POOL_FEE_LIST.map(async fee => {\n const pool_id = getDCLPoolId(tokenA.id, tokenB.id, fee);\n return quote({\n pool_ids: [pool_id],\n input_token: tokenA,\n output_token: tokenB,\n input_amount: amountA,\n tag: `${tokenA.id}-${fee}-${amountA}`,\n }).catch(e => null);\n })\n );\n\n if (!estimates || estimates.every(e => e === null)) {\n throw NoPoolOnThisPair(tokenA.id, tokenB.id);\n }\n\n const bestEstimate =\n estimates && estimates?.some(e => !!e)\n ? _.maxBy(estimates, e => Number(!e || !e.tag ? -1 : e.amount))\n : null;\n\n const bestFee =\n bestEstimate &&\n bestEstimate.tag &&\n bestEstimate?.tag?.split('-')?.[1] &&\n Number(bestEstimate?.tag?.split('-')?.[1]);\n\n return DCLSwap({\n swapInfo: {\n tokenA,\n tokenB,\n amountA,\n },\n Swap: {\n pool_ids: [getDCLPoolId(tokenA.id, tokenB.id, bestFee)],\n min_output_amount: percentLess(slippageTolerance, bestEstimate.amount),\n },\n AccountId,\n });\n};\n\nexport const quote_by_output = ({\n pool_ids,\n output_amount,\n input_token,\n output_token,\n}: {\n pool_ids: string[];\n input_token: TokenMetadata;\n output_token: TokenMetadata;\n output_amount: string;\n}) => {\n return refDCLSwapViewFunction({\n methodName: 'quote_by_output',\n args: {\n pool_ids,\n input_token: input_token.id,\n output_token: output_token.id,\n output_amount: toNonDivisibleNumber(output_token.decimals, output_amount),\n },\n });\n};\n","import { TokenMetadata, Transaction } from '../types';\nimport { NoOrderFound, OrderNoRemainedAmount } from '../error';\nimport {\n priceToPoint,\n toNonDivisibleNumber,\n toPrecision,\n registerAccountOnToken,\n} from '../utils';\nimport {\n ONE_YOCTO_NEAR,\n WRAP_NEAR_CONTRACT_ID,\n config,\n POINTLEFTRANGE,\n POINTRIGHTRANGE,\n} from '../constant';\nimport {\n nearDepositTransaction,\n ftGetStorageBalance,\n refDCLSwapViewFunction,\n} from '../ref';\n\nexport interface UserOrderInfo {\n order_id: string;\n owner_id: string;\n pool_id: string;\n point: number;\n sell_token: string;\n created_at: string;\n original_amount: string;\n remain_amount: string; // 0 means history order: ;\n cancel_amount: string;\n // amount through ft_transfer_call\n\n original_deposit_amount: string;\n // earn token amount through swap before actual place order\n\n swap_earn_amount: string;\n buy_token: string;\n unclaimed_amount: string; // claim will push it to inner account\n bought_amount: string; // accumalated amount into inner account\n}\n\nexport const list_history_orders = (AccountId: string) => {\n return refDCLSwapViewFunction({\n methodName: 'list_history_orders',\n args: {\n account_id: AccountId,\n },\n });\n};\n\nexport const list_active_orders = (AccountId: string) => {\n return refDCLSwapViewFunction({\n methodName: 'list_active_orders',\n args: {\n account_id: AccountId,\n },\n });\n};\n\nexport const get_order = async (order_id: string) => {\n return refDCLSwapViewFunction({\n methodName: 'get_order',\n args: {\n order_id,\n },\n }).catch(() => {\n throw NoOrderFound(order_id);\n });\n};\n\nexport const find_order = async ({\n pool_id,\n point,\n AccountId,\n}: {\n pool_id: string;\n point: number;\n AccountId: string;\n}) => {\n return refDCLSwapViewFunction({\n methodName: 'find_order',\n args: {\n account_id: AccountId,\n pool_id,\n point,\n },\n }).catch(() => {\n throw NoOrderFound();\n }) as Promise<UserOrderInfo>;\n};\nexport const cancel_order = async (order_id: string) => {\n const order = await get_order(order_id);\n\n if (!order.remain_amount) throw OrderNoRemainedAmount;\n\n const transactions: Transaction[] = [\n {\n receiverId: config.REF_DCL_SWAP_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'cancel_order',\n args: {\n order_id,\n amount: order.remain_amount,\n },\n gas: '180000000000000',\n },\n ],\n },\n ];\n\n return transactions;\n};\n\nexport const claim_order = (order_id: string) => {\n const transactions: Transaction[] = [\n {\n receiverId: config.REF_DCL_SWAP_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'cancel_order',\n args: {\n order_id,\n amount: '0',\n },\n gas: '180000000000000',\n },\n ],\n },\n ];\n\n return transactions;\n};\n\nexport const get_pointorder_range = ({\n pool_id,\n left_point,\n right_point,\n}: {\n pool_id: string;\n left_point?: number;\n right_point?: number;\n}) => {\n return refDCLSwapViewFunction({\n methodName: 'get_pointorder_range',\n args: {\n pool_id,\n left_point: left_point || POINTLEFTRANGE,\n right_point: right_point || POINTRIGHTRANGE,\n },\n });\n};\n"],"names":["FEE_DIVISOR","STABLE_LP_TOKEN_DECIMALS","RATED_POOL_LP_TOKEN_DECIMALS","STORAGE_TO_REGISTER_WITH_MFT","ONE_YOCTO_NEAR","ENV","getConfig","env","process","NEAR_ENV","REACT_APP_REF_SDK_ENV","networkId","nodeUrl","walletUrl","WRAP_NEAR_CONTRACT_ID","REF_FI_CONTRACT_ID","REF_TOKEN_ID","indexerUrl","explorerUrl","REF_DCL_SWAP_CONTRACT_ID","config","WNEAR_META_DATA","id","name","symbol","decimals","icon","REF_META_DATA","NEAR_META_DATA","TokenLinks","NEAR","wNEAR","REF","OCT","PARAS","SKYWARD","FLX","PULSE","DBIO","MYRIA","PXT","HAPI","OIN","ABR","MARMAJ","marmaj","USN","GRT","LINK","Cheddar","AURORA","$META","UMINT","UTO","DEIP","WOO","LINEAR","PEM","ATO","SEAT","FAR","BSTN","BRRR","XNL","KSW","STNEAR","NearX","SD","DISC","CONSTANT_D","POINTLEFTRANGE","POINTRIGHTRANGE","switchEnv","tradeFee","amount","trade_fee","calc_d","amp","c_amounts","token_num","length","sum_amounts","_","sum","d_prev","d","i","d_prod","c_amount","ann","numerator","denominator","Math","abs","calc_y","x_c_amount","current_c_amounts","index_x","index_y","s","c","b","y_prev","y","y_numerator","y_denominator","calc_swap","in_token_idx","in_c_amount","out_token_idx","old_c_amounts","dy","fee","amount_swapped","getSwappedAmount","tokenInId","tokenOutId","amountIn","stablePool","total_fee","token_account_ids","findIndex","rates","map","r","toReadableNumber","base_old_c_amounts","toNonDivisibleNumber","scientificNotationToString","Big","times","toString","Number","REF_WIDGET_STAR_TOKEN_LIST_KEY","REF_WIDGET_ALL_TOKENS_LIST_KEY","REF_WIDGET_ALL_LIGHT_TOKENS_LIST_KEY","REF_WIDGET_SWAP_IN_KEY","REF_WIDGET_SWAP_OUT_KEY","REF_WIDGET_SWAP_DETAIL_KEY","DEFAULT_START_TOKEN_LIST_TESTNET","DEFAULT_START_TOKEN_LIST_MAINNET","defaultTheme","container","buttonBg","primary","secondary","borderRadius","fontFamily","hover","active","secondaryBg","borderColor","iconDefault","iconHover","defaultDarkModeTheme","refIcon","icons","getTokenPriceList","fetch","method","headers","then","res","json","list","getTokens","reload","storagedTokens","window","localStorage","getItem","JSON","parse","tokens","newTokens","Object","values","reduce","acc","cur","keys","REPLACE_TOKENS","includes","metaIconDefaults","setItem","stringify","getTokensTiny","getWhiteListTokensIndexer","whiteListIds","RM","DP","NE","PE","checkIntegerSumOfAllocations","allocations","totalInput","item","round","alloSum","a","plus","offset","minus","currMax","currMaxInd","gt","newAllocations","j","push","yenFromPy","bisqrt","value","BigInt","newtonIteration","n","x0","x1","getBetaForRoute","route","path","p","beta","reserves","p1","p2","getEpsilonForRoute","gamma","div","epsilon","gamma1","gamma2","getAlphaForRoute","inputToken","outputToken","key1","token1Id","key2","token2Id","val1","token1Supply","val2","token2Supply","alpha","key11","key12","val11","val12","key21","key22","val21","val22","middleToken","alpha1","alpha2","getAlphaSumFromRoutes","routes","nodeRoutes","alphaSum","nodeRoute","radical","toFixed","denom","getBetaSumFromRoutes","betaSum","num","getPhiFromRoutes","phi","getAllocationForRoute","allocation","getAllocationVectorForRoutes","allocationVec","getOptimalAllocationForRoutes","every","lt","some","reduceRoutes","sumAllocations","normalizedAllocations","goodIndices","dx","newRoutes","newNodeRoutes","goodIndex","allocationDict","allocationVecNew","zeroAllocation","getNodeRoutesFromPathsAndPoolChains","paths","poolChains","multiplicity","pc","mul","elem1","elem2","m","k","getPoolChainFromPaths","pools","threshold","pathInd","chain","pairs","pairInd","pair","tokenPools","getPoolsByToken1ANDToken2","culledPoolChains","getCulledPoolChains","newChains","newPath","legInd","leg","culledPath","cullPoolsWithInsufficientLiquidity","getRoutesFromPoolChain","pci","poolChain","cartesianProduct","getOutputSingleHop","pool","getOutputDoubleHop","poolIndex","c1","a1","c2","b2","getOutputFromRoute","eq","output","getOptOutputVec","result","getBestOptInputAndOutput","rawDict","outputRaw","inputRaw","res1","res2","v","bv1","bv2","input","getBestOptimalAllocationsAndOutputs","maxPathLength","getPathsFromPools","outputs","inputOutput","getHopActionsFromRoutes","hops","hop","allRoutes","allNodeRoutes","totalInputAmount","allAllocations","middleTokenAllocation","getActionListFromRoutesAndAllocations","getSmartRouteSwapActions","allTokens","numberOfRoutesLimit","MAX_NUMBER_PARALLEL_POOLS","decimalsCulledPoolIds","filter","resDict","sortedIndexValues","argsort","topIndices","slice","reducedRoutes","reducedNodeRoutes","ind","currentBestOutput","bestAllocations","bestNodeRoutes","bestRoutes","parallelNodeRoutes","parallelRoutes","currentNodeRoute","bestRoutesAreParallel","filteredAllocationsAndOutputs","parallellAllocations","parallelOutputs","sortIndices","filteredParallelRoutes","filteredParallelNodeRoutes","parallelOutput","canHaveTwoRoutes","route1","route2","nodeRoute1","nodeRoute2","route1PoolIds","Set","route2PoolIds","sharePool","route1PoolId","has","currentRoutes","currentNodeRoutes","filteredAllocations","filteredOutputs","totalOutput","allSortedIndices","sortedIndices","filteredRoutes","filteredNodeRoutes","index","sharedRoute","allFilteredRoutes","allFilteredNodeRoutes","firstRoute","firstRoutePoolIds","allFilteredRouteIds","secondRoute","stringAllo","actions","ftGetTokenMetadata","hopInputTokenMeta","hopOutputTokenMeta","hopOutputTokenDecimals","expectedHopOutput","decimalEstimate","pow","status","Promise","all","t","estimate","gamma_bps","partialAmountIn","supplies","token0_ref_price","token0_price","tokenIds","Dex","token","routeInputToken","routeOutputToken","overallPriceImpact","x","calculateSmartRouteV2PriceImpact","action","deltaY","inputTokenMeta","deltaX","R","P","totalAllocations","weights","weight","routeMarketPrice","num1","denom1","num2","denom2","priceImpact","decor","arr","undecor","decorated","sort","token1","token2","cullZeroLiquidityPools","filteredPools","getLiqudityOfPoolsFromList","liquidities","poolInd","amounts","poolBigAmounts","liquidity","getNormalizedLiquiditiesFromList","maxLiq","bigMax","normalizedLiquidities","arrayOfBigs","maxElem","val","thresh","normLiq","flatMap","e","flat","addEdge","g","edge","src","dst","addEdges","edgeList","deleteEdge","gNew","e1","e2","deleteNode","node","nodeInd","nodeNow","dijkstra","graph","solutions","dist","parent","nearest","Infinity","ndist","adj","concat","shortestPath","ignore_nodes","ignore_edges","gTemp","edgeInd","edgeNow","solution","unshift","PathBuffer","sortedpaths","len","cost","arrayContains","pop","shift","splice","indexOf","arrayEquals","Array","isArray","obj","obj_json","itemInd","source","target","listA","listB","prev_path","sol","root","root_length","edgeToIgnore","spur","getKShortestPaths","gen","next","getGraphFromPoolList","poolList","transitions","stableSmart","smartRouteActions","getExpectedOutputFromActionsORIG","PoolMode","getSimplePoolEstimate","tokenIn","tokenOut","amount_with_fee","in_balance","out_balance","getStablePoolEstimate","getStablePoolDecimal","amountOut","isNaN","toPrecision","dyOut","noFeeAmountOut","singlePoolSwap","simplePools","stablePools","NoPoolError","parsedAmountIn","simplePoolsThisPair","isStablePool","estimatesSimplePool","stablePoolThisPair","sp","estimatesStablePool","find","maxSimplePoolEstimate","undefined","maxBy","maxStablePoolEstimate","getStablePoolsThisPair","getPoolsByTokens","getPoolEstimate","stablePoolDetail","getHybridStableSmart","stablePoolsDetail","isStablePoolToken","stablePoolsDetailById","pools1","pools2","pools1Right","pools2Right","candidatePools","otherStables","otherStable","stablePoolsThisPair","tmpPools","tobeAddedPools","middleTokens","p2s","ftGetTokensMetadata","cp","tokensMedata","BestPoolPair","poolPair","stablePoolDetailThisPair","spd","tmpPool1","tmpPool2","tokenMidId","tokenMidMeta","estimate1","SMART","estimate2","bestPool","STABLE","pool1","pool2","estimateSwap","options","SameInputTokenError","ONLY_ZEROS","test","ZeroInputError","enableSmartRouting","singleRouteEstimate","PARALLEL","inputPools","poolFormatter","simplePoolSmartRoutingActions","simplePoolSmartRoutingEstimate","hybridSmartRoutingRes","hybridSmartRoutingEstimate","gte","parsePool","shareSupply","shares_total_supply","tvl","pool_kind","shares","tokenId","poolId","minAmountOut","isInteger","ceil","convertToPercentDecimal","percent","math","percentOf","percentLess","notation","getGas","gas","BN","getAmount","utils","format","parseNearAmount","number","wholeStr","substring","fractionStr","padStart","replace","split","wholePart","fracPart","padEnd","strParam","flag","sysbol","negative","match","basis","ifFraction","formatWithCommas","pattern","precision","withCommas","atLeastOne","whole","decimal","str","lastIndexOf","transformTransactions","transactions","AccountId","parsedTransactions","signerId","receiverId","functionCalls","fc","type","params","methodName","args","toNumber","deposit","WalletSelectorTransactions","separateRoutes","curRoute","calculateExchangeRate","from","to","getAvgFee","estimates","forEach","getAccountName","account","network","niceAccountId","symbolsArr","multiply","factor1","factor2","toInternationalCurrencySystemLongString","labelValue","percentOfBigNumber","valueBig","percentBig","toRealSymbol","blackList","charAt","toUpperCase","calculateFeeCharge","total","calculateFeePercent","getExpectedOutputFromSwapTodos","calculateAmountReceived","big_in_balance","big_out_balance","constant_product","new_in_balance","new_out_balance","tokenOutReceived","calculateMarketPrice","cur_in_balance","cur_out_balance","calculateSmartRoutingPriceImpact","tokenInAmount","swapTodos","tokenMid","isPool1StablePool","isPool2StablePool","marketPrice1","marketPrice2","generalMarketPrice","tokenMidReceived","formattedTokenMidReceived","stableOutPool2","stablePool2","stableOut","newMarketPrice","PriceImpact","calcStableSwapPriceImpact","marketPrice","calculatePriceImpact","finalMarketPrice","separatedReceivedAmount","finalTokenOutReceived","calculateSmartRoutesV2PriceImpact","tokenInPara","priceImpactForRoutes","readablePartialAmountIn","rawRes","pre","getPriceImpact","PriceImpactValue","priceImpactValueSmartRouting","priceImpactValueSmartRoutingV2","error","subtraction","initialValue","toBeSubtract","getPoolAllocationPercents","partialAmounts","ps","fill","sortedAmount","sortBy","minIndexes","minIndex","finalPIndex","isMobile","screen","width","divide","getMax","String","getPointByPrice","pointDelta","price","decimalRate","noNeedSlot","point","log","point_int","point_int_slot","floor","feeToPointDelta","NoFeeToPool","priceToPoint","tokenA","tokenB","amountA","amountB","DCL_POOL_FEE_LIST","decimal_price_A_by_B","undecimal_price_A_by_B","pointToPrice","undecimal_price","registerAccountOnToken","registration_only","account_id","getKeyStore","keyStores","InMemoryKeyStore","BrowserLocalStorageKeyStore","provider","providers","JsonRpcProvider","url","getMemorySigner","keyPath","credentials","fs","readFileSync","credentialAccountId","NoCredential","AccountIdMisMatch","myKeyStore","setKey","KeyPair","fromString","private_key","signer","InMemorySigner","validateAccessKey","transaction","accessKey","permission","FunctionCall","receiver_id","method_names","parseFloat","getSignedTransactionsByMemoryKey","transactionsRef","block","finality","signedTransactions","getPublicKey","publicKey","NoPuiblicKeyError","query","request_type","public_key","InValidAccessKeyError","tx","nearTransactions","createTransaction","PublicKey","nonce","functionCall","serialize","base_decode","header","hash","signTransaction","signedTx","sendTransactionsByMemoryKey","results","sendTransaction","BANANA_ID","CHEDDAR_ID","CUCUMBER_ID","HAPI_ID","WOO_ID","near","Near","keyStore","init_env","refFiViewFunction","nearConnection","viewFunction","ftViewFunction","ftGetStorageBalance","NoAccountIdFound","ftGetBalance","getAccountNearBalance","getTotalPools","tag","TokenNotExistError","metadata","getGlobalWhitelist","ids","tokensMetadata","globalWhitelist","getUserRegisteredTokens","accountId","data","nearDepositTransaction","nearWithdrawTransaction","refDCLSwapViewFunction","DCLInValid","DCLSwapGetStorageBalance","getDCLPoolId","tokenSeq","join","listDCLPools","getDCLPool","pool_id","token_x","token_y","token_seq","new_pool_id","formatError","msg","Error","unNamedError","NotLoginError","SwapRouteError","NoLocalSignerError","NoPoolOnThisPair","SlippageError","NoOrderFound","order_id","OrderNoRemainedAmount","instantSwap","slippageTolerance","referralId","registerToken","tokenRegistered","registered","actionsList","allSwapsTokens","swapTokens","token_in","token_out","amount_in","min_amount_out","force","referral_id","DEFAULT_PAGE_LIMIT","BLACK_TOKEN_LIST","getRatedPoolDetail","pool_info","getUnRatedPoolDetail","getStablePools","getPool","getPoolByIds","pool_ids","getRefPools","page","perPage","from_index","limit","poolData","rawPool","fetchAllPools","min","totalPools","pages","unRatedPools","ratedPools","ThemeContext","createContext","ThemeContextProvider","customTheme","children","useState","theme","setTheme","useEffect","React","Provider","estimateValidator","totalPartialAmountIn","useAllTokens","setTokens","tokensLoading","setTokensLoading","fetchTokens","useTokensIndexer","defaultTokenList","tokenLoading","setTokenLoading","getTokensList","whiteList","globalWhiteListTokens","parsedTokens","newList","useRefPools","refreshTrigger","allPools","setAllPools","poolFetchingState","setPoolFetchingState","allStablePools","setAllStablePools","useSwap","onSwap","swapParams","setEstimates","canSwap","setCanSwap","swapError","setSwapError","setAmountOut","isEstimating","setIsEstimating","forceEstimate","setForceEstimate","rate","makeSwap","outEstimate","bigEstimate","curEstimate","getEstimate","expectAmountOut","estimateValidationPass","TokenPriceContext","useTokenPriceList","tokenPriceList","setTokenPriceList","TokenPriceContextProvider","useTokenBalnces","balances","setBalances","validTokens","balancesMap","textColor","displayValue","tokenInInfo","className","SmartRouteV2","tokensRaw","useContext","ParaTokenFrom","style","marginRight","Icon","alt","height","flexShrink","Hub","position","bottom","ArrowRight","DetailView","minReceived","storagedOpen","showDetail","setShowDetail","isRateReverse","setIsRateReverse","tokensPerRoute","swap","identicalRoutes","hub","percents","useMemo","priceImpactDisplay","displayRate","revertRate","revertDisplayRate","color","cursor","onClick","removeItem","FiChevronDown","FiChevronUp","RiExchangeFill","size","marginLeft","border","flexDirection","alignItems","justifyContent","RouterIcon","whiteSpace","minWidth","key","HalfAndMaxAmount","max","onChangeAmount","halfValue","hoverHalf","setHoverHalf","hoverMax","setHoverMax","background","onMouseEnter","onMouseLeave","half","TokenAmount","props","balance","reloading","onSelectToken","onForceUpdate","ref","useRef","hoverSelect","setHoverSelect","handleChange","current","setCustomValidity","curMax","RiRefreshLine","onWheel","blur","step","placeholder","onChange","disabled","onKeyDown","preventDefault","marginBottom","textAlign","fontSize","SlippageSelector","onChangeSlippageTolerance","showSlip","setShowSlip","invalid","setInValid","document","onclick","stopPropagation","paddingBottom","defaultValue","required","padding","IoWarning","StarToken","onDelete","hoverIcon","setHoverIcon","hoverClose","setHoverClose","top","right","boxShadow","IoCloseOutline","stroke","Token","isSticky","onClickPin","setHoverIndex","hoverIndex","displayBalance","hoverOutLink","setHoverOutLink","hoverPin","setHoverPin","HiOutlineExternalLink","marginTop","open","AiFillPushpin","AiOutlinePushpin","TokenListTable","starList","setStarList","currentSort","setCurrentSort","tokenSorting","b1","borderBottom","TiArrowSortedUp","TiArrowSortedDown","TokenSelector","onSelect","onClose","searchValue","setSearchValue","handleSearch","storagedStartList","DEFAULT_START_TOKEN_LIST","newStarList","starToken","tableListFilter","searchValueLower","toLowerCase","FiChevronLeft","FaSearch","evt","Slider","setHover","viewBox","xmlns","fillRule","clipRule","RefIcon","Loading","cx","cy","strokeWidth","strokeLinecap","Warning","y1","x2","y2","Success","left","gradientUnits","stopColor","Notification","state","detail","setOpen","setState","href","textDecoration","rel","fontWeight","AccountButton","onDisConnect","hoverAccount","setHoverAccount","SwapWidget","connection","transactionState","onConnect","defaultTokenIn","defaultTokenOut","darkMode","curTheme","STORAGED_TOKEN_IN","STORAGED_TOKEN_OUT","isSignedInProp","isSignedIn","setTokenIn","handleSetTokenIn","handleSetTokenOut","setTokenOut","tokenInBalance","setTokenInBalance","tokenOutBalance","setTokenOutBalance","notOpen","setNotOpen","widgetRoute","setWidgetRoute","setAmountIn","setSlippageTolerance","setRreshTrigger","defaultIn","defaultOut","wrapedId","available","handleSubmit","canSubmit","onSubmit","CgArrowsExchangeAltV","paddingTop","TiWarning","message","opacity","display","DefaultTestnetTokenList","spec","reference","reference_hash","DefaultMainnetTokenList","getDefaultTokenList","DCL_POOL_SPLITER","DCLSwap","Swap","SwapByOutput","LimitOrderWithSwap","SwapByStopPoint","swapInfo","output_token","min_output_amount","client_id","output_amount","buy_token","DCLRegistered","new_point","quote","input_amount","input_token","list_user_assets","DCLSwapByInputOnBestPool","bestEstimate","bestFee","quote_by_output","list_history_orders","list_active_orders","get_order","find_order","cancel_order","order","remain_amount","claim_order","get_pointorder_range","left_point","right_point"],"mappings":"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"}