@yodlpay/tokenlists 0.6.5 → 0.6.6

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":"tokenlists.cjs.production.min.js","sources":["../src/types.ts","../src/getVersionUpgrade.ts","../src/abis.ts","../src/versionComparator.ts","../src/diffTokenLists.ts","../src/index.ts","../src/isVersionUpdate.ts","../src/minVersionBump.ts","../src/nextVersion.ts"],"sourcesContent":["type ExtensionValue = string | number | boolean | null | undefined;\n\nexport enum TokenListTagNames {\n // Networks\n MAINNET = 'Mainnet',\n OPTIMISM = 'Optimism',\n ARBITRUM = 'Arbitrum',\n AVALANCHE = 'Avalanche',\n BASE = 'Base',\n TESTNET = 'TESTNET',\n\n // Coin/currency\n STABLECOIN = 'Stablecoin',\n USD = 'USD',\n EUR = 'EUR',\n\n // Misc\n TOP_10 = 'Top10',\n NATIVE_TOKEN = 'Native Token',\n}\n\nexport interface RouterInfo {\n readonly chainId: number;\n readonly address: string;\n readonly timestamp: string;\n readonly version: string;\n readonly fee: string;\n}\n\nexport interface TestnetFaucetInfo {\n readonly chainId: number;\n readonly address: string;\n readonly token: string;\n}\n\nexport interface ChainInfo {\n readonly chainId: number;\n readonly chainName: string;\n // shortName is the EIP3770 short name\n // chain details can be found here: https://github.com/ethereum-lists/chains/tree/master/_data/chains\n readonly shortName: string;\n readonly logoUri: string;\n readonly explorerUrl: string;\n readonly timestamp: string;\n readonly rpcUrls: string[];\n readonly wrappedNativeToken: string;\n readonly nativeTokenName: string;\n readonly feeTreasury?: string;\n readonly testnet: boolean;\n readonly priceFeeds?: {\n readonly [key: string]: string | undefined;\n };\n readonly tokenFeeds?: {\n readonly [key: string]: string | undefined;\n };\n readonly curveRouterAddress?: string;\n}\n\nexport interface TokenInfo {\n readonly chainId: number;\n readonly address: string;\n readonly name: string;\n readonly decimals: number;\n readonly symbol: string;\n readonly coinGeckoId?: string;\n readonly currency?: string;\n readonly logoUri?: string;\n readonly tags?: TokenListTagNames[];\n readonly extensions?: {\n readonly [key: string]:\n | {\n [key: string]:\n | {\n [key: string]: ExtensionValue;\n }\n | ExtensionValue;\n }\n | ExtensionValue;\n };\n}\n\nexport interface Version {\n readonly major: number;\n readonly minor: number;\n readonly patch: number;\n}\n\nexport interface TokenList {\n readonly name: string;\n readonly timestamp: string;\n readonly version: Version;\n readonly tokens: TokenInfo[];\n readonly keywords?: string[];\n readonly tags?: any;\n readonly logoUri?: string;\n}\n\nexport interface PriceFeed {\n readonly address: string;\n readonly name: string;\n readonly assetName: string;\n readonly type: string;\n readonly path: string;\n readonly input: string;\n readonly output: string;\n readonly deviation: number;\n readonly decimals: number;\n readonly updateInterval: number;\n readonly chainId: number;\n}\n\nexport interface FiatCurrency {\n readonly name: string;\n readonly symbol: string;\n readonly sign: string;\n}\n","import { Version } from \"./types\";\n\n/**\n * Enum describing types of version differences\n */\nexport enum VersionUpgrade {\n NONE,\n PATCH,\n MINOR,\n MAJOR,\n}\n\n/**\n * Return the upgrade type from the base version to the update version.\n * Note that downgrades and equivalent versions are both treated as `NONE`.\n * @param base base list\n * @param update update to the list\n */\nexport function getVersionUpgrade(\n base: Version,\n update: Version\n): VersionUpgrade {\n if (update.major > base.major) {\n return VersionUpgrade.MAJOR;\n }\n if (update.major < base.major) {\n return VersionUpgrade.NONE;\n }\n if (update.minor > base.minor) {\n return VersionUpgrade.MINOR;\n }\n if (update.minor < base.minor) {\n return VersionUpgrade.NONE;\n }\n return update.patch > base.patch ? VersionUpgrade.PATCH : VersionUpgrade.NONE;\n}\n","import CurveRouterV13Abi from \"./abis/curverouterv13.abi.json\";\nimport YodlRouterV01 from \"./abis/YodlRouterV0.1.abi.json\";\nimport YodlRouterV02 from \"./abis/YodlRouterV0.2.abi.json\";\nimport YodlRouterV03 from \"./abis/YodlRouterV0.3.abi.json\";\nimport YodlRouterV04 from \"./abis/YodlRouterV0.4.abi.json\";\nimport YodlRouterV05 from \"./abis/YodlRouterV0.5.abi.json\";\nimport YodlRouterV06 from \"./abis/YodlRouterV0.6.abi.json\";\n\nexport const YODL_ROUTER_ABIS: { [key: string]: any} = {\n \"0.1\": YodlRouterV01,\n \"0.2\": YodlRouterV02,\n \"0.3\": YodlRouterV03,\n \"0.4\": YodlRouterV04,\n \"0.5\": YodlRouterV05,\n \"0.6\": YodlRouterV06,\n \"test\": YodlRouterV03\n}\nexport const CURVE_ROUTER_ABI = CurveRouterV13Abi;\n","import { Version } from \"./types\";\n\n/**\n * Comparator function that allows sorting version from lowest to highest\n * @param versionA version A to compare\n * @param versionB version B to compare\n * @returns -1 if versionA comes before versionB, 0 if versionA is equal to version B, and 1 if version A comes after version B\n */\nexport function versionComparator(\n versionA: Version,\n versionB: Version\n): -1 | 0 | 1 {\n if (versionA.major < versionB.major) {\n return -1;\n } else if (versionA.major > versionB.major) {\n return 1;\n } else if (versionA.minor < versionB.minor) {\n return -1;\n } else if (versionA.minor > versionB.minor) {\n return 1;\n } else if (versionA.patch < versionB.patch) {\n return -1;\n } else if (versionA.patch > versionB.patch) {\n return 1;\n } else {\n return 0;\n }\n}\n","import { TokenInfo } from \"./types\";\n\nexport type TokenInfoChangeKey = Exclude<\n keyof TokenInfo,\n \"address\" | \"chainId\"\n>;\nexport type TokenInfoChanges = Array<TokenInfoChangeKey>;\n\n/**\n * compares two token info key values\n * this subset of full deep equal functionality does not work on objects or object arrays\n * @param a comparison item a\n * @param b comparison item b\n */\nfunction compareTokenInfoProperty(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a !== typeof b) return false;\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.every((el, i) => b[i] === el);\n }\n return false;\n}\n\n/**\n * Differences between a base list and an updated list.\n */\nexport interface TokenListDiff {\n /**\n * Tokens from updated with chainId/address not present in base list\n */\n readonly added: TokenInfo[];\n /**\n * Tokens from base with chainId/address not present in the updated list\n */\n readonly removed: TokenInfo[];\n /**\n * The token info that changed\n */\n readonly changed: {\n [chainId: number]: {\n [address: string]: TokenInfoChanges;\n };\n };\n}\n\n/**\n * Computes the diff of a token list where the first argument is the base and the second argument is the updated list.\n * @param base base list\n * @param update updated list\n */\nexport function diffTokenLists(\n base: TokenInfo[],\n update: TokenInfo[]\n): TokenListDiff {\n const indexedBase = base.reduce<{\n [chainId: number]: { [address: string]: TokenInfo };\n }>((memo, tokenInfo) => {\n if (!memo[tokenInfo.chainId]) memo[tokenInfo.chainId] = {};\n memo[tokenInfo.chainId][tokenInfo.address] = tokenInfo;\n return memo;\n }, {});\n\n const newListUpdates = update.reduce<{\n added: TokenInfo[];\n changed: {\n [chainId: number]: {\n [address: string]: TokenInfoChanges;\n };\n };\n index: {\n [chainId: number]: {\n [address: string]: true;\n };\n };\n }>(\n (memo, tokenInfo) => {\n const baseToken = indexedBase[tokenInfo.chainId]?.[tokenInfo.address];\n if (!baseToken) {\n memo.added.push(tokenInfo);\n } else {\n const changes: TokenInfoChanges = Object.keys(tokenInfo)\n .filter(\n (s): s is TokenInfoChangeKey => s !== \"address\" && s !== \"chainId\"\n )\n .filter((s) => {\n return !compareTokenInfoProperty(tokenInfo[s], baseToken[s]);\n });\n if (changes.length > 0) {\n if (!memo.changed[tokenInfo.chainId]) {\n memo.changed[tokenInfo.chainId] = {};\n }\n memo.changed[tokenInfo.chainId][tokenInfo.address] = changes;\n }\n }\n\n if (!memo.index[tokenInfo.chainId]) {\n memo.index[tokenInfo.chainId] = {\n [tokenInfo.address]: true,\n };\n } else {\n memo.index[tokenInfo.chainId][tokenInfo.address] = true;\n }\n\n return memo;\n },\n { added: [], changed: {}, index: {} }\n );\n\n const removed = base.reduce<TokenInfo[]>((list, curr) => {\n if (\n !newListUpdates.index[curr.chainId] ||\n !newListUpdates.index[curr.chainId][curr.address]\n ) {\n list.push(curr);\n }\n return list;\n }, []);\n\n return {\n added: newListUpdates.added,\n changed: newListUpdates.changed,\n removed,\n };\n}\n","import featuredTokenlist from './tokenlist-featured.json';\nimport generatedTokenlist from './tokenlist-generated.json';\nimport chainlist from './chainlist-v1.json';\nimport routerlist from './routerlist-v1.json';\nimport testnetfaucets from './testnet-faucets-v1.json';\nimport priceFeeds from './pricefeeds.json';\nimport fiatCurrencies from './fiatCurrencies.json';\nimport { ChainInfo, RouterInfo, TokenInfo, TestnetFaucetInfo } from './types';\n\nexport * from './abis';\nexport * from './types';\nexport * from './isVersionUpdate';\nexport * from './getVersionUpgrade';\nexport * from './diffTokenLists';\nexport * from './minVersionBump';\nexport * from './nextVersion';\nexport * from './versionComparator';\n\nconst tokenlist = featuredTokenlist.tokens.concat(\n //@ts-ignore\n generatedTokenlist.tokens as TokenInfo[]\n);\n\nexport function getChains(): ChainInfo[] {\n return chainlist.chains;\n}\n\nexport function getChain(chainId: number): ChainInfo {\n return chainlist.chains.find((needle: any) => {\n return needle.chainId === chainId;\n }) as ChainInfo;\n}\n\nexport function getTokenByAddress(\n tokenAddress: string,\n chainId?: number\n): TokenInfo | null {\n return (\n (tokenlist.find((token: any) => {\n return (\n token.address.toLowerCase() === tokenAddress.toLowerCase() &&\n (!chainId || token.chainId === chainId)\n );\n }) as TokenInfo) ?? null\n );\n}\n\nexport function getPriceFeeds(chainId: number) {\n return priceFeeds.filter(f => f.chainId === chainId);\n}\n\nexport function getTokenFeeds(chainId: number) {\n return priceFeeds.filter(f => f.chainId === chainId && f.type === 'crypto');\n}\n\nexport function getFiatFeeds(chainId: number) {\n return priceFeeds.filter(f => f.chainId === chainId && f.type === 'fiat');\n}\n\nexport function getFiatCurrency(symbol: string) {\n return fiatCurrencies.find(\n c => c.symbol.toLowerCase() === symbol.toLowerCase()\n );\n}\n\nexport function getFiatCurrencies() {\n return fiatCurrencies;\n}\n\nexport function getPriceFeed(\n chainId: number,\n baseSymbol: string,\n quoteSymbol?: string\n) {\n const _quoteSymbol = quoteSymbol ? quoteSymbol : 'USD';\n const feed = priceFeeds.find(\n f =>\n f.input?.toLowerCase() === baseSymbol.toLowerCase() &&\n f.output === _quoteSymbol &&\n f.chainId === chainId\n );\n if (feed) {\n return feed;\n } else {\n // feed not found, find any feed that matches the base symbol\n return priceFeeds.find(\n f =>\n f.input?.toLowerCase() === baseSymbol.toLowerCase() &&\n f.chainId === chainId\n );\n }\n}\n\nexport function getFeaturedTokenBySymbol(\n tokenSymbol: string,\n chainId?: number\n): TokenInfo | null {\n return (\n (featuredTokenlist.tokens.find((token: any) => {\n return (\n token.symbol.toLowerCase() === tokenSymbol.toLowerCase() &&\n (!chainId || token.chainId === chainId)\n );\n }) as TokenInfo) ?? null\n );\n}\n\nexport function getTokenBySymbol(\n tokenSymbol: string,\n chainId?: number\n): TokenInfo | null {\n const tokens = tokenlist.filter((token: any) => {\n return (\n token.symbol.toLowerCase() === tokenSymbol.toLowerCase() &&\n (!chainId || token.chainId === chainId)\n );\n }) as TokenInfo[];\n\n if (chainId && tokens && tokens.length > 1) {\n throw new Error(`Duplicate tokens found for symbol ${tokenSymbol}`);\n }\n\n return tokens.length > 0 ? tokens[0] : null;\n}\n\nexport function getTokens(chainId?: number): TokenInfo[] {\n return chainId\n ? (tokenlist.filter((needle: any) => {\n return needle.chainId === chainId;\n }) as TokenInfo[])\n : (tokenlist as TokenInfo[]);\n}\n\nexport function getFaucetAddress(tokenInfo: TokenInfo): TestnetFaucetInfo {\n return testnetfaucets.faucets.find((needle: any) => {\n return (\n needle.token.toLowerCase() === tokenInfo.address.toLowerCase() &&\n needle.chainId === tokenInfo.chainId\n );\n }) as TestnetFaucetInfo;\n}\n\nexport function getRouters(chainId: number): RouterInfo[] {\n return routerlist.routers.filter((needle: any) => {\n return needle.chainId === chainId;\n }) as RouterInfo[];\n}\n\nexport function getRouter(\n chainId: number,\n version: string\n): RouterInfo | undefined {\n return routerlist.routers.find((needle: any) => {\n return needle.chainId === chainId && needle.version === version;\n }) as RouterInfo;\n}\n\nexport function getRouterByAddress(\n address: string,\n chainId?: number\n): RouterInfo | undefined {\n const findByAddress = (router: RouterInfo) =>\n router.address.toLowerCase() === address.toLowerCase();\n\n const findByAddressAndChainId = (router: RouterInfo) =>\n router.address.toLowerCase() === address.toLowerCase() &&\n router.chainId == chainId;\n\n const filter = chainId ? findByAddressAndChainId : findByAddress;\n\n const routerInfo = routerlist.routers.find(filter);\n return routerInfo;\n}\n\nexport function getLatestRouter(chainId: number): RouterInfo {\n const sorted = getRouters(chainId).sort((a, b) => {\n return Date.parse(a.timestamp) - Date.parse(b.timestamp);\n });\n return sorted[sorted.length - 1];\n}\n\nexport function getShortNames(): string[] {\n return chainlist.chains.map(chain => chain.shortName);\n}\n\nexport function getNativeToken(chainId: number): string {\n return chainlist.chains.find(chain => chain.chainId === chainId)?.nativeTokenName!;\n}\n\nexport function getNativeWrappedToken(chainId: number): TokenInfo {\n const nativeTokens = featuredTokenlist.tokens.filter(\n t =>\n t.chainId === chainId &&\n t.tags.map(tag => tag.toLowerCase()).includes('wrapped') &&\n t.tags.map(tag => tag.toLowerCase()).includes('native token')\n ) as TokenInfo[];\n if (nativeTokens.length > 1) {\n throw new Error(\n `Found more than one native wrapped token for chain ${chainId}`\n );\n } else if (nativeTokens.length < 1) {\n throw new Error(`No native wrapped token found for chain ${chainId}`);\n }\n return nativeTokens[0];\n}\n","import { versionComparator } from './versionComparator';\nimport { Version } from './types';\n\n/**\n * Returns true if versionB is an update over versionA\n */\nexport function isVersionUpdate(base: Version, update: Version): boolean {\n return versionComparator(base, update) < 0;\n}","import { diffTokenLists } from \"./diffTokenLists\";\nimport { VersionUpgrade } from \"./getVersionUpgrade\";\nimport { TokenInfo } from \"./types\";\n\n/**\n * Returns the minimum version bump for the given list\n * @param baseList the base list of tokens\n * @param updatedList the updated list of tokens\n */\nexport function minVersionBump(\n baseList: TokenInfo[],\n updatedList: TokenInfo[]\n): VersionUpgrade {\n const diff = diffTokenLists(baseList, updatedList);\n if (diff.removed.length > 0) return VersionUpgrade.MAJOR;\n if (diff.added.length > 0) return VersionUpgrade.MINOR;\n if (Object.keys(diff.changed).length > 0) return VersionUpgrade.PATCH;\n return VersionUpgrade.NONE;\n}\n","import { VersionUpgrade } from \"./getVersionUpgrade\";\nimport { Version } from \"./types\";\n\n/**\n * Returns the next version of the list given a base version and the upgrade type\n * @param base current version\n * @param bump the upgrade type\n */\nexport function nextVersion(base: Version, bump: VersionUpgrade): Version {\n switch (bump) {\n case VersionUpgrade.NONE:\n return base;\n\n case VersionUpgrade.MAJOR:\n return { major: base.major + 1, minor: 0, patch: 0 };\n\n case VersionUpgrade.MINOR:\n return {\n major: base.major,\n minor: base.minor + 1,\n patch: 0,\n };\n\n case VersionUpgrade.PATCH:\n return {\n major: base.major,\n minor: base.minor,\n patch: base.patch + 1,\n };\n }\n}\n"],"names":["TokenListTagNames","VersionUpgrade","YODL_ROUTER_ABIS","0.1","0.2","0.3","YodlRouterV03","0.4","0.5","0.6","test","versionComparator","versionA","versionB","major","minor","patch","diffTokenLists","base","update","indexedBase","reduce","memo","tokenInfo","chainId","address","newListUpdates","baseToken","_indexedBase$tokenInf","changes","Object","keys","filter","s","a","b","Array","isArray","every","el","i","length","changed","added","push","index","removed","list","curr","tokenlist","featuredTokenlist","tokens","concat","generatedTokenlist","getRouters","routerlist","routers","needle","chainlist","chains","find","testnetfaucets","faucets","token","toLowerCase","tokenSymbol","symbol","fiatCurrencies","c","priceFeeds","f","type","sorted","sort","Date","parse","timestamp","chain","_chainlist$chains$fin","nativeTokenName","nativeTokens","t","tags","map","tag","includes","Error","baseSymbol","quoteSymbol","_quoteSymbol","input","output","version","router","shortName","tokenAddress","MAJOR","NONE","MINOR","PATCH","baseList","updatedList","diff","bump"],"mappings":"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"}
1
+ {"version":3,"file":"tokenlists.cjs.production.min.js","sources":["../src/types.ts","../src/getVersionUpgrade.ts","../src/abis.ts","../src/versionComparator.ts","../src/diffTokenLists.ts","../src/index.ts","../src/isVersionUpdate.ts","../src/minVersionBump.ts","../src/nextVersion.ts"],"sourcesContent":["type ExtensionValue = string | number | boolean | null | undefined;\n\nexport enum TokenListTagNames {\n // Networks\n MAINNET = 'Mainnet',\n OPTIMISM = 'Optimism',\n ARBITRUM = 'Arbitrum',\n AVALANCHE = 'Avalanche',\n BASE = 'Base',\n TESTNET = 'TESTNET',\n\n // Coin/currency\n STABLECOIN = 'Stablecoin',\n USD = 'USD',\n EUR = 'EUR',\n\n // Misc\n TOP_10 = 'Top10',\n NATIVE_TOKEN = 'Native Token',\n}\n\nexport interface RouterInfo {\n readonly chainId: number;\n readonly address: string;\n readonly timestamp: string;\n readonly version: string;\n readonly fee: string;\n}\n\nexport interface TestnetFaucetInfo {\n readonly chainId: number;\n readonly address: string;\n readonly token: string;\n}\n\nexport interface ChainInfo {\n readonly chainId: number;\n readonly chainName: string;\n // shortName is the EIP3770 short name\n // chain details can be found here: https://github.com/ethereum-lists/chains/tree/master/_data/chains\n readonly shortName: string;\n readonly logoUri: string;\n readonly explorerUrl: string;\n readonly timestamp: string;\n readonly rpcUrls: string[];\n readonly wrappedNativeToken: string;\n readonly nativeTokenName: string;\n readonly feeTreasury?: string;\n readonly testnet: boolean;\n readonly priceFeeds?: {\n readonly [key: string]: string | undefined;\n };\n readonly tokenFeeds?: {\n readonly [key: string]: string | undefined;\n };\n readonly curveRouterAddress?: string;\n}\n\nexport interface TokenInfo {\n readonly chainId: number;\n readonly address: string;\n readonly name: string;\n readonly decimals: number;\n readonly symbol: string;\n readonly coinGeckoId?: string;\n readonly currency?: string;\n readonly logoUri?: string;\n readonly tags?: TokenListTagNames[];\n readonly extensions?: {\n readonly [key: string]:\n | {\n [key: string]:\n | {\n [key: string]: ExtensionValue;\n }\n | ExtensionValue;\n }\n | ExtensionValue;\n };\n}\n\nexport interface Version {\n readonly major: number;\n readonly minor: number;\n readonly patch: number;\n}\n\nexport interface TokenList {\n readonly name: string;\n readonly timestamp: string;\n readonly version: Version;\n readonly tokens: TokenInfo[];\n readonly keywords?: string[];\n readonly tags?: any;\n readonly logoUri?: string;\n}\n\nexport interface PriceFeed {\n readonly address: string;\n readonly name: string;\n readonly assetName: string;\n readonly type: string;\n readonly path: string;\n readonly input: string;\n readonly output: string;\n readonly deviation: number;\n readonly decimals: number;\n readonly updateInterval: number;\n readonly chainId: number;\n}\n\nexport interface FiatCurrency {\n readonly name: string;\n readonly symbol: string;\n readonly sign: string;\n}\n","import { Version } from \"./types\";\n\n/**\n * Enum describing types of version differences\n */\nexport enum VersionUpgrade {\n NONE,\n PATCH,\n MINOR,\n MAJOR,\n}\n\n/**\n * Return the upgrade type from the base version to the update version.\n * Note that downgrades and equivalent versions are both treated as `NONE`.\n * @param base base list\n * @param update update to the list\n */\nexport function getVersionUpgrade(\n base: Version,\n update: Version\n): VersionUpgrade {\n if (update.major > base.major) {\n return VersionUpgrade.MAJOR;\n }\n if (update.major < base.major) {\n return VersionUpgrade.NONE;\n }\n if (update.minor > base.minor) {\n return VersionUpgrade.MINOR;\n }\n if (update.minor < base.minor) {\n return VersionUpgrade.NONE;\n }\n return update.patch > base.patch ? VersionUpgrade.PATCH : VersionUpgrade.NONE;\n}\n","import CurveRouterV13Abi from \"./abis/curverouterv13.abi.json\";\nimport YodlRouterV01 from \"./abis/YodlRouterV0.1.abi.json\";\nimport YodlRouterV02 from \"./abis/YodlRouterV0.2.abi.json\";\nimport YodlRouterV03 from \"./abis/YodlRouterV0.3.abi.json\";\nimport YodlRouterV04 from \"./abis/YodlRouterV0.4.abi.json\";\nimport YodlRouterV05 from \"./abis/YodlRouterV0.5.abi.json\";\nimport YodlRouterV06 from \"./abis/YodlRouterV0.6.abi.json\";\n\nexport const YODL_ROUTER_ABIS: { [key: string]: any} = {\n \"0.1\": YodlRouterV01,\n \"0.2\": YodlRouterV02,\n \"0.3\": YodlRouterV03,\n \"0.4\": YodlRouterV04,\n \"0.5\": YodlRouterV05,\n \"0.6\": YodlRouterV06,\n \"test\": YodlRouterV03\n}\nexport const CURVE_ROUTER_ABI = CurveRouterV13Abi;\n","import { Version } from \"./types\";\n\n/**\n * Comparator function that allows sorting version from lowest to highest\n * @param versionA version A to compare\n * @param versionB version B to compare\n * @returns -1 if versionA comes before versionB, 0 if versionA is equal to version B, and 1 if version A comes after version B\n */\nexport function versionComparator(\n versionA: Version,\n versionB: Version\n): -1 | 0 | 1 {\n if (versionA.major < versionB.major) {\n return -1;\n } else if (versionA.major > versionB.major) {\n return 1;\n } else if (versionA.minor < versionB.minor) {\n return -1;\n } else if (versionA.minor > versionB.minor) {\n return 1;\n } else if (versionA.patch < versionB.patch) {\n return -1;\n } else if (versionA.patch > versionB.patch) {\n return 1;\n } else {\n return 0;\n }\n}\n","import { TokenInfo } from \"./types\";\n\nexport type TokenInfoChangeKey = Exclude<\n keyof TokenInfo,\n \"address\" | \"chainId\"\n>;\nexport type TokenInfoChanges = Array<TokenInfoChangeKey>;\n\n/**\n * compares two token info key values\n * this subset of full deep equal functionality does not work on objects or object arrays\n * @param a comparison item a\n * @param b comparison item b\n */\nfunction compareTokenInfoProperty(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a !== typeof b) return false;\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.every((el, i) => b[i] === el);\n }\n return false;\n}\n\n/**\n * Differences between a base list and an updated list.\n */\nexport interface TokenListDiff {\n /**\n * Tokens from updated with chainId/address not present in base list\n */\n readonly added: TokenInfo[];\n /**\n * Tokens from base with chainId/address not present in the updated list\n */\n readonly removed: TokenInfo[];\n /**\n * The token info that changed\n */\n readonly changed: {\n [chainId: number]: {\n [address: string]: TokenInfoChanges;\n };\n };\n}\n\n/**\n * Computes the diff of a token list where the first argument is the base and the second argument is the updated list.\n * @param base base list\n * @param update updated list\n */\nexport function diffTokenLists(\n base: TokenInfo[],\n update: TokenInfo[]\n): TokenListDiff {\n const indexedBase = base.reduce<{\n [chainId: number]: { [address: string]: TokenInfo };\n }>((memo, tokenInfo) => {\n if (!memo[tokenInfo.chainId]) memo[tokenInfo.chainId] = {};\n memo[tokenInfo.chainId][tokenInfo.address] = tokenInfo;\n return memo;\n }, {});\n\n const newListUpdates = update.reduce<{\n added: TokenInfo[];\n changed: {\n [chainId: number]: {\n [address: string]: TokenInfoChanges;\n };\n };\n index: {\n [chainId: number]: {\n [address: string]: true;\n };\n };\n }>(\n (memo, tokenInfo) => {\n const baseToken = indexedBase[tokenInfo.chainId]?.[tokenInfo.address];\n if (!baseToken) {\n memo.added.push(tokenInfo);\n } else {\n const changes: TokenInfoChanges = Object.keys(tokenInfo)\n .filter(\n (s): s is TokenInfoChangeKey => s !== \"address\" && s !== \"chainId\"\n )\n .filter((s) => {\n return !compareTokenInfoProperty(tokenInfo[s], baseToken[s]);\n });\n if (changes.length > 0) {\n if (!memo.changed[tokenInfo.chainId]) {\n memo.changed[tokenInfo.chainId] = {};\n }\n memo.changed[tokenInfo.chainId][tokenInfo.address] = changes;\n }\n }\n\n if (!memo.index[tokenInfo.chainId]) {\n memo.index[tokenInfo.chainId] = {\n [tokenInfo.address]: true,\n };\n } else {\n memo.index[tokenInfo.chainId][tokenInfo.address] = true;\n }\n\n return memo;\n },\n { added: [], changed: {}, index: {} }\n );\n\n const removed = base.reduce<TokenInfo[]>((list, curr) => {\n if (\n !newListUpdates.index[curr.chainId] ||\n !newListUpdates.index[curr.chainId][curr.address]\n ) {\n list.push(curr);\n }\n return list;\n }, []);\n\n return {\n added: newListUpdates.added,\n changed: newListUpdates.changed,\n removed,\n };\n}\n","import featuredTokenlist from './tokenlist-featured.json';\nimport generatedTokenlist from './tokenlist-generated.json';\nimport chainlist from './chainlist-v1.json';\nimport routerlist from './routerlist-v1.json';\nimport priceFeeds from './pricefeeds.json';\nimport fiatCurrencies from './fiatCurrencies.json';\nimport { ChainInfo, RouterInfo, TokenInfo, TestnetFaucetInfo } from './types';\n\nexport * from './abis';\nexport * from './types';\nexport * from './isVersionUpdate';\nexport * from './getVersionUpgrade';\nexport * from './diffTokenLists';\nexport * from './minVersionBump';\nexport * from './nextVersion';\nexport * from './versionComparator';\n\nconst tokenlist = featuredTokenlist.tokens.concat(\n //@ts-ignore\n generatedTokenlist.tokens as TokenInfo[]\n);\n\nexport function getChains(): ChainInfo[] {\n return chainlist.chains;\n}\n\nexport function getChain(chainId: number): ChainInfo {\n return chainlist.chains.find((needle: any) => {\n return needle.chainId === chainId;\n }) as ChainInfo;\n}\n\nexport function getTokenByAddress(\n tokenAddress: string,\n chainId?: number\n): TokenInfo | null {\n return (\n (tokenlist.find((token: any) => {\n return (\n token.address.toLowerCase() === tokenAddress.toLowerCase() &&\n (!chainId || token.chainId === chainId)\n );\n }) as TokenInfo) ?? null\n );\n}\n\nexport function getPriceFeeds(chainId: number) {\n return priceFeeds.filter(f => f.chainId === chainId);\n}\n\nexport function getTokenFeeds(chainId: number) {\n return priceFeeds.filter(f => f.chainId === chainId && f.type === 'crypto');\n}\n\nexport function getFiatFeeds(chainId: number) {\n return priceFeeds.filter(f => f.chainId === chainId && f.type === 'fiat');\n}\n\nexport function getFiatCurrency(symbol: string) {\n return fiatCurrencies.find(\n c => c.symbol.toLowerCase() === symbol.toLowerCase()\n );\n}\n\nexport function getFiatCurrencies() {\n return fiatCurrencies;\n}\n\nexport function getPriceFeed(\n chainId: number,\n baseSymbol: string,\n quoteSymbol?: string\n) {\n const _quoteSymbol = quoteSymbol ? quoteSymbol : 'USD';\n const feed = priceFeeds.find(\n f =>\n f.input?.toLowerCase() === baseSymbol.toLowerCase() &&\n f.output === _quoteSymbol &&\n f.chainId === chainId\n );\n if (feed) {\n return feed;\n } else {\n // feed not found, find any feed that matches the base symbol\n return priceFeeds.find(\n f =>\n f.input?.toLowerCase() === baseSymbol.toLowerCase() &&\n f.chainId === chainId\n );\n }\n}\n\nexport function getFeaturedTokenBySymbol(\n tokenSymbol: string,\n chainId?: number\n): TokenInfo | null {\n return (\n (featuredTokenlist.tokens.find((token: any) => {\n return (\n token.symbol.toLowerCase() === tokenSymbol.toLowerCase() &&\n (!chainId || token.chainId === chainId)\n );\n }) as TokenInfo) ?? null\n );\n}\n\nexport function getTokenBySymbol(\n tokenSymbol: string,\n chainId?: number\n): TokenInfo | null {\n const tokens = tokenlist.filter((token: any) => {\n return (\n token.symbol.toLowerCase() === tokenSymbol.toLowerCase() &&\n (!chainId || token.chainId === chainId)\n );\n }) as TokenInfo[];\n\n if (chainId && tokens && tokens.length > 1) {\n throw new Error(`Duplicate tokens found for symbol ${tokenSymbol}`);\n }\n\n return tokens.length > 0 ? tokens[0] : null;\n}\n\nexport function getTokens(chainId?: number): TokenInfo[] {\n return chainId\n ? (tokenlist.filter((needle: any) => {\n return needle.chainId === chainId;\n }) as TokenInfo[])\n : (tokenlist as TokenInfo[]);\n}\n\nexport function getRouters(chainId: number): RouterInfo[] {\n return routerlist.routers.filter((needle: any) => {\n return needle.chainId === chainId;\n }) as RouterInfo[];\n}\n\nexport function getRouter(\n chainId: number,\n version: string\n): RouterInfo | undefined {\n return routerlist.routers.find((needle: any) => {\n return needle.chainId === chainId && needle.version === version;\n }) as RouterInfo;\n}\n\nexport function getRouterByAddress(\n address: string,\n chainId?: number\n): RouterInfo | undefined {\n const findByAddress = (router: RouterInfo) =>\n router.address.toLowerCase() === address.toLowerCase();\n\n const findByAddressAndChainId = (router: RouterInfo) =>\n router.address.toLowerCase() === address.toLowerCase() &&\n router.chainId == chainId;\n\n const filter = chainId ? findByAddressAndChainId : findByAddress;\n\n const routerInfo = routerlist.routers.find(filter);\n return routerInfo;\n}\n\nexport function getLatestRouter(chainId: number): RouterInfo {\n const sorted = getRouters(chainId).sort((a, b) => {\n return Date.parse(a.timestamp) - Date.parse(b.timestamp);\n });\n return sorted[sorted.length - 1];\n}\n\nexport function getShortNames(): string[] {\n return chainlist.chains.map(chain => chain.shortName);\n}\n\nexport function getNativeToken(chainId: number): string {\n return chainlist.chains.find(chain => chain.chainId === chainId)?.nativeTokenName!;\n}\n\nexport function getNativeWrappedToken(chainId: number): TokenInfo {\n const nativeTokens = featuredTokenlist.tokens.filter(\n t =>\n t.chainId === chainId &&\n t.tags.map(tag => tag.toLowerCase()).includes('wrapped') &&\n t.tags.map(tag => tag.toLowerCase()).includes('native token')\n ) as TokenInfo[];\n if (nativeTokens.length > 1) {\n throw new Error(\n `Found more than one native wrapped token for chain ${chainId}`\n );\n } else if (nativeTokens.length < 1) {\n throw new Error(`No native wrapped token found for chain ${chainId}`);\n }\n return nativeTokens[0];\n}\n","import { versionComparator } from './versionComparator';\nimport { Version } from './types';\n\n/**\n * Returns true if versionB is an update over versionA\n */\nexport function isVersionUpdate(base: Version, update: Version): boolean {\n return versionComparator(base, update) < 0;\n}","import { diffTokenLists } from \"./diffTokenLists\";\nimport { VersionUpgrade } from \"./getVersionUpgrade\";\nimport { TokenInfo } from \"./types\";\n\n/**\n * Returns the minimum version bump for the given list\n * @param baseList the base list of tokens\n * @param updatedList the updated list of tokens\n */\nexport function minVersionBump(\n baseList: TokenInfo[],\n updatedList: TokenInfo[]\n): VersionUpgrade {\n const diff = diffTokenLists(baseList, updatedList);\n if (diff.removed.length > 0) return VersionUpgrade.MAJOR;\n if (diff.added.length > 0) return VersionUpgrade.MINOR;\n if (Object.keys(diff.changed).length > 0) return VersionUpgrade.PATCH;\n return VersionUpgrade.NONE;\n}\n","import { VersionUpgrade } from \"./getVersionUpgrade\";\nimport { Version } from \"./types\";\n\n/**\n * Returns the next version of the list given a base version and the upgrade type\n * @param base current version\n * @param bump the upgrade type\n */\nexport function nextVersion(base: Version, bump: VersionUpgrade): Version {\n switch (bump) {\n case VersionUpgrade.NONE:\n return base;\n\n case VersionUpgrade.MAJOR:\n return { major: base.major + 1, minor: 0, patch: 0 };\n\n case VersionUpgrade.MINOR:\n return {\n major: base.major,\n minor: base.minor + 1,\n patch: 0,\n };\n\n case VersionUpgrade.PATCH:\n return {\n major: base.major,\n minor: base.minor,\n patch: base.patch + 1,\n };\n }\n}\n"],"names":["TokenListTagNames","VersionUpgrade","YODL_ROUTER_ABIS","0.1","0.2","0.3","YodlRouterV03","0.4","0.5","0.6","test","versionComparator","versionA","versionB","major","minor","patch","diffTokenLists","base","update","indexedBase","reduce","memo","tokenInfo","chainId","address","newListUpdates","baseToken","_indexedBase$tokenInf","changes","Object","keys","filter","s","a","b","Array","isArray","every","el","i","length","changed","added","push","index","removed","list","curr","tokenlist","featuredTokenlist","tokens","concat","generatedTokenlist","getRouters","routerlist","routers","needle","chainlist","chains","find","tokenSymbol","token","symbol","toLowerCase","fiatCurrencies","c","priceFeeds","f","type","sorted","sort","Date","parse","timestamp","chain","_chainlist$chains$fin","nativeTokenName","nativeTokens","t","tags","map","tag","includes","Error","baseSymbol","quoteSymbol","_quoteSymbol","input","output","version","router","shortName","tokenAddress","MAJOR","NONE","MINOR","PATCH","baseList","updatedList","diff","bump"],"mappings":"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"}
@@ -837,167 +837,78 @@ var tokens = [
837
837
  {
838
838
  chainId: 1,
839
839
  coinGeckoId: "usdm",
840
- name: "USDM",
840
+ name: "Mountain Protocol USD",
841
841
  symbol: "USDM",
842
- currency: "USD",
843
- logoUri: "https://assets.coingecko.com/coins/images/31719/standard/usdm.png",
842
+ logoUri: "https://raw.githubusercontent.com/yodlpay/tokenlists/main/logos/tokens/USDM.svg",
844
843
  decimals: 18,
844
+ currency: "USD",
845
845
  tags: [
846
846
  "Mainnet",
847
847
  "Stablecoin",
848
- "USD",
849
- "featured"
848
+ "featured",
849
+ "USD"
850
850
  ],
851
- address: "0x59D9356E565Ab3A36dD77763Fc0d87fEaf85508C"
851
+ address: "0x59d9356e565ab3a36dd77763fc0d87feaf85508c"
852
852
  },
853
853
  {
854
854
  chainId: 10,
855
855
  coinGeckoId: "usdm",
856
- name: "USDM",
856
+ name: "Mountain Protocol USD",
857
857
  symbol: "USDM",
858
- currency: "USD",
859
- logoUri: "https://assets.coingecko.com/coins/images/31719/standard/usdm.png",
858
+ logoUri: "https://raw.githubusercontent.com/yodlpay/tokenlists/main/logos/tokens/USDM.svg",
860
859
  decimals: 18,
860
+ currency: "USD",
861
861
  tags: [
862
- "Optimism",
863
862
  "Stablecoin",
864
- "USD",
865
- "featured"
863
+ "featured",
864
+ "USD"
866
865
  ],
867
- address: "0x59D9356E565Ab3A36dD77763Fc0d87fEaf85508C"
866
+ address: "0x59d9356e565ab3a36dd77763fc0d87feaf85508c"
868
867
  },
869
868
  {
870
869
  chainId: 137,
871
870
  coinGeckoId: "usdm",
872
- name: "USDM",
871
+ name: "Mountain Protocol USD",
873
872
  symbol: "USDM",
874
- currency: "USD",
875
- logoUri: "https://assets.coingecko.com/coins/images/31719/standard/usdm.png",
873
+ logoUri: "https://raw.githubusercontent.com/yodlpay/tokenlists/main/logos/tokens/USDM.svg",
876
874
  decimals: 18,
875
+ currency: "USD",
877
876
  tags: [
878
- "Polygon",
879
877
  "Stablecoin",
880
- "USD",
881
- "featured"
878
+ "featured",
879
+ "USD"
882
880
  ],
883
- address: "0x59D9356E565Ab3A36dD77763Fc0d87fEaf85508C"
881
+ address: "0x59d9356e565ab3a36dd77763fc0d87feaf85508c"
884
882
  },
885
883
  {
886
884
  chainId: 8453,
887
885
  coinGeckoId: "usdm",
888
- name: "USDM",
886
+ name: "Mountain Protocol USD",
889
887
  symbol: "USDM",
890
- currency: "USD",
891
- logoUri: "https://assets.coingecko.com/coins/images/31719/standard/usdm.png",
888
+ logoUri: "https://raw.githubusercontent.com/yodlpay/tokenlists/main/logos/tokens/USDM.svg",
892
889
  decimals: 18,
890
+ currency: "USD",
893
891
  tags: [
894
- "Base",
895
892
  "Stablecoin",
896
- "USD",
897
- "featured"
893
+ "featured",
894
+ "USD"
898
895
  ],
899
- address: "0x59D9356E565Ab3A36dD77763Fc0d87fEaf85508C"
896
+ address: "0x59d9356e565ab3a36dd77763fc0d87feaf85508c"
900
897
  },
901
898
  {
902
899
  chainId: 42161,
903
900
  coinGeckoId: "usdm",
904
- name: "USDM",
901
+ name: "Mountain Protocol USD",
905
902
  symbol: "USDM",
906
- currency: "USD",
907
- logoUri: "https://assets.coingecko.com/coins/images/31719/standard/usdm.png",
908
- decimals: 18,
909
- tags: [
910
- "Arbitrum",
911
- "Stablecoin",
912
- "USD",
913
- "featured"
914
- ],
915
- address: "0x59D9356E565Ab3A36dD77763Fc0d87fEaf85508C"
916
- },
917
- {
918
- chainId: 1,
919
- coinGeckoId: "wusdm",
920
- name: "Wrapped USDM",
921
- symbol: "wUSDM",
922
- currency: "USD",
923
- logoUri: "https://assets.coingecko.com/coins/images/31719/standard/usdm.png",
924
- decimals: 18,
925
- tags: [
926
- "Mainnet",
927
- "Stablecoin",
928
- "USD",
929
- "featured",
930
- "wrapped"
931
- ],
932
- address: "0x57F5E098CaD7A3D1Eed53991D4d66C45C9AF7812"
933
- },
934
- {
935
- chainId: 10,
936
- coinGeckoId: "wusdm",
937
- name: "Wrapped USDM",
938
- symbol: "wUSDM",
939
- currency: "USD",
940
- logoUri: "https://assets.coingecko.com/coins/images/31719/standard/usdm.png",
941
- decimals: 18,
942
- tags: [
943
- "Optimism",
944
- "Stablecoin",
945
- "USD",
946
- "featured",
947
- "wrapped"
948
- ],
949
- address: "0x57F5E098CaD7A3D1Eed53991D4d66C45C9AF7812"
950
- },
951
- {
952
- chainId: 137,
953
- coinGeckoId: "wusdm",
954
- name: "Wrapped USDM",
955
- symbol: "wUSDM",
956
- currency: "USD",
957
- logoUri: "https://assets.coingecko.com/coins/images/31719/standard/usdm.png",
903
+ logoUri: "https://raw.githubusercontent.com/yodlpay/tokenlists/main/logos/tokens/USDM.svg",
958
904
  decimals: 18,
959
- tags: [
960
- "Polygon",
961
- "Stablecoin",
962
- "USD",
963
- "featured",
964
- "wrapped"
965
- ],
966
- address: "0x57F5E098CaD7A3D1Eed53991D4d66C45C9AF7812"
967
- },
968
- {
969
- chainId: 8453,
970
- coinGeckoId: "wusdm",
971
- name: "Wrapped USDM",
972
- symbol: "wUSDM",
973
905
  currency: "USD",
974
- logoUri: "https://assets.coingecko.com/coins/images/31719/standard/usdm.png",
975
- decimals: 18,
976
906
  tags: [
977
- "Base",
978
907
  "Stablecoin",
979
- "USD",
980
908
  "featured",
981
- "wrapped"
909
+ "USD"
982
910
  ],
983
- address: "0x57F5E098CaD7A3D1Eed53991D4d66C45C9AF7812"
984
- },
985
- {
986
- chainId: 42161,
987
- coinGeckoId: "wusdm",
988
- name: "Wrapped USDM",
989
- symbol: "wUSDM",
990
- currency: "USD",
991
- logoUri: "https://assets.coingecko.com/coins/images/31719/standard/usdm.png",
992
- decimals: 18,
993
- tags: [
994
- "Arbitrum",
995
- "Stablecoin",
996
- "USD",
997
- "featured",
998
- "wrapped"
999
- ],
1000
- address: "0x57F5E098CaD7A3D1Eed53991D4d66C45C9AF7812"
911
+ address: "0x59d9356e565ab3a36dd77763fc0d87feaf85508c"
1001
912
  }
1002
913
  ];
1003
914
  var featuredTokenlist = {
@@ -3521,7 +3432,7 @@ var routers = [
3521
3432
  },
3522
3433
  {
3523
3434
  chainId: 10,
3524
- address: "0xE3A0bc3483AE5a04DB7eF2954315133a6F7D228E",
3435
+ address: "0xE39b811C7c393990F201f1C8836C1fC637029Ad7",
3525
3436
  timestamp: "2024-07-17T00:00:00+00:00",
3526
3437
  version: "0.6",
3527
3438
  fee: "0.002"
@@ -3563,7 +3474,7 @@ var routers = [
3563
3474
  },
3564
3475
  {
3565
3476
  chainId: 42161,
3566
- address: "0x9179F20b028eCbfcb7C3ADa495b5A30D4c437ffd",
3477
+ address: "0xE39b811C7c393990F201f1C8836C1fC637029Ad7",
3567
3478
  timestamp: "2024-07-17T00:00:00+00:00",
3568
3479
  version: "0.6",
3569
3480
  fee: "0.002"
@@ -3640,7 +3551,7 @@ var routers = [
3640
3551
  },
3641
3552
  {
3642
3553
  chainId: 137,
3643
- address: "0xe661A19f908518F4066bE0469Fc0dA31c941AE31",
3554
+ address: "0xE39b811C7c393990F201f1C8836C1fC637029Ad7",
3644
3555
  timestamp: "2024-07-17T00:00:00+00:00",
3645
3556
  version: "0.6",
3646
3557
  fee: "0.002"
@@ -3682,7 +3593,7 @@ var routers = [
3682
3593
  },
3683
3594
  {
3684
3595
  chainId: 8453,
3685
- address: "0x9357cfD027683c069481ed35326477C0dFd32DA5",
3596
+ address: "0x34AAD7D735992A8e3Be4734E84dC17091E3B451F",
3686
3597
  timestamp: "2024-07-17T00:00:00+00:00",
3687
3598
  version: "0.6",
3688
3599
  fee: "0.002"
@@ -3696,7 +3607,7 @@ var routers = [
3696
3607
  },
3697
3608
  {
3698
3609
  chainId: 56,
3699
- address: "0x89FFb0e7F24da36E692F2e57e379348C6ce8f59b",
3610
+ address: "0xE39b811C7c393990F201f1C8836C1fC637029Ad7",
3700
3611
  timestamp: "2024-07-17T00:00:00+00:00",
3701
3612
  version: "0.6",
3702
3613
  fee: "0.002"
@@ -3710,40 +3621,6 @@ var routerlist = {
3710
3621
  routers: routers
3711
3622
  };
3712
3623
 
3713
- var name$2 = "Default";
3714
- var logoUri$2 = "";
3715
- var keywords$2 = [
3716
- ];
3717
- var version$2 = {
3718
- major: 0,
3719
- minor: 0,
3720
- patch: 1
3721
- };
3722
- var faucets = [
3723
- {
3724
- chainId: 5,
3725
- token: "0x33ca3889bb0032e9c3794b608a242d27e7293353",
3726
- address: "0xd2bc1d97793763b7262987a67f1945169c763389"
3727
- },
3728
- {
3729
- chainId: 5,
3730
- token: "0xe5768E2dDEc1E50Ac2672a2d75D63d36A8Ec88d9",
3731
- address: "0x5A3380C7d6A05AF3Ce68C939142658C35Efc066d"
3732
- },
3733
- {
3734
- chainId: 5,
3735
- token: "0xeB87E5d9c773d3E802989295147564985B5B358C",
3736
- address: "0xF47661BCe78194b44675547873ef58Ca8Db9b145"
3737
- }
3738
- ];
3739
- var testnetfaucets = {
3740
- name: name$2,
3741
- logoUri: logoUri$2,
3742
- keywords: keywords$2,
3743
- version: version$2,
3744
- faucets: faucets
3745
- };
3746
-
3747
3624
  var priceFeeds = [
3748
3625
  {
3749
3626
  decimals: 8,
@@ -15206,11 +15083,6 @@ function getTokens(chainId) {
15206
15083
  return needle.chainId === chainId;
15207
15084
  }) : tokenlist;
15208
15085
  }
15209
- function getFaucetAddress(tokenInfo) {
15210
- return testnetfaucets.faucets.find(function (needle) {
15211
- return needle.token.toLowerCase() === tokenInfo.address.toLowerCase() && needle.chainId === tokenInfo.chainId;
15212
- });
15213
- }
15214
15086
  function getRouters(chainId) {
15215
15087
  return routerlist.routers.filter(function (needle) {
15216
15088
  return needle.chainId === chainId;
@@ -15270,5 +15142,5 @@ function getNativeWrappedToken(chainId) {
15270
15142
  return nativeTokens[0];
15271
15143
  }
15272
15144
 
15273
- export { CURVE_ROUTER_ABI, TokenListTagNames, VersionUpgrade, YODL_ROUTER_ABIS, diffTokenLists, getChain, getChains, getFaucetAddress, getFeaturedTokenBySymbol, getFiatCurrencies, getFiatCurrency, getFiatFeeds, getLatestRouter, getNativeToken, getNativeWrappedToken, getPriceFeed, getPriceFeeds, getRouter, getRouterByAddress, getRouters, getShortNames, getTokenByAddress, getTokenBySymbol, getTokenFeeds, getTokens, getVersionUpgrade, isVersionUpdate, minVersionBump, nextVersion, versionComparator };
15145
+ export { CURVE_ROUTER_ABI, TokenListTagNames, VersionUpgrade, YODL_ROUTER_ABIS, diffTokenLists, getChain, getChains, getFeaturedTokenBySymbol, getFiatCurrencies, getFiatCurrency, getFiatFeeds, getLatestRouter, getNativeToken, getNativeWrappedToken, getPriceFeed, getPriceFeeds, getRouter, getRouterByAddress, getRouters, getShortNames, getTokenByAddress, getTokenBySymbol, getTokenFeeds, getTokens, getVersionUpgrade, isVersionUpdate, minVersionBump, nextVersion, versionComparator };
15274
15146
  //# sourceMappingURL=tokenlists.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tokenlists.esm.js","sources":["../src/abis.ts","../src/types.ts","../src/versionComparator.ts","../src/isVersionUpdate.ts","../src/getVersionUpgrade.ts","../src/diffTokenLists.ts","../src/minVersionBump.ts","../src/nextVersion.ts","../src/index.ts"],"sourcesContent":["import CurveRouterV13Abi from \"./abis/curverouterv13.abi.json\";\nimport YodlRouterV01 from \"./abis/YodlRouterV0.1.abi.json\";\nimport YodlRouterV02 from \"./abis/YodlRouterV0.2.abi.json\";\nimport YodlRouterV03 from \"./abis/YodlRouterV0.3.abi.json\";\nimport YodlRouterV04 from \"./abis/YodlRouterV0.4.abi.json\";\nimport YodlRouterV05 from \"./abis/YodlRouterV0.5.abi.json\";\nimport YodlRouterV06 from \"./abis/YodlRouterV0.6.abi.json\";\n\nexport const YODL_ROUTER_ABIS: { [key: string]: any} = {\n \"0.1\": YodlRouterV01,\n \"0.2\": YodlRouterV02,\n \"0.3\": YodlRouterV03,\n \"0.4\": YodlRouterV04,\n \"0.5\": YodlRouterV05,\n \"0.6\": YodlRouterV06,\n \"test\": YodlRouterV03\n}\nexport const CURVE_ROUTER_ABI = CurveRouterV13Abi;\n","type ExtensionValue = string | number | boolean | null | undefined;\n\nexport enum TokenListTagNames {\n // Networks\n MAINNET = 'Mainnet',\n OPTIMISM = 'Optimism',\n ARBITRUM = 'Arbitrum',\n AVALANCHE = 'Avalanche',\n BASE = 'Base',\n TESTNET = 'TESTNET',\n\n // Coin/currency\n STABLECOIN = 'Stablecoin',\n USD = 'USD',\n EUR = 'EUR',\n\n // Misc\n TOP_10 = 'Top10',\n NATIVE_TOKEN = 'Native Token',\n}\n\nexport interface RouterInfo {\n readonly chainId: number;\n readonly address: string;\n readonly timestamp: string;\n readonly version: string;\n readonly fee: string;\n}\n\nexport interface TestnetFaucetInfo {\n readonly chainId: number;\n readonly address: string;\n readonly token: string;\n}\n\nexport interface ChainInfo {\n readonly chainId: number;\n readonly chainName: string;\n // shortName is the EIP3770 short name\n // chain details can be found here: https://github.com/ethereum-lists/chains/tree/master/_data/chains\n readonly shortName: string;\n readonly logoUri: string;\n readonly explorerUrl: string;\n readonly timestamp: string;\n readonly rpcUrls: string[];\n readonly wrappedNativeToken: string;\n readonly nativeTokenName: string;\n readonly feeTreasury?: string;\n readonly testnet: boolean;\n readonly priceFeeds?: {\n readonly [key: string]: string | undefined;\n };\n readonly tokenFeeds?: {\n readonly [key: string]: string | undefined;\n };\n readonly curveRouterAddress?: string;\n}\n\nexport interface TokenInfo {\n readonly chainId: number;\n readonly address: string;\n readonly name: string;\n readonly decimals: number;\n readonly symbol: string;\n readonly coinGeckoId?: string;\n readonly currency?: string;\n readonly logoUri?: string;\n readonly tags?: TokenListTagNames[];\n readonly extensions?: {\n readonly [key: string]:\n | {\n [key: string]:\n | {\n [key: string]: ExtensionValue;\n }\n | ExtensionValue;\n }\n | ExtensionValue;\n };\n}\n\nexport interface Version {\n readonly major: number;\n readonly minor: number;\n readonly patch: number;\n}\n\nexport interface TokenList {\n readonly name: string;\n readonly timestamp: string;\n readonly version: Version;\n readonly tokens: TokenInfo[];\n readonly keywords?: string[];\n readonly tags?: any;\n readonly logoUri?: string;\n}\n\nexport interface PriceFeed {\n readonly address: string;\n readonly name: string;\n readonly assetName: string;\n readonly type: string;\n readonly path: string;\n readonly input: string;\n readonly output: string;\n readonly deviation: number;\n readonly decimals: number;\n readonly updateInterval: number;\n readonly chainId: number;\n}\n\nexport interface FiatCurrency {\n readonly name: string;\n readonly symbol: string;\n readonly sign: string;\n}\n","import { Version } from \"./types\";\n\n/**\n * Comparator function that allows sorting version from lowest to highest\n * @param versionA version A to compare\n * @param versionB version B to compare\n * @returns -1 if versionA comes before versionB, 0 if versionA is equal to version B, and 1 if version A comes after version B\n */\nexport function versionComparator(\n versionA: Version,\n versionB: Version\n): -1 | 0 | 1 {\n if (versionA.major < versionB.major) {\n return -1;\n } else if (versionA.major > versionB.major) {\n return 1;\n } else if (versionA.minor < versionB.minor) {\n return -1;\n } else if (versionA.minor > versionB.minor) {\n return 1;\n } else if (versionA.patch < versionB.patch) {\n return -1;\n } else if (versionA.patch > versionB.patch) {\n return 1;\n } else {\n return 0;\n }\n}\n","import { versionComparator } from './versionComparator';\nimport { Version } from './types';\n\n/**\n * Returns true if versionB is an update over versionA\n */\nexport function isVersionUpdate(base: Version, update: Version): boolean {\n return versionComparator(base, update) < 0;\n}","import { Version } from \"./types\";\n\n/**\n * Enum describing types of version differences\n */\nexport enum VersionUpgrade {\n NONE,\n PATCH,\n MINOR,\n MAJOR,\n}\n\n/**\n * Return the upgrade type from the base version to the update version.\n * Note that downgrades and equivalent versions are both treated as `NONE`.\n * @param base base list\n * @param update update to the list\n */\nexport function getVersionUpgrade(\n base: Version,\n update: Version\n): VersionUpgrade {\n if (update.major > base.major) {\n return VersionUpgrade.MAJOR;\n }\n if (update.major < base.major) {\n return VersionUpgrade.NONE;\n }\n if (update.minor > base.minor) {\n return VersionUpgrade.MINOR;\n }\n if (update.minor < base.minor) {\n return VersionUpgrade.NONE;\n }\n return update.patch > base.patch ? VersionUpgrade.PATCH : VersionUpgrade.NONE;\n}\n","import { TokenInfo } from \"./types\";\n\nexport type TokenInfoChangeKey = Exclude<\n keyof TokenInfo,\n \"address\" | \"chainId\"\n>;\nexport type TokenInfoChanges = Array<TokenInfoChangeKey>;\n\n/**\n * compares two token info key values\n * this subset of full deep equal functionality does not work on objects or object arrays\n * @param a comparison item a\n * @param b comparison item b\n */\nfunction compareTokenInfoProperty(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a !== typeof b) return false;\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.every((el, i) => b[i] === el);\n }\n return false;\n}\n\n/**\n * Differences between a base list and an updated list.\n */\nexport interface TokenListDiff {\n /**\n * Tokens from updated with chainId/address not present in base list\n */\n readonly added: TokenInfo[];\n /**\n * Tokens from base with chainId/address not present in the updated list\n */\n readonly removed: TokenInfo[];\n /**\n * The token info that changed\n */\n readonly changed: {\n [chainId: number]: {\n [address: string]: TokenInfoChanges;\n };\n };\n}\n\n/**\n * Computes the diff of a token list where the first argument is the base and the second argument is the updated list.\n * @param base base list\n * @param update updated list\n */\nexport function diffTokenLists(\n base: TokenInfo[],\n update: TokenInfo[]\n): TokenListDiff {\n const indexedBase = base.reduce<{\n [chainId: number]: { [address: string]: TokenInfo };\n }>((memo, tokenInfo) => {\n if (!memo[tokenInfo.chainId]) memo[tokenInfo.chainId] = {};\n memo[tokenInfo.chainId][tokenInfo.address] = tokenInfo;\n return memo;\n }, {});\n\n const newListUpdates = update.reduce<{\n added: TokenInfo[];\n changed: {\n [chainId: number]: {\n [address: string]: TokenInfoChanges;\n };\n };\n index: {\n [chainId: number]: {\n [address: string]: true;\n };\n };\n }>(\n (memo, tokenInfo) => {\n const baseToken = indexedBase[tokenInfo.chainId]?.[tokenInfo.address];\n if (!baseToken) {\n memo.added.push(tokenInfo);\n } else {\n const changes: TokenInfoChanges = Object.keys(tokenInfo)\n .filter(\n (s): s is TokenInfoChangeKey => s !== \"address\" && s !== \"chainId\"\n )\n .filter((s) => {\n return !compareTokenInfoProperty(tokenInfo[s], baseToken[s]);\n });\n if (changes.length > 0) {\n if (!memo.changed[tokenInfo.chainId]) {\n memo.changed[tokenInfo.chainId] = {};\n }\n memo.changed[tokenInfo.chainId][tokenInfo.address] = changes;\n }\n }\n\n if (!memo.index[tokenInfo.chainId]) {\n memo.index[tokenInfo.chainId] = {\n [tokenInfo.address]: true,\n };\n } else {\n memo.index[tokenInfo.chainId][tokenInfo.address] = true;\n }\n\n return memo;\n },\n { added: [], changed: {}, index: {} }\n );\n\n const removed = base.reduce<TokenInfo[]>((list, curr) => {\n if (\n !newListUpdates.index[curr.chainId] ||\n !newListUpdates.index[curr.chainId][curr.address]\n ) {\n list.push(curr);\n }\n return list;\n }, []);\n\n return {\n added: newListUpdates.added,\n changed: newListUpdates.changed,\n removed,\n };\n}\n","import { diffTokenLists } from \"./diffTokenLists\";\nimport { VersionUpgrade } from \"./getVersionUpgrade\";\nimport { TokenInfo } from \"./types\";\n\n/**\n * Returns the minimum version bump for the given list\n * @param baseList the base list of tokens\n * @param updatedList the updated list of tokens\n */\nexport function minVersionBump(\n baseList: TokenInfo[],\n updatedList: TokenInfo[]\n): VersionUpgrade {\n const diff = diffTokenLists(baseList, updatedList);\n if (diff.removed.length > 0) return VersionUpgrade.MAJOR;\n if (diff.added.length > 0) return VersionUpgrade.MINOR;\n if (Object.keys(diff.changed).length > 0) return VersionUpgrade.PATCH;\n return VersionUpgrade.NONE;\n}\n","import { VersionUpgrade } from \"./getVersionUpgrade\";\nimport { Version } from \"./types\";\n\n/**\n * Returns the next version of the list given a base version and the upgrade type\n * @param base current version\n * @param bump the upgrade type\n */\nexport function nextVersion(base: Version, bump: VersionUpgrade): Version {\n switch (bump) {\n case VersionUpgrade.NONE:\n return base;\n\n case VersionUpgrade.MAJOR:\n return { major: base.major + 1, minor: 0, patch: 0 };\n\n case VersionUpgrade.MINOR:\n return {\n major: base.major,\n minor: base.minor + 1,\n patch: 0,\n };\n\n case VersionUpgrade.PATCH:\n return {\n major: base.major,\n minor: base.minor,\n patch: base.patch + 1,\n };\n }\n}\n","import featuredTokenlist from './tokenlist-featured.json';\nimport generatedTokenlist from './tokenlist-generated.json';\nimport chainlist from './chainlist-v1.json';\nimport routerlist from './routerlist-v1.json';\nimport testnetfaucets from './testnet-faucets-v1.json';\nimport priceFeeds from './pricefeeds.json';\nimport fiatCurrencies from './fiatCurrencies.json';\nimport { ChainInfo, RouterInfo, TokenInfo, TestnetFaucetInfo } from './types';\n\nexport * from './abis';\nexport * from './types';\nexport * from './isVersionUpdate';\nexport * from './getVersionUpgrade';\nexport * from './diffTokenLists';\nexport * from './minVersionBump';\nexport * from './nextVersion';\nexport * from './versionComparator';\n\nconst tokenlist = featuredTokenlist.tokens.concat(\n //@ts-ignore\n generatedTokenlist.tokens as TokenInfo[]\n);\n\nexport function getChains(): ChainInfo[] {\n return chainlist.chains;\n}\n\nexport function getChain(chainId: number): ChainInfo {\n return chainlist.chains.find((needle: any) => {\n return needle.chainId === chainId;\n }) as ChainInfo;\n}\n\nexport function getTokenByAddress(\n tokenAddress: string,\n chainId?: number\n): TokenInfo | null {\n return (\n (tokenlist.find((token: any) => {\n return (\n token.address.toLowerCase() === tokenAddress.toLowerCase() &&\n (!chainId || token.chainId === chainId)\n );\n }) as TokenInfo) ?? null\n );\n}\n\nexport function getPriceFeeds(chainId: number) {\n return priceFeeds.filter(f => f.chainId === chainId);\n}\n\nexport function getTokenFeeds(chainId: number) {\n return priceFeeds.filter(f => f.chainId === chainId && f.type === 'crypto');\n}\n\nexport function getFiatFeeds(chainId: number) {\n return priceFeeds.filter(f => f.chainId === chainId && f.type === 'fiat');\n}\n\nexport function getFiatCurrency(symbol: string) {\n return fiatCurrencies.find(\n c => c.symbol.toLowerCase() === symbol.toLowerCase()\n );\n}\n\nexport function getFiatCurrencies() {\n return fiatCurrencies;\n}\n\nexport function getPriceFeed(\n chainId: number,\n baseSymbol: string,\n quoteSymbol?: string\n) {\n const _quoteSymbol = quoteSymbol ? quoteSymbol : 'USD';\n const feed = priceFeeds.find(\n f =>\n f.input?.toLowerCase() === baseSymbol.toLowerCase() &&\n f.output === _quoteSymbol &&\n f.chainId === chainId\n );\n if (feed) {\n return feed;\n } else {\n // feed not found, find any feed that matches the base symbol\n return priceFeeds.find(\n f =>\n f.input?.toLowerCase() === baseSymbol.toLowerCase() &&\n f.chainId === chainId\n );\n }\n}\n\nexport function getFeaturedTokenBySymbol(\n tokenSymbol: string,\n chainId?: number\n): TokenInfo | null {\n return (\n (featuredTokenlist.tokens.find((token: any) => {\n return (\n token.symbol.toLowerCase() === tokenSymbol.toLowerCase() &&\n (!chainId || token.chainId === chainId)\n );\n }) as TokenInfo) ?? null\n );\n}\n\nexport function getTokenBySymbol(\n tokenSymbol: string,\n chainId?: number\n): TokenInfo | null {\n const tokens = tokenlist.filter((token: any) => {\n return (\n token.symbol.toLowerCase() === tokenSymbol.toLowerCase() &&\n (!chainId || token.chainId === chainId)\n );\n }) as TokenInfo[];\n\n if (chainId && tokens && tokens.length > 1) {\n throw new Error(`Duplicate tokens found for symbol ${tokenSymbol}`);\n }\n\n return tokens.length > 0 ? tokens[0] : null;\n}\n\nexport function getTokens(chainId?: number): TokenInfo[] {\n return chainId\n ? (tokenlist.filter((needle: any) => {\n return needle.chainId === chainId;\n }) as TokenInfo[])\n : (tokenlist as TokenInfo[]);\n}\n\nexport function getFaucetAddress(tokenInfo: TokenInfo): TestnetFaucetInfo {\n return testnetfaucets.faucets.find((needle: any) => {\n return (\n needle.token.toLowerCase() === tokenInfo.address.toLowerCase() &&\n needle.chainId === tokenInfo.chainId\n );\n }) as TestnetFaucetInfo;\n}\n\nexport function getRouters(chainId: number): RouterInfo[] {\n return routerlist.routers.filter((needle: any) => {\n return needle.chainId === chainId;\n }) as RouterInfo[];\n}\n\nexport function getRouter(\n chainId: number,\n version: string\n): RouterInfo | undefined {\n return routerlist.routers.find((needle: any) => {\n return needle.chainId === chainId && needle.version === version;\n }) as RouterInfo;\n}\n\nexport function getRouterByAddress(\n address: string,\n chainId?: number\n): RouterInfo | undefined {\n const findByAddress = (router: RouterInfo) =>\n router.address.toLowerCase() === address.toLowerCase();\n\n const findByAddressAndChainId = (router: RouterInfo) =>\n router.address.toLowerCase() === address.toLowerCase() &&\n router.chainId == chainId;\n\n const filter = chainId ? findByAddressAndChainId : findByAddress;\n\n const routerInfo = routerlist.routers.find(filter);\n return routerInfo;\n}\n\nexport function getLatestRouter(chainId: number): RouterInfo {\n const sorted = getRouters(chainId).sort((a, b) => {\n return Date.parse(a.timestamp) - Date.parse(b.timestamp);\n });\n return sorted[sorted.length - 1];\n}\n\nexport function getShortNames(): string[] {\n return chainlist.chains.map(chain => chain.shortName);\n}\n\nexport function getNativeToken(chainId: number): string {\n return chainlist.chains.find(chain => chain.chainId === chainId)?.nativeTokenName!;\n}\n\nexport function getNativeWrappedToken(chainId: number): TokenInfo {\n const nativeTokens = featuredTokenlist.tokens.filter(\n t =>\n t.chainId === chainId &&\n t.tags.map(tag => tag.toLowerCase()).includes('wrapped') &&\n t.tags.map(tag => tag.toLowerCase()).includes('native token')\n ) as TokenInfo[];\n if (nativeTokens.length > 1) {\n throw new Error(\n `Found more than one native wrapped token for chain ${chainId}`\n );\n } else if (nativeTokens.length < 1) {\n throw new Error(`No native wrapped token found for chain ${chainId}`);\n }\n return nativeTokens[0];\n}\n"],"names":["YODL_ROUTER_ABIS","YodlRouterV01","YodlRouterV02","YodlRouterV03","YodlRouterV04","YodlRouterV05","YodlRouterV06","CURVE_ROUTER_ABI","CurveRouterV13Abi","TokenListTagNames","versionComparator","versionA","versionB","major","minor","patch","isVersionUpdate","base","update","VersionUpgrade","getVersionUpgrade","MAJOR","NONE","MINOR","PATCH","compareTokenInfoProperty","a","b","Array","isArray","every","el","i","diffTokenLists","indexedBase","reduce","memo","tokenInfo","chainId","address","newListUpdates","baseToken","added","push","changes","Object","keys","filter","s","length","changed","index","removed","list","curr","minVersionBump","baseList","updatedList","diff","nextVersion","bump","tokenlist","featuredTokenlist","tokens","concat","generatedTokenlist","getChains","chainlist","chains","getChain","find","needle","getTokenByAddress","tokenAddress","token","toLowerCase","getPriceFeeds","priceFeeds","f","getTokenFeeds","type","getFiatFeeds","getFiatCurrency","symbol","fiatCurrencies","c","getFiatCurrencies","getPriceFeed","baseSymbol","quoteSymbol","_quoteSymbol","feed","input","output","getFeaturedTokenBySymbol","tokenSymbol","getTokenBySymbol","Error","getTokens","getFaucetAddress","testnetfaucets","faucets","getRouters","routerlist","routers","getRouter","version","getRouterByAddress","findByAddress","router","findByAddressAndChainId","routerInfo","getLatestRouter","sorted","sort","Date","parse","timestamp","getShortNames","map","chain","shortName","getNativeToken","nativeTokenName","getNativeWrappedToken","nativeTokens","t","tags","tag","includes"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
1
+ {"version":3,"file":"tokenlists.esm.js","sources":["../src/abis.ts","../src/types.ts","../src/versionComparator.ts","../src/isVersionUpdate.ts","../src/getVersionUpgrade.ts","../src/diffTokenLists.ts","../src/minVersionBump.ts","../src/nextVersion.ts","../src/index.ts"],"sourcesContent":["import CurveRouterV13Abi from \"./abis/curverouterv13.abi.json\";\nimport YodlRouterV01 from \"./abis/YodlRouterV0.1.abi.json\";\nimport YodlRouterV02 from \"./abis/YodlRouterV0.2.abi.json\";\nimport YodlRouterV03 from \"./abis/YodlRouterV0.3.abi.json\";\nimport YodlRouterV04 from \"./abis/YodlRouterV0.4.abi.json\";\nimport YodlRouterV05 from \"./abis/YodlRouterV0.5.abi.json\";\nimport YodlRouterV06 from \"./abis/YodlRouterV0.6.abi.json\";\n\nexport const YODL_ROUTER_ABIS: { [key: string]: any} = {\n \"0.1\": YodlRouterV01,\n \"0.2\": YodlRouterV02,\n \"0.3\": YodlRouterV03,\n \"0.4\": YodlRouterV04,\n \"0.5\": YodlRouterV05,\n \"0.6\": YodlRouterV06,\n \"test\": YodlRouterV03\n}\nexport const CURVE_ROUTER_ABI = CurveRouterV13Abi;\n","type ExtensionValue = string | number | boolean | null | undefined;\n\nexport enum TokenListTagNames {\n // Networks\n MAINNET = 'Mainnet',\n OPTIMISM = 'Optimism',\n ARBITRUM = 'Arbitrum',\n AVALANCHE = 'Avalanche',\n BASE = 'Base',\n TESTNET = 'TESTNET',\n\n // Coin/currency\n STABLECOIN = 'Stablecoin',\n USD = 'USD',\n EUR = 'EUR',\n\n // Misc\n TOP_10 = 'Top10',\n NATIVE_TOKEN = 'Native Token',\n}\n\nexport interface RouterInfo {\n readonly chainId: number;\n readonly address: string;\n readonly timestamp: string;\n readonly version: string;\n readonly fee: string;\n}\n\nexport interface TestnetFaucetInfo {\n readonly chainId: number;\n readonly address: string;\n readonly token: string;\n}\n\nexport interface ChainInfo {\n readonly chainId: number;\n readonly chainName: string;\n // shortName is the EIP3770 short name\n // chain details can be found here: https://github.com/ethereum-lists/chains/tree/master/_data/chains\n readonly shortName: string;\n readonly logoUri: string;\n readonly explorerUrl: string;\n readonly timestamp: string;\n readonly rpcUrls: string[];\n readonly wrappedNativeToken: string;\n readonly nativeTokenName: string;\n readonly feeTreasury?: string;\n readonly testnet: boolean;\n readonly priceFeeds?: {\n readonly [key: string]: string | undefined;\n };\n readonly tokenFeeds?: {\n readonly [key: string]: string | undefined;\n };\n readonly curveRouterAddress?: string;\n}\n\nexport interface TokenInfo {\n readonly chainId: number;\n readonly address: string;\n readonly name: string;\n readonly decimals: number;\n readonly symbol: string;\n readonly coinGeckoId?: string;\n readonly currency?: string;\n readonly logoUri?: string;\n readonly tags?: TokenListTagNames[];\n readonly extensions?: {\n readonly [key: string]:\n | {\n [key: string]:\n | {\n [key: string]: ExtensionValue;\n }\n | ExtensionValue;\n }\n | ExtensionValue;\n };\n}\n\nexport interface Version {\n readonly major: number;\n readonly minor: number;\n readonly patch: number;\n}\n\nexport interface TokenList {\n readonly name: string;\n readonly timestamp: string;\n readonly version: Version;\n readonly tokens: TokenInfo[];\n readonly keywords?: string[];\n readonly tags?: any;\n readonly logoUri?: string;\n}\n\nexport interface PriceFeed {\n readonly address: string;\n readonly name: string;\n readonly assetName: string;\n readonly type: string;\n readonly path: string;\n readonly input: string;\n readonly output: string;\n readonly deviation: number;\n readonly decimals: number;\n readonly updateInterval: number;\n readonly chainId: number;\n}\n\nexport interface FiatCurrency {\n readonly name: string;\n readonly symbol: string;\n readonly sign: string;\n}\n","import { Version } from \"./types\";\n\n/**\n * Comparator function that allows sorting version from lowest to highest\n * @param versionA version A to compare\n * @param versionB version B to compare\n * @returns -1 if versionA comes before versionB, 0 if versionA is equal to version B, and 1 if version A comes after version B\n */\nexport function versionComparator(\n versionA: Version,\n versionB: Version\n): -1 | 0 | 1 {\n if (versionA.major < versionB.major) {\n return -1;\n } else if (versionA.major > versionB.major) {\n return 1;\n } else if (versionA.minor < versionB.minor) {\n return -1;\n } else if (versionA.minor > versionB.minor) {\n return 1;\n } else if (versionA.patch < versionB.patch) {\n return -1;\n } else if (versionA.patch > versionB.patch) {\n return 1;\n } else {\n return 0;\n }\n}\n","import { versionComparator } from './versionComparator';\nimport { Version } from './types';\n\n/**\n * Returns true if versionB is an update over versionA\n */\nexport function isVersionUpdate(base: Version, update: Version): boolean {\n return versionComparator(base, update) < 0;\n}","import { Version } from \"./types\";\n\n/**\n * Enum describing types of version differences\n */\nexport enum VersionUpgrade {\n NONE,\n PATCH,\n MINOR,\n MAJOR,\n}\n\n/**\n * Return the upgrade type from the base version to the update version.\n * Note that downgrades and equivalent versions are both treated as `NONE`.\n * @param base base list\n * @param update update to the list\n */\nexport function getVersionUpgrade(\n base: Version,\n update: Version\n): VersionUpgrade {\n if (update.major > base.major) {\n return VersionUpgrade.MAJOR;\n }\n if (update.major < base.major) {\n return VersionUpgrade.NONE;\n }\n if (update.minor > base.minor) {\n return VersionUpgrade.MINOR;\n }\n if (update.minor < base.minor) {\n return VersionUpgrade.NONE;\n }\n return update.patch > base.patch ? VersionUpgrade.PATCH : VersionUpgrade.NONE;\n}\n","import { TokenInfo } from \"./types\";\n\nexport type TokenInfoChangeKey = Exclude<\n keyof TokenInfo,\n \"address\" | \"chainId\"\n>;\nexport type TokenInfoChanges = Array<TokenInfoChangeKey>;\n\n/**\n * compares two token info key values\n * this subset of full deep equal functionality does not work on objects or object arrays\n * @param a comparison item a\n * @param b comparison item b\n */\nfunction compareTokenInfoProperty(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a !== typeof b) return false;\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.every((el, i) => b[i] === el);\n }\n return false;\n}\n\n/**\n * Differences between a base list and an updated list.\n */\nexport interface TokenListDiff {\n /**\n * Tokens from updated with chainId/address not present in base list\n */\n readonly added: TokenInfo[];\n /**\n * Tokens from base with chainId/address not present in the updated list\n */\n readonly removed: TokenInfo[];\n /**\n * The token info that changed\n */\n readonly changed: {\n [chainId: number]: {\n [address: string]: TokenInfoChanges;\n };\n };\n}\n\n/**\n * Computes the diff of a token list where the first argument is the base and the second argument is the updated list.\n * @param base base list\n * @param update updated list\n */\nexport function diffTokenLists(\n base: TokenInfo[],\n update: TokenInfo[]\n): TokenListDiff {\n const indexedBase = base.reduce<{\n [chainId: number]: { [address: string]: TokenInfo };\n }>((memo, tokenInfo) => {\n if (!memo[tokenInfo.chainId]) memo[tokenInfo.chainId] = {};\n memo[tokenInfo.chainId][tokenInfo.address] = tokenInfo;\n return memo;\n }, {});\n\n const newListUpdates = update.reduce<{\n added: TokenInfo[];\n changed: {\n [chainId: number]: {\n [address: string]: TokenInfoChanges;\n };\n };\n index: {\n [chainId: number]: {\n [address: string]: true;\n };\n };\n }>(\n (memo, tokenInfo) => {\n const baseToken = indexedBase[tokenInfo.chainId]?.[tokenInfo.address];\n if (!baseToken) {\n memo.added.push(tokenInfo);\n } else {\n const changes: TokenInfoChanges = Object.keys(tokenInfo)\n .filter(\n (s): s is TokenInfoChangeKey => s !== \"address\" && s !== \"chainId\"\n )\n .filter((s) => {\n return !compareTokenInfoProperty(tokenInfo[s], baseToken[s]);\n });\n if (changes.length > 0) {\n if (!memo.changed[tokenInfo.chainId]) {\n memo.changed[tokenInfo.chainId] = {};\n }\n memo.changed[tokenInfo.chainId][tokenInfo.address] = changes;\n }\n }\n\n if (!memo.index[tokenInfo.chainId]) {\n memo.index[tokenInfo.chainId] = {\n [tokenInfo.address]: true,\n };\n } else {\n memo.index[tokenInfo.chainId][tokenInfo.address] = true;\n }\n\n return memo;\n },\n { added: [], changed: {}, index: {} }\n );\n\n const removed = base.reduce<TokenInfo[]>((list, curr) => {\n if (\n !newListUpdates.index[curr.chainId] ||\n !newListUpdates.index[curr.chainId][curr.address]\n ) {\n list.push(curr);\n }\n return list;\n }, []);\n\n return {\n added: newListUpdates.added,\n changed: newListUpdates.changed,\n removed,\n };\n}\n","import { diffTokenLists } from \"./diffTokenLists\";\nimport { VersionUpgrade } from \"./getVersionUpgrade\";\nimport { TokenInfo } from \"./types\";\n\n/**\n * Returns the minimum version bump for the given list\n * @param baseList the base list of tokens\n * @param updatedList the updated list of tokens\n */\nexport function minVersionBump(\n baseList: TokenInfo[],\n updatedList: TokenInfo[]\n): VersionUpgrade {\n const diff = diffTokenLists(baseList, updatedList);\n if (diff.removed.length > 0) return VersionUpgrade.MAJOR;\n if (diff.added.length > 0) return VersionUpgrade.MINOR;\n if (Object.keys(diff.changed).length > 0) return VersionUpgrade.PATCH;\n return VersionUpgrade.NONE;\n}\n","import { VersionUpgrade } from \"./getVersionUpgrade\";\nimport { Version } from \"./types\";\n\n/**\n * Returns the next version of the list given a base version and the upgrade type\n * @param base current version\n * @param bump the upgrade type\n */\nexport function nextVersion(base: Version, bump: VersionUpgrade): Version {\n switch (bump) {\n case VersionUpgrade.NONE:\n return base;\n\n case VersionUpgrade.MAJOR:\n return { major: base.major + 1, minor: 0, patch: 0 };\n\n case VersionUpgrade.MINOR:\n return {\n major: base.major,\n minor: base.minor + 1,\n patch: 0,\n };\n\n case VersionUpgrade.PATCH:\n return {\n major: base.major,\n minor: base.minor,\n patch: base.patch + 1,\n };\n }\n}\n","import featuredTokenlist from './tokenlist-featured.json';\nimport generatedTokenlist from './tokenlist-generated.json';\nimport chainlist from './chainlist-v1.json';\nimport routerlist from './routerlist-v1.json';\nimport priceFeeds from './pricefeeds.json';\nimport fiatCurrencies from './fiatCurrencies.json';\nimport { ChainInfo, RouterInfo, TokenInfo, TestnetFaucetInfo } from './types';\n\nexport * from './abis';\nexport * from './types';\nexport * from './isVersionUpdate';\nexport * from './getVersionUpgrade';\nexport * from './diffTokenLists';\nexport * from './minVersionBump';\nexport * from './nextVersion';\nexport * from './versionComparator';\n\nconst tokenlist = featuredTokenlist.tokens.concat(\n //@ts-ignore\n generatedTokenlist.tokens as TokenInfo[]\n);\n\nexport function getChains(): ChainInfo[] {\n return chainlist.chains;\n}\n\nexport function getChain(chainId: number): ChainInfo {\n return chainlist.chains.find((needle: any) => {\n return needle.chainId === chainId;\n }) as ChainInfo;\n}\n\nexport function getTokenByAddress(\n tokenAddress: string,\n chainId?: number\n): TokenInfo | null {\n return (\n (tokenlist.find((token: any) => {\n return (\n token.address.toLowerCase() === tokenAddress.toLowerCase() &&\n (!chainId || token.chainId === chainId)\n );\n }) as TokenInfo) ?? null\n );\n}\n\nexport function getPriceFeeds(chainId: number) {\n return priceFeeds.filter(f => f.chainId === chainId);\n}\n\nexport function getTokenFeeds(chainId: number) {\n return priceFeeds.filter(f => f.chainId === chainId && f.type === 'crypto');\n}\n\nexport function getFiatFeeds(chainId: number) {\n return priceFeeds.filter(f => f.chainId === chainId && f.type === 'fiat');\n}\n\nexport function getFiatCurrency(symbol: string) {\n return fiatCurrencies.find(\n c => c.symbol.toLowerCase() === symbol.toLowerCase()\n );\n}\n\nexport function getFiatCurrencies() {\n return fiatCurrencies;\n}\n\nexport function getPriceFeed(\n chainId: number,\n baseSymbol: string,\n quoteSymbol?: string\n) {\n const _quoteSymbol = quoteSymbol ? quoteSymbol : 'USD';\n const feed = priceFeeds.find(\n f =>\n f.input?.toLowerCase() === baseSymbol.toLowerCase() &&\n f.output === _quoteSymbol &&\n f.chainId === chainId\n );\n if (feed) {\n return feed;\n } else {\n // feed not found, find any feed that matches the base symbol\n return priceFeeds.find(\n f =>\n f.input?.toLowerCase() === baseSymbol.toLowerCase() &&\n f.chainId === chainId\n );\n }\n}\n\nexport function getFeaturedTokenBySymbol(\n tokenSymbol: string,\n chainId?: number\n): TokenInfo | null {\n return (\n (featuredTokenlist.tokens.find((token: any) => {\n return (\n token.symbol.toLowerCase() === tokenSymbol.toLowerCase() &&\n (!chainId || token.chainId === chainId)\n );\n }) as TokenInfo) ?? null\n );\n}\n\nexport function getTokenBySymbol(\n tokenSymbol: string,\n chainId?: number\n): TokenInfo | null {\n const tokens = tokenlist.filter((token: any) => {\n return (\n token.symbol.toLowerCase() === tokenSymbol.toLowerCase() &&\n (!chainId || token.chainId === chainId)\n );\n }) as TokenInfo[];\n\n if (chainId && tokens && tokens.length > 1) {\n throw new Error(`Duplicate tokens found for symbol ${tokenSymbol}`);\n }\n\n return tokens.length > 0 ? tokens[0] : null;\n}\n\nexport function getTokens(chainId?: number): TokenInfo[] {\n return chainId\n ? (tokenlist.filter((needle: any) => {\n return needle.chainId === chainId;\n }) as TokenInfo[])\n : (tokenlist as TokenInfo[]);\n}\n\nexport function getRouters(chainId: number): RouterInfo[] {\n return routerlist.routers.filter((needle: any) => {\n return needle.chainId === chainId;\n }) as RouterInfo[];\n}\n\nexport function getRouter(\n chainId: number,\n version: string\n): RouterInfo | undefined {\n return routerlist.routers.find((needle: any) => {\n return needle.chainId === chainId && needle.version === version;\n }) as RouterInfo;\n}\n\nexport function getRouterByAddress(\n address: string,\n chainId?: number\n): RouterInfo | undefined {\n const findByAddress = (router: RouterInfo) =>\n router.address.toLowerCase() === address.toLowerCase();\n\n const findByAddressAndChainId = (router: RouterInfo) =>\n router.address.toLowerCase() === address.toLowerCase() &&\n router.chainId == chainId;\n\n const filter = chainId ? findByAddressAndChainId : findByAddress;\n\n const routerInfo = routerlist.routers.find(filter);\n return routerInfo;\n}\n\nexport function getLatestRouter(chainId: number): RouterInfo {\n const sorted = getRouters(chainId).sort((a, b) => {\n return Date.parse(a.timestamp) - Date.parse(b.timestamp);\n });\n return sorted[sorted.length - 1];\n}\n\nexport function getShortNames(): string[] {\n return chainlist.chains.map(chain => chain.shortName);\n}\n\nexport function getNativeToken(chainId: number): string {\n return chainlist.chains.find(chain => chain.chainId === chainId)?.nativeTokenName!;\n}\n\nexport function getNativeWrappedToken(chainId: number): TokenInfo {\n const nativeTokens = featuredTokenlist.tokens.filter(\n t =>\n t.chainId === chainId &&\n t.tags.map(tag => tag.toLowerCase()).includes('wrapped') &&\n t.tags.map(tag => tag.toLowerCase()).includes('native token')\n ) as TokenInfo[];\n if (nativeTokens.length > 1) {\n throw new Error(\n `Found more than one native wrapped token for chain ${chainId}`\n );\n } else if (nativeTokens.length < 1) {\n throw new Error(`No native wrapped token found for chain ${chainId}`);\n }\n return nativeTokens[0];\n}\n"],"names":["YODL_ROUTER_ABIS","YodlRouterV01","YodlRouterV02","YodlRouterV03","YodlRouterV04","YodlRouterV05","YodlRouterV06","CURVE_ROUTER_ABI","CurveRouterV13Abi","TokenListTagNames","versionComparator","versionA","versionB","major","minor","patch","isVersionUpdate","base","update","VersionUpgrade","getVersionUpgrade","MAJOR","NONE","MINOR","PATCH","compareTokenInfoProperty","a","b","Array","isArray","every","el","i","diffTokenLists","indexedBase","reduce","memo","tokenInfo","chainId","address","newListUpdates","baseToken","added","push","changes","Object","keys","filter","s","length","changed","index","removed","list","curr","minVersionBump","baseList","updatedList","diff","nextVersion","bump","tokenlist","featuredTokenlist","tokens","concat","generatedTokenlist","getChains","chainlist","chains","getChain","find","needle","getTokenByAddress","tokenAddress","token","toLowerCase","getPriceFeeds","priceFeeds","f","getTokenFeeds","type","getFiatFeeds","getFiatCurrency","symbol","fiatCurrencies","c","getFiatCurrencies","getPriceFeed","baseSymbol","quoteSymbol","_quoteSymbol","feed","input","output","getFeaturedTokenBySymbol","tokenSymbol","getTokenBySymbol","Error","getTokens","getRouters","routerlist","routers","getRouter","version","getRouterByAddress","findByAddress","router","findByAddressAndChainId","routerInfo","getLatestRouter","sorted","sort","Date","parse","timestamp","getShortNames","map","chain","shortName","getNativeToken","nativeTokenName","getNativeWrappedToken","nativeTokens","t","tags","tag","includes"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yodlpay/tokenlists",
3
- "version": "0.6.5",
3
+ "version": "0.6.6",
4
4
  "description": "Tokenlist typings, schema and lists.",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",